Skip to content

Instantly share code, notes, and snippets.

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

  • Save zr0n/041475b91f69d4c18e497e0cb08f488f to your computer and use it in GitHub Desktop.

Select an option

Save zr0n/041475b91f69d4c18e497e0cb08f488f to your computer and use it in GitHub Desktop.
ClaudeSeek - Claude with deep seek (windows version)

Claude Code apontado pro DeepSeek — passo a passo (Windows)

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.


1. Pré-requisitos

Node.js 18+

node --version

Se não tiver:

winget install OpenJS.NodeJS.LTS

Feche e reabra o PowerShell depois de instalar, senão o PATH não atualiza.

Git for Windows

Obrigatório — o Claude Code usa ferramentas Unix que vêm no pacote.

winget install Git.Git

API Key da DeepSeek

Gere em https://platform.deepseek.com/api_keys e coloque crédito na conta. Sem saldo, a API devolve erro de insufficient balance.


2. Instalar o Claude Code

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

Se 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ário

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 (sessão atual)

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.

O que cada variável faz

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).


4. Rodar

cd C:\dev\HelloTeloAI
claude

Dentro da sessão:

/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

Duas abordagens. A segunda é a recomendada.

5a. Variáveis de usuário (afeta tudo, sempre)

[Environment]::SetEnvironmentVariable("ANTHROPIC_BASE_URL", "https://api.deepseek.com/anthropic", "User")
[Environment]::SetEnvironmentVariable("ANTHROPIC_MODEL", "deepseek-v4-pro[1m]", "User")
# ...e assim por diante

Funciona, mas você perde o Claude Code com modelos da Anthropic. Só faz sentido se for migrar de vez.

5b. Comando separado no perfil do PowerShell (recomendado)

Abra o perfil:

if (!(Test-Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }
notepad $PROFILE

Cole:

# 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:

. $PROFILE

Agora claude = Anthropic, ccds = DeepSeek.

Guardar a key fora do script

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 -AsPlainText

Se a política de execução bloquear o perfil: Set-ExecutionPolicy -Scope CurrentUser RemoteSigned


6. Problemas comuns

/status mostra a Anthropic, não a DeepSeek

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 40

No Windows a credencial também pode estar no Gerenciador de Credenciais como Claude Code-credentials:

cmdkey /list | Select-String "Claude"

Erro 401 / authentication_error

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 $corpo

model_not_found

ID legado (deepseek-chat, deepseek-reasoner) ou o [1m] foi mastigado pelo PowerShell por falta de aspas. Confira:

$env:ANTHROPIC_MODEL

Tem que sair exatamente deepseek-v4-pro[1m].

Requests travando ou timeout

Confirme CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK = "1". Atrás de proxy corporativo, defina $env:HTTPS_PROXY antes das outras variáveis.

claude abre mas as ferramentas de arquivo falham

Git for Windows não instalado ou fora do PATH. Verifique com git --version.

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: 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.


8. Alternativas de shell

CMD (sessão atual)

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
claude

No 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 %*.

WSL 2

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 ~/.bashrc

9. Alternativa: claude-code-router

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

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

Config 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.


Fontes

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