OpenCode e LSP: o que o Language Server Protocol agrega ao agente?

Terminal exibindo integração opencode lsp com diagnósticos do Language Server Protocol em tempo real
Resposta rápida

Se você cruzou o termo "opencode lsp" na documentação e ficou na dúvida, aqui vai o resumo: o OpenCode é o agente de código open source da SST pro terminal, e ele integra servidores LSP (Language Server Protocol) pra devolver ao modelo diagnósticos, tipos e análise de código de verdade. Na prática, o agente para de chutar e passa a corrigir com base nos erros reais que o language server aponta. Você liga com lsp: true no config, os servidores sobem sob demanda e o download é automático no primeiro uso 🙂

Você abriu a documentação do OpenCode, viu a sigla LSP e pensou: que raio é isso e por que o agente precisa disso?

Calma que eu te conto

LSP é o Language Server Protocol, o mesmo protocolo que faz o seu editor sublinhar de vermelho o erro, mostrar o tipo quando você passa o mouse e pular direto pra definição de uma função

O OpenCode, que é o agente de IA de código open source da SST feito pro terminal, integra esses servidores LSP e usa a saída deles como feedback pro LLM na hora de editar arquivo

Se liga na ideia central: o LSP é a ponte entre a inteligência que o editor já tem e o modelo que está escrevendo o código pra você

O que o LSP entrega ao agente

Quando o OpenCode conecta num servidor LSP, ele ganha acesso ao mesmo tipo de inteligência de código que a sua IDE usa

Se você conhece o autocomplete e o "ir pra definição" do VS Code, é exatamente essa camada que entra em jogo aqui

As capacidades que o LSP entrega pro agente são:

  • Diagnósticos (diagnostics): os erros e avisos que o language server encontra no arquivo, tipo variável não usada, tipo errado, import quebrado
  • Hover / informação de tipos: o tipo de uma variável ou a assinatura de uma função, aquilo que apareceria ao passar o mouse
  • Busca de símbolos (symbol lookups): localizar onde está definido um símbolo (função, classe, constante) no projeto
  • Ir para definição (go-to-definition): saltar da chamada pro lugar exato onde a coisa foi declarada
  • Encontrar referências (find references): todos os pontos que usam aquele símbolo
  • Hierarquia de chamadas (call hierarchy): quem chama quem, o mapa de quem depende de quem

Cada uma dessas dá contexto real pro modelo

Em vez de o LLM adivinhar o tipo de um retorno ou onde uma função vive, ele consulta o language server e recebe a resposta certa

É a diferença entre editar às cegas e editar enxergando o código como o editor enxerga

Por que isso melhora a assistência do OpenCode

Aqui está o pulo do gato

O mecanismo é simples: ao editar um arquivo, o OpenCode consulta o servidor LSP, pega os diagnósticos e devolve isso pro LLM

Ou seja, o modelo escreve uma mudança, o language server analisa e diz "ó, aqui tem um erro de tipo", e essa informação volta pro modelo corrigir

O agente passa a corrigir com base em erro real apontado pelo language server, não só em suposição do que ele acha que deveria funcionar

E a comunicação por baixo? É via JSON-RPC sobre stdio (entrada/saída padrão)

"Que JSON-RPC?" É só o formato de mensagem que o cliente do OpenCode e o servidor LSP usam pra trocar figurinhas: um pergunta, o outro responde, tudo pela entrada e saída padrão do processo

Você não precisa mexer nisso, mas é bom saber que é esse trilho que carrega os diagnósticos de um lado pro outro

O resultado prático é um agente menos "vibe coder no chute" e mais colado na realidade do seu projeto

Como habilitar o LSP no OpenCode

A boa notícia é que dá pra ligar com pouca coisa

O LSP no OpenCode é controlado pela seção lsp do config, e o comportamento depende do que você coloca ali

  1. Abra o config do OpenCode e adicione a seção lsp. Se você omitir essa configuração, o LSP fica desligado por padrão, então precisa declarar
  1. Ligue todos os servidores built-in com lsp: true. Esse é o caminho mais direto pra deixar tudo habilitado de uma vez:
{
  "lsp": true
}

