---
title: "AI agent harnesses compared"
description: "Eight agent harnesses compared on surface, model access, local models, guardrails and portability — with vendor docs, no benchmark leaderboard."
canonical: "https://www.diginomads.win/harnesses"
source: "content/pages/harnesses/index.md"
updatedAt: "2026-11-10"
---

## Harness matrix

| Harness | Surface | Models and sign-in | Local models | Guardrails | Best fit |
|---|---|---|---|---|---|
| [Claude Code](https://code.claude.com/docs/en/overview) | Terminal, IDE extensions, desktop, web | Claude models; Claude plan or API access | Not documented by the vendor | Permission modes plus allow, ask and deny rules | Claude subscribers doing multi-file repository work |
| [Codex CLI](https://learn.chatgpt.com/docs/codex/cli) | Terminal, IDE extension, cloud | OpenAI models; custom providers in config; ChatGPT plan or API key | Documented via Ollama or LM Studio | OS-enforced sandbox plus approval policy | Terminal and CI loops on a ChatGPT plan |
| [Gemini CLI](https://geminicli.com/docs/) | Terminal, VS Code companion | Gemini models; Google account or API key | Not documented by the vendor | Approval modes and trusted folders | Gemini users asking large-context repository questions |
| [OpenCode](https://opencode.ai/docs/) | Terminal, desktop, web | Any configured provider; Provider keys or supported subscription sign-in | Documented via Ollama, LM Studio and compatible servers | Per-tool allow, ask or deny; no built-in OS sandbox | One open-source harness across several model providers |
| [Cline](https://docs.cline.bot/cline-overview) | VS Code, JetBrains, CLI, SDK | Any configured provider; Provider keys, Cline plans or supported subscriptions | Documented via Ollama and LM Studio | Per-action approval with auto-approve categories | Editor-first work with explicit approval on every action |
| [Aider](https://aider.chat/docs/) | Terminal | Any configured provider; Provider API keys | Documented via Ollama and compatible servers | Confirmation prompts; no built-in OS sandbox | Git-native pair programming with small, reviewed edits |
| [Cursor CLI](https://cursor.com/docs/cli/overview) | Terminal; same agent as the Cursor editor | Cursor-hosted models; Cursor account | Not documented by the vendor | Plan and ask modes plus allow and deny rules | Existing Cursor users who want the same agent in a terminal |
| [GitHub Copilot CLI](https://docs.github.com/en/copilot/concepts/copilot-surfaces/copilot-cli) | Terminal | Copilot-hosted models; GitHub Copilot plan | Documented via compatible local providers | Approval prompts plus allow and deny rules | GitHub-centric teams already on Copilot |

## A harness is not a model

The model writes the tokens. The harness decides what those tokens can do: which files it can read, which commands it can run, how the session is stored, how a permission prompt appears, and what happens when the context fills up. Two harnesses running the same model can produce very different days.

That is why this page compares surfaces and controls, not benchmark scores. A score belongs to a model-and-harness pair on a task set; your repository is not that task set.

## How to read the table

- **Surface** is where the agent runs, not where the model runs. A terminal harness can still call a hosted model.
- **Models and sign-in** describes what the vendor documents. A subscription that works in one harness often does not work in another; check before you commit a year.
- **Local models** matters when the connection is unreliable or the work cannot leave the machine. “Not documented” is not the same as “impossible”; it means the vendor does not document a supported path.
- **Guardrails** is the part to read twice. A permission prompt is not a sandbox. A sandbox is not a backup. Ask what the agent can touch when you say yes once.
- **Best fit** is a starting hypothesis, not a verdict. Use the [45-minute bake-off](/harnesses/how-to-test-a-harness) before you switch your whole workflow.

## What travel changes

A harness decision made at a desk in one country can fail on the road for reasons that have nothing to do with code quality.

- **Latency and connectivity.** A terminal loop that streams a diff is painful on a 3G hotspot. A cloud session can keep working while your laptop sleeps, but it needs a reliable uplink to start and to collect the result.
- **Billing and currency.** A monthly subscription is predictable; API usage is not. If your card, your bank or your country changes, check that the plan still works before you rely on it.
- **Device constraints.** A fanless laptop throttles on a long agent run. A tablet cannot run most terminal harnesses. A desktop app may be the difference between working and waiting.
- **Data and border risk.** Work that cannot leave the machine needs a local model or a self-hosted endpoint. A hosted harness is a data transfer, and the rules differ by client and jurisdiction.
- **Portability.** The instructions, skills and prompts you accumulate are the real lock-in. Keep them in plain files; see [a portable agent setup](/harnesses/portable-agent-setup).

## A shortlist by situation

- **You already pay for Claude:** start with Claude Code. The subscription is the reason, not a benchmark.
- **You already pay for ChatGPT:** start with Codex CLI. It has a documented local-model path and an approval model worth reading.
- **You want one harness across providers:** look at OpenCode or Cline, and check the permission model before you run them on a client repository.
- **You work in an editor and want approvals:** Cline or the Cursor agent. The editor is the interface; the approval model is the decision.
- **You want a small, legible loop:** Aider. It is git-native and opinionated, and it does not pretend to be a sandbox.
- **You are on GitHub all day:** Copilot CLI. The integration is the point.
- **You need a local model:** Codex CLI, OpenCode, Cline and Aider document a path. Test it on your actual hardware before you depend on it.

## What this comparison leaves out

It leaves out benchmark rankings, because they move faster than a page can be dated. It leaves out pricing tables, because plans and regional availability change without notice. It leaves out “best” because the answer depends on your subscription, your device, your client's data rules and the task in front of you.

If a cell is wrong, send the vendor page and the sentence that contradicts it to the [help desk](/agent-help). A correction changes this page and its reviewed date.

## Go deeper

- [How to test a harness in 45 minutes](/harnesses/how-to-test-a-harness) — a bake-off with three tasks and a scorecard.
- [A portable agent setup](/harnesses/portable-agent-setup) — keep instructions, skills and prompts when the harness changes.
- [Harness glossary](/harnesses/glossary) — model, harness, agent, tool, skill, MCP, sandbox and the rest.

## Structured data

```json
{
  "@context": "https://schema.org",
  "@type": "WebPage",
  "name": "AI agent harnesses compared",
  "url": "https://www.diginomads.win/harnesses",
  "description": "Eight agent harnesses compared on surface, model access, local models, guardrails and portability — with vendor docs, no benchmark leaderboard.",
  "isPartOf": {
    "@type": "WebSite",
    "name": "DigiNomads",
    "url": "https://www.diginomads.win/"
  }
}
```
