21 · 6 harnesses

DeepSeek Harness against the others

They are all extensible. Only in this one can you replace the piece that decides what the agent does.

The comparison is against Claude Code, Codex CLI, Pi, OpenHands and opencode. Every data point is verified against each project’s repository or official documentation, with a date, because four of the six changed organisation, name or architecture in the last year.

This is not a feature table. The question that orders it is a different one: what do you actually control of your agent.

Dimension DeepSeek Harness (dsh) DeepSeek AI Claude Code Anthropic Codex CLI OpenAI Pi Earendil OpenHands (Agent Canvas) OpenHands opencode Anomaly
Replaceable core? The axis that actually sets dsh apart yes no no no partial partial
License MIT Proprietary Apache-2.0 MIT MIT MIT
Model agnostic yes no no yes yes yes
True self-hosting yes partial partial yes yes yes
Verified against each project's repository or official documentation on 2026-08-14. The axes that do not fit in a cell, such as isolation or traceability, are covered in the text.

Where the real difference is

All six are extensible. They all accept new tools and several have well designed extension systems. The difference is not whether they can be extended, but where extension ends and the untouchable begins.

In three of them the agent loop is part of the product. It can be intercepted at the points they offer, which are many and well documented, but it cannot be replaced.

OpenHands comes at it from another angle: its main piece is no longer the agent but a control centre that orchestrates third party agents, including those from Anthropic, OpenAI and Google. The agent genuinely is interchangeable. What is not replaceable piece by piece is the control centre.

opencode also comes close, with an architecture where the terminal is only one of the possible clients. But the loop is still not a line of configuration.

Pi comes at it from minimalism. Its runtime is a library anyone can embed to build their own agent, and its command line interface is extended from within using TypeScript modules. What there is not is replacement by configuration: extending is not replacing.

In DeepSeek Harness it is. There the loop is one more plugin of the running product, with the same standing as a provider adapter.

Where each one wins

  • Claude Code The largest surface By a distance. And a documented six level isolation ladder.
  • Codex CLI The most solid isolation Built on operating system mechanisms.
  • Pi The minimal harness A small core meant to be read end to end, self extensible from inside the session itself, and the base others build their products on.
  • OpenHands The most self-hostable With recipes down to Kubernetes.
  • opencode The most adopted By far, in the open field. It connects to more than seventy model providers.
  • DeepSeek Harness The only one with no core The agent loop is one more plugin, replaceable by configuration.

Two honest ways to isolate

DeepSeek Harness and Pi represent the two opposite philosophies, and both are documented without decoration.

  • DeepSeek Harness Fail closed If it cannot guarantee confinement, it does not run. The degree of isolation is a fact the system reports, not an assumption.
  • Pi No permissions, and it says so It includes no permission system. It points you to containerising from the outside with a micro VM, with Docker or with a policy sandbox.

Pi also states that it deliberately leaves out other things its competitors include, MCP among them.

Neither of them pretends. That is the part that matters, because the problem is not choosing one philosophy or the other, it is finding out late that the one you chose did not cover what you thought.

When not to choose DeepSeek Harness

If you need something stable this week, this is not it.

If you want an agent that works well and you are not going to touch its architecture, any of the other five gets you there sooner and with a shallower curve.

If nobody on your team fancies reading a whole plugin framework, the flexibility turns into cost with nothing in return.

When to choose it

If you have hit the limits of another harness and ended up forking it.

If you have to answer to someone for what an agent does, because the traceability of the log has no equivalent in the comparison.

If you are going to serve the model from your own infrastructure and want the agent layer to be just as much yours.