Coding agent harnesses compared: 50 tools scored on architecture
Feature checklists do not explain why one coding agent finishes a refactor and another corrupts a repository. Ten architectural dimensions do. Here is the rubric, the scores, and the method.

Scored on a 100-point architecture rubric as of 14 August 2026, the leaders are Claude Code (88), Codex (82), Cursor (80), OpenCode and Kendr Code (79 each), and GitHub Copilot (77). No single harness wins everywhere: Claude Code leads on extensibility and surface reach, Codex on kernel-level sandboxing, Cursor on repository retrieval, OpenCode on provider breadth, Kendr Code on edit-transaction safety, permissions, and crash durability, and Copilot on cloud and CI delivery. These are Kendr Research scores against a published rubric, not benchmark results, and Kendr scores its own product on the same scale — including a low mark where it trails.
Why score architecture instead of features
Almost every coding-agent comparison published in 2026 is a feature checklist: does it support MCP, does it have a plan mode, how many providers does it speak. Those tables are easy to produce and nearly useless for a purchasing decision, because they treat a checkbox in a README as equivalent to a working mechanism. Two harnesses can both claim “sandboxing” when one enforces a kernel policy and the other simply refuses to run a command if it sees a dangerous-looking string.
Architecture is what determines outcomes you actually feel: whether a half-finished multi-file edit leaves your repository in a valid state, whether an approval you granted yesterday still means something after a crash, whether the agent can run a test suite without also being able to reach the network. This report scores ten architectural dimensions, each worth ten points, and states what evidence each score rests on.
The field is large enough that a complete census is no longer possible for one team. A curated public directory tracked 110 or more terminal-native coding agents and harnesses as of 13 August 2026.[1] This report covers the 50 that readers most often ask to compare, and it is explicitly a dated snapshot: several of these projects ship weekly.
The ten dimensions
Each dimension is scored 0 to 10. The scale is anchored: 10 means the mechanism is implemented, enforced by the system rather than requested of the model, and better than what the rest of the field ships; 5 means a working but ordinary implementation; 3 or below means the concern is handled by convention, by the model’s good behaviour, or not at all.
| Code | Dimension | What a high score requires |
|---|---|---|
| Loop | Agent loop and control flow | A real tool-calling loop with mid-turn steering, interruption, read-only modes, runaway breakers, and a defensible turn-completion contract |
| Edit | Edit engine and tool surface | Typed tools rather than raw shell only; preconditioned writes; atomic multi-file transactions; checkpoints and undo; diff review; process and browser control |
| Ctx | Context engineering | Ignore-aware discovery, structural or semantic retrieval, instruction-file hierarchy, size-aware compaction, and cross-session memory |
| Iso | Isolation and sandboxing | Kernel-level or container isolation, network egress control, checkout isolation, and an honest description of what is and is not contained |
| Perm | Permission and approval model | Granular gates, durable pending approvals, reusable allow rules, and identical enforcement for delegated subagents |
| Dur | Durability, recovery and audit | A durable invocation log as source of truth, single-writer leases, idempotent starts, restart reconciliation, replay, and tamper evidence |
| Model | Model layer | Provider breadth, bring-your-own-model, local inference, streaming and native tool-call parity across providers, and cost controls |
| Ext | Extensibility | MCP, skills, plugins, hooks, subagents, a published SDK or protocol, and interoperability with other ecosystems |
| Surf | Surfaces and orchestration | Terminal, IDE, desktop, web and mobile reach; headless mode; parallel agents; fleet supervision; worktree isolation |
| Cloud | Cloud, CI and delivery | Execution that continues with the laptop closed, hosted runners, scheduled cloud runs, CI-native integration, and artifact or deploy hosting |
The full-harness scorecard
These nineteen tools are complete harnesses: they own the loop, the tools, and the safety boundary. IDE-embedded agents are scored on the agent, not on the editor around it.
Revision note. Kendr Code was scored 79 when this report was first published on 14 August 2026. A release the same day shipped a kernel sandbox, a symbol index, conversation rewind, a real tokenizer, an ACP server, a VS Code extension, a headless CI contract, and a GitHub Action — moving it to 88. Every competitor row is unchanged from the original snapshot and has not been re-verified since, so the tie at the top reflects Kendr closing its own gaps against a static comparison set, not a measured overtake of a moving field. The changes are itemised further down.
Claude Code takes the top position on breadth rather than on any single mechanism. Its documented surface list now spans terminal, VS Code, JetBrains, a desktop app, the web, and mobile, with cloud-side Routines that keep running when the machine is off, GitHub Actions and GitLab CI integration, Slack routing, subagents, hooks, skills, and an Agent SDK.[2] Codex takes the sandboxing dimension outright: a Rust implementation with Seatbelt on macOS, Landlock and seccomp on Linux, a native Windows sandbox, and network access off by default.[3]
| Harness | Loop | Edit | Ctx | Iso | Perm | Dur | Model | Ext | Surf | Cloud | Total |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Claude Code | 10 | 9 | 9 | 8 | 9 | 7 | 6 | 10 | 10 | 10 | 88 |
| Kendr Code | 9 | 10 | 9 | 9 | 10 | 10 | 7 | 9 | 8 | 7 | 88 |
| Codex | 9 | 9 | 8 | 10 | 8 | 7 | 6 | 8 | 8 | 9 | 82 |
| Cursor | 9 | 9 | 10 | 6 | 6 | 6 | 8 | 7 | 10 | 9 | 80 |
| OpenCode | 9 | 8 | 9 | 6 | 7 | 6 | 10 | 9 | 9 | 6 | 79 |
| GitHub Copilot | 8 | 7 | 7 | 7 | 7 | 6 | 8 | 8 | 9 | 10 | 77 |
| Gemini CLI | 8 | 8 | 8 | 7 | 7 | 6 | 5 | 8 | 8 | 9 | 74 |
| OpenHands | 8 | 7 | 7 | 9 | 6 | 6 | 8 | 8 | 7 | 6 | 72 |
| Windsurf | 8 | 8 | 9 | 5 | 6 | 6 | 7 | 7 | 8 | 7 | 71 |
| VS Code Agent Mode | 8 | 7 | 7 | 5 | 7 | 5 | 8 | 9 | 8 | 7 | 71 |
| Cline | 9 | 8 | 7 | 5 | 8 | 5 | 10 | 8 | 6 | 4 | 70 |
| JetBrains Junie | 8 | 8 | 9 | 6 | 7 | 6 | 7 | 6 | 7 | 6 | 70 |
| Kiro | 7 | 7 | 7 | 6 | 8 | 7 | 6 | 7 | 7 | 7 | 69 |
| Goose | 8 | 7 | 7 | 6 | 7 | 5 | 9 | 9 | 6 | 4 | 68 |
| Zed AI | 7 | 7 | 8 | 5 | 7 | 5 | 8 | 9 | 7 | 4 | 67 |
| OpenClaw | 7 | 5 | 6 | 3 | 4 | 6 | 9 | 9 | 10 | 6 | 65 |
| Continue | 7 | 6 | 7 | 4 | 6 | 5 | 9 | 8 | 7 | 5 | 64 |
| Trae | 7 | 7 | 7 | 5 | 6 | 5 | 6 | 6 | 7 | 5 | 61 |
| Aider | 7 | 8 | 9 | 3 | 6 | 5 | 9 | 5 | 5 | 3 | 60 |
Who actually leads each dimension
Totals flatten the interesting information. The dimension leaders are more useful, because a team with a hard constraint — a regulated repository, an untrusted dependency tree, a fleet of parallel agents — should choose on the dimension that binds them, not on an aggregate.
Two dimensions deserve comment. Repository retrieval is the one place where the closed IDE products are clearly ahead of the terminal-native field: Cursor and Windsurf both maintain semantic indexes over the repository, while most CLI harnesses rely on agentic search — grep, glob, and ranged reads — which is more transparent and more token-expensive.[4] Aider is the notable open-source exception, with a tree-sitter repository map that gives the model a structural summary rather than raw file dumps.[5]
Durability is the one place where the field is broadly weak. Almost every harness persists a transcript so you can resume a conversation. Very few treat the invocation log as the authoritative state of the world — with single-writer leases, idempotent turn starts, restart reconciliation, and approvals that survive a process kill. That gap is why the same crash that costs one team a chat history costs another a corrupted working tree.
| Dimension | Leader | Score | Closest challenger |
|---|---|---|---|
| Agent loop and control flow | Claude Code | 10 | Codex, Cursor, Cline, OpenCode, Kendr Code (9) |
| Edit engine and tool surface | Kendr Code | 10 | Claude Code, Codex, Cursor (9) |
| Context engineering | Cursor | 10 | Windsurf, OpenCode, Junie, Aider, Kendr Code (9) |
| Isolation and sandboxing | Codex | 10 | OpenHands, Kendr Code (9) |
| Permission and approval model | Kendr Code | 10 | Claude Code (9) |
| Durability, recovery and audit | Kendr Code | 10 | Kiro, Claude Code, Codex (7) |
| Model layer | OpenCode and Cline | 10 | Goose, Continue, OpenClaw, Aider (9) |
| Extensibility | Claude Code | 10 | OpenCode, Goose, Zed, VS Code, OpenClaw, Kendr Code (9) |
| Surfaces and orchestration | Claude Code, Cursor, OpenClaw | 10 | GitHub Copilot, OpenCode (9) |
| Cloud, CI and delivery | Claude Code and GitHub Copilot | 10 | Codex, Cursor, Gemini CLI (9) |
The independent tier: 33 lesser-known harnesses
Below the well-funded tier sits a large independent field. These projects are worth reading even if you never adopt them, because their authors have to make one architectural bet each and defend it. The scores below are indicative: they are derived from published documentation and repository evidence rather than from sustained hands-on use, and they carry more uncertainty than the table above.
Three patterns recur. First, binary-size and cold-start minimalism — agentty ships a single static C++ binary with no Node or Python runtime, and Waveloom and Zap make the same bet in Go and Rust. Second, governance as the product — DvalinCode pairs an organisation policy engine with enforced network egress and a hash-chained audit trail, which is the closest independent analogue to Kendr Code’s design. Third, context efficiency as the product — Keen Code replaces raw tool traces with structured turn summaries, and Waveloom ships four-tier compaction with three distinct subagent modes.[1]
| Harness | Score | Architectural signature |
|---|---|---|
| Hermes Agent | 72 | Self-improving loop, persistent memory, automated skill creation, sandboxed execution over socket RPC |
| DvalinCode | 70 | Org policy engine, enforced egress, OS-sandboxed subprocesses, hash-chained audit trail |
| OpenSquilla | 70 | Microkernel runtime, bubblewrap and Seatbelt sandboxing, ML-based tier routing, gateway mode |
| jcode | 68 | Rust TUI tuned for RAM and cold start so many sessions run in parallel; swarm mode, agent memory |
| ForgeCode | 66 | Rust, three-agent split, 300-plus models bring-your-own-key, embedding search after an explicit sync |
| agentty | 66 | Single static C++ binary, sandboxed by default, ACP client for Zed, drives air-gapped hosts over SSH |
| Waveloom | 64 | Four-tier context compaction, three subagent modes, permission engine, prompt-cache aware |
| openHarness | 63 | Breadth clone: 78 commands, 42 tools, MCP over stdio, HTTP and SSE with OAuth, hooks, subagents |
| Codebuff | 63 | Explicit multi-agent pipeline — discover, plan, edit, review — with an SDK and credit economics |
| Every Code | 62 | Codex fork adding validation, browser integration, and multi-provider orchestration |
| Octomind | 61 | Rust runtime with a community capability registry and runtime self-extension over MCP |
| Neovate Code | 60 | Plugin system, multi-provider, MCP integrations, headless automation mode |
| Grinta | 58 | Long-horizon autonomy with durable state, LSP and DAP integration, validation-gated completion |
| zot | 57 | Three drive modes — TUI, JSON, RPC — with structured tools and reviewable diffs |
| Keen Code | 56 | Lean turn-memory summaries instead of raw tool traces; every plan saved as markdown |
| Dexto | 55 | One harness across CLI, web and API modes with sub-agent spawning |
| Smelt | 55 | Rust TUI, four modes, granular permissions, parallel subagents, headless scripting |
| Codex Infinity | 55 | Codex fork adding auto-continuation, parallel runs, and CI repair loops |
| Zap | 54 | Skill-first context injection with a SQLite symbol index for fast lookup |
| Kode CLI | 52 | Straightforward multi-provider terminal agent |
| g3 | 50 | Rust tool-running agent with a skills system and provider abstraction |
| Codel | 50 | Docker-resident autonomous agent with a web UI; isolation strong, loop thin |
| Groq Code CLI | 48 | Latency-first harness built around ultra-fast inference |
| open-codex | 48 | Lightweight Codex fork widened to OpenAI, Gemini, OpenRouter and Ollama |
| QQCode | 47 | Rust agent optimised for speed, determinism and explicit developer control |
| Coro Code | 46 | Free Claude Code alternative covering the common generate, debug and manage path |
| picocode | 45 | Minimal Rust agent aimed at CI workflows and small codemods |
| Grok CLI | 44 | Community terminal agent built on xAI models |
| nori-cli | 44 | Multi-provider switcher layered on Codex CLI |
| Agentless | 40 | Not a harness: a fixed localise, repair, validate pipeline with no agent loop at all |
| Claude Engineer | 38 | Early community Claude CLI for file management and iterative development |
| Mini-Kode | 35 | Deliberately readable reference implementation; a teaching artifact, not a product |
| Smol Developer | 33 | Whole-codebase generation from a prompt; historically important, architecturally superseded |
The case against the agent loop
Agentless scores 40 on this rubric and that number is misleading, so it deserves its own paragraph. Agentless deliberately removes the agent: instead of letting a model choose actions in a loop, it runs a fixed three-phase process — hierarchically localise the fault, sample candidate patches as diffs, then validate with regression and generated reproduction tests.[6]
It is not a harness and it should not be adopted as one. But it is the strongest published argument that a large part of what agent harnesses do is unnecessary overhead for a well-specified repair task, and every team building a loop should be able to say why their loop earns its cost against a fixed pipeline. The rubric here scores harness engineering; Agentless is a reminder that harness engineering is a means, not a goal.
Where Kendr Code lands, including where it trails
Kendr Research builds Kendr Code, so the honest thing to do is score it on the same rubric and publish the weak marks alongside the strong ones. It scored 79 at first publication. A release later the same day moved it to 88 across six dimensions. The rubric did not change; the product did. Below is exactly what shipped and exactly what is still missing.
It has led three dimensions throughout. The edit engine, because every mutation is a typed, deny-by-default tool rather than a shell string: writes are preconditioned on a content hash captured at read time, multi-file changes run as checkpointed transactions with per-file atomic replacement and compensating rollback, checkpoint blobs are content-addressed and task-isolated, and external modification is detected rather than silently overwritten. Permissions, because an approval is one conditional database transition — concurrent deciders cannot both win — and pending approvals survive a restart, carry the exact proposed arguments with an audit fingerprint, and can mint a reusable allow rule scoped to a tool, a command prefix, or a path prefix. Durability, because the invocation log is the source of truth: single-writer leases with heartbeats, an atomically claimed idempotent turn start, restart reconciliation, and a hash-chained task ledger that replays.[7]
The six that moved are itemised in the table below. The one that did not move is the model layer, and the reason is worth stating because it contradicts the obvious assumption. Kendr Code reaches 70-plus models, but an internal transport audit published with the release found that only OpenAI, Anthropic, and Google-direct routes use native tool calling; everything else — including Bedrock, Kimi, Sarvam, and local Ollama — runs Code actions over a constrained JSON protocol. The models are real; the transport under most of them is second-class. Model breadth counted in vendors rather than model IDs is six, against OpenCode’s 75-plus, and there is no generic OpenAI-compatible endpoint to close the difference. That dimension stays at 7 until the transport work lands.
Cloud moved from 5 to 7, not higher, and the distinction matters. A documented headless execution contract, a GitHub Action, and a GitLab template mean Kendr Code now runs in CI — but the agent still executes on a machine you own. Close the laptop with no CI job running and the work stops. Claude Code’s cloud Routines and GitHub Copilot’s Actions-powered coding agent both pass that walk-away test outright.[2][9] Surfaces moved from 6 to 8 on an ACP server and a VS Code extension, which is four surfaces against Claude Code’s ten — no web, no mobile, no chat channels.
- Isolation 8 → 9: a real kernel sandbox on the host backend. Linux Landlock plus a network namespace, verified end to end on a 5.15 kernel at ABI v1 across seven assertions. macOS Seatbelt is implemented and pinned by tests but its enforcement is unverified — no macOS hardware was available. Windows is explicitly reported as unenforced: Job Objects bound a process tree’s lifetime, not its access, and the badge says so rather than claiming a sandbox.
- Context 7 → 9: a tree-sitter symbol index persisted in SQLite, exposed as typed read-only find_symbol and find_references tools rather than silently injected into the prompt, plus a real tokenizer behind the compaction budget with a calibration pass against observed usage.
- Loop 8 → 9: conversation rewind, recorded as a durable event so the ledger hash chain stays valid rather than mutating history. Restoring the matching file checkpoint is offered separately and opt-in, because a rewind that silently reverted the workspace would be a different and more dangerous operation.
- Extensibility 8 → 9 and surfaces 6 → 8: an ACP server and a VS Code extension. The ACP implementation deliberately declines the protocol’s own file and terminal methods — routing edits through the editor would create a second, non-transactional edit path, and routing commands there would bypass the sandbox. Permission requests resolve through the engine’s existing compare-and-set, so there is no second approval path.
- Cloud 5 → 7: a frozen non-interactive execution contract with structured JSON output, a GitHub composite action, and a GitLab template. Known limits: the published CLI archive is Linux x64 only with no declared glibc floor, there is no ARM64 artifact, and the action posts a PR comment rather than check-run annotations.
Method and its limits
Scores were assigned from published documentation, source repositories, and a curated directory of the field, plus hands-on operation of a subset. They are Kendr Research judgements against a published rubric, not measurements. Nothing here is a benchmark result: no SWE-bench number, no task-success rate, and no latency figure feeds into these totals, and a harness with excellent architecture can still lose to a weaker one driven by a stronger model.
Four specific limits. The independent tier carries the most uncertainty, because those scores rest largely on documentation rather than sustained use. The dimension weights are equal, which is a choice and not a fact — a team that never leaves its laptop should weight cloud at zero and reshuffle the ranking accordingly. The vendor scoring its own product is a real conflict of interest, which is why the rubric is stated before the scores rather than after, why the Kendr Code row still publishes a 7 for its model layer, and why the revision itemises what shipped so a reader can check each claim against source.
The fourth limit is the most important one for reading the revised table. Only the Kendr Code row was re-scored. Every competitor was scored once, on 14 August 2026, and has not been re-examined since — while Claude Code, Codex, Cursor, and OpenCode all ship on a weekly-to-monthly cadence. A vendor re-scoring itself against a frozen comparison set will always look like it is gaining. The correct reading of the tie at the top is that Kendr Code closed six of its own gaps in one release; it is not evidence that the distance to Claude Code actually closed, because Claude Code was not measured again. The next revision of this report will re-score the full field or it will not claim a ranking at all.
Frequently asked questions
What is the best AI coding agent in 2026?
On this architecture rubric, Claude Code and Kendr Code both score 88 of 100 — Claude Code on extensibility and surface reach, Kendr Code on edit safety, permissions, and durability. Only the Kendr Code row was re-scored after its 14 August release, so treat the tie as Kendr closing its own gaps against a frozen comparison set. No harness leads every dimension: sandboxing favours Codex, repository retrieval favours Cursor, and provider freedom favours OpenCode or Cline.
What is a coding agent harness?
The harness is everything around the model: the tool-calling loop, the tool definitions, the edit engine, the context assembly and compaction, the permission gates, the sandbox, and the durable record of what was done. The model proposes actions; the harness decides which ones are allowed to happen and what state the repository is left in.
Do these scores reflect benchmark performance?
No. They score architecture only. A harness with a weaker rubric score can outperform a stronger one when paired with a better model, and benchmark results such as SWE-bench measure a model-plus-harness pair, not the harness alone.
Why does Kendr score its own product?
Excluding it would be less transparent than including it against a published rubric. Kendr Code went from 79 to 88 when a release closed six dimensions, and the report itemises exactly what shipped so each claim is checkable against source. It still publishes a 7 on the model layer, because an internal transport audit found that most of its 70-plus models run over a constrained JSON protocol rather than native tool calling.
Sources and evidence
Primary and authoritative sources used for factual claims. Company research and executive forecasts are labeled as such in the article.
- 1Awesome CLI Coding Agents: 110+ terminal-native agents and harnessesbradAGI · 2026-08-13
- 2
- 3
- 4Cursor documentationCursor
- 5Aider repository mapAider
- 6
- 7
- 8
- 9