Choose Your Coding Agent
Pick a harness by working backwards from the subscription that is allowed to drive it, and know which features you lose when you switch.
The one line: your subscription decides your harness, not the other way around — an Anthropic plan runs only inside Anthropic's own harness, while a ChatGPT plan drives almost anything.
The four harnesses worth knowing
A harness is the program that holds the loop: it takes your prompt, calls a model, runs tools, edits files. The model is rented by the token. The harness is where your rules, skills, hooks and habits live, so switching it costs more than switching models.
Claude Code is Anthropic's CLI. Codex is OpenAI's, shipping as a CLI and an app, now folded into the ChatGPT product line — you want the code half of it. OpenCode is open source and the best terminal rendering in the group. Pi is the minimal one: almost nothing is built in, and you extend it by telling the agent what you want. It writes the extension, changes the UI, adds capabilities. I have one building a Pi extension that renders diffs for the Effect library visually, so a reviewer sees the shape of a layer or pipe change instead of reading line by line. You get a core, and everything above it is yours.
| Harness | What it is | What pays for it | Standout | Catch |
|---|---|---|---|---|
| Claude Code | Anthropic CLI | Anthropic subscription (Pro, Max tiers) | Dynamic workflows; strongest UI work | Subscription is locked to this harness |
| Codex | OpenAI CLI + app under ChatGPT | ChatGPT subscription, also usable in other harnesses | Subscription travels; skills and hooks now ship here too | Different model behaviour to learn |
| OpenCode | Open source, multi-provider | Own Zen and Go plans, or your API keys | Best terminal UI; provider-agnostic | Go covers open-weight models only; frontier models go through Zen credits |
| Pi | Minimal open core, agent-extensible | Any API credits or a ChatGPT subscription | You extend it by asking the agent | You build most of what others ship |
The asymmetry that decides it
An Anthropic subscription works only with Anthropic's harness. To drive Claude models from Pi or OpenCode you pay API credits, and for real daily volume that costs far more than the subscription covering the same work. A ChatGPT subscription is the opposite: it drives third-party harnesses natively, and there are routes to use it inside Claude Code as well.
Open-weight models such as Qwen or GLM come through credits at OpenRouter, Groq or xAI. OpenCode sells a flat Go plan over open-weight models and pay-as-you-go Zen credits that also reach frontier models.
Decide the model family first, check what its plan is allowed to drive, then pick the harness. The other order puts you on API pricing by accident.
My own choice: Claude Code on the top Max tier, roughly $200 a month as of writing, default Opus at high effort. If you want flexibility across models instead, my recommendation is Pi with a Codex subscription plus OpenRouter credits for open-weight models: one subscription drives the harness, and everything else stays cheap.
Model quirks are real work
Anthropic models are clearly the strongest at UI and front-end work, in my experience — the others hold up everywhere else and are weak exactly there. Learning your model's habits is part of the cost of picking it.
What does not travel
Dynamic workflows exist only in Claude Code. The agent writes a JavaScript script that a runtime executes in the background, spawning subagents with agent() and fanning out with parallel(), up to 16 concurrent and 1,000 per run, on paid plans. Trigger it with the ultracode keyword or claude --effort ultracode. Neither Codex nor OpenCode ships the feature. I ported it to Pi as pi-ultracode, which is the escape hatch if you pick a different harness. I lean on it for almost everything, which is a large part of why I stay put. Dynamic Workflows covers the mechanics.
Most other machinery does travel. Skills are an open standard that other agents implement. Codex copied the hook design closely, down to ~/.codex/hooks.json and the same event names. Rules files are the one file to plan for: Claude Code reads CLAUDE.md, not AGENTS.md, while AGENTS.md is read by Codex, OpenCode, Cursor, Zed and most of the rest. Keep the content in AGENTS.md and bridge it, either with an @AGENTS.md import at the top of CLAUDE.md or a symlink:
ln -s AGENTS.md CLAUDE.mdThat one line is most of your switching cost. Rules Files and Scope goes deeper.
On Cursor
One person's experience, not a verdict: Cursor lost my subscription and then my account, I could not log back in, support did not resolve it, and I blocked the card to stop the charges. Separately, SpaceX, which merged with xAI, agreed in June 2026 to buy Cursor, and Cursor ships a strong Grok model — close behind the Opus model I use, in my testing. If that model is what you want, the route exists. But xAI subscription is avalible on Pi too.
What to do
- Decide the model family you want to code with before you look at any harness.
- Check what your plan is allowed to drive: Anthropic locks to Claude Code, ChatGPT works everywhere.
- If you want depth over breadth, run Claude Code on a Max tier and learn its workflow features.
- If you want model flexibility, run Pi with a Codex subscription and OpenRouter credits for open-weight models.
- Put your rules in
AGENTS.mdand symlinkCLAUDE.mdto it before you write a line of them. - Run one real task through two harnesses on the same repo, and compare the diffs, not the demos.