Twinny: Code-Autovervollständigung zu 100 % locale
Twinny ist eine kostenlose Open-Source-Erweiterung für VS Code (MIT-Lizenz), die Codevervollständigung auf Ihrem eigenen Rechner über Ollama, LM Studio oder llama.cpp ausführt. Für die aktuelle Zeile antwortet ein kleines Basismodell wie qwen2.5-coder:1.5b-base, das für das Ergänzen von Code zwischen vorhandenem Präfix und Suffix (Fill-in-the-Middle) trainiert wurde, in weniger als einer Sekunde. Für die Einzelnutzung ist kein Abonnement erforderlich; Kosten fallen nur für Teams mit mehr als fünf Entwicklern an.
Twinny ist eine Editor-Erweiterung für lokale Codevervollständigung: Sie schlägt eine Fortsetzung dessen vor, was Sie gerade schreiben, auf Basis eines Modells, das auf Ihrem eigenen Rechner bereitgestellt wird. In keiner anderen Kategorie des gesamten Ökosystems sind die Anforderungen an die Latenz so hoch — ein Vorschlag, der erst nach zwei Sekunden erscheint, ist nutzlos. Deshalb gelten für die Modellwahl hier die umgekehrten Regeln wie in den übrigen Bereichen. Dieser Leitfaden erläutert die Einstellungen, die den Unterschied ausmachen, und welche Verbesserungen die Erweiterung seit ihren Anfängen erfahren hat.
#Was Twinny macht
In der Erweiterung gibt es seit jeher zwei Funktionen nebeneinander: die Inline-Vervollständigung, die beim Tippen einen ausgegrauten Vorschlag anzeigt, und eine Chat-Seitenleiste, in der Sie Fragen zum ausgewählten Code stellen können. Beide nutzen ein lokales Modell, das über Ollama, LM Studio oder llama.cpp bereitgestellt wird, und standardmäßig verlässt nichts den Rechner.
Der Nutzen ist in Situationen offensichtlich, in denen der Code die eigene Umgebung nicht verlassen darf: in einem Büro, einer Verwaltung oder bei Kundencode unter einer Geheimhaltungsvereinbarung. Das Argument sind nicht die Kosten, sondern dass sich die Frage „Wohin geht mein Code?“ überprüfbar beantworten lässt. Das Projekt beschreibt sich selbst als den KI-Assistenten für VS Code, der innerhalb Ihres Netzwerks bleibt.
#Das Detail, das alles verändert: das Ausfüllen in der Mitte
Dieser Guide führt Sie zum Modell. Das Kit führt Sie zum Copiloten, der in Ihrem Editor Code schreibt.
- Lebenslanger Online-Zugang
- PDF + Dateien
- Lebenslange Updates
Code zu vervollständigen ist etwas anderes, als einen Text fortzusetzen. Wenn Sie mitten in einer Funktion schreiben, muss das Modell sowohl berücksichtigen, was davor steht, ALS AUCH, was danach folgt. Diese Fähigkeit hat einen Namen — das Ergänzen in der Mitte, oder FIM (fill-in-the-middle) — und nicht alle Modelle verfügen darüber: Die offizielle Dokumentation sagt ausdrücklich, dass der Anbieter für die Codevervollständigung ein für FIM trainiertes Modell verwenden muss. Dabei nutzt jede Modellfamilie eigene Tokens, um das Präfix, das Suffix und den zu ergänzenden Bereich zu kennzeichnen.
Das ist die häufigste Ursache für Enttäuschungen. Ein hervorragendes, auf Code ausgerichtetes Chatmodell ohne diese Fähigkeit erzeugt Vorschläge, die den nachfolgenden Dateiinhalt ignorieren und schließende geschweifte Klammern ergänzen, die bereits vorhanden sind. Ein weiterer Punkt, den viele übersehen: Die Dokumentation empfiehlt ein Basismodell statt einer auf Anweisungen trainierten Variante, weil ein Basismodell reinen Text zuverlässiger fortsetzt, als es mit einem leeren Suffix umgeht, insbesondere wenn nach dem Cursor nichts mehr steht.
#Einstellungen für eine flüssige Nutzung
Vier vom Projekt dokumentierte Einstellungen bringen den Großteil der Verbesserung bei der wahrgenommenen Latenz. Sie befinden sich in den Einstellungen der Erweiterung (Präfix twinny.) und lassen sich alle anpassen, ohne Ollama neu zu starten.
| Parameter | Standardwert | Effekt |
|---|---|---|
| twinny.debounceWait | 300 ms | Wartezeit nach dem letzten Tastendruck, bevor die Anfrage gestartet wird; eine längere Wartezeit reduziert die Anzahl der Aufrufe |
| twinny.numPredictFim | 512 Tokens | Maximale Anzahl an generierten Tokens pro Vorschlag; eine Reduzierung beschleunigt die Antwort |
| twinny.contextLength | 100 Zeilen | Menge des gesendeten Codes aus dem Bereich um den Cursor; eine geringere Menge senkt die Latenz |
| twinny.fileContextEnabled | standardmäßig deaktiviert | Senden von Auszügen aus anderen geöffneten, damit zusammenhängenden Dateien (bis zu 3); bei einem großen Projekt nützlich, erhöht aber die Latenz |
- 01Die Anzahl der erzeugten Tokens begrenzenEine nützliche Codevervollständigung umfasst eine oder zwei Zeilen. Die Dokumentation bestätigt das: Wenn die Vorschläge zu spät erscheinen, sollten Sie zuerst numPredictFim reduzieren, statt ein kleineres Modell zu wählen.
- 02Die Auslöseverzögerung anpassenDas Auslösen bei jedem Tastendruck überlastet den Server; die standardmäßige Verzögerung von 300 ms (debounceWait) reicht in den meisten Fällen aus und reduziert die Anzahl der Aufrufe.
- 03Das Modell in Ollama geladen haltenWenn der Server das Modell nach einigen Minuten Inaktivität aus dem Speicher entfernt, kommt der erste Vorschlag nach einer Pause zu spät. Auf Ollama-Seite wird daher die Dauer verlängert, für die das Modell im Speicher bleibt (keep_alive).
- 04Die übermittelte Kontextfenstergröße verringernDie Dokumentation sagt es ausdrücklich: Wenn die Vorschläge verzögert erscheinen, contextLength reduzieren (standardmäßig 100 Zeilen vor und nach dem Cursor) oder fileContextEnabled deaktiviert lassen, wie es standardmäßig eingestellt ist. Dieser Parameter fügt nur dann Ausschnitte aus anderen geöffneten Dateien hinzu, wenn man ihn selbst aktiviert.
#Was das Modell tatsächlich sieht
Ein Vorschlag basiert nicht nur auf dem Präfix und dem Suffix rund um den Cursor. Die Dokumentation erläutert die Quellen, die Twinny zusammenführt, bevor es den Prompt erstellt: die umliegenden Zeilen (contextLength), die letzten Änderungen in der Datei in Form kleiner Diffs (recentEditsEnabled, standardmäßig aktiviert, bis zu 6 Änderungen), die vom Sprachserver bereitgestellten Symbole und die Signatur des aktuellen Aufrufs (lspContextEnabled, standardmäßig aktiviert) sowie optional Auszüge aus anderen geöffneten Dateien, die damit zusammenhängen (fileContextEnabled, standardmäßig deaktiviert).
- Neueste Änderungen
- Eine erst zur Hälfte durchgeführte Umbenennung oder ein manuell auf eine Datei angewandtes Muster setzt sich in den folgenden Vorschlägen fort, als würde das System verstehen, was Sie gerade tun.
- IntelliSense-Kontext
- Das Modell erhält vom Sprachserver des Editors die Namen und die Signatur des Aufrufs, in dem sich der Cursor befindet.
- Nachbardateien
- Standardmäßig deaktiviert: nur bei einem großen Projekt aktivieren, da dies die Latenz erhöht und der Nutzen unterschiedlich ausfällt.
Ein weiteres nützliches Detail für die Praxis: Wer zuerst einen einzeiligen Kommentar schreibt, der den folgenden Code beschreibt, und dann kurz pausiert, gibt dem mehrzeiligen Vorschlag ein klares Ziel – genau das empfiehlt die Dokumentation selbst, um bessere Vorschläge zu erhalten. Variablen und Funktionen klar zu benennen, bleibt noch vor jeglicher Anpassung der Einstellungen der wirksamste Hebel für die Relevanz der Vorschläge.
#Welche Modelle und warum sind sie so klein?
| Nutzung | Empfohlene Größe | Warum |
|---|---|---|
| Inline-Vervollständigung (FIM) | 1,5 bis 3 Milliarden, Basismodell | Die Latenz ist entscheidend: qwen2.5-coder:1.5b-base antwortet laut offizieller Dokumentation auf den meisten Rechnern in weniger als einer Sekunde |
| Codevervollständigung auf einer leistungsstarken Grafikkarte | 7 Milliarden | Denkbar, wenn die Grafikkarte schnell und der Kontext kurz ist (niedriger Wert für contextLength) |
| Chat-Seitenleiste | 7 bis 14 Milliarden, auf das Befolgen von Anweisungen trainiertes Modell | Hier nimmt man eine Wartezeit für eine ausgearbeitete Antwort in Kauf; ein Basismodell eignet sich nicht für Gespräche |
Diese Asymmetrie überrascht immer wieder: Man ist daran gewöhnt, dass größer besser ist. Bei der Vervollständigung schlägt ein Modell mit 1,5 Milliarden Parametern, das auf das Ausfüllen von Lücken in der Mitte (Fill-in-the-Middle) trainiert wurde und als Basismodell bereitgestellt wird, in der Praxis ein Allzweckmodell mit 14 Milliarden Parametern, weil es antwortet, bevor Sie zu Ende gedacht haben. Die Erweiterung ermöglicht es, für jede Funktion ein Modell zu konfigurieren – eines für FIM, ein anderes für den Chat – und das ist die richtige Einstellung: Die beiden haben weder dieselbe Größe noch dasselbe Training.
#Über die Codevervollständigung hinaus: Was Twinny 2026 leistet
Die Erweiterung hat sich seit ihren Anfängen als einfaches Plugin zur Autovervollständigung stark weiterentwickelt. Ihre offizielle Seite nennt heute Inline-Bearbeitung (eine Änderung beschreiben und sie als Diff im Editor überprüfen), einen Index des Arbeitsplatzrechners, der Stichwortsuche und Vektorsuche kombiniert, Code-Reviews des Arbeitsbaums, eines Branches oder eines GitHub-Pull-Requests, die Generierung von Commit-Nachrichten aus den für den Commit vorgemerkten Änderungen sowie die Generierung von Terminalbefehlen mit automatischer Fehlerkorrektur.
Alle diese Funktionen bleiben an anpassbare VS Code-Befehle und an benutzerdefinierte Prompt-Modelle gebunden. Bei den Anbietern wurde die Liste erweitert um hostete APIs (OpenAI, Anthropic, Mistral, DeepSeek, OpenRouter, Gemini, Groq, Cohere, Perplexity) sowie lokale Engine-Systeme (Ollama, LM Studio, llama.cpp, Oobabooga, LiteLLM, Open WebUI) – aber es ist nicht erforderlich, eine davon zu verwenden: Der 100 % lokale Einsatz bleibt die Standardkonfiguration.
#Kostenlos für Einzelpersonen, kostenpflichtig für Teams
Bei individueller Nutzung bleibt Twinny, was es schon immer war: eine Erweiterung unter MIT-Lizenz, ohne Telemetrie und ohne verpflichtende Anmeldung. Kosten fallen erst bei mehr als fünf Entwicklern an, die sich ein Team-Gateway (twinny-server) teilen, das den Zugriff auf die Anbieter für die gesamte Organisation zentralisiert: Bis zu fünf Konten ist es kostenlos, danach gilt ein Preis pro Arbeitsplatz und Monat, mit einer 30-tägigen Testphase ohne Kreditkarte. Für einen einzelnen Entwickler mit lokalem Ollama gelten diese Bedingungen nicht, und die Erweiterung bleibt vollständig nutzbar, ohne jemals ein Konto erstellen zu müssen.
#Twinny oder ein Edit-Agent
| Bedarf | Tool |
|---|---|
| Die aktuelle Zeile beenden, ohne darüber nachzudenken | Twinny — Inline-Codevervollständigung (FIM) |
| Mehrere Dateien nach Anweisung ändern | Integrierter Edit-Agent im Editor (Roo Code, Cline) |
| Eine vollständige Aufgabe ohne Überwachung ausführen | Ein autonomer Agent im Terminal oder Container |
| Code vor einem Commit noch einmal prüfen | Die Code-Review-Funktion von Twinny oder ein spezieller konversationeller Assistent |
Die beiden Nutzungsarten schließen sich nicht aus. Viele Entwickler lassen Twinny dauerhaft für die Inline-Vervollständigung aktiv – unauffällig, schnell und mit einem kleinen, darauf spezialisierten Modell – und wechseln für eine Aufgabe, die mehrere Dateien betrifft, zu einem Bearbeitungsagenten wie Roo Code oder Cline. Dabei verwenden sie ein größeres Modell, auf dessen Antwort sie bereit sind, einige Sekunden zu warten.
- Roo Code: der lokale Code-Agent im Editor
- Cline + Ollama: 100 % lokaler Code-Agent in VS Code
- Code mit einem lokalen LLM prüfen und überarbeiten
- Bestes lokales LLM zum Programmieren: Vergleich
- Quelle: offizielles GitHub-Repository von Twinny
- Quelle: Dokumentation zur FIM-Vervollständigung
- Quelle: Visual Studio Marketplace-Seite
#FAQ
Ist Twinny kostenlos?+
Welches Modell für die Inline-Vervollständigung?+
Warum ignorieren meine Vorschläge den restlichen Inhalt der Datei?+
Wie kann die Latenz der Vorschläge reduziert werden?+
Ist eine leistungsstarke Grafikkarte erforderlich?+
Twinny oder ein Editieragent wie Roo Code oder Cline?+
Kann Twinny noch mehr als Code vervollständigen?+
Haben Sie Feedback, einen Fehler entdeckt oder möchten Sie etwas präzisieren? Geben Sie uns Bescheid – so wird der Guide für alle besser.