O erro comum aqui é esperar que o LSP já venha ligado de fábrica: se você não colocou a seção, ele estava desabilitado o tempo todo

  1. Deixe os servidores subirem sozinhos. O OpenCode não sobe um servidor LSP até você acessar um arquivo que precise dele: a inicialização é lazy, disparada quando ele detecta a extensão suportada do arquivo aberto
  1. Não se assuste com o download no primeiro uso. O OpenCode baixa e configura os servidores LSP automaticamente na primeira vez, então pode ter uma pausa inicial enquanto ele prepara a casa
  1. Precisa desligar o download automático? Use a variável de ambiente. Dá pra desativar o download/configuração automática assim:
OPENCODE_DISABLE_LSP_DOWNLOAD=true

Útil em ambiente controlado onde você não quer que a ferramenta busque nada por conta própria

OpenCode na prática (vídeo)

Pra quem quer ver o agente rodando de verdade antes de mexer no config, deixo aqui um material do canal com o OpenCode em funcionamento no terminal

Conclusão

No fim das contas, o LSP é o que transforma o OpenCode num agente que enxerga o código como o seu editor enxerga

Diagnósticos, tipos, referências e definições deixam de ser palpite e viram informação vinda direto do language server, devolvida pro modelo na hora de editar

O próximo passo é curtíssimo: ligar lsp: true no config e abrir um arquivo do seu projeto pra ver o servidor subir sozinho

Aí é só deixar o agente corrigir com base no que o código realmente diz 😀

Perguntas frequentes

O LSP já vem habilitado por padrão no OpenCode ou preciso configurar?

Não vem ligado por padrão, não. Se você omitir a seção lsp do config, o LSP fica desabilitado, e muita gente fica quebrando a cabeça sem entender por que o agente não enxerga o language server. Basta declarar lsp: true pra ligar todos os servidores built-in de uma vez.

Como o OpenCode e o servidor LSP trocam mensagens por baixo dos panos?

A comunicação é via JSON-RPC sobre stdio, ou seja, entrada e saída padrão do processo. O cliente do OpenCode manda a pergunta pro servidor LSP e recebe a resposta por esse mesmo canal. Você não configura nada disso na mão, é o trilho interno que carrega os diagnósticos de um lado pro outro.

Preciso instalar os servidores LSP manualmente pra usar no OpenCode?

Não, o OpenCode baixa e configura os servidores automaticamente no primeiro uso. Pode ter uma pausa inicial enquanto ele prepara tudo, mas não tem instalação manual envolvida. Se quiser desabilitar esse comportamento, a variável de ambiente OPENCODE_DISABLE_LSP_DOWNLOAD resolve.

O servidor LSP sobe junto com o OpenCode ou espera ser necessário?

Ele sobe de forma lazy, sob demanda mesmo. O OpenCode não inicializa o servidor LSP até você acessar um arquivo cuja extensão seja suportada por aquele servidor. Isso mantém o consumo de recursos em zero pra linguagens que você não está usando na sessão.

Que tipo de inteligência de código o LSP entrega pro agente do OpenCode?

Bastante coisa: diagnósticos, hover com informação de tipos, busca de símbolos, ir para definição, encontrar referências e hierarquia de chamadas. Na prática o modelo para de adivinhar o tipo de um retorno ou onde uma função vive e passa a consultar o language server pra receber a resposta certa.

O OpenCode é gratuito e de código aberto?

Sim, é um projeto open source mantido pela SST, com repositório em sst/opencode e site em opencode.ai. Sendo open source, você pode checar o código, contribuir ou adaptar pra sua necessidade sem custo de licença.




Subscribe
Notify of
guest

0 Comentários
Oldest
Newest Most Voted
Inline Feedbacks
View all comments

Formações

Formação Vibe Coding

Formação Vibe Coding

Do Prompt ao Produto: Crie Software Real com IA

  • 473 aulas
  • 20 projetos
  • 39h 26min

Blog | Mais populares