Rust, any Wasm language, Node, Python or a plain process, behind one manifest and one set of grants. The others pick the language for you.
Orrery next to Pi, Codex, Claude Code and OpenCode.
Five good agent harnesses. This is where they differ, feature by feature, so you can pick the one that fits how you work.
Sources: Pi · Codex CLI · Codex app · Claude Code · Claude Code deployment · OpenCode permissions · OpenCode plugins. Orrery's row comes from its own repository. "Not yet" and "not published yet" mean it is planned, not shipped.
Yours, down to the parts.
The built-in harness is made of the same parts you get: providers, tools, memory, permissions, commands, the UI. The loop itself is next.
Every command writes a key in config.toml, and that key alone does the same thing. Nothing hidden to carry between machines.
Anthropic, OpenAI, Gemini or a model on your own machine, all behind the same allow, ask or deny rules.
Pick Orrery when the harness matters.
Orrery
Choose it when the harness itself matters: you want to shape it, run any model in it, and keep it light.
- Fast and lightOne native Rust binary. No Node or Python runtime to start or to keep in memory.
- Extensible at every levelProviders, tools, memory, permissions, commands, the UI, in any language.
- One standard UIThe whole screen goes over AG-UI, so the TUI, the ADE, the web or your own client draw the same thing.
- Any model, one policyBuilt-in providers or your own, all behind the same allow, ask and deny rules.
Pi
You want a tiny TypeScript core and a large package ecosystem around it.
Runs on Node. Extensions in TypeScript only; no permission prompts or sub-agents built in.
Codex
You use OpenAI models and plan to stay with them.
Other providers only through config; you extend it with skills, plugins and MCP.
Claude Code
You only use Claude models, and want them in the terminal, IDE, desktop, web and phone.
Claude models only, under a proprietary licence.
OpenCode
You want many providers and language servers built in, in TypeScript.
Most tools are allowed by default; plugins in JavaScript or TypeScript.