Skip to content
The Harness Problem: Why the Same Model Feels Like a Genius in One Tool and an Intern in Another

The Harness Problem: Why the Same Model Feels Like a Genius in One Tool and an Intern in Another

Aditya Mishra7 min read

Claude on Cursor and Claude on Claude.ai are the same model — but they feel completely different. The gap isn't the AI. It's the harness. Here's what that means, with real Terminal-Bench numbers showing an 18-point swing from scaffolding alone.

Share
Table of Contents

You open Claude Code, describe a bug, and watch it find the file, read the surrounding code, make the edit, run the tests, and confirm the fix. It feels like pairing with a sharp senior engineer.

Then you paste the same bug description into Claude.ai's web chat. The model responds with a confident fix — for a function that does not exist in your codebase. It "edits" code it never actually read. It declares the problem solved without running anything.

Same model. Same weights. Completely different experience. What changed?

It is not the model. It is the harness.

What is a harness?

A language model does exactly one thing: text goes in, text comes out. That is it. It has no memory between calls. It cannot open a file, run code, or check whether its own answer was correct.

The harness is everything built around the model to give it those capabilities — the scaffolding that manages context, exposes tools, controls what the model can see and act on, and decides when the job is actually done.

Anthropic's own documentation puts it plainly: "Claude Code serves as the agentic harness around Claude." The model is the engine. The harness is everything else.

Every AI coding product you use — Claude Code, Cursor, Windsurf, GitHub Copilot, Aider — is running a loop underneath: ask the model what to do, execute whatever action it requests in the real world, feed the result back, repeat. The model proposes. The harness disposes. The difference between products is almost entirely what that harness does between those steps.

The anatomy of a harness: tools, context, verification, and guardrails wrapped around the same model. Change the wrapper and you change the agent.
The anatomy of a harness: tools, context, verification, and guardrails wrapped around the same model. Change the wrapper and you change the agent.

Why does the same model behave so differently?

Cursor, Windsurf, and Claude Code can all run the same Claude model — you can point all three at Claude Opus 4.6 today. Same weights, completely different experiences. Here is where harnesses make or break the outcome.

1. What can the model actually touch?

Claude Code has a real shell and file editor — it opens files, writes diffs, runs commands. Cursor has project-wide file access via its @ references system; ask it about a bug and it reads the relevant files before answering. Windsurf's Cascade indexes your entire codebase and maps relationships between files, classes, and functions before each task.

Claude.ai's web chat has none of that. It can only see what you paste into the box. So when it "edits" a function that does not exist, it is not hallucinating out of stupidity — it literally has no hands to open the file with. It is pantomiming a task it was never given the tools to perform.

2. What does it actually know about your code?

Models have a limited attention budget, and they get measurably worse when important details are buried in the middle of a long prompt. Cursor mitigates this by indexing your entire codebase and surgically retrieving only what is relevant — the model's context window is filled with signal, not noise. Windsurf does the same, and Claude Code uses a rolling summary of what it has already read so each new step does not start blind.

A poorly built integration dumps the last 20 messages into the prompt and calls it context. Same model, much weaker effective intelligence — because the harness is handing it garbage.

3. Does it verify the work?

Claude Code runs your test suite after every meaningful change. It only marks a task complete when the tests actually pass — not when the model feels confident. Cursor's Composer re-runs the build and flags errors before surfacing the diff to you. Aider does the same in the terminal.

Claude.ai's web chat cannot do any of this. It has no way to run your tests. It can only tell you the fix "should work" — and walk away. The difference between "the model said it fixed it" and "the harness confirmed it is fixed" is the difference between a demo and a product.

4. What is the model not allowed to do?

The smartest harness decisions are the ones the model never sees. Claude Code's permission system blocks writes to sensitive paths and shell commands that look destructive — not by asking the model nicely, but by rejecting the action in code before the model ever gets a response. The model cannot reason around a guardrail it does not know exists. Windsurf has similar sandboxing for file operations. A naive integration has none of this, which is how AI tools occasionally overwrite things they should not.

