Claude Code nas suas próprias GPUs.
Mantenha o seu login do Claude e rode aqui os modelos que as suas regras definem, ou rode tudo localmente.
Um ANTHROPIC_BASE_URL, dois lugares de onde uma resposta pode vir.
Cada solicitação que o Claude Code envia à Anthropic conta para os limites de uso do seu plano, ou é cobrada por token em uma chave de API, e leva o prompt, incluindo o seu código, para fora da sua máquina. Muitas dessas solicitações são pequenas. Atenda-as nas placas que você já tem: elas custam eletricidade, não contam para os seus limites, e os prompts ficam no seu host.
O Claude em si nunca roda aqui. Uma regra define por quais modelos Claude esta máquina responde, claude-haiku* por exemplo, e um modelo que você carregou responde no lugar deles, com o nome que o Claude Code pediu. Todo o resto, incluindo o Opus, é repassado à Anthropic byte a byte com o seu próprio login, inclusive o streaming. A sua chave do warden vai em um cabeçalho próprio, então o login nunca é alterado, e nada é repassado para uma chave sem a opção “May relay to Anthropic”.
Um modelo pequeno é bom o suficiente? Não medimos a qualidade das respostas, então isto é uma avaliação, não um benchmark. O Claude Code usa o modelo da classe Haiku para trabalhos mais leves em segundo plano, e um modelo local pequeno é um substituto razoável nesses casos e em edições simples e bem especificadas. Para mudanças em muitos arquivos, depuração e planos longos, mantenha o Sonnet e o Opus na Anthropic, que é o que a regra geral faz se você não adicionar uma regra. Com um modelo maior em placas maiores, esse limite se desloca; as nossas medições do Claude Code e de réplicas abaixo usaram um modelo de 4B.
Dimensione o contexto para o Claude Code, não para chat: o primeiro turno dele na nossa sessão teve 38.167 tokens, então o modelo local precisa de bem mais de 40k tokens de contexto.
Em texto: o Claude Code envia a solicitação ao warden com o seu login da Anthropic em Authorization e a chave do warden em X-LMWarden-Key. O warden testa as regras em ordem. Uma solicitação para um modelo citado em uma regra é traduzida, colocada na fila pelo agendador e enviada pelo roteador de réplicas a uma réplica do vLLM. Qualquer outra solicitação, como a do Opus, é repassada a api.anthropic.com com o login encaminhado e a chave do warden removida. Se o trecho local falhar antes do primeiro byte, a solicitação vai para a Anthropic, ou a regra a recusa com um 529 que o Claude Code tenta de novo.
export ANTHROPIC_BASE_URL=https:// warden.example export ANTHROPIC_CUSTOM_HEADERS= "X-LMWarden-Key: vw_…" claude
Claude Code 2.1.227 ou mais recente. Mantenha o seu login normal do claude; a chave vai em um cabeçalho próprio, não em ANTHROPIC_API_KEY.
Vale a primeira regra que corresponder; todos os outros modelos vão para a Anthropic
A Anthropic é acessada com o próprio login do usuário
claude-haiku* a um modelo local e a regra geral repassa todo o resto à Anthropic; as regras são numeradas na ordem em que são testadas. O painel Traffic conta 107 locais, 2 repassadas, 0 desviadas e 2 recusadas. Role a imagem para o lado para ver a página inteira.O primeiro turno costuma ser o mais lento. Em uma sessão anterior, o primeiro turno do Claude Code teve 38.167 tokens e o modelo local estava carregado com um contexto de 32.768 tokens, então o mecanismo o recusou (status_400) e a solicitação foi para a Anthropic. Com o contexto aumentado para 65.536 tokens e um cache KV fp8 (o cache de atenção guardado em 8 bits, metade da memória), o modelo de 4B em placas de 16 GiB respondeu localmente a esse mesmo turno em 28 s, com todo o prompt de 38k tokens lido a frio e nada ainda no cache. Os turnos seguintes de uma conversa encontram a maior parte do prompt já no cache do mecanismo: o tempo mediano até o primeiro byte da regra claude-haiku* na fig. 4 é de 290 ms.
O disjuntor deste modelo: fechado
Motivos pelos quais uma regra encaminhou a solicitação à Anthropic ou a recusou
- Protocolo
- Anthropic Messages
- Suporte
- Suporte total
Os modelos Claude que as suas regras definem rodam aqui; todos os outros modelos e caminhos /v1 vão para a Anthropic com o seu próprio login. Nunca coloque a chave do warden em ANTHROPIC_API_KEY nem em ANTHROPIC_AUTH_TOKEN no modo Router: isso substituiria o seu login. No modo apenas local, tudo roda em um único modelo servido, inclusive as pequenas tarefas em segundo plano, e nada vai para a Anthropic.
Requisitos
- Claude Code 2.1.227 ou mais recente (
ANTHROPIC_CUSTOM_HEADERS). - O roteamento precisa estar ligado, com pelo menos uma regra ativada.
- A chave precisa ter permissão para repassar à Anthropic (May relay).
- Precisa de pelo menos 49.152 tokens de contexto: só o primeiro turno tem cerca de 38.000 tokens antes de qualquer arquivo ser lido.
- 131.072 tokens ou mais para sessões reais; menos funciona para sessões curtas.
- O Claude Code pode avisar que o nome do modelo não está no catálogo dele. É só informativo: ele presume uma janela de 200k e compacta o contexto automaticamente com base nela. Defina
CLAUDE_CODE_MAX_CONTEXT_TOKENScom a janela de contexto real do modelo.
Configuração
No console, o Connect grava estes arquivos com o endereço do seu warden, a sua chave e o modelo que você escolheu. Aqui eles aparecem com espaços reservados.
Router: mantenha o seu login do Claude
O seu login do Claude continua indo para a Anthropic; a chave do warden viaja em um cabeçalho próprio, e os modelos que as suas regras definem são respondidos aqui.
export ANTHROPIC_BASE_URL=https://your-warden export ANTHROPIC_CUSTOM_HEADERS="X-LMWarden-Key: vw_YOUR_KEY" claude
settings.json (~/.claude/settings.json){
"env": {
"ANTHROPIC_BASE_URL": "https://your-warden",
"ANTHROPIC_CUSTOM_HEADERS": "X-LMWarden-Key: vw_YOUR_KEY"
}
}Só local (sem conta da Anthropic)
Todos os slots de modelo usam o modelo servido escolhido, e a chave do warden é o token de autenticação. Nada vai para a Anthropic.
export ANTHROPIC_BASE_URL=https://your-warden export ANTHROPIC_AUTH_TOKEN=vw_YOUR_KEY export ANTHROPIC_MODEL=your-served-model-name export ANTHROPIC_DEFAULT_OPUS_MODEL=your-served-model-name export ANTHROPIC_DEFAULT_SONNET_MODEL=your-served-model-name export ANTHROPIC_DEFAULT_HAIKU_MODEL=your-served-model-name export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 export CLAUDE_CODE_MAX_CONTEXT_TOKENS=32768 # The model's context window is unknown: 32768 is a guess. Set it to the model's real window.
settings.json (~/.claude/settings.json){
"env": {
"ANTHROPIC_BASE_URL": "https://your-warden",
"ANTHROPIC_AUTH_TOKEN": "vw_YOUR_KEY",
"ANTHROPIC_MODEL": "your-served-model-name",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "your-served-model-name",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "your-served-model-name",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "your-served-model-name",
"CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS": "1",
"CLAUDE_CODE_MAX_CONTEXT_TOKENS": "32768"
}
}Documentação oficial: https://code.claude.com/docs/en/llm-gateway (lida em 2026-10-04).