People compare coding agents by model, but two agents on the same model can behave very differently. The difference is the harness.
What a harness is
A harness is everything around the model:
- The loop: call the model, run the tool calls it asks for, feed the results back, decide when to stop.
- Tools: shell, file edits, search, a browser, a phone. Each has a contract the model has to follow.
- Permissions: what runs without asking, what needs approval, what is never allowed.
- Context: what the model sees each turn, what gets summarised away, and what survives a restart.
- The interface: how a person steers it, interrupts it and reviews what it did.
Codex CLI, Claude Code and Pi are harnesses. So is anything that wraps a model to do work over many steps.
Harnesses I've ported and built
- Agents on phones: an agent that drives an iPhone over USB, and Pi's agent loop inside an iOS app Public plugin / private
- A neural bus: agents messaging each other through a herdr daemon, used to run multi-agent builds Private
- Hermes Agent Mobile: an Android client for a running Hermes agent over Tailscale Public
- Codex-App-Linux: the macOS Codex desktop app converted into a runnable Linux Electron app, with phone pairing and in-app browser use Public
- perf-hints: Jeff Dean and Sanjay Ghemawat's Performance Hints as an agent plugin Public
- Agent-0: a Claude Code plugin that runs as a kernel, with
/procstate, syscalls and a scheduler for Claude, Codex and OpenCode workers Private - A meta-orchestrator controlling several opencode agents; Codex CLI on any provider Private
What porting a harness teaches
- The contract is in the details. Porting Codex's desktop app meant rebuilding native modules, stubbing macOS-only dependencies and registering URL callbacks, because the agent's phone pairing and browser use depend on desktop pieces nobody documents.
- Permissions are product decisions. Every harness answers "what may run without asking?" differently, and that answer shapes behaviour more than most prompts.
- Long sessions break things. Context limits, restarts and resumed work are where agents fail in practice, and where a harness either helps or hides the problem.
What you can buy
Environments that test agents at the harness level, built to your spec:
- tasks that exercise tool contracts, permission prompts and long, resumable sessions;
- graders that read the tool-call trace, not just the final file;
- runs across several harnesses on the same task, so you can see where the harness, not the model, made the difference.
FAQ
What is an agent harness?
The software around a language model that turns it into an agent: the loop that calls the model and runs its tool calls, the tools themselves, permissions, context management and the interface a person uses to steer it.
What is the difference between a harness and a model?
The model produces the next message or tool call. The harness decides which tools exist, what runs without approval, what context the model sees, and when the work stops. The same model can behave very differently in two harnesses.
Is Pi an agent harness?
Yes. Pi is a coding-agent harness in the same family as Codex CLI and Claude Code: it runs the loop, the tools and the session around a model. I use it alongside them, and I ported its agent loop into an iPhone app (Pocket Pi).
Is Codex-App-Linux official?
No. It is an unofficial port that converts the official macOS Codex app into a Linux Electron app on your own machine. It does not ship OpenAI's binaries.
Can you build environments that test harnesses?
Yes. I build tasks and graders around tool contracts, permissions and long sessions, and can run the same task across several harnesses.