DeepSeek Harness vs Codex CLI
Codex CLI is OpenAI's open terminal agent; DeepSeek Harness is an open CLI whose entire runtime is a stack of replaceable plugin patches.
This is the closest pair in the comparison set: both open, both terminal-first, both run against a model API you configure.
Codex CLI installs from npm as @openai/codex. DeepSeek Harness installs as @deepseek-ai/dsh and requires Node.js 24.9.0 or newer.
| DeepSeek Harness | Codex CLI | |
|---|---|---|
| Install | npm install -g @deepseek-ai/dsh | npm install -g @openai/codex |
| Vendor | DeepSeek | OpenAI |
| Runtime shape | Launcher + profile patches; every capability is a seam | A single CLI application |
| Surfaces | Terminal, browser UI, headless, ACP, SDK | Terminal and IDE integrations |
| Extending | npm plugins in a profile; override any seam | Config file, MCP servers, project instructions |
| Inspect before boot | --dump-config, --dump-config-schema | Configuration is read at start-up |
Pick DeepSeek Harness when
You want to replace pieces of the runtime — the sandbox backend, the shell executor, the compaction strategy — or embed the agent in another program through ACP or the SDK.
Pick Codex CLI when
You are already in OpenAI's ecosystem, want one binary-shaped tool, and prefer configuring behaviour over replacing internals.
The honest part
What DSH does worse: it is on release candidates, its documentation lives in the repository rather than a docs site, a plugin built for another dsh version is skipped at boot, and the plugin ecosystem is small. If you want a product with a support contract and a decade of tutorials, none of these three comparisons will talk you into DSH.
Common questions
Are both open source?
Both publish source. Codex CLI is OpenAI's repository; DeepSeek Harness ships as npm packages under @deepseek-ai/, including every seam.
Do they use the same model?
No. Each points at the providers you configure; DSH resolves them through provider plugins.
Can I move sessions between them?
Not directly. DSH stores sessions as session*.jsonl.zstd in $DSH_HOME; the formats are unrelated.