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. An Anthropic plan runs only inside Anthropic's own harness; 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. Models are rented by the token; your rules, skills, hooks and habits live in the harness, so switching it costs more than switching models.
Pi is the outlier of the four: it ships almost nothing built in, so you tell the agent what you want and it writes the extension. I have an agent building a Pi extension that draws Effect diffs, so a reviewer sees the shape of a layer or pipe change instead of reading it line by line.
| 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 locked to this harness |
| Codex | OpenAI CLI + app under ChatGPT | ChatGPT subscription, usable in other harnesses too | Subscription travels; skills and hooks 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 is open-weight only; frontier models need 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. Driving Claude models from Pi or OpenCode means API credits, which at daily volume cost far more than the subscription covering the same work. A ChatGPT subscription drives third-party harnesses natively, and there are routes to use it inside Claude Code too.
Open-weight models such as Qwen or GLM come through credits at OpenRouter, Groq or xAI. Decide the model family first, check what its plan can drive, then pick the harness. The other order puts you on API pricing by accident.
I run Claude Code on the top Max tier, roughly $200 a month, default Opus at high effort. For flexibility, run Pi with a Codex subscription plus OpenRouter credits for open-weight models.
Model quirks are real work
Anthropic models are clearly 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 runs 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. Codex and OpenCode do not ship it. I ported it to Pi as pi-ultracode, the escape hatch if you pick a different harness. I use it for almost everything, which is much of why I stay put. Dynamic Workflows covers the mechanics.
Skills are an open standard other agents implement, and Codex copied the hook design down to ~/.codex/hooks.json and the same event names. Rules files are the one thing 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, 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, 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 you want that model, an xAI subscription works on Pi too.
What to do
Put your rules in AGENTS.md and symlink CLAUDE.md to it before you write any. Then run one real task through two harnesses on the same repo, and compare the diffs, not the demos.