The receipts: what Terminal-Bench actually shows

Terminal-Bench (built by Mike Merrill, then a Stanford postdoc, together with the Laude Institute) drops an agent into a real, sandboxed terminal and gives it hard, end-to-end tasks: compile this, train this model, configure this server, find this security bug. Every task runs in its own Docker container with automated tests that verify actual success — no partial credit for sounding confident.

What makes it perfect for this question: every leaderboard entry is an agent + model pair. The same model appears multiple times, each wrapped in a different harness. Hold the model constant, watch only the scaffolding change.

Terminal-Bench 2.0 leaderboard filtered to Claude Opus 4.6. Same model, ten different harnesses — an 18-point spread created entirely by scaffolding.
Terminal-Bench 2.0 leaderboard filtered to Claude Opus 4.6. Same model, ten different harnesses — an 18-point spread created entirely by scaffolding.

The screenshot above is filtered to Claude Opus 4.6 only. Every entry runs identical weights. The only variable is the harness. Full live leaderboard at tbench.ai.

  • Same model, ~3-point gap. KRAFTON AI's Terminus-KIRA scores 74.7% on Claude Opus 4.6. Bigai's TongAgents scores 71.9% on the exact same model. Nothing changed but the scaffolding.
  • The model's own maker finishes last. Anthropic's Claude Code — the official CLI built by the team that trains Claude — scores 58.0%, placing 10th out of 10 in this filtered view.
  • The full spread: 18.4 points. Meta-Harness (Stanford IRIS) tops the list at 76.4%. Claude Code sits at 58.0%. Same model weights, same API — 18.4 points of gap from scaffolding alone.

To be fair: Claude Code is a general-purpose development tool, not a benchmark-optimized agent. It trades raw task completion score for things Terminal-Bench does not measure — interactive output, project memory, safety guardrails, human-in-the-loop workflows. But the agents beating it by 16+ points are running the exact same Claude Opus 4.6 model. The model is identical. The harness is why the outcomes are not.

An 18-point spread across ten harnesses running the same model. That gap is often larger than the jump between two entire generations of frontier models. People spend months debating which model is smarter, when the harness was the lever all along.

This is why people in the field have started saying harness leaderboards are the new model leaderboards.

(Scores from public Terminal-Bench 2.0 leaderboard, Claude Opus 4.6 filter, early-to-mid 2026. Rankings shift as new agents are submitted.)

The uncomfortable takeaway

In 2026, the frontier models are extraordinary — and increasingly a commodity. The thing that separates a magical AI product from a frustrating one is rarely "they have a better model." KRAFTON AI, a South Korean gaming company, built a harness around Claude Opus 4.6 that outperforms Anthropic's own Claude Code by 16.7 points on the same model. The harness problem is not theoretical. It is playing out in public, on a leaderboard, right now.

When Claude Code's source code leaked, people found it was roughly half a million lines. That code is the harness. It is a useful reminder of how much invisible engineering sits between a raw model and a tool that works — and apparently half a million lines is not enough to top the leaderboard.

The one thing to remember

Next time Claude dazzles you in one product and disappoints you in another — or you find yourself wondering whether Cursor is smarter than Claude Code, or whether Windsurf "uses a better model" — ask the better question:

What is the harness doing?

Is it giving the model real file access, or just a chat box? Is it feeding it precise, relevant context, or dumping everything in a pile? Is it running your tests to verify the fix, or taking the model's word for it?

The model is the pilot. The harness is the jet. You are not evaluating the pilot.

Aditya Mishra

Written by

Aditya Mishra

ML engineer — machine learning, computer vision, and real-time inference. Building intelligent systems and writing what I learn.

Explore more writing

Responses (0)

Loading responses...

Join the loop.

No spam. Just highly technical write-ups on Machine Learning, Computer Vision, and system design, delivered straight to your inbox.