DeepSeek Harness, Claude Code and Codex CLI can all run an agent on your own machine that reads files, runs commands and sends each model turn to an API, but they come from three vendors and speak different protocols. DeepSeek Harness (dsh) is DeepSeek's open-source agent harness: plugin-based, with a local Web UI and a desktop app, for everyday tasks as well as code, and it reaches models through providers you configure in any of three API protocols. Claude Code is Anthropic's agentic coding tool and speaks Anthropic Messages. Codex CLI is OpenAI's coding agent that runs locally and speaks the Responses API. Through Router One, one key covers all three: each tool points at the endpoint its own protocol uses, and every request the gateway sends to a model lands in the same account (wallet or plan quota) and the same Dashboard → Logs (a streamed request that failed before any output may have no record).
Choosing between the two vendor CLIs? Claude Code vs Codex CLI covers autonomy versus sandboxing, and OpenCode vs Claude Code vs Codex CLI adds an open-source agent tied to no vendor. This post covers the other corner: DeepSeek's own agent next to the two, and how all three share one gateway. Each vendor fact below comes from that vendor's own README, docs or license file (checked 2026-10-19); the full setup for each tool is in its guide, linked from each section.
Side by side
| DeepSeek Harness (dsh) | Claude Code | Codex CLI | |
|---|---|---|---|
| Vendor and what it is | DeepSeek; an open-source, plugin-based agent harness for everyday tasks, coding or your own harness, in preview | Anthropic; an agentic coding tool | OpenAI; a coding agent that runs locally on your computer |
| Where it runs | A local Web UI started with npx @deepseek-ai/dsh web, and a desktop app for macOS (Apple silicon) and Windows (64-bit) | The terminal, IDE extensions, a desktop app and the web | The terminal, plus IDE extensions, a desktop app and the cloud-based Codex Web |
| License | MIT | Proprietary: © Anthropic PBC, use subject to Anthropic's Commercial Terms of Service | Apache-2.0 |
| Protocol it speaks to Router One | One per provider: OpenAI Chat Completions, OpenAI Responses or Anthropic Messages | Anthropic Messages, selected by ANTHROPIC_BASE_URL | Responses: wire_api = "responses" is the only supported value |
| Router One base URL | https://api.router.one/v1 for both OpenAI protocols, https://api.router.one for Anthropic Messages | https://api.router.one (host root, no /v1) | https://api.router.one/v1 |
| Where the Router One key goes | The API key field of a Custom model API provider | ANTHROPIC_AUTH_TOKEN | The environment variable that env_key names |
| Models through Router One | Every chat model on a Chat Completions provider; on the other two protocols, the families each one serves | Claude-family models | GPT-family, DeepSeek and Grok chat models served natively on /v1/responses |
The protocol row decides the model row. A Chat Completions provider in dsh reaches every chat model Router One lists — Claude, GPT, Gemini, Grok and DeepSeek — because /v1/chat/completions serves them all; Claude Code stays on Claude-family IDs, and Codex CLI reaches the GPT-family, DeepSeek and Grok chat IDs Router One serves natively on /v1/responses.
DeepSeek Harness: DeepSeek's own agent, three protocols to choose from
Per its README (checked 2026-10-19), DeepSeek Harness is an open-source agent harness developed by DeepSeek, built on an everything-is-a-plugin architecture and powered by Cordis. DeepSeek's site (deepseek.com, checked the same day) pitches it for everyday tasks, coding or your own harness, says it is in public preview worldwide and offers desktop downloads for macOS (Apple silicon) and Windows (64-bit); the README calls it a developer preview and warns that there will be compatibility-breaking changes. From npm it runs as a local Web UI: npx @deepseek-ai/dsh web starts it at http://127.0.0.1:3080 by default. Per its Web UI guide, the agent reads and edits workspace files, runs commands, delegates work and keeps a plan, and the Web UI asks before operations that need approval under the active permission policy.
What sets it apart is how it connects to models. Per dsh's model configuration guide (checked 2026-10-19), the Custom model API card is for a relay, a company gateway, a self-hosted server or any provider absent from its installed catalog; the API protocol picker offers OpenAI Chat Completions, OpenAI Responses and Anthropic Messages, and a provider speaks one protocol, so a gateway that serves two needs two providers. Of the three tools, dsh is the only one not built around one vendor's wire format.
On Router One, a Custom model API provider on OpenAI Chat Completions with https://api.router.one/v1 and your key reaches every chat model in the catalog. Add a second provider on OpenAI Responses for GPT IDs: per OpenAI's GPT-6 guide (checked 2026-10-19), GPT-6 Astra and GPT-6.1 Sol take tool calls only on the Responses API, where Router One serves GPT models natively. Optionally add a third on Anthropic Messages with the host root https://api.router.one for Claude in its native format. Enter exact IDs from /models, such as anthropic/claude-sonnet-5, openai/gpt-6.1-sol or deepseek-v4.1-flash, all listed as of the 2026-10-19 catalog. The form, model discovery and reasoning-level settings are in the DeepSeek Harness guide, which covers the Web UI.
The gotcha: the DeepSeek card on Settings → Models holds a key for DeepSeek's own API, not a Router One key. Per dsh's docs, the DeepSeek card's model list starts from dsh's own DeepSeek catalog rather than from the endpoint its base URL points at, so put the Router One key in a Custom model API provider and use the IDs from /models.
Claude Code: Anthropic's coding agent on Anthropic Messages
Per Anthropic's Claude Code overview (checked 2026-10-19), Claude Code is an agentic coding tool that reads your codebase, edits files, runs commands and integrates with your development tools, available in the terminal, IDE extensions, a desktop app and the browser. It is not open source: the license file in its GitHub repository reads "© Anthropic PBC. All rights reserved.", with use subject to Anthropic's Commercial Terms of Service. To a gateway such as Router One, it speaks Anthropic Messages: per Anthropic's gateway docs, ANTHROPIC_BASE_URL points it at the gateway's /v1/messages, and ANTHROPIC_AUTH_TOKEN sends the credential as Authorization: Bearer. The same docs say Anthropic doesn't support routing Claude Code to non-Claude models through any gateway, so keep it on Claude-family IDs.
On Router One the CLI needs two variables: ANTHROPIC_BASE_URL=https://api.router.one, the host root without /v1 because Claude Code appends its own path, and ANTHROPIC_AUTH_TOKEN set to your Router One key. The one-click script writes both into the env block of ~/.claude/settings.json and checks the key with a one-token request. Per the same gateway docs, those settings are what the CLI reads: the VS Code extension checks the credential from its own claudeCode.environmentVariables setting, the desktop app reads gateway routing from its own third-party inference configuration rather than from ANTHROPIC_BASE_URL or settings.json, and cloud sessions on the web are not part of a gateway deployment. Which model Claude Code asks for by default, and which aliases a plan holder pins to stay on plan quota, change with Claude Code releases, so the Claude Code setup guide and Claude Code in China keep that list current.
The gotcha: per Anthropic's gateway docs, while a gateway credential variable is set, requests carry it in place of a saved claude.ai login, and the claude.ai subscription's usage limits don't apply to them; setting ANTHROPIC_BASE_URL alone leaves the saved login in charge. Per the same docs, when the env block of a settings file and a shell export set the same variable, the settings file wins, so if /status shows an unexpected base URL, check ~/.claude/settings.json first.
Codex CLI: OpenAI's local coding agent on the Responses API
Per its README (openai/codex, checked 2026-10-19), Codex CLI is a coding agent from OpenAI that runs locally on your computer; Codex also comes as IDE extensions, a desktop app and Codex Web, OpenAI's cloud-based agent, and the repository is licensed Apache-2.0. To a custom endpoint, it speaks one protocol: per Codex's configuration reference (checked the same day), a model provider's wire_api has one supported value, responses, which is also the default, and env_key names the environment variable that supplies the provider's API key.
On Router One that is one provider block in ~/.codex/config.toml (selected by a top-level model_provider line above the first table header): base_url = "https://api.router.one/v1", wire_api = "responses" and env_key naming the variable that holds your Router One key. The one-click script writes the file, persists the variable and checks the key. Codex then reaches the models Router One serves natively on /v1/responses: GPT-family, DeepSeek and Grok chat IDs. Codex cloud is the exception: per Codex's authentication docs (checked 2026-10-19), it requires signing in with ChatGPT. Which model line to write, and how plans and the wallet bill Codex's requests, are in Codex CLI in China and Codex and the Responses API.
The gotcha: the gateway refuses a Claude-family ID on /v1/responses with HTTP 400 before any model runs, because Router One serves Claude on /v1/messages and /v1/chat/completions; keep Claude work in Claude Code or on a dsh provider. And if Codex says a model "is not supported when using Codex with a ChatGPT account", the request went through Codex's ChatGPT sign-in rather than your provider block: see the model-not-supported fix.
One Router One key for all three
The same sk- key works in all three tools; what differs is where it goes and which endpoint receives it. What the gateway adds is the same for each:
- A hard cap per tool. Create one key per tool in Dashboard → API Keys and give each a
maxSpendcap. An agent sends a request for every model turn, including turns that only hand a tool result back, so a long task can bill many requests without further input from you; a key that reaches its cap returns HTTP 402 and stops, while the other keys keep working. - One log for three tools. Every request the gateway sends to a model is recorded in Dashboard → Logs with model, tokens, cost, status, total time and request ID (a streamed request that failed before any output may have no record); filter by API key to see one tool's spend.
- Same-model failover. When an upstream returns a retryable 5xx or a timeout, Router One may retry the request on another healthy route serving the same requested model. It never swaps in a different model, and it is not a zero-downtime guarantee.
- One wallet, optional plans. Requests bill per token from the wallet at each model page's posted rates, or from plan quota for the models each Pro, Max or Ultra tier lists on pricing.
From mainland China
In mainland China the hard part is not DeepSeek Harness itself but Claude and GPT: Claude Code and Codex CLI default to Anthropic's and OpenAI's services, which are unreliable from Chinese networks without a VPN and bill in ways that assume a foreign card, and dsh needs an endpoint it can reach before it can use either family. Router One's endpoints are directly reachable from mainland China with no VPN, so one key serves all three tools, and dsh's custom providers reach every chat model in the catalog. Top up with a card or Alipay through one hosted checkout, or with USDT/USDC on six chains (Tron, BSC, Ethereum, Polygon, Base, Arbitrum) — no US credit card required. Router One carries the model requests, not the tool downloads (the Claude Code and Codex one-click scripts install a missing tool from npm or the vendor's installer): dsh runs with npx from the npm registry or as a desktop download from deepseek.com, and the China setup pages cover the other two: Claude Code in China and Codex CLI in China.
FAQ
Is DeepSeek Harness like Claude Code? In shape, yes: both run an agent that reads and edits files and runs commands on your machine, sending each model turn to an API. They differ in vendor, license and protocol. Claude Code is Anthropic's coding tool, not open source, and speaks Anthropic Messages to a gateway such as Router One; DeepSeek Harness is DeepSeek's MIT-licensed, plugin-based harness, in preview, and each of its custom providers speaks OpenAI Chat Completions, OpenAI Responses or Anthropic Messages. Through Router One, Claude Code stays on Claude models, while dsh reaches every chat model in the catalog through its custom providers, with GPT IDs on a Responses provider and the rest on Chat Completions.
Is DeepSeek Harness the same as Codex? No. Codex CLI is OpenAI's Apache-2.0 coding agent, and a custom provider in Codex speaks only the Responses API (wire_api = "responses"). DeepSeek Harness is a separate, MIT-licensed project from DeepSeek whose providers can use any of three protocols. Both use https://api.router.one/v1 as the Router One base URL: Codex in a config.toml provider block that reads the key through env_key, dsh in a Custom model API provider on either OpenAI protocol.
Can I use Claude and GPT models in DeepSeek Harness? Yes, through a Custom model API provider. Router One serves every chat model on Chat Completions, so one provider with https://api.router.one/v1 and your key reaches Claude, GPT, Gemini, Grok and DeepSeek IDs from /models. Put GPT IDs on a second provider set to OpenAI Responses, and use the host root https://api.router.one with Anthropic Messages if you want Claude in its native format; the DeepSeek Harness guide has the full form.
How is DeepSeek Harness related to DeepSeek's models? DeepSeek Harness is the agent; a model is what it calls. Its Settings → Models page has a DeepSeek card for DeepSeek's own API, the third-party providers dsh ships with, and Custom model API providers for any gateway. On a Router One provider, the DeepSeek IDs in the catalog — deepseek-v4.1-flash and deepseek-v4-flash, listed as of the 2026-10-19 catalog — run on your Router One key like any other model; the DeepSeek card still needs a DeepSeek API key of its own.
Do I need three API keys or three subscriptions? One Router One key works in all three tools; separate keys give each tool its own maxSpend cap from the same wallet. No vendor subscription is needed for requests that run on a Router One key: per Anthropic's gateway docs, Claude Code sends a gateway credential in place of a claude.ai login, Codex's custom provider reads its key from the env_key variable, and dsh stores the key with the provider. Router One's own Pro, Max and Ultra plans are an optional flat monthly price; see pricing.
Does this work from mainland China? Yes. Router One is reachable from mainland China without a VPN, and each tool sends its model requests from your machine straight to api.router.one, so the settings are the same everywhere. Top up with a card or Alipay through one hosted checkout, or with USDT/USDC on six chains; Router One carries the model requests, not the tool downloads.
Next steps
- DeepSeek Harness on Router One: DeepSeek Harness guide
- Claude Code: Claude Code setup guide, or Claude Code in China
- Codex CLI: Codex and the Responses API, or Codex CLI in China
- More comparisons: Claude Code vs Codex CLI, OpenCode vs Claude Code vs Codex CLI and Goose vs OpenCode vs Qwen Code vs Aider
- Every coding tool on one gateway: AI coding tools; live models and plans: models and pricing
Create a key at router.one, give each tool its own capped key, and run the same task through all three.