Como usar o OpenCode com sua chave CodeJato
O OpenCode aceita provedores compatíveis com a API da OpenAI. Declarando a CodeJato como provedor, o agente de terminal inteiro roda na sua assinatura, pagando em reais.
Se você ainda não tem chave, escolha um plano ou peça um trial de 24h grátis.
O detalhe que mais gera chamado: o endereço da API termina em https://api.tn1.top/v1. O /v1 no fim não é opcional — sem ele o gateway responde 401 dizendo que a chave está inválida, e você vai procurar o problema no lugar errado.
1. Pré-requisitos
- Uma chave CodeJato ativa.
- O OpenCode instalado:
npm install -g opencode-ai
2. Configurar o OpenCode
Crie (ou edite) o arquivo de configuração com o bloco abaixo. Ele declara o provedor codejato e lista os modelos que você quer ver no seletor.
| Sistema | Onde fica |
|---|---|
| macOS | ~/.config/opencode/opencode.json |
| Linux | ~/.config/opencode/opencode.json |
| Windows | %USERPROFILE%\.config\opencode\opencode.json |
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"codejato": {
"npm": "@ai-sdk/openai-compatible",
"name": "CodeJato",
"options": {
"baseURL": "https://api.tn1.top/v1",
"apiKey": "{env:CODEJATO_API_KEY}"
},
"models": {
"Opus 4.8": { "name": "Opus 4.8" },
"Sonnet": { "name": "Sonnet" },
"Haiku": { "name": "Haiku" }
}
}
}
}
- Exporte a chave no ambiente:
export CODEJATO_API_KEY="sua-chave". O config guarda só o nome da variável, então a chave não fica no disco. - Rode
opencodena pasta do projeto e escolha o modelo pelo seletor. - Sem abrir a interface:
opencode run -m "codejato/Sonnet" "responda apenas: OK".
Verificado nesta configuração. O comando abaixo foi rodado contra o gateway e respondeu OK:
opencode run -m "codejato/Sonnet" "responda apenas: OK"
3. Modelos disponíveis
O CodeJato vende os modelos da Anthropic em reais. Use Opus 4.8 no trabalho pesado, Sonnet no dia a dia e Haiku quando velocidade importa mais que profundidade.
No OpenCode o modelo é informado por -m codejato/<modelo> na linha de comando.
O identificador leva prefixo: codejato/Sonnet.
| Modelo | Como escrever |
|---|---|
Opus 4.8 | codejato/Opus 4.8 |
Sonnet | codejato/Sonnet |
Haiku | codejato/Haiku |
Use exatamente esses nomes. Nomes técnicos da Anthropic — claude-sonnet-4-6, claude-3-5-sonnet, claude-opus-4 e parecidos — não existem aqui. Se você usar um deles, o OpenCode responde “o serviço está com instabilidade momentânea”, o que parece problema nosso e não é: é só o nome do modelo.
4. O que funciona
| Recurso | Status | Observação |
|---|---|---|
Execução direta (opencode run) | Funciona | Testado nesta configuração: imprime a resposta e encerra. |
| Modo agente (TUI) | Não testamos | Usa exatamente a mesma configuração, mas não abrimos a interface para verificar. |
| Vários modelos no seletor | Não testamos | Cada chave do bloco models vira uma opção. |
| Nome do modelo sem prefixo | Não | Tem que ser codejato/<modelo>. O prefixo é o nome do provedor. |
5. Troubleshooting
| Sintoma | O que fazer |
|---|---|
Error: O serviço está com instabilidade momentânea e não conseguiu responder agora | O chamado mais comum, e a mensagem engana: ela também aparece quando o nome do modelo não existe, e aí não adianta esperar passar. Aqui o modelo é pedido pelo nome do plano — Opus 4.8, Sonnet, Haiku — nunca pelo nome técnico da Anthropic (claude-sonnet-4-6, claude-3-5-sonnet e afins não existem aqui). Confira o bloco models do config e o -m contra a tabela da seção 3. |
O modelo não aparece / model not found | O identificador tem que levar o prefixo do provedor: codejato/Sonnet, não Sonnet sozinho. O prefixo é o nome que você deu ao provedor no config — se você chamou o bloco de cc em vez de codejato, o comando é cc/Sonnet. |
| Modelo com espaço no nome quebra o comando | Ponha entre aspas: -m "codejato/Opus 4.8". Sem aspas o terminal corta no espaço. |
401 Acesso inativo: sua chave está ausente, inválida ou expirada | Duas causas possíveis, nesta ordem: (1) a variável CODEJATO_API_KEY não está exportada no shell que roda o OpenCode — confira com echo $CODEJATO_API_KEY; (2) o baseURL está sem o /v1 no fim. O endereço correto é https://api.tn1.top/v1. A mensagem é a mesma nos dois casos, por isso cheque as duas. |
Unexpected token '<' is not valid JSON | O gateway devolveu HTML de login em vez de JSON, o que acontece quando a requisição chega sem o cabeçalho de autorização. Mesma checagem da variável de ambiente acima. |
| O comando termina com código 0 mesmo tendo dado erro | O OpenCode sai com 0 mesmo quando o provedor responde erro. Leia a saída, não confie só no código de saída. |
6. FAQ
Por que npm dentro do config?
O OpenCode baixa o adaptador @ai-sdk/openai-compatible sozinho na primeira execução. Você não precisa instalar nada a mais.
Posso usar outros provedores junto?
Sim. O bloco provider aceita vários; o prefixo do modelo diz qual usar.
Onde fica a chave?
Numa variável de ambiente, referenciada por {env:...}. O arquivo de config não guarda o segredo.
Dúvida que não está aqui? Fale com a gente em suporte@tn1.top.