Skip to content

Instantly share code, notes, and snippets.

@zr0n
Created July 28, 2026 14:26
Show Gist options
  • Select an option

  • Save zr0n/7cbb3bbf992cacf46481c7325b49a2c3 to your computer and use it in GitHub Desktop.

Select an option

Save zr0n/7cbb3bbf992cacf46481c7325b49a2c3 to your computer and use it in GitHub Desktop.
using claude code with deep seek api

Claude Code apontado pro DeepSeek — passo a passo (macOS / zsh)

Aviso: configuração documentada pela DeepSeek, mas não oficialmente suportada pela Anthropic. Se quebrar, nenhum dos dois suportes vai te atender. A CLI é gratuita; os tokens da DeepSeek são pagos.


1. Pré-requisitos

  • Node.js 18+
node --version

Se não tiver, no Mac com Homebrew:

brew install node

2. Instalar o Claude Code

npm install -g @anthropic-ai/claude-code
claude --version

Se aparecer o número da versão, está instalado.

Se você já tem Claude Code instalado e logado na Anthropic, pule pro passo 3 — mas leia o passo 6, porque a sessão antiga pode ganhar das variáveis de ambiente.


3. Configurar as variáveis de ambiente

Teste primeiro na sessão atual do terminal (não persiste, é o jeito seguro de validar):

export ANTHROPIC_BASE_URL="https://api.deepseek.com/anthropic"
export ANTHROPIC_AUTH_TOKEN="sk-SUA_KEY_DA_DEEPSEEK"
export ANTHROPIC_API_KEY="sk-SUA_KEY_DA_DEEPSEEK"
export ANTHROPIC_MODEL="deepseek-v4-pro[1m]"
export ANTHROPIC_DEFAULT_OPUS_MODEL="deepseek-v4-pro[1m]"
export ANTHROPIC_DEFAULT_SONNET_MODEL="deepseek-v4-pro[1m]"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="deepseek-v4-flash"
export CLAUDE_CODE_SUBAGENT_MODEL="deepseek-v4-flash"
export CLAUDE_CODE_EFFORT_LEVEL="max"
export CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK=1

Notas sobre cada coisa

Variável Pra que serve
ANTHROPIC_BASE_URL Redireciona a CLI pro endpoint Anthropic-compatible da DeepSeek
ANTHROPIC_AUTH_TOKEN + ANTHROPIC_API_KEY Algumas versões da CLI checam uma, outras checam as duas — defina ambas
ANTHROPIC_MODEL Modelo padrão. O sufixo [1m] é a variante de contexto de 1M tokens
..._HAIKU_MODEL / SUBAGENT_MODEL Tarefas leves e subagentes vão pro flash, que é bem mais barato
CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK Evita a CLI cair num caminho non-streaming que conflita com o endpoint da DeepSeek

IDs de modelo: deepseek-chat e deepseek-reasoner foram descontinuados em julho de 2026. Use deepseek-v4-pro (raciocínio pesado) e deepseek-v4-flash (tarefas do dia a dia).

Sobre as aspas nos [1m]: zsh não faz glob no lado direito de uma atribuição, então funcionaria sem aspas — mas mantenha aspas pra não ter surpresa em scripts.


4. Rodar

cd ~/caminho/do/HelloTeloAI
claude

Dentro da sessão, confirme a rota:

/status

Deve mostrar o base URL da DeepSeek. Se mostrar api.anthropic.com, vá pro passo 6.


5. Tornar permanente — sem perder o Claude Code original

O erro comum é jogar tudo no ~/.zshrc e nunca mais conseguir usar Claude Code com os modelos da Anthropic. Melhor criar um comando separado.

Adicione no fim do ~/.zshrc:

# Claude Code rodando no DeepSeek — invoque com: ccds
ccds() {
  ANTHROPIC_BASE_URL="https://api.deepseek.com/anthropic" \
  ANTHROPIC_AUTH_TOKEN="$DEEPSEEK_API_KEY" \
  ANTHROPIC_API_KEY="$DEEPSEEK_API_KEY" \
  ANTHROPIC_MODEL="deepseek-v4-pro[1m]" \
  ANTHROPIC_DEFAULT_OPUS_MODEL="deepseek-v4-pro[1m]" \
  ANTHROPIC_DEFAULT_SONNET_MODEL="deepseek-v4-pro[1m]" \
  ANTHROPIC_DEFAULT_HAIKU_MODEL="deepseek-v4-flash" \
  CLAUDE_CODE_SUBAGENT_MODEL="deepseek-v4-flash" \
  CLAUDE_CODE_EFFORT_LEVEL="max" \
  CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK=1 \
  claude "$@"
}

E guarde a key fora do arquivo versionado. Opção simples:

echo 'export DEEPSEEK_API_KEY="sk-SUA_KEY"' >> ~/.zshenv
chmod 600 ~/.zshenv

Opção mais segura, usando o Keychain do macOS:

# guardar uma vez
security add-generic-password -a "$USER" -s deepseek-api -w "sk-SUA_KEY"

E no .zshrc, no lugar do export:

export DEEPSEEK_API_KEY="$(security find-generic-password -a "$USER" -s deepseek-api -w)"

Recarregue:

source ~/.zshrc

Agora claude = Anthropic, ccds = DeepSeek.


6. Problemas comuns

/status mostra a Anthropic, não a DeepSeek Sessão antiga autenticada tem precedência. Rode claude e use /logout, ou apague a credencial salva:

# inspecione antes de apagar
cat ~/.claude.json | head -40

No macOS a credencial também pode estar no Keychain, como item Claude Code-credentials.

Erro 401 / authentication_error Key errada, saldo zerado, ou você definiu só uma das duas variáveis de key. Teste a key direto:

curl https://api.deepseek.com/anthropic/v1/messages \
  -H "x-api-key: $DEEPSEEK_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"deepseek-v4-pro[1m]","max_tokens":32,"messages":[{"role":"user","content":"ping"}]}'

model_not_found Você usou um ID legado (deepseek-chat, deepseek-reasoner).

Requests travando ou timeout Confirme o CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK=1. Se estiver atrás de proxy, defina HTTPS_PROXY antes das outras variáveis.

Nunca misture rotas. Base URL da OpenRouter com token da DeepSeek (ou vice-versa) é a causa nº1 de debug perdido. Escolha um dono da rota e fique nele.


7. O que continua funcionando (e o que não)

Funciona: CLAUDE.md, slash commands, hooks, servidores MCP (são client-side — seu UE-MCP continua funcionando), subagentes, web search (a DeepSeek implementa o tool nativamente, mas cobra tokens extras pelo resumo dos resultados).

Muda: qualidade do agente em tarefas longas de multi-arquivo é diferente da do Opus/Sonnet. Pra C++ de Unreal com muito contexto de header, vale testar antes de migrar de vez.

Mapeamento automático: se você passar nomes de modelo da Anthropic, a DeepSeek mapeia — claude-opus*deepseek-v4-pro, claude-sonnet* e claude-haiku*deepseek-v4-flash.


8. Alternativa: claude-code-router

Se quiser trocar de provedor no meio da sessão (DeepSeek → Ollama local → OpenRouter):

npm install -g @musistudio/claude-code-router
ccr code

Config em ~/.claude-code-router/config.json:

{
  "log": true,
  "Providers": [
    {
      "name": "deepseek",
      "api_base_url": "https://api.deepseek.com/chat/completions",
      "api_key": "sk-SUA_KEY",
      "models": ["deepseek-v4-pro", "deepseek-v4-flash"],
      "transformer": { "use": ["deepseek"] }
    }
  ],
  "Router": {
    "default": "deepseek,deepseek-v4-flash",
    "background": "deepseek,deepseek-v4-flash",
    "think": "deepseek,deepseek-v4-pro",
    "longContext": "deepseek,deepseek-v4-pro"
  }
}

Troca de modelo em sessão: /model deepseek,deepseek-v4-pro

Vantagem: roteamento por tipo de tarefa (background barato, raciocínio caro) e vários provedores. Desvantagem: mais uma camada de proxy pra dar problema.


Fontes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment