Twinny: autocompletamento de código 100 % locale
Twinny é uma extensão gratuita e open source para VS Code (licença MIT) que executa o preenchimento automático de código na sua própria máquina, via Ollama, LM Studio ou llama.cpp. Para a linha atual, um pequeno modelo de base treinado para preenchimento no meio, como qwen2.5-coder:1.5b-base, responde em menos de um segundo. Nenhuma assinatura é necessária para uso individual; a cobrança se aplica apenas a equipes com mais de cinco desenvolvedores.
O Twinny é uma extensão de editor que realiza autocompletação de código localmente: ela sugere a continuação do que você está escrevendo, com base em um modelo servido pela sua própria máquina. É a categoria mais exigente em termos de latência de todo o ecossistema — uma sugestão que chega em dois segundos é inútil — e por isso a escolha do modelo segue regras opostas às do restante do ecossistema. Este guia detalha as configurações que fazem a diferença e o que a extensão ganhou desde seus primórdios.
#O que o Twinny faz
Historicamente, duas funções coexistem na extensão: a autocompletação inline, que exibe uma sugestão em cinza durante a digitação, e uma barra lateral de chat para fazer perguntas sobre o código selecionado. Ambas usam um modelo local, servido pelo Ollama, LM Studio ou llama.cpp, e nada sai da máquina por padrão.
O interesse é evidente em um contexto em que o código não deve sair: escritório, administração, código de cliente sob acordo de confidencialidade. O argumento não é o custo — é que a pergunta “para onde vai meu código” tem uma resposta verificável. O projeto se apresenta como o assistente de IA para VS Code que permanece dentro da sua rede.
#O detalhe que muda tudo: preenchimento no meio
Este guia leva você ao modelo. O kit leva você ao copiloto que programa no seu editor.
- Espaço online vitalício
- PDF + arquivos
- Atualizações vitalícias
Completar código não é continuar um texto. Quando você escreve no meio de uma função, o modelo deve levar em conta o que vem antes E o que vem depois. Essa capacidade tem um nome — preenchimento no meio, ou FIM (fill-in-the-middle) — e nem todos os modelos a possuem: a documentação oficial é explícita sobre esse ponto. O provedor de autocompletar deve usar um modelo treinado para FIM, e cada família de modelos usa tokens distintos para marcar o prefixo, o sufixo e a área a preencher.
É a principal fonte de decepções. Um excelente modelo de conversa voltado para código, sem essa capacidade, produzirá sugestões que ignoram o restante do arquivo e fecham novamente chaves já presentes. Outro ponto que muitos ignoram: a documentação recomenda um modelo base em vez de uma variante ajustada para seguir instruções, pois um modelo base dá continuidade a um texto bruto de forma mais confiável do que lida com um sufixo vazio, especialmente quando não há nada após o cursor.
#Configurações que tornam a experiência fluida
Quatro ajustes, documentados pelo projeto, concentram a maior parte da redução da latência percebida. Eles ficam nas configurações da extensão (prefixo twinny.) e todos podem ser ajustados sem reiniciar o Ollama.
| Parâmetro | Valor padrão | Efeito |
|---|---|---|
| twinny.debounceWait | 300 ms | Tempo de espera após a última tecla pressionada antes de enviar a requisição; aumentá-lo reduz o número de chamadas |
| twinny.numPredictFim | 512 tokens | Número máximo de tokens gerados por sugestão; reduzi-lo acelera a resposta |
| twinny.contextLength | 100 linhas | Quantidade de código enviada ao redor do cursor; reduzir isso diminui a latência |
| twinny.fileContextEnabled | desativado por padrão | Envio de trechos de outros arquivos abertos relacionados (até 3); útil em grandes projetos, mas gera atraso |
- 01Limitar o número de tokens geradosUma sugestão útil de autocompletar tem uma ou duas linhas. A documentação confirma: se as sugestões chegam com atraso, a primeira coisa a reduzir é numPredictFim, não o modelo.
- 02Ajustar o atraso de acionamentoAcionar a cada tecla pressionada sobrecarrega o servidor; o intervalo padrão de 300 ms (debounceWait) é suficiente na maioria dos casos e reduz o número de chamadas.
- 03Manter o modelo carregado no OllamaSe o servidor remove o modelo da memória após alguns minutos de inatividade, a primeira sugestão após uma pausa chega tarde demais. Aumentamos o tempo pelo qual o modelo permanece na memória no Ollama (keep_alive).
- 04Reduzir a janela de contexto enviadaA documentação diz isso explicitamente: se as sugestões parecerem atrasadas, reduzir contextLength (100 linhas por padrão antes/depois do cursor) ou deixar fileContextEnabled desativado, sua configuração padrão. Esse parâmetro só adiciona trechos de outros arquivos abertos se você o ativar manualmente.
#O que o modelo realmente vê
Uma sugestão não se baseia apenas no prefixo e no sufixo ao redor do cursor. A documentação detalha as fontes que o Twinny reúne antes de construir o prompt: as linhas vizinhas (contextLength), as últimas alterações feitas no arquivo no formato de pequenos diffs (recentEditsEnabled, ativado por padrão, até 6 alterações), os símbolos e a assinatura da chamada atual fornecidos pelo servidor de linguagem (lspContextEnabled, ativado por padrão) e, opcionalmente, trechos de outros arquivos abertos relacionados (fileContextEnabled, desativado por padrão).
- Modificações recentes
- Um renomeamento parcial ou um padrão aplicado manualmente em um arquivo se propaga nas sugestões seguintes, como se compreendesse o que você está fazendo.
- Contexto IntelliSense
- O modelo recebe os nomes e a assinatura da chamada em que está o cursor, fornecidos pelo servidor de linguagem do editor.
- Arquivos vizinhos
- Desativado por padrão: ativar apenas em um projeto grande, pois aumenta a latência em troca de um ganho variável.
Outro detalhe útil na prática: escrever primeiro um comentário de uma linha descrevendo o que vem a seguir, depois fazer uma pausa, dá à sugestão multilinha um objetivo claro — é o conselho que a própria documentação dá para obter melhores sugestões. Nomear claramente suas variáveis e funções continua, antes de qualquer configuração, sendo o fator que mais influencia a relevância.
#Quais modelos e por que tão pequenos?
| Uso | Tamanho recomendado | Por quê |
|---|---|---|
| Autocompletar em linha (FIM) | 1,5 a 3 bilhões, modelo base | A latência é primordial: o qwen2.5-coder:1.5b-base responde em menos de um segundo na maioria das máquinas, de acordo com a documentação oficial |
| Autocompletação em uma placa de vídeo potente | 7 bilhões | Pode ser uma opção se a placa for rápida e o contexto for reduzido (contextLength baixo) |
| Barra lateral de conversa | 7 a 14 bilhões, modelo ajustado para seguir instruções | Nesse caso, aceitamos esperar por uma resposta elaborada; um modelo base não é adequado para conversa |
Essa assimetria sempre surpreende: estamos acostumados a pensar que maior é melhor. Para a autocompletação, um modelo de 1,5 bilhão de parâmetros, treinado para preencher trechos no meio e disponibilizado na versão base, supera na prática um modelo generalista de 14 bilhões, porque responde antes de você terminar de pensar. A extensão permite configurar um modelo por função — um para o FIM, outro para a conversa — e essa é a configuração correta: os dois não têm o mesmo tamanho nem o mesmo treinamento.
#Além da autocompletação: o que o Twinny faz em 2026
A extensão cresceu muito desde que começou como um simples plugin de autocompletar. Sua página oficial lista hoje a edição inline (descrever uma alteração e revisá-la em forma de diff no editor), um índice da estação de trabalho que combina busca por palavras-chave e busca vetorial, uma revisão de código da árvore de trabalho, de uma branch ou de uma pull request do GitHub, a geração de mensagens de commit a partir das alterações indexadas e a geração de comandos de terminal com correção automática de erros.
Todas essas funcionalidades continuam vinculadas a comandos do VS Code que podem ser reatribuídos e a modelos de prompt personalizáveis. Quanto aos fornecedores, a lista passou a incluir APIs hospedadas (OpenAI, Anthropic, Mistral, DeepSeek, OpenRouter, Gemini, Groq, Cohere, Perplexity), além dos mecanismos de execução locais (Ollama, LM Studio, llama.cpp, Oobabooga, LiteLLM, Open WebUI) — mas nada obriga você a usar uma dessas APIs: o uso 100% local continua sendo a configuração padrão.
#Gratuito individualmente, pago em equipe
No uso individual, o Twinny continua sendo o que sempre foi: uma extensão sob licença MIT, sem telemetria nem conexão obrigatória. A cobrança só começa quando mais de cinco desenvolvedores compartilham um gateway de equipe (twinny-server), que centraliza o acesso aos provedores para toda a organização: gratuito para até cinco contas, ele passa então a ter uma tarifa por licença de usuário por mês, com um teste de 30 dias sem cartão de crédito. Para um desenvolvedor que trabalha sozinho com Ollama em execução local, nenhuma dessas condições se aplica, e a extensão continua totalmente utilizável sem que seja necessário criar uma conta em momento algum.
#Twinny ou um agente de edição
| Necessidade | Ferramenta |
|---|---|
| Finalizar a linha em andamento, sem pensar nisso | Twinny — autocompletar em linha (FIM) |
| Modificar vários arquivos conforme instrução | Agente de edição integrado ao editor (Roo Code, Cline) |
| Executar uma tarefa completa sem supervisão | Um agente autônomo no terminal ou em contêiner |
| Revisar código antes de um commit | A função de revisão de código do Twinny, ou um assistente conversacional dedicado |
Os dois usos não se excluem. Muitos desenvolvedores mantêm o Twinny ativo o tempo todo para a autocompletação inline — invisível, rápida, com um modelo pequeno dedicado — e passam para um agente de edição como Roo Code ou Cline quando uma tarefa envolve vários arquivos, usando um modelo maior por cuja resposta aceitam esperar alguns segundos.
- Roo Code: o agente de código local no editor
- Cline + Ollama: agente de código 100 % local no VS Code
- Releia e revise código com um LLM local
- Melhor LLM local para programar: comparação
- Fonte: repositório oficial do Twinny no GitHub
- Fonte: documentação da completação FIM
- Fonte: ficha do Visual Studio Marketplace
#FAQ
O Twinny é gratuito?+
Qual modelo usar para a autocompletação inline?+
Por que as minhas sugestões ignoram o restante do arquivo?+
Como reduzir a latência das sugestões?+
É necessária uma placa de vídeo potente?+
Twinny ou um agente de edição como Roo Code ou Cline?+
O Twinny faz algo além de completar código?+
Um comentário, um erro ou uma observação? Avise-nos; isso ajuda a melhorar o guia para todos.