A DeepSeek tem CLI próprio?
Respostadsh21/09/2026
Sim — mas não é um CLI de chat clássico. O produto de terminal first-party da DeepSeek é o DeepSeek Harness, cujo comando é dsh: um agent harness open-source (licença MIT) mantido pela DeepSeek AI, com Web UI, modos one-shot, servidor ACP/SDK e TUI instalável por plugin.
O que responderam, em três camadas
- Oficial:
@deepseek-ai/dsh (DeepSeek Harness) — repo deepseek-ai/deepseek-harness, em developer preview
- Oficialmente suportado: usar a API da DeepSeek dentro de CLIs de terceiros — Claude Code, Codex, GitHub Copilot, OpenCode — porque a API é compatível com OpenAI e Anthropic
- Comunidade (não oficial): uma penca de
deepseek-cli no PyPI/GitHub e o dsc (deepseekcode, binário Go). Chamar esses de "o CLI do DeepSeek" é erro comum
Em uma frase: o CLI oficial da DeepSeek é o dsh (DeepSeek Harness) — um harness de agentes extensível, não um wrapper de chat.
O que é o DeepSeek Harness (dsh)?
HarnessOpen SourceMIT21/09/2026
É um agent harness: a camada que roda o agente em volta do modelo — sessões, ferramentas, permissões, plugins, protocolos de transporte e interfaces. Desenvolvido pela DeepSeek AI, é open-source sob MIT.
Arquitetura em uma linha
"Everything is a plugin", construído sobre o framework Cordis (o mesmo autor de Koishi), cujo paradigma é descrito no paper A Programming Paradigm for Spatiotemporal Composability. Na prática: Web UI, SDK, ACP e TUI são perfis de plugins, não binários separados.
O que o agente faz
- Lê e edita arquivos do workspace
- Executa comandos
- Delega trabalho (subagentes) e mantém um plano
- Pede aprovação em operações conforme a política de permissão ativa
Estágio do projeto
Developer preview: o README avisa explicitamente que
existirão breaking changes de compatibilidade. Antes de rodar, leia o
SAFETY.md. Ele executa comandos na sua máquina — trate como qualquer agente de código.
Números do projeto
- Repo:
github.com/deepseek-ai/deepseek-harness (MIT)
- Pacote npm:
@deepseek-ai/dsh — "o único launcher Node suportado"
- Docs:
deepseek-harness.github.io/deepseek-harness
- Runtime Python: a wheel empacota o mesmo comando
Quais são os modos de entrada do comando dsh?
CLIEntry modesProfiles21/09/2026
O dsh tem uma gramática própria de argumentos: ele parseia apenas as suas flags e repassa todo o resto para o perfil que o launcher inicializa. Os modos suportados são:
| Comando | Para que serve |
dsh <nome> / dsh --profile <nome> | Sobe o perfil nomeado em $DSH_HOME/profiles/<nome> |
dsh --profile <nome> --from-default-profile <template> | Cria um perfil custom a partir de um template shipped e já boota |
dsh --profile acp | Serve clientes de automação via ACP stdio até desconectar |
dsh --profile headless "job" | Roda uma sessão persistida, imprime a resposta final e sai (one-shot) |
dsh --profile sdk | Serve clientes SDK via JSON-RPC stdio até shutdown |
dsh --profile sdk-minimal | Serve clientes SDK com a árvore de agente mínima standalone |
dsh web | Sobe o perfil Web |
dsh plugin --profile <nome> <args pnpm> | Gerencia plugins do perfil repassando para o pnpm dentro do diretório do perfil |
Passando argumentos para o app
O primeiro token que o launcher não reconhece marca o início dos argumentos do app. Ou seja: --help depois de --profile web é o help do app web, não do launcher.
dsh --profile web --port 8080 # --port é do app web
dsh --profile tui --resume <id> # --resume é do app de terminal (perfil instalado)
dsh --profile headless "run the tests"
dsh --help # esse sim é o help do launcher
Como inspecionar sem bootar
--dump-default-config e --dump-config mostram a árvore de configuração composta
- O diretório de invocação vira o workspace root default
- Os perfis
web, headless, sdk, sdk-minimal e acp se auto-inicializam no primeiro uso
- O nome
desktop é reservado ao perfil do Electron — o CLI rejeita boot/config/plugin nele
Como instalar e rodar o dsh?
Setupnpmpnpm21/09/2026
Do npm (mais rápido)
Instale o Node.js e rode direto com npx:
npx @deepseek-ai/dsh web
Isso sobe a Web UI em http://127.0.0.1:3080 por padrão e abre no browser. Em sessão SSH ele apenas imprime a URL (o cliente SSH/editor cuida do forward). Passe --no-open para não abrir o browser automaticamente.
Do código-fonte
git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install
pnpm run build
pnpm dsh web
pnpm run build prepara os artefatos uma vez; pnpm dsh web usa os artefatos buildados sem rebuildar. Para desenvolvimento em TypeScript, pnpm dsh <args> roda a entry e repassa todos os argumentos.
Primeiro uso na Web UI
- Settings → Models: cole sua API key da DeepSeek e salve — a rota passa a valer na hora, sem restart
- Choose workspace: adicione o diretório do projeto (a UI não deixa compor sessão sem workspace selecionado)
- Mande a primeira task: "Summarize this repository and identify its main packages"
Outros caminhos
- Python SDK: a wheel do runtime empacota o mesmo comando; o perfil SDK default é
sdk e o exemplo mínimo usa sdk-minimal
- One-shot no CI:
dsh --profile headless "seu job"
- Integração com editores/agentes: perfil
acp via stdio
Perfis, bundles e plugins: como o dsh se compõe
CordisPlugin system21/09/2026
Um perfil é um diretório com dois arquivos: um package.json (dependências de plugins out-of-tree + o manifesto dsh.profile com a lista ordenada de bundles) e um cordis.patch.yml (a camada de overrides do usuário).
A ordem de composição da árvore
A árvore compõe sobre uma raiz vazia, nesta ordem exata:
- O patch de cada bundle, na ordem de
dsh.profile.bundles
- O
cordis.patch.yml do perfil
- O
$DSH_HOME/cordis.patch.yml (nível home)
- Os overlays de
--patch
Bundles shipped
@deepseek-ai/dsh-base — base do agente
@deepseek-ai/dsh-web-app — a Web UI
@deepseek-ai/dsh-headless — execução one-shot
@deepseek-ai/dsh-sdk-app / dsh-sdk-minimal — servidores SDK
@deepseek-ai/dsh-acp-app — servidor ACP
Bundles citados na lista resolvem primeiro da instalação do dsh e depois do node_modules do próprio perfil, onde o pnpm instala plugins de terceiros.
Detalhes que economizam dor de cabeça
- HMR: com
dsh-hmr habilitado no YAML, o perfil observa o manifesto e os patch files e recompõe tudo num reload serializado; sem HMR, mudanças valem no restart
- Overlays opcionais em
config/examples/: webhooks de review do GitHub, Schedule session-local, servidores MCP de memória e ferramentas Cordis em runtime — nunca vêm em perfil default
- Lock de escrita: o Plugin Manager compartilha operações de pacote e o lock de escrita do perfil com
dsh plugin
- Publicando plugins: adicione o tópico
dsh-plugin no repositório para ficar descobrível
Alternativa oficial: usar a API da DeepSeek dentro de CLIs de terceiros
Claude CodeCodexOpenCode21/09/2026
A doc da DeepSeek é explícita: a API é compatível com os formatos OpenAI e Anthropic, então você pode plugá-la em Claude Code, GitHub Copilot, OpenCode e companhia — sem escrever código. É o caminho mais maduro hoje se você só quer um agente de terminal usando os modelos da DeepSeek.
Endpoints e modelos
| Item | Valor |
| base_url (OpenAI) | https://api.deepseek.com |
| base_url (Anthropic) | https://api.deepseek.com/anthropic |
| modelos | deepseek-flash, deepseek-v4-pro |
| API key | platform.deepseek.com/api_keys |
Os nomes legados deepseek-v4-flash e deepseek-v4-flash-vision-exp ainda são aceitos, mas os modelos correspondentes foram aposentados — as requisições são servidas pelo DeepSeek-V4.1-Flash e cobradas ao preço do Flash.
Claude Code apontado para a DeepSeek
Se você já tem o Claude Code instalado, basta exportar as variáveis:
export ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
export ANTHROPIC_AUTH_TOKEN=<sua DeepSeek API Key>
export ANTHROPIC_MODEL=deepseek-flash[1m]
export ANTHROPIC_DEFAULT_OPUS_MODEL=deepseek-flash[1m]
export ANTHROPIC_DEFAULT_SONNET_MODEL=deepseek-flash[1m]
export ANTHROPIC_DEFAULT_HAIKU_MODEL=deepseek-flash
export CLAUDE_CODE_SUBAGENT_MODEL=deepseek-flash
export CLAUDE_CODE_EFFORT_LEVEL=max
export CLAUDE_CODE_AUTO_COMPACT_WINDOW=786432
Depois é só entrar no projeto e rodar claude. O sufixo [1m] seleciona a janela de contexto de 1M (o modelo da tabela acima tem 1M de contexto).
Mapeamento de nomes de modelo
- Modelos começando com
claude-opus → deepseek-v4-pro (cobrado ao preço do V4 Pro)
- Modelos começando com
claude-haiku ou claude-sonnet → deepseek-flash
Web search
A API da DeepSeek suporta nativamente a ferramenta de Web Search do Claude Code. Quando o modelo julga que a pergunta precisa de busca, ele invoca a tool e a busca acontece via API da DeepSeek. Atenção: isso gera requisições LLM adicionais para resumir o conteúdo recuperado — logo, tokens extras.
Bônus: pelo mapeamento de nomes, também dá para apontar o modo desenvolvedor do Claude Desktop para a DeepSeek trocando apenas base_url e api_key — o que contorna as restrições de nome de modelo do app.
E os deepseek-cli que aparecem no Google? São oficiais?
Não oficiaisArmadilha21/09/2026
Não. A busca por "DeepSeek CLI" devolve majoritariamente projetos de terceiros que parecem oficiais pelo nome. Vale saber diferenciar:
| Projeto | O que é | Oficial? |
@deepseek-ai/dsh | DeepSeek Harness — agent harness com Web UI, SDK, ACP e TUI por plugin | Sim, DeepSeek AI (MIT) |
| PierrunoYT/deepseek-cli | CLI em Python (PyPI deepseek-cli) com REPL, modo thinking e presets de temperatura | Não — comunidade |
| holasoymalva/deepseek-cli | Assistente de código em linha de comando sobre os modelos DeepSeek Coder | Não — comunidade |
deepseekcode (dsc) | Agente de terminal em binário Go único, com TUI, modo one-shot e sessões em SQLite | Não — comunidade |
Detalhe interessante dos CLIs comunitários
Vários já aproveitam a compatibilidade Anthropic da API da DeepSeek: é uma propriedade do serviço, não do CLI — o que significa que você pode apontar ferramentas como o Claude Code para lá, como visto na aba anterior.
Cuidado com o nome: nada impede que um projeto comunitário adote um nome que pareça first-party. Para saber se algo é oficial, confira se está sob a organização deepseek-ai no GitHub ou se é referenciado na doc oficial em api-docs.deepseek.com.