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.
Use PowerShell (não CMD). Se preferir, tem uma seção de CMD e outra de WSL no fim.
node --versionSe não tiver:
winget install OpenJS.NodeJS.LTSFeche e reabra o PowerShell depois de instalar, senão o PATH não atualiza.
Obrigatório — o Claude Code usa ferramentas Unix que vêm no pacote.
winget install Git.GitGere em https://platform.deepseek.com/api_keys e coloque crédito na conta. Sem saldo, a API devolve erro de insufficient balance.
npm install -g @anthropic-ai/claude-code
claude --versionSe o claude não for reconhecido, o diretório global do npm não está no PATH:
npm config get prefix
# adicione o caminho retornado ao PATH do usuárioSe 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.
Teste primeiro assim. Vale só pra essa janela do PowerShell — é o jeito seguro de validar antes de persistir.
$env:ANTHROPIC_BASE_URL = "https://api.deepseek.com/anthropic"
$env:ANTHROPIC_AUTH_TOKEN = "sk-SUA_KEY_DA_DEEPSEEK"
$env:ANTHROPIC_API_KEY = "sk-SUA_KEY_DA_DEEPSEEK"
$env:ANTHROPIC_MODEL = "deepseek-v4-pro[1m]"
$env:ANTHROPIC_DEFAULT_OPUS_MODEL = "deepseek-v4-pro[1m]"
$env:ANTHROPIC_DEFAULT_SONNET_MODEL = "deepseek-v4-pro[1m]"
$env:ANTHROPIC_DEFAULT_HAIKU_MODEL = "deepseek-v4-flash"
$env:CLAUDE_CODE_SUBAGENT_MODEL = "deepseek-v4-flash"
$env:CLAUDE_CODE_EFFORT_LEVEL = "max"
$env:CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK = "1"As aspas são obrigatórias aqui. Em PowerShell, [1m] sem aspas é interpretado como sintaxe de tipo/índice e o valor sai errado ou dá erro de parse. Isso não é opcional como no zsh.
| 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, 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 (dia a dia).
cd C:\dev\HelloTeloAI
claudeDentro da sessão:
/status
Deve mostrar o base URL da DeepSeek. Se mostrar api.anthropic.com, vá pro passo 6.
Duas abordagens. A segunda é a recomendada.
[Environment]::SetEnvironmentVariable("ANTHROPIC_BASE_URL", "https://api.deepseek.com/anthropic", "User")
[Environment]::SetEnvironmentVariable("ANTHROPIC_MODEL", "deepseek-v4-pro[1m]", "User")
# ...e assim por dianteFunciona, mas você perde o Claude Code com modelos da Anthropic. Só faz sentido se for migrar de vez.
Abra o perfil:
if (!(Test-Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }
notepad $PROFILECole:
# Claude Code rodando no DeepSeek — invoque com: ccds
function ccds {
$antigo = @{}
$vars = @{
ANTHROPIC_BASE_URL = "https://api.deepseek.com/anthropic"
ANTHROPIC_AUTH_TOKEN = $env:DEEPSEEK_API_KEY
ANTHROPIC_API_KEY = $env: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"
}
foreach ($k in $vars.Keys) {
$antigo[$k] = [Environment]::GetEnvironmentVariable($k, "Process")
Set-Item -Path "Env:$k" -Value $vars[$k]
}
try {
claude @args
}
finally {
# restaura o ambiente ao sair, pra não contaminar a sessão
foreach ($k in $antigo.Keys) {
if ($null -eq $antigo[$k]) { Remove-Item -Path "Env:$k" -ErrorAction SilentlyContinue }
else { Set-Item -Path "Env:$k" -Value $antigo[$k] }
}
}
}Recarregue:
. $PROFILEAgora claude = Anthropic, ccds = DeepSeek.
Opção simples — variável de usuário (fica em texto no registro, mas fora dos seus arquivos):
[Environment]::SetEnvironmentVariable("DEEPSEEK_API_KEY", "sk-SUA_KEY", "User")Opção melhor — Credential Manager do Windows via módulo oficial:
Install-Module Microsoft.PowerShell.SecretManagement, Microsoft.PowerShell.SecretStore -Scope CurrentUser
Register-SecretVault -Name LocalStore -ModuleName Microsoft.PowerShell.SecretStore -DefaultVault
Set-Secret -Name DeepSeekApiKey -Secret "sk-SUA_KEY"E no $PROFILE, antes da função:
$env:DEEPSEEK_API_KEY = Get-Secret -Name DeepSeekApiKey -AsPlainTextSe a política de execução bloquear o perfil:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
Sessão antiga autenticada tem precedência. Rode claude, use /logout e saia. Se persistir, inspecione a config:
Get-Content "$env:USERPROFILE\.claude.json" | Select-Object -First 40No Windows a credencial também pode estar no Gerenciador de Credenciais como Claude Code-credentials:
cmdkey /list | Select-String "Claude"Key errada, saldo zerado, ou você definiu só uma das duas variáveis de key. Teste direto — use Invoke-RestMethod, porque escapar JSON no curl do PowerShell é um inferno:
$corpo = @{
model = "deepseek-v4-pro[1m]"
max_tokens = 32
messages = @(@{ role = "user"; content = "ping" })
} | ConvertTo-Json -Depth 5
Invoke-RestMethod -Uri "https://api.deepseek.com/anthropic/v1/messages" `
-Method Post `
-Headers @{
"x-api-key" = $env:DEEPSEEK_API_KEY
"anthropic-version" = "2023-06-01"
"content-type" = "application/json"
} `
-Body $corpoID legado (deepseek-chat, deepseek-reasoner) ou o [1m] foi mastigado pelo PowerShell por falta de aspas. Confira:
$env:ANTHROPIC_MODELTem que sair exatamente deepseek-v4-pro[1m].
Confirme CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK = "1". Atrás de proxy corporativo, defina $env:HTTPS_PROXY antes das outras variáveis.
Git for Windows não instalado ou fora do PATH. Verifique com git --version.
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.
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: a qualidade do agente em tarefas longas multi-arquivo é diferente da do Opus/Sonnet. Pra C++ de Unreal com muito contexto de header, teste 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.
set ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
set ANTHROPIC_AUTH_TOKEN=sk-SUA_KEY
set ANTHROPIC_API_KEY=sk-SUA_KEY
set ANTHROPIC_MODEL=deepseek-v4-pro[1m]
set ANTHROPIC_DEFAULT_OPUS_MODEL=deepseek-v4-pro[1m]
set ANTHROPIC_DEFAULT_SONNET_MODEL=deepseek-v4-pro[1m]
set ANTHROPIC_DEFAULT_HAIKU_MODEL=deepseek-v4-flash
set CLAUDE_CODE_SUBAGENT_MODEL=deepseek-v4-flash
set CLAUDE_CODE_EFFORT_LEVEL=max
set CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK=1
claudeNo set do CMD não use aspas — elas viram parte do valor.
Pra virar reutilizável, salve como ccds.cmd numa pasta do PATH e termine com claude %*.
Se você já usa WSL, a experiência é melhor (ferramentas Unix nativas, menos atrito de PATH). Nesse caso siga a versão macOS/zsh do guia — a única diferença é que o ~/.zshrc pode ser ~/.bashrc, e o Keychain vira:
echo 'export DEEPSEEK_API_KEY="sk-SUA_KEY"' >> ~/.bashrc
chmod 600 ~/.bashrcPra trocar de provedor no meio da sessão (DeepSeek → Ollama local → OpenRouter):
npm install -g @musistudio/claude-code-router
ccr codeConfig em %USERPROFILE%\.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.
- DeepSeek — Integrate with Claude Code: https://api-docs.deepseek.com/quick_start/agent_integrations/claude_code/
- DeepSeek — Anthropic API guide: https://api-docs.deepseek.com/guides/anthropic_api
- claude-code-router: https://github.com/musistudio/claude-code-router