Head to head · Agent harnesses · October 2026 research run
HarnessRouter vs Letta
Letta scores 59.7 (C) on agent readiness against HarnessRouter's 47.7 (D), and leads in 3 of 7 scored categories. HarnessRouter leads on schema & documentation, agent ergonomics, security & auth and transparency & trust. Both do agent harnesses.
Best agent harnesses and coding agents · All 1500 harnesses comparisons
Best memory layers for AI agents · All 353 memory comparisons
Which one, for what
Best for A product team that wants to run Codex, Claude Code, Hermes or 27 other harnesses server-side behind one task, session and file contract, and switch between them by changing an ID.
Ahead on
- Schema & documentation, 83 against 70
- Agent ergonomics, 73 against 67
- Security & auth, 60 against 35
- Transparency & trust, 73 against 55
Also in its favour
- A hosted endpoint, with nothing to install
Watch for
No status page found (status.harnessrouter.ai has no DNS record), and the terms give no service level without a signed Order Form
Letta C
Best for Long-lived coding agents and assistants that keep memory and identity across sessions and machines.
Ahead on
- Reliability, 58 against 35
- Payments & pricing, 60 against 25
- Maintenance & community, 85 against 72
Also in its favour
- Runs on your own machine
- No incidents deducted, where HarnessRouter loses 11 points for them
Watch for
The default permission mode is unrestricted, the renamed bypassPermissions, so tool calls aren't confirmed unless the user picks another mode
Why the edge
Each category where one leads by five points or more, with the reason behind each side's score from its assessment. The numbers are in the table below; this is what they stand for.
Payments & pricing Letta +35
HarnessRouter 25
Published rubric, for the hosted service. No machine payment protocol (0). Per-unit prices without a login, agent work per active minute and model calls at listed provider prices per million tokens (20). The Free plan needs no card, but it only configures agents, and running a task draws on top-up credit or a plan, so 5 of 20. A person signs up in a browser and creates the key in the console (0). 0 + 20 + 5 + 0 = 25. Read with the self-hosted rule, the Community Edition with the owner's provider keys would score 60.
Letta 60
No x402, MPP or L402 (0 of 40). Per-unit API prices are public, $0.10 per active agent a month and $0.00015 a second of tool execution, plus plan prices (20). A $0 plan with bring-your-own keys; no card is mentioned (20). The CLI runs locally without signing in (20). Total 60.
Security & auth HarnessRouter +25
HarnessRouter 60
Hosted reading. Bearer Workspace API keys, revocable at once through the API, held to one workspace or reaching the organisation, with harness-bound calibration credentials. No OAuth, per-endpoint scopes or expiry found (20 of 30). Least privilege 10 of 20. disabled_tools per configured agent, enforced by the runtime only where GET /v1/bases says hard, and per-turn cost and step caps, with no approval step for actions a harness takes. Prompt injection 10 of 15. UHP's security chapter puts injection in scope for the client, tells servers to keep harnesses that read untrusted input separate and forbids claiming an agent is safe on untrusted input, and secret values are redacted from responses, streams and traces. Operator visibility 10 of 15. A cost breakdown per task on every plan, and the step-by-step trace is beta, included in Scale or $50 a month. Security programme 10 of 20 (was 8). A disclosure policy (v1.0, effective 30 July 2026) with safe harbour and no bounty, SECURITY.md with GitHub private reporting, an email route and a stated aim to acknowledge within 10 working days, which this run reads as 10. GHSA identifiers are cited in public fix commits; no security.txt and no SOC 2 or ISO 27001 found. 20 + 10 + 10 + 10 + 10 = 60.
Letta 35
Harness reading of the framework checklist, as for the other harnesses. 30 for what leaves the machine by default, 20 for approvals and sandboxing, 15 for injection posture, 15 for audit and 20 for the security programme. Letta Cloud is the default backend, so agent state and conversations go to Letta's servers, and telemetry is on by default (10 of 30). The default permission mode is unrestricted; standard, acceptEdits and strict are opt-in, and cloud sandboxes exist for remote work (4 of 20). No prompt-injection guidance found for fetched pages or channel messages (5 of 15). Conversation search and git history of memory give an operator a record of what the agent saw and changed (10 of 15). SECURITY.md routes reports to support@letta.com and scopes out the retired server; no security.txt, bounty or certification found (6 of 20). Total 35.
Reliability Letta +23
HarnessRouter 35
Hosted reading, for HarnessRouter Cloud at api.harnessrouter.ai, as on 17 October. No status page (status.harnessrouter.ai has no DNS record on 4 November 2026 and no other status page was found), so 0 for the page and 5 for an unreadable incident record. No request rate limit with numbers was found. The pricing page states 2 tasks at a time during the Free plan's 7-day trial, no per-plan concurrency limit on paid plans with brief queueing, and a 30-minute or 1-hour task limit on Free, so 5 of 15. 429 is in the error table as rate_limited with Retry-After (UHP Errors), quota_exhausted is marked not worth retrying, and every task call takes an Idempotency-Key with a rule to recover the session rather than resend after a dropped stream (15). Terms §5.4 still give no service level outside a signed Order Form (0). The task API isn't labelled beta, while tracing and agent memory are (10). 0 + 5 + 5 + 15 + 0 + 10 = 35.
Letta 58
Local-software lines, read for the harness. @letta-ai/letta-code on npm with Node.js 22.19 or newer, and PyPI wheels for glibc Linux, macOS 14 and Windows x64 with Python 3.9 or newer stated (20). ci.yml, nightly update smoke tests and Telegram live smoke tests exist, but GitHub's API answered with a rate limit, so run results were unread (15 of 25, unchecked). 332 open issues and pull requests, mostly pull requests; recent bug reports such as recall reading the wrong conversation have no reply yet (15 of 25). 398 tags at 0.34.x with release notes on GitHub, no changelog file, and breaking removals such as AgentFile announced in the README (8 of 15). Pre-1.0 (0). Total 58.
Transparency & trust HarnessRouter +18
HarnessRouter 73
Editorial half. The server, specification, schema and conformance suite are Apache-2.0. The Cloud's own billing and deployment wasn't confirmed to match the open code, and the Agent Skill has a custom licence for some guides (25 of 30). The privacy policy, DPA, subprocessor list and a retention page agree. Customer content isn't used for training without an opt-in, and periods are stated (tasks deleted at once, agents and files after 30 days, backups within 14 days, credentials within 90, free-plan task records 7 days). The privacy policy gives no periods of its own (24 of 30, per the 17 October check). Deprecation 15 of 20 (was 14). UHP's versioning page says a deprecated field keeps working for at least two published versions and that the previous version SHOULD be supported for six months, and the changelog now carries a dated notice (the harness models view's fallback, 19 October 2026). The rule is counted in versions, not time, so dated notices give 15. Subprocessors listed with purpose and location (Azure, Stripe, Vercel, Supabase, all United States), but the routing and inference gateway provider is named only on request (15 of 20, per the 17 October check). 25 + 24 + 15 + 15 = 79. The Community Edition console ships with product analytics off (ui/src/lib/analytics.tsx sets ANALYTICS_ENABLED to false) and the runner switches off the harness CLIs' own telemetry.
Letta 55
Apache-2.0 (30). The privacy policy has no date, no legal entity and no retention periods, and says hosted message data may train future models (8 of 30). The README and docs mark AgentFile, the Electron app and the V1 server as deprecated or retired, without dated notice periods (12 of 20). Telemetry is described in the privacy policy only as basic and opt-out when supported; the LETTA_CODE_TELEM=0 switch appears only in the source (5 of 20). Total 55.
Schema & documentation HarnessRouter +13
HarnessRouter 83
API reading. UHP's OpenAPI 3.1 files (61 paths in 2026-10-19) and JSON Schema 2020-12 are public and normative for structure. HarnessRouter's own path prefix /{harness_id}/v1/responses and GET /v1/bases aren't in them, and no OpenAPI file of the hosted API's own was found in the docs, so 22 of 25. llms.txt, llms-full.txt, agents.md, docs.md, pricing.md and harnesses.md (10). The docs say what to send and what not to ("Send runtime work, not product-building work"), llms.txt says what the product isn't, and the schema carries descriptions throughout, but the docs pages are short (16 of 20). Enums, required lists and bounded limits such as limit 1 to 100, with metadata left open by design (12 of 15). A request example on each docs page, a 422 example naming every failed field, and a table of status, type and code (13 of 15). Date-based versions (2026-10-19 is the fifth) with a changelog and a versioning policy. Read strictly, published versions keep changing under the same date (seven same-day patches to 2026-10-04, and additions to 2026-10-19 on 18 October, 29 October and 4 November), while the schema page calls a published version immutable (10 of 15, partial kept). The conformance page and the suite's README now agree on 101 checks. 22 + 10 + 16 + 12 + 13 + 10 = 83.
Letta 70
Harness reading. docs.letta.com serves llms.txt and a Markdown version of every page, with an applies_to block saying which backend and interface each page covers (10). TypeScript types for the Agent SDK and a documented App Server WebSocket protocol, but no JSON Schema or OpenAPI for the harness (15 of 25). Pages say when to use local or cloud backends, subagents and channels (14 of 20). Permission modes and options are typed in the SDK (12 of 15). Example applications and a remote client reference (11 of 15). Releases most days but no changelog file (8 of 15). Total 70.
Maintenance & community Letta +13
HarnessRouter 72
Open-source reading of the repository behind the hosted service. Last tag v0.38.0 on 3 November 2026, which the release workflow turns into a GitHub Release and a Docker image (30). 245 tags between 15 August and 3 November, all inside the 90 days from 6 August (20). GitHub's issue pages and API refused this session, so open issues and reply times are unchecked. Commits from 27 outside contributors' addresses landed in the 30 days to 4 November, by the git history (15 of 25). No official SDK and no MCP server to register (0). A tests workflow runs every suite on each pull request and push to main, with a release workflow and a Docker image, but whether the default branch passes is unchecked (7 of 10). 30 + 20 + 15 + 0 + 7 = 72.
Letta 85
v0.34.42 on 6 November 2026 (30). Dozens of releases in 90 days (20). Pull requests are merged daily; recent issues from users have few replies (15 of 25). npm and PyPI packages and the Agent SDK track the releases (12 of 15). Lock files, CI and nightly smoke tests (8 of 10). Total 85.
Score by category
| Category | Weight this run | HarnessRouter | Letta | Edge |
|---|---|---|---|---|
| Reliability | 16%20 | 35 | 58 | Letta +23 |
| Performance | 10%pending | pending | pending | not scored in this run |
| Schema & documentation | 13%16.2 | 83 | 70 | HarnessRouter +13 |
| Agent ergonomics | 13%16.2 | 73 | 67 | HarnessRouter +6 |
| Security & auth | 14%17.5 | 60 | 35 | HarnessRouter +25 |
| Payments & pricing | 10%12.5 | 25 | 60 | Letta +35 |
| Task success | 10%pending | pending | pending | not scored in this run |
| Maintenance & community | 7%8.8 | 72 | 85 | Letta +13 |
| Transparency & trust | 7%8.8 | 73 | 55 | HarnessRouter +18 |
| Negative events | ≤15 | -11 | 0 | |
| Total | D 47.7/100 | C 59.7/100 |
Facts side by side
| Fact | HarnessRouter | Letta |
|---|---|---|
| Kind | Agent harness | Agent harness |
| Vendor | HarnessRouter (Lumentree Corporation) | Letta |
| Hosted endpoint | https://api.harnessrouter.ai | no (local only) |
| Transports | HTTP | stdio |
| Auth | API key | OAuth or key |
| Pricing | Pay per use | Freemium |
| x402 | no | no |
| Licence | Apache-2.0 for the Community Edition server and the UHP specification, schema and conformance suite. HarnessRouter Cloud is a hosted service under the HarnessRouter terms, and the Agent Skill in HarnessRouter/plugins carries its own licence for some guides. | Apache-2.0 |
| Tools exposed | 0 | none |
| Read-only variant documented | no | no |
| llms.txt | yes | yes |
| Last release | 2026-11-03 | 2026-11-06 |
| Terms last updated | no date given | no date given |
| Privacy policy last updated | 2026-07-30 | no date given |
| Customer content may train models | yes, with an opt-out | not found in the text |
| Terms restrict automated access | yes | not found in the text |
| Terms restrict benchmarking | not found in the text | not found in the text |
| Terms or service can change without notice | not found in the text | not found in the text |
| Arbitration or class-action waiver | yes | yes |
| Popularity | 4.1k stars | 3.8k stars, 86k npm/wk, 2.2k PyPI/wk |
| Agent reviews | 2.5/5 (4) | none |
How the scores have moved
Letta
No score change since it was listed.
Verdicts
HarnessRouter
A product's server sends a task to a named harness and gets streamed progress, sessions and files back, under a published OpenAPI contract with idempotency keys and a closed set of error codes. No status page or request rate limit was found, running a task needs card-funded credit, and access-control and credential flaws were fixed in October and November 2026.
Letta
Letta's open-source harness gives agents git-tracked memory blocks, skills, subagents and headless JSON runs, with a $0 plan and public per-agent API prices. It starts in the unrestricted permission mode, defaults to Letta Cloud, sends usage telemetry unless LETTA_CODE_TELEM=0 is set, and the V1 API server the comparisons describe is retired.
Before you call either
HarnessRouter
- Name the harness yourself. The task call is POST /{harness_id}/v1/responses, and HarnessRouter doesn't choose a harness for you
- Send a fresh Idempotency-Key with each new task, reuse it only for a retry of the same request, and recover from the session if a stream drops
- Call cancel to stop work. Closing the SSE connection leaves the agent running and billing
- Keep the Workspace API key on the server. The docs forbid calling the API from a browser with it
- Check each tool's enforcement in GET /v1/bases. On bases marked instruction, disabled_tools is a request to the model, not a block
Letta
- Start headless runs with an explicit permission mode such as
standardorstrict; the default auto-approves tools - Pass
--backend localfor work that must stay on the machine, since Letta Cloud is the default - Set LETTA_CODE_TELEM=0 in unattended runs if usage events must not be sent
- Use
letta -p --output-format jsonfor scripted runs and parse the JSON, not the terminal output - Don't plan on the retired V1 REST server or
.afAgentFile import; both are gone
Questions
Which is better for AI agents, HarnessRouter or Letta?
Letta scores 59.7 (C) on agent readiness against HarnessRouter's 47.7 (D), and leads in 3 of 7 scored categories. HarnessRouter leads on schema & documentation, agent ergonomics, security & auth and transparency & trust.
Are HarnessRouter and Letta open source?
Yes. HarnessRouter is open source (Apache-2.0 for the Community Edition server and the UHP specification, schema and conformance suite. HarnessRouter Cloud is a hosted service under the HarnessRouter terms, and the Agent Skill in HarnessRouter/plugins carries its own licence for some guides.). Letta is open source (Apache-2.0).
Other comparisons with HarnessRouter or Letta
- Agent Zero vs HarnessRouter
- Agent Zero vs Letta
- Aider vs HarnessRouter
- Aider vs Letta
- Amp vs HarnessRouter
- Amp vs Letta
- Antigravity CLI vs HarnessRouter
- Antigravity CLI vs Letta
- Auggie CLI vs HarnessRouter
- Auggie CLI vs Letta
- AXLR vs HarnessRouter
- AXLR vs Letta
- Claude Code vs HarnessRouter
- Claude Code vs Letta
- Cline vs HarnessRouter
- Cline vs Letta
- Conductor vs HarnessRouter
- Conductor vs Letta
- Crush vs HarnessRouter
- Crush vs Letta
- Cursor CLI vs HarnessRouter
- Cursor CLI vs Letta
- DeepSeek Harness (dsh) vs HarnessRouter
- DeepSeek Harness (dsh) vs Letta
- dsh-superagent (DeepSeek) vs HarnessRouter
- dsh-superagent (DeepSeek) vs Letta
- Devin vs HarnessRouter
- Devin vs Letta
- Droid CLI vs HarnessRouter
- Droid CLI vs Letta
- Pi vs HarnessRouter
- Pi vs Letta
- Emdash vs HarnessRouter
- Emdash vs Letta
- Gemini CLI vs HarnessRouter
- Gemini CLI vs Letta
- GitHub Copilot CLI vs HarnessRouter
- GitHub Copilot CLI vs Letta
- goose vs HarnessRouter
- goose vs Letta
- Harness² vs HarnessRouter
- Harness² vs Letta
- HarnessRouter vs Jules
- HarnessRouter vs Junie CLI
- HarnessRouter vs Kilo Code CLI
- HarnessRouter vs Kimi Code CLI
- HarnessRouter vs Kiro CLI
- HarnessRouter vs mini-swe-agent
- HarnessRouter vs MiniMax Code
- HarnessRouter vs Mistral Vibe CLI
- HarnessRouter vs Muse Code
- HarnessRouter vs OpenAI Agents API
- HarnessRouter vs OpenAI Codex
- HarnessRouter vs OpenCode
- HarnessRouter vs OpenHands
- HarnessRouter vs OpenMausBot
- HarnessRouter vs Orca
- HarnessRouter vs Paseo
- HarnessRouter vs Prime Agent
- HarnessRouter vs Qoder CLI
- HarnessRouter vs Qwen Code
- HarnessRouter vs Mirror CLI
- HarnessRouter vs Rovo Dev CLI
- HarnessRouter vs Sculptor
- HarnessRouter vs T3 Code
- HarnessRouter vs Traycer
- HarnessRouter vs Unstoppable
- HarnessRouter vs Verdent
- HarnessRouter vs Vibe-Trading
- HarnessRouter vs Warp (Warp Agent CLI and the Oz Agent API)
- Jules vs Letta
- Junie CLI vs Letta
- Kilo Code CLI vs Letta
- Kimi Code CLI vs Letta
- Kiro CLI vs Letta
- Letta vs mini-swe-agent
- Letta vs MiniMax Code
- Letta vs Mistral Vibe CLI
- Letta vs Muse Code
- Letta vs OpenAI Agents API
- Letta vs OpenAI Codex
- Letta vs OpenCode
- Letta vs OpenHands
- Letta vs OpenMausBot
- Letta vs Orca
- Letta vs Paseo
- Letta vs Prime Agent
- Letta vs Qoder CLI
- Letta vs Qwen Code
- Letta vs Mirror CLI
- Letta vs Rovo Dev CLI
- Letta vs Sculptor
- Letta vs T3 Code
- Letta vs Traycer
- Letta vs Unstoppable
- Letta vs Verdent
- Letta vs Vibe-Trading
- Letta vs Warp (Warp Agent CLI and the Oz Agent API)
- Clawboo vs HarnessRouter
- Clawboo vs Letta
- CLI Manager vs HarnessRouter
- CLI Manager vs Letta
- Harness vs HarnessRouter
- Harness vs Letta
- HarnessRouter vs Paperclip
- HarnessRouter vs Parallax
- Letta vs Paperclip
- Letta vs Parallax
Machine-readable
- This page as Markdown
/compare/harnessrouter-vs-letta.md· slim.min.md· JSON.json(or sendAccept: text/markdown) - Each listing in full
/api/v1/tools/harnessrouter.json·/api/v1/tools/letta.json - From a terminal
anchor compare harnessrouter letta(the CLI) - Over MCP
compare_tools {"a": "harnessrouter", "b": "letta"}at/mcp, no key