2026-08-28 · Updated 2026-08-28 · Evidence 2026-08-28 · 9 min read

Coding-agent harness comparison

The one canonical, evidence-dated matrix comparing Cursor, Kiro, OpenCode, Pi, Claude Code, Codex, and YYLO: surface, model choice, repo-traveling instructions, durable records, fan-out, landing, license, and evaluation — with split verdicts stated plainly and uncovered combinations marked as gaps.

By Juno AI INC · comparison · harnesses · yylo

Evidence-dated comparison matrix

Verdicts reflect the matrix evidence reviewed 2026-08-28. They are direct picks per shared job, not an overall ranking.

DimensionYYLOCursorClaude CodeCodexKiroOpenCodePiEvidence verdict
Where you meet the agentNo front end of its own; shell commands dispatch installed agent CLIs and keep the recordsIDE first, then a terminal CLI and cloud agents on isolated VMsTerminal CLI first, ringed by IDE, desktop, web, and mobile surfacesA terminal CLI with editor integration; codex exec serves pipelinesOne harness behind IDE, CLI, web, and mobile, with specs as the spineTerminal first, with a desktop app and an IDE extension alongsideA single terminal interface in interactive, print, RPC, and SDK modesSplit
Who owns the model choiceNo model layer; model shorthands forward to whichever service the run dispatchesFrontier models selectable in-product; the Evals page scores each on CursorBenchClaude models by default; the CLI and IDE surfaces accept third-party providersOpenAI models behind a ChatGPT sign-inAnthropic Claude, open-weight models, or an Auto picker weighing quality, latency, and cost75+ LLM providers through Models.dev, local models included15+ providers and hundreds of models, switchable mid-sessionSplit
Instructions that travel with the repositoryAGENTS.md and tracked skills arrive by checkout; orchestration copies stay out of product history.cursor/rules .mdc files plus .cursor/skills and .agents/skills rootsCLAUDE.md files concatenated up the tree, plus .claude/skillsAGENTS.md written by /init, plus skills and pluginsSteering markdown and AGENTS.md carry conventions with the repoAGENTS.md and skill discovery across its surfacesSkills and AGENTS.md files on a deliberately minimal system promptSplit
Records that outlive the sessionLedger entries bind intent, status, response, and landing commit into Git historyRun history lives inside Cursor; the rules files are what the repo keepsSessions and memory files per project; subagent results fold into the sessionGit checkpoints bracket a task so you can revert, not so you can auditSpecs and steering persist as files; session history stays in Kiro's storeSessions can be listed, exported to JSON, and shared as linksEvery session auto-saves as a JSONL tree you can re-enter and branchYYLO
Running many agents at onceOne worktree per task, cut from a recorded exact base, under an explicit capCloud agents on isolated VMs; the docs set no ceiling on the parallel countSubagents hold their own context windows; background agents span sessionsDelegation to specialized agents inside one terminal sessionUp to 10 cloud sessions at once, plus concurrent tasks inside each specMulti-session starts several agents over one shared checkoutNo sub-agents by design; tmux-spawned instances coordinate from the layer aboveSplit
Landing finished work into shared historyA serialized queue advances each target by the exact SHA it expectedCloud agents push a branch for handoff; your normal review finishes itA built-in review reads changes without touching the working treeCloud sessions deliver back through your source provider as a pull requestA finished session leaves a working tree; no landing arbiter is documentedCoincident finishes have no shipped arbiter; the last tree state standsYYLO
Source and licensePublic repositories; the CLI repo still carried no license file at the 2026-08-28 checkNo public source repository on the surfaces fetched for this pagenpm license defers to the README; none detected in the public repoApache-2.0, on the npm package and in the openai/codex repositoryA public GitHub repository is linked; its API reports no licenseMIT on the anomalyco/opencode repositoryMIT on npm for @earendil-works/pi-coding-agentSplit
Evidence that the work was any goodTyped receipts, policy-picked finish checks, and a separate longitudinal benchmarkCursorBench scores agents on ambiguous multi-file tasks from real sessionsA dedicated review returns prioritized findings before you commitProperty-based tests assert rules that must hold across all inputsYYLO

A dash (—) marks combinations the dated evidence matrix does not cover; no value is inferred for them.

Claim sources

public_source
dated public sources cited at authoring time
package_facts
frontend/generated/package-facts.json (generated product truth; never hand-edited)
seo_corpus_2026_08_26
frontend/docs/seo/evidence/seo-input-inventory.json (DataForSEO estimates from the 2026-08-26 competitor exports; competition is paid advertiser competition, never organic difficulty)

Every "X versus Y" question about coding-agent tools on this hub now has one place to land, and this is it. The matrix below scores seven candidates across eight dimensions, dated 2026-08-28, so that a reader holding three tabs open can close two of them. One honesty note belongs above the fold: six of the seven columns are harnesses in the sense the harness boundary guide defines — the runtime that assembles prompts, exposes tools, and carries the session — while YYLO is the control plane above that layer, included because anyone shopping this field treats it as one more candidate. The guide owns the layer argument; this page owns the field.

Read the verdict column with three rules. A named subject means the dated evidence favors that one column for that one dimension — never overall. "Split" means the dimension genuinely breaks into jobs that different tools win, and the sections below say where the split falls. A dash means the evidence set behind this page — each product's fetched documentation, repositories, and npm registry entries — contained nothing this page could score for that combination, so nothing was invented for it. Cursor's landing story and three evaluation cells are dashes for exactly that reason, not verdicts in disguise.

Seven products in their own words

Positioning quotes, all pulled from live surfaces on 2026-08-28. Cursor's homepage keeps its one-liner short: "Cursor is your coding agent for building ambitious software." Claude Code's overview opens with "Claude Code is an agentic coding tool that reads your codebase, edits files, runs commands, and integrates with your development tools." Codex describes itself on GitHub as a "Lightweight coding agent that runs in your terminal", and its npm entry calls it "a coding agent from OpenAI that runs locally on your computer". Kiro's docs pin every surface to one engine — "One unified agent harness powers every surface (IDE, CLI, Web, and Mobile)" — under a product "Built and operated by AWS". OpenCode introduces itself as an "open source agent that helps you write code in your terminal, IDE, or desktop". Pi goes minimal: "Pi is a minimal agent harness." And YYLO's committed README states its layer in one line — "YYLO orchestrates AI coding agents and structured development workflows" — which is the sentence that keeps this matrix honest about containing six peers and one coordinator. The deeper vocabulary distinctions, agent against assistant against orchestration CLI, are owned by a separate guide and not restated here.

Where the model choice lives

Three different freedoms hide inside "which model", and the split verdict is the point. Inside one harness, OpenCode carries the broadest documented list — "75+ LLM providers through Models.dev, including local models" — while Pi answers breadth with immediacy: "15+ providers, hundreds of models", switched mid-session. Claude Code and Kiro sit closer to a curated shelf: Claude models by default on Claude Code, whose "Terminal CLI, VS Code, and JetBrains also support third-party providers", and on Kiro a choice of "Anthropic Claude, open-weight models, or Auto", the last a picker that weighs "model quality, latency, and cost". Codex ties the CLI to OpenAI models behind a ChatGPT sign-in. Cursor's in-product selection is anchored by something rarer, a published eval: its Evals page scores GPT-5.6, Gemini, and Sonnet variants "on ambiguous, multi-file tasks from real Cursor sessions". YYLO owns the seventh freedom, the one no harness can offer — swapping the whole harness per run, because the model flag forwards to whichever dispatched service you selected. The dated dispatch surface, and its exact five documented services, live in the switching guide.

What travels with the repository

Two dimensions, often conflated, and the matrix scores them separately. Instructions are the policy files an agent reads on every run, and here the field has converged remarkably: Codex's /init writes an AGENTS.md; Pi "supports skills, AGENTS.md files"; Kiro layers steering markdown over AGENTS.md; Cursor reads .cursor/rules and skill directories; Claude Code concatenates CLAUDE.md up the tree. Every column ships some form of repo-resident instructions, so that row's verdict is split with no asterisks — and the precedence rules, which differ far more than the file names suggest, are documented tool by tool in the context precedence guide.

Records are the other half, and here the columns separate. Codex brackets a task with Git checkpoints "before and after a task so you can revert changes" — a safety net, not an account of what the work intended. Cursor keeps run history in-product; Kiro keeps session history in its store while specs and steering persist as files; OpenCode exports sessions to JSON or share links; Pi auto-saves every session as a JSONL tree under ~/.pi/agent/sessions/. Each is a real record with a real reader in mind — the person reopening the tool. The YYLO column is the only one whose unit of record is a ledger entry in shared Git history, binding what a task intended, what it answered, and where it landed, readable by anyone with a clone and no installed product. That row scores for YYLO on the durability question specifically, not because in-tool history is worthless.

Fan-out, landing, and the seam between

Running many agents is a solved-enough problem in every column; the divergence is what the agents run inside and what happens when two finish. Cursor's cloud agents work "in isolated VMs in the cloud" with the docs setting no ceiling on count; Kiro caps cloud sessions at ten per the preview limits, with concurrent tasks inside each spec; OpenCode starts several agents over one shared checkout; Claude Code runs each subagent in "its own context window" and points heavier parallelism at background agents; Codex delegates "focused work to specialized agents" inside one session; Pi declines sub-agents outright and expects the layer above — tmux, or a control plane — to do the fanning. YYLO's lanes are worktrees cut from recorded exact bases under an explicit concurrency cap, which is a different guarantee than scale: every parallel result starts from a commit you can name.

Landing is where the evidence gets one-sided. Codex can run a review that reports findings "without modifying your working tree"; Kiro's cloud sessions return through your source provider as a pull request; Cursor's cloud agents push a branch for handoff into your normal review. All three are real delivery paths, and none is an admission gate: two agents that finish together get no established integration order, and nothing proves the base each one claims. YYLO's serialized merge queue does exactly that, advancing each target by the SHA it expected, so that row is the control plane's to lose. The dash in Claude Code's landing cell is the honest one: its surfaces fetched for this page document programmatic runs and subagents, and no landing arbiter appeared among them.

Source, license, and the exit question

Portability conversations eventually ask what you would actually own. Codex ships Apache-2.0 on both npm and its repository; OpenCode is MIT on anomalyco/opencode; Pi is MIT on npm. Claude Code's npm entry points to its README for license terms and its public repository reports none. Kiro links a public repository whose API reports no license. Cursor surfaces fetched for this page link no public source repository at all. YYLO's own honesty requirement cuts the same way: its repositories are public, and the CLI repository still showed no license file at the 2026-08-28 recheck behind this page, so its redistribution terms stay unverifiable — a gap stated here rather than papered over. The verdict is split because three standard licenses exist in the field and no single column owns openness; readers weighting this dimension heavily have their shortlist. The full layer map of open and closed components belongs to the open-source stack guide.

How you know the work was any good

The last dimension is the youngest, and the dashes multiply. Cursor publishes CursorBench, scoring agents "on ambiguous, multi-file tasks from real Cursor sessions" — genuine evaluation, aimed at models. Kiro checks behavior "with property-based tests (like fuzz testing)" — evaluation aimed at requirements. Codex returns prioritized findings from a dedicated review — evaluation aimed at a diff. YYLO's answer is aimed at work over time: typed receipts per run, finish gates whose validation a risk policy selects, and a separate benchmark product built for repeated attempts on a real repository. The pick is YYLO's because no other column documents evidence retained across the life of the work itself, and the three dashes — Claude Code, OpenCode, Pi — mark columns whose fetched surfaces offered nothing this page could score, which is a statement about this evidence set, not about those products' futures.

The demand this matrix actually owns

Seventy-seven keyword rows back this route in the 2026-08-26 export set, estimated at 88,240 combined, and the split inside that number matters more than the total. Twenty rows are editor-discovery phrasings — people who have not chosen a tool at all — led by "ai powered code editor" (estimated 40,500), "ai powered ide" (5,400), and "ai code editor" (4,400). Fifty-seven rows are head-to-head phrasings, estimated at 23,310 combined, led by "cursor vs claude code" (8,100), then "claude vs cursor", "cursor vs vscode", and "cursor vs copilot" at 1,600 to 1,900 each, with "kiro vs claude code" at 720 the largest row naming this site's own gated subjects. The pair rows name more products than the matrix has columns — VS Code, Copilot, Antigravity, OpenClaw, Goose, Amazon Q, CodeRabbit, and Conductor all appear — because the intent, choosing among coding tools, has no tighter owner; the matrix deliberately scores the seven the route approval names, and Conductor's own head-to-head with YYLO has a published page of its own.

Two footprints anchor the field. Among the thirteen domains that hold ranking positions in the exports, cursor.com ranks on 994 keywords, opencode.ai on 1,457, kiro.dev on 719, and pi.dev on 702 — all recomputed for this page. Neither anthropic.com nor openai.com appears among those thirteen at all, which is the corpus's quietest fact: Claude Code anchors the cluster's biggest head-to-head phrase and Codex names its own pair rows, yet neither vendor's domain ranks anywhere in the exports. Recomputed against all fifteen raw export files before this paragraph was written: not one keyword anywhere contains "yylo". Volumes here are inputs to a coverage decision, never promises to a reader — every number is a DataForSEO estimate, the paid competition field never does ranking duty on this site, and no sentence here predicts positions. Open-source tool-selection phrasings have a sibling route in preparation on the hub, approved but unpublished, and this page links nothing that has not shipped.

If your question was "which harness," the matrix above is the answer procedure: score the dimensions you weight, take the splits to the sections, and where two finalists remain, the pairwise pages carry the deeper verdicts — Cursor, Kiro, OpenCode, Pi, and Conductor each have one. If your question was "how do several of these cooperate under one boundary," that was never a harness question, and the control plane's dispatch matrix is where it starts.