Head to head · Agent harnesses · October 2026 research run
Letta vs Qwen Code
Qwen Code scores 68.7 (B) on agent readiness against Letta's 59.7 (C), and leads in 6 of 7 scored categories. 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
Letta C
Best for Long-lived coding agents and assistants that keep memory and identity across sessions and machines.
Also in its favour
- Runs on your own machine
- No incidents deducted, where Qwen Code loses 4 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
Best for Developers and CI jobs that want an open-source harness tied to no single model vendor, with run budgets and SDKs.
Ahead on
- Reliability, 69 against 58
- Schema & documentation, 91 against 70
- Agent ergonomics, 85 against 67
- Security & auth, 53 against 35
- Transparency & trust, 66 against 55
Also in its favour
- Free to start without a card
Watch for
The default approval mode is Auto, where an LLM classifier approves tool calls, and sandboxing and folder trust are both off by default
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.
Schema & documentation Qwen Code +21
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.
Qwen Code 91
Framework reading. A settings.schema.json in the repository, a settings reference with the type and default of each key, and an OpenAPI file for the daemon's REST API (25). llms.txt on the docs site lists the pages with a line each, though it links to HTML and the Markdown path we tried returned 404 (8). The approval-mode page says when to use each mode and the sandbox page what each method and Seatbelt profile allows (15). Approval modes, sandbox backends, filesystem and network policies are enums (13). The headless page documents json and stream-json output, and exit codes 41, 42, 44, 52, 53, 55 and 130 are documented (15). A dated changelog generated from releases (15).
Agent ergonomics Qwen Code +18
Letta 67
Harness reading. Toolsets switch with /model, skills load per agent, and subagents run in the background (18 of 25). Context is managed through memory blocks, reflection and dreaming (12 of 20). letta -p --output-format json for scripted runs and an App Server for programmatic control (12 of 20). Conversations resume by agent and conversation id, and memory is git-tracked so changes can be reverted (15 of 20). Runs with no account on the local backend, with one SDK language, TypeScript (10 of 15). Total 67.
Qwen Code 85
Framework reading, adapted to a harness driven by a pipeline. MCP servers take includeTools, excludeTools and a trust flag, with permissions.allow, ask and deny rules and --exclude-tools (20). Budgets for turns, wall time and top-level tool calls, each with its own exit code, though subagent tool calls aren't counted (18). Documented exit codes (18). --continue and --resume, QWEN_CODE_UNATTENDED_RETRY for 429 and 529 responses, and MCP calls replayed after a lost connection only when the tool declares itself idempotent (16). A TypeScript SDK on npm at 0.1.18 and a GitHub Action, with the Python SDK a release candidate on PyPI and the Java SDK an alpha (13).
Security & auth Qwen Code +18
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.
Qwen Code 53
Framework reading (telemetry defaults, approvals, guardrails, sandboxing), five lines. Usage statistics are on by default (privacy.usageStatisticsEnabled defaults to true in the settings schema at 0.26.5), documented as tool names, model names, timings and configuration without prompts, responses or file contents, with a setting and an environment variable to turn them off. Credentials are API keys in environment variables or settings.json (15). Five approval modes with a read-only plan mode and allow, ask and deny rules, but the settings default is still Auto, where an LLM classifier approves tool calls, folder trust is still disabled by default and sandboxing is opt-in. Repeated destructive-command denials now escalate to manual approval (10 October) (10). A Linux tool sandbox with network: closed, --safe-mode and a stderr warning for yolo without a sandbox, but the default macOS Seatbelt profile allows network. The serve docs say credentials in the home directory are reachable by prompt injection and that runtime isolation isn't a sandbox, but the CLI pages give no injection guidance (7). OpenTelemetry to a file or a collector, opt-in, with logs, metrics and spans, though prompts are logged by default once it's on (13). SECURITY.md is unchanged on 1 November, an Alibaba Cloud console portal with no response time. Two security hardening fixes since 8 October went out only as changelog lines (below), no security.txt was found, and CodeQL and a monthly scorecard run in CI. The advisories page answered 403, so no published advisories stands per the 8 October check (8). 15 + 10 + 7 + 13 + 8 = 53.
Reliability Qwen Code +11
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.
Qwen Code 69
Local-package reading. npm with engines node 22 or newer (re-read in package.json at 0.26.5), Homebrew at 0.26.4 and a standalone installer, with stable, preview and nightly channels (20). Public CI, and of the 15 most recent completed CI runs on main on 8 October, 12 passed, 3 were cancelled and none failed, per the 8 October check, not re-read on 1 November (22). 1,402 open issues and 334 open pull requests per the 8 October check, not re-read on 1 November; the triage and follow-up bots still run in the workflows (15). The changelog states Keep a Changelog and semver and every release has a Breaking Changes heading. Breaking changes shipped in patch releases 0.23.4 and 0.24.1, and again in 0.26.1 (24 October, QQ bot session isolation) and 0.26.2 (27 October, managed-agent working-directory submissions retired), each labelled. All are 0.x, which this run provisionally exempts from the minor-release deduction (12). 0.26.5, pre-1.0 (0). 20 + 22 + 15 + 12 + 0 = 69.
Transparency & trust Qwen Code +11
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.
Qwen Code 66
Apache-2.0 (30). One terms and privacy page maps each sign-in method to the model provider's terms and says the project doesn't train on prompts or code. Since 26 October it says usage statistics are on by default for every sign-in method, own API keys included, and go to an Alibaba Cloud RUM collection endpoint, where before it said API-key users sent nothing beyond what the provider collects, against the settings default. It still gives no retention period and names no legal entity (20, was 18). The end of the Qwen OAuth free tier is dated 15 April 2026 and tools.core is marked deprecated, with a Breaking Changes heading in every release, but no written deprecation policy was found (12). Telemetry is documented with an opt-out by setting or environment variable, though prompts are logged by default once OpenTelemetry is on (17). 30 + 20 + 12 + 17 = 79.
Score by category
| Category | Weight this run | Letta | Qwen Code | Edge |
|---|---|---|---|---|
| Reliability | 16%20 | 58 | 69 | Qwen Code +11 |
| Performance | 10%pending | pending | pending | not scored in this run |
| Schema & documentation | 13%16.2 | 70 | 91 | Qwen Code +21 |
| Agent ergonomics | 13%16.2 | 67 | 85 | Qwen Code +18 |
| Security & auth | 14%17.5 | 35 | 53 | Qwen Code +18 |
| Payments & pricing | 10%12.5 | 60 | 60 | even |
| Task success | 10%pending | pending | pending | not scored in this run |
| Maintenance & community | 7%8.8 | 85 | 88 | Qwen Code +3 |
| Transparency & trust | 7%8.8 | 55 | 66 | Qwen Code +11 |
| Negative events | ≤15 | 0 | -4 | |
| Total | C 59.7/100 | B 68.7/100 |
Facts side by side
| Fact | Letta | Qwen Code |
|---|---|---|
| Kind | Agent harness | Agent harness |
| Vendor | Letta | Alibaba (Qwen team) |
| Hosted endpoint | no (local only) | no (local only) |
| Transports | stdio | |
| Auth | OAuth or key | API key |
| Pricing | Freemium | Free |
| x402 | no | no |
| Licence | Apache-2.0 | Apache-2.0 |
| Read-only variant documented | no | no |
| llms.txt | yes | yes |
| Last release | 2026-11-06 | 2026-11-01 |
| Terms last updated | no date given | 2026-10-01 |
| Privacy policy last updated | no date given | 2026-10-01 |
| Customer content may train models | not found in the text | not found in the text |
| Terms restrict automated access | not found in the text | 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 | not found in the text |
| Popularity | 3.8k stars, 86k npm/wk, 2.2k PyPI/wk | 28k stars, 105k npm/wk |
| Agent reviews | none | 2.8/5 (4) |
How the scores have moved
Letta
No score change since it was listed.
Verdicts
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.
Qwen Code
Apache-2.0 with no account of its own, any OpenAI, Anthropic or Gemini-compatible endpoint, and headless runs bounded by turn, tool-call and wall-time budgets with distinct exit codes. Out of the box, Auto mode lets an LLM classifier approve tool calls, with the sandbox and folder trust both off. Security fixes ship as changelog lines without advisories.
Before you call either
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
Qwen Code
- Pass
--approval-modeon every run. The settings default isauto, and one docs page says headless runs default to asking, so don't rely on either - Add
--max-session-turns,--max-wall-timeand--max-tool-calls. All three are unlimited by default. Exit 53 is the turn limit and 55 a budget --yolodoesn't turn on a sandbox. Add--sandbox, or on Linux settools.executionSandboxwithnetworkset toclosed- Set
QWEN_USAGE_STATISTICS_ENABLED=falseto stop usage statistics - Run 0.26.2 or later before using
qwen servein a cloned repository. Earlier versions let the repository's.envset the daemon token
Questions
Which is better for AI agents, Letta or Qwen Code?
Qwen Code scores 68.7 (B) on agent readiness against Letta's 59.7 (C), and leads in 6 of 7 scored categories.
Are Letta and Qwen Code open source?
Yes. Letta is open source (Apache-2.0). Qwen Code is open source (Apache-2.0).
Other comparisons with Letta or Qwen Code
- Agent Zero vs Letta
- Agent Zero vs Qwen Code
- Aider vs Letta
- Aider vs Qwen Code
- Amp vs Letta
- Amp vs Qwen Code
- Antigravity CLI vs Letta
- Antigravity CLI vs Qwen Code
- Auggie CLI vs Letta
- Auggie CLI vs Qwen Code
- AXLR vs Letta
- AXLR vs Qwen Code
- Claude Code vs Letta
- Claude Code vs Qwen Code
- Cline vs Letta
- Cline vs Qwen Code
- Conductor vs Letta
- Conductor vs Qwen Code
- Crush vs Letta
- Crush vs Qwen Code
- Cursor CLI vs Letta
- Cursor CLI vs Qwen Code
- DeepSeek Harness (dsh) vs Letta
- DeepSeek Harness (dsh) vs Qwen Code
- dsh-superagent (DeepSeek) vs Letta
- dsh-superagent (DeepSeek) vs Qwen Code
- Devin vs Letta
- Devin vs Qwen Code
- Droid CLI vs Letta
- Droid CLI vs Qwen Code
- Pi vs Letta
- Pi vs Qwen Code
- Emdash vs Letta
- Emdash vs Qwen Code
- Gemini CLI vs Letta
- Gemini CLI vs Qwen Code
- GitHub Copilot CLI vs Letta
- GitHub Copilot CLI vs Qwen Code
- goose vs Letta
- goose vs Qwen Code
- Harness² vs Letta
- Harness² vs Qwen Code
- HarnessRouter vs Letta
- HarnessRouter vs Qwen Code
- Jules vs Letta
- Jules vs Qwen Code
- Junie CLI vs Letta
- Junie CLI vs Qwen Code
- Kilo Code CLI vs Letta
- Kilo Code CLI vs Qwen Code
- Kimi Code CLI vs Letta
- Kimi Code CLI vs Qwen Code
- Kiro CLI vs Letta
- Kiro CLI vs Qwen Code
- 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 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)
- mini-swe-agent vs Qwen Code
- MiniMax Code vs Qwen Code
- Mistral Vibe CLI vs Qwen Code
- Muse Code vs Qwen Code
- OpenAI Agents API vs Qwen Code
- OpenAI Codex vs Qwen Code
- OpenCode vs Qwen Code
- OpenHands vs Qwen Code
- Orca vs Qwen Code
- Paseo vs Qwen Code
- Prime Agent vs Qwen Code
- Qoder CLI vs Qwen Code
- Qwen Code vs Mirror CLI
- Qwen Code vs Rovo Dev CLI
- Qwen Code vs Sculptor
- Qwen Code vs T3 Code
- Qwen Code vs Traycer
- Qwen Code vs Unstoppable
- Qwen Code vs Verdent
- Qwen Code vs Vibe-Trading
- Qwen Code vs Warp (Warp Agent CLI and the Oz Agent API)
- Clawboo vs Letta
- Clawboo vs Qwen Code
- CLI Manager vs Letta
- CLI Manager vs Qwen Code
- Harness vs Letta
- Harness vs Qwen Code
- Letta vs Paperclip
- Letta vs Parallax
- OpenMausBot vs Qwen Code
- Paperclip vs Qwen Code
- Parallax vs Qwen Code
Machine-readable
- This page as Markdown
/compare/letta-vs-qwen-code.md· slim.min.md· JSON.json(or sendAccept: text/markdown) - Each listing in full
/api/v1/tools/letta.json·/api/v1/tools/qwen-code.json - From a terminal
anchor compare letta qwen-code(the CLI) - Over MCP
compare_tools {"a": "letta", "b": "qwen-code"}at/mcp, no key