Twinny: l'autocompletamento di codice al 100% locale
Twinny è un'estensione gratuita e open source per VS Code (licenza MIT) che esegue il completamento del codice sulla tua macchina, tramite Ollama, LM Studio o llama.cpp. Per la riga corrente, un piccolo modello di base addestrato al completamento della parte centrale del codice, come qwen2.5-coder:1.5b-base, risponde in meno di un secondo. Per l'uso individuale non è necessario alcun abbonamento; la fatturazione riguarda solo i team con più di cinque sviluppatori.
Twinny è un'estensione per editor che offre il completamento del codice in locale: propone la continuazione di ciò che stai scrivendo, usando un modello eseguito sulla tua macchina. È la categoria con i requisiti di latenza più stringenti dell'intero ecosistema — un suggerimento che arriva in due secondi è un suggerimento inutile — ed è per questo che la scelta del modello segue regole inverse rispetto al resto. Questa guida illustra nel dettaglio le impostazioni che fanno la differenza e le funzionalità acquisite dall'estensione dai suoi esordi.
#Cosa fa Twinny
Nell'estensione convivono storicamente due funzioni: il completamento inline, che mostra un suggerimento in grigio durante la digitazione, e una barra laterale di chat per porre domande sul codice selezionato. Entrambe si basano su un modello locale, servito da Ollama, LM Studio o llama.cpp, e per impostazione predefinita nulla esce dalla macchina.
L'interesse è evidente nei contesti in cui il codice non deve uscire: studio professionale, amministrazione, codice di un cliente soggetto a un accordo di riservatezza. L'argomento non è il costo — è che la domanda «dove finisce il mio codice» ha una risposta verificabile. Il progetto stesso si presenta come l'assistente IA per VS Code che rimane all'interno della tua rete.
#Il dettaglio che cambia tutto: il completamento nel mezzo
Questa guida ti porta al modello. Il kit ti porta al copilota che scrive codice nel tuo editor.
- Spazio online a vita
- PDF + file
- Aggiornamenti a vita
Completare del codice non è continuare un testo. Quando scrivi al centro di una funzione, il modello deve tenere conto di ciò che precede E di ciò che segue. Questa capacità ha un nome — il riempimento al centro, o FIM (fill-in-the-middle) — e non tutti i modelli la possiedono: la documentazione ufficiale è chiara su questo punto, il fornitore di completamento deve usare un modello addestrato per il FIM, ogni famiglia di modelli utilizza token diversi per indicare il prefisso, il suffisso e la zona da completare.
È la principale fonte di delusione. Un ottimo modello conversazionale orientato al codice, senza questa capacità, produrrà suggerimenti che ignorano il resto del file e richiudono parentesi graffe già presenti. Un altro punto che molti ignorano: la documentazione consiglia un modello base anziché una variante addestrata a seguire istruzioni, perché un modello base continua un testo grezzo in modo più affidabile di quanto gestisca un suffisso vuoto, soprattutto quando non c'è nulla dopo il cursore.
#Impostazioni che rendono l'esperienza fluida
Quattro impostazioni, documentate dal progetto, offrono la maggior parte del miglioramento della latenza percepita. Si trovano nelle impostazioni dell'estensione (prefisso twinny.) e possono essere tutte modificate senza riavviare Ollama.
| Parametro | Valore predefinito | Effetto |
|---|---|---|
| twinny.debounceWait | 300 ms | Tempo dopo l'ultima digitazione prima di avviare la richiesta; aumentarlo riduce il numero di chiamate |
| twinny.numPredictFim | 512 token | Numero massimo di token generati per suggerimento; ridurlo accelera la risposta |
| twinny.contextLength | 100 righe | Quantità di codice inviata intorno al cursore; ridurla riduce la latenza |
| twinny.fileContextEnabled | disattivato per impostazione predefinita | Invio di estratti di altri file aperti correlati (fino a 3); utile in un progetto di grandi dimensioni, ma aumenta la latenza |
- 01Limitare il numero di token generatiUn completamento utile è lungo una o due righe. La documentazione lo conferma: se i suggerimenti arrivano in ritardo, la prima cosa da ridurre è numPredictFim, non il modello.
- 02Regolare il ritardo di attivazioneAttivare il completamento a ogni pressione di un tasto satura il server; il ritardo predefinito di 300 ms (debounceWait) basta nella maggior parte dei casi e riduce il numero di chiamate.
- 03Mantenere il modello caricato in OllamaSe il server rimuove il modello dalla memoria dopo alcuni minuti di inattività, il primo suggerimento dopo una pausa arriva troppo tardi. Si prolunga quindi il tempo di permanenza in memoria in Ollama (keep_alive).
- 04Ridurre la finestra di contesto inviataLa documentazione lo dice esplicitamente: se i suggerimenti sembrano arrivare in ritardo, ridurre contextLength (100 righe per impostazione predefinita prima/dopo il cursore) o lasciare fileContextEnabled disattivato, come previsto dall'impostazione predefinita. Questo parametro aggiunge estratti di altri file aperti solo se lo attivi tu.
#Cosa vede veramente il modello
Un suggerimento non si basa soltanto sul prefisso e sul suffisso intorno al cursore. La documentazione descrive in dettaglio le fonti che Twinny raccoglie prima di costruire il prompt: le righe circostanti (contextLength), le ultime modifiche apportate al file sotto forma di piccoli diff (recentEditsEnabled, abilitato per impostazione predefinita, fino a 6 modifiche), i simboli e la firma della chiamata in corso forniti dal server di linguaggio (lspContextEnabled, abilitato per impostazione predefinita) e, facoltativamente, estratti da altri file aperti correlati (fileContextEnabled, disabilitato per impostazione predefinita).
- Modifiche recenti
- Una rinomina completata a metà o un pattern applicato manualmente a un file si propaga nei suggerimenti successivi, come se comprendesse ciò che stai facendo.
- Contesto IntelliSense
- Il modello riceve i nomi e la firma dell'invocazione in cui si trova il cursore, forniti dal server di linguaggio dell'editor.
- File vicini
- Disattivato per impostazione predefinita: attivarlo solo per un progetto di grandi dimensioni, perché aumenta la latenza a fronte di un beneficio variabile.
Un altro dettaglio utile in pratica: scrivere prima un commento di una riga che descriva ciò che segue, poi fare una pausa, dà al suggerimento su più righe un obiettivo chiaro — è il consiglio che dà la documentazione stessa per ottenere suggerimenti migliori. Assegnare nomi chiari alle proprie variabili e funzioni resta, prima di qualsiasi regolazione, l'accorgimento che incide maggiormente sulla pertinenza.
#Quali modelli e perché così piccoli?
| Uso | Dimensione consigliata | Perché |
|---|---|---|
| Completamento inline (FIM) | Da 1,5 a 3 miliardi, modello base | La latenza ha la priorità: qwen2.5-coder:1.5b-base risponde in meno di un secondo sulla maggior parte delle macchine, secondo la documentazione ufficiale |
| Completamento su una scheda grafica potente | 7 miliardi | Valutabile se la scheda è veloce e il contesto è ridotto (contextLength basso) |
| Barra laterale della chat | Da 7 a 14 miliardi, modello addestrato a seguire istruzioni | In questo caso si accetta di aspettare una risposta articolata; un modello di base non è adatto alla conversazione |
Questa asimmetria sorprende sempre: siamo abituati a pensare che più grande sia meglio. Per il completamento, un modello da 1,5 miliardi di parametri, addestrato a riempire la parte centrale mancante e servito nella versione base, supera in pratica un modello generalista da 14 miliardi, perché risponde prima che tu abbia finito di riflettere. L'estensione permette di configurare un modello per ogni funzione — uno per il FIM, un altro per la conversazione — ed è l'impostazione giusta: i due non hanno né la stessa dimensione né lo stesso addestramento.
#Oltre il completamento: cosa fa Twinny nel 2026
L'estensione è cresciuta molto dal suo debutto come semplice plugin di completamento. La sua pagina ufficiale elenca oggi la modifica inline (descrivere una modifica e rivederla sotto forma di diff nell'editor), un indice dell'ambiente di lavoro che combina ricerca per parole chiave e ricerca vettoriale, una revisione del codice che riguarda l'albero di lavoro, un branch o una pull request GitHub, la generazione di messaggi di commit a partire dalle modifiche aggiunte all'area di staging e la generazione di comandi da terminale con correzione automatica degli errori.
Tutte queste funzioni restano associate a comandi di VS Code personalizzabili e a modelli di prompt personalizzabili. Da parte dei fornitori, l'elenco si è ampliato alle API ospitate (OpenAI, Anthropic, Mistral, DeepSeek, OpenRouter, Gemini, Groq, Cohere, Perplexity) nonché ai motori locali (Ollama, LM Studio, llama.cpp, Oobabooga, LiteLLM, Open WebUI) — ma nulla obbliga a usarne uno: l'uso del 100% locale rimane la configurazione predefinita.
#Gratuito per uso individuale, a pagamento per i team
Per l'uso individuale, Twinny resta ciò che è sempre stato: un'estensione con licenza MIT, senza telemetria né connessione obbligatoria. Il pagamento è previsto solo oltre cinque sviluppatori che condividono un gateway di team (twinny-server), che centralizza l'accesso ai fornitori per l'intera organizzazione: gratuito fino a cinque account, passa poi a una tariffa per postazione al mese, con una prova di 30 giorni senza carta di credito. Per uno sviluppatore che lavora da solo con Ollama in locale, nessuna di queste condizioni si applica e l'estensione resta interamente utilizzabile senza mai creare un account.
#Twinny o un agente di editing
| Esigenza | Strumento |
|---|---|
| Completare la riga in corso, senza pensarci | Twinny — completamento inline (FIM) |
| Modificare più file su istruzione | Un agente di editing integrato nell'editor (Roo Code, Cline) |
| Eseguire un compito completo senza supervisione | Un agente autonomo nel terminale o in un container |
| Rileggere il codice prima di un commit | La funzione di revisione del codice di Twinny, oppure un assistente conversazionale dedicato |
I due usi non si escludono a vicenda. Molti sviluppatori mantengono Twinny sempre attivo per il completamento inline — invisibile, rapido, con un piccolo modello dedicato — e passano a un agente di editing come Roo Code o Cline per un compito che coinvolge più file, usando un modello più grande per la cui risposta accettano di aspettare qualche secondo.
- Roo Code: l'agente di programmazione locale nell'editor
- Cline + Ollama: agente di programmazione 100 % locale in VS Code
- Rileggere e revisionare il codice con un LLM locale
- Migliore LLM locale per programmare: confronto
- Fonte: repository GitHub ufficiale di Twinny
- Fonte: documentazione del completamento FIM
- Fonte: scheda Visual Studio Marketplace
#FAQ
Twinny è gratuito?+
Quale modello per il completamento inline?+
Perché i miei suggerimenti ignorano la parte successiva del file?+
Come ridurre la latenza dei suggerimenti?+
Serve una scheda grafica potente?+
Twinny o un agente di editing come Roo Code o Cline?+
Twinny fa anche altro oltre a completare il codice?+
Un feedback, un errore, una precisazione? Facci sapere, così la guida migliora per tutti.