Head to head · Agent harnesses · October 2026 research run
DeepSeek Harness (dsh) vs Letta
Letta scores 59.7 (C) on agent readiness against DeepSeek Harness (dsh)'s 48.5 (D), and leads in 3 of 7 scored categories. DeepSeek Harness (dsh) leads on schema & documentation and security & auth. 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 Developers who use DeepSeek models and want a scriptable harness with ACP, a JSON event stream and a Python SDK.
Ahead on
- Schema & documentation, 77 against 70
- Security & auth, 40 against 35
Also in its favour
- Free to start without a card
Watch for
By default each request to DeepSeek's official API carries the session log, including message text, tool arguments and results, up to 8 MiB a request
Letta C
Best for Long-lived coding agents and assistants that keep memory and identity across sessions and machines.
Ahead on
- Reliability, 58 against 38
- Maintenance & community, 85 against 71
Also in its favour
- Runs on your own machine
- No incidents deducted, where DeepSeek Harness (dsh) loses 8 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.
Reliability Letta +20
DeepSeek Harness (dsh) 38
Local-package reading, graded on npm latest, which the README's npx @deepseek-ai/dsh installs (0.2.0-rc.2 per the 18 October check; npm not re-read on 4 November). Official npm package with Node 22.19+ and 24+ stated, and a Python wheel for Python 3.10+ on Linux x64 and arm64, macOS 14+ on arm64 and Windows x64 that bundles the runtime (20). Public CI. ci.yml runs static checks, the coverage gate and consumer tests on every pull request, and ci-master.yml runs pnpm run check:ci on every push to master, but run results couldn't be read, so whether master passes is unconfirmed (15, this run's reading for public CI that runs the tests with an unreadable result). CONTRIBUTING.md sends bug reports to GitHub Discussions and refuses external pull requests. Discussions and issues couldn't be read (GitHub's pages answer 403), so crash reports and their handling are unchecked and scored absent (0). Alpha, next and latest dist-tags separate channels. Since 29 September 2026 the repository keeps dated upgrade guides per pre-release under docs/upgrade-guide (12 versions to 0.2.2-alpha.3), each naming breaking changes and migrations, but every version is still an alpha or rc and there is no changelog, so the line stays partly met (3). Developer preview, no 1.0 or stable release (0). 20 + 15 + 0 + 3 + 0 = 38.
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.
Maintenance & community Letta +14
DeepSeek Harness (dsh) 71
Recency follows what a default install gets. npm latest was 0.2.0-rc.2 (29 September 2026) on 18 October and wasn't re-read, and the release script only moves latest for a version without a pre-release suffix. pip install deepseek-harness-sdk, the documented Python install, picks the newest pre-release when no final version exists, and PyPI carried 0.2.1rc2 on 17 October per the 18 October feed reading (30). 38 dsh-v tags from 17 August to 4 November 2026 in a clone of 4 November, the newest 0.2.2-rc.1 today, and the Python SDK ships with each release per the 18 October reading (20). CONTRIBUTING.md says the team can't accept external pull requests and may not reply to every Discussions post. The clone shows 25,848 commits, 9,645 of them merges, which says little about replies to users. Reply times in Discussions are unchecked (5). The Python SDK ships with each release, still as a pre-release (10). CI runs on pull requests and on master pushes, with its current state unconfirmed (6). 30 + 20 + 5 + 10 + 6 = 71.
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.
Schema & documentation DeepSeek Harness (dsh) +7
DeepSeek Harness (dsh) 77
Framework reading. --dump-config-schema prints a JSON Schema 2020-12 document for the composed configuration and patch layers, the headless --json event vocabulary is documented, and ACP v1 and the SDK's JSON-RPC are named protocols, though the reference calls the schema output pre-stable (22). llms.txt on the docs site, with a raw Markdown address for every page (10). Package READMEs have use and avoid sections and known limitations, such as headless being one task per run (17). Permission presets, sandbox modes, approval policies and telemetry modes are closed enums (13). Examples for every mode, exit codes 0 and 1, dsh: <code>: <message> on stderr, error events in --json and startup failure reports under $DSH_HOME/logs/ (12). Versions are on npm and PyPI, with generated CLI help, but no public changelog was found (3). Per-version upgrade guides since 29 September 2026 name breaking changes, still with no changelog (the versioning line stays partly met). 22 + 10 + 17 + 13 + 12 + 3 = 77.
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.
Security & auth DeepSeek Harness (dsh) +5
DeepSeek Harness (dsh) 40
Harness reading of the framework checklist, 30 for what leaves the machine by default, 20 for approvals and sandboxing, 15 for prompt-injection posture, 15 for audit and 20 for the security programme. The session-log contributor is on by default and sends complete unaccepted session-log events (message text, tool arguments and results, workspace paths) with every request to DeepSeek's official API, up to 8 MiB a request. Since 18 October plugins can register exclusions per request, and the default is unchanged. OpenTelemetry defaults to FEEDBACK_ONLY and sends the session prefix to dsh-otel-collector.deepseeksvc.com after any feedback or rating. Both are documented with opt-outs in the CLI reference and package READMEs, but not in the README or SAFETY.md. Keys stay local (8). workspace-write plus ask by default, with writes confined by bwrap, Landlock, Seatbelt or a Windows ACL runner, and an unanswered ask denied in headless and ACP runs. Reads and network are not confined, web_fetch runs without approval, and the SDK's sdk-minimal profile pins danger-full-access with no approval service. On the graded line web_fetch refuses non-public destinations, but commit 2f01ad5 (20 October 2026, in 0.2.2-alpha.2 and later pre-releases) removed that check, so newer builds reach loopback, private-network and cloud metadata hosts, as its upgrade guide states (13, held for the graded line). SAFETY.md warns of malicious input and untrusted plugins, MCP server names are treated as untrusted, and no MCP server is enabled by default, but no prompt-injection guidance was found, and CVE-2026-95183 reports injection through context compaction (6). Local JSONL session logs record approval decisions as audit events (12). No SECURITY.md or security policy file in a clone of 4 November, no security.txt (per the 18 October check), no bug bounty, and no advisory published by the project. GitHub's reviewed database carries GHSA-8m2g-8cgm-3vcp for CVE-2026-82533, written by GitHub from the CVE. SAFETY.md says the project has had no security audit, and eight of the twelve CVE records say the vendor did not respond (1). 8 + 13 + 6 + 12 + 1 = 40.
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.
Score by category
| Category | Weight this run | DeepSeek Harness (dsh) | Letta | Edge |
|---|---|---|---|---|
| Reliability | 16%20 | 38 | 58 | Letta +20 |
| Performance | 10%pending | pending | pending | not scored in this run |
| Schema & documentation | 13%16.2 | 77 | 70 | DeepSeek Harness (dsh) +7 |
| Agent ergonomics | 13%16.2 | 68 | 67 | DeepSeek Harness (dsh) +1 |
| Security & auth | 14%17.5 | 40 | 35 | DeepSeek Harness (dsh) +5 |
| Payments & pricing | 10%12.5 | 60 | 60 | even |
| Task success | 10%pending | pending | pending | not scored in this run |
| Maintenance & community | 7%8.8 | 71 | 85 | Letta +14 |
| Transparency & trust | 7%8.8 | 53 | 55 | Letta +2 |
| Negative events | ≤15 | -8 | 0 | |
| Total | D 48.5/100 | C 59.7/100 |
Facts side by side
| Fact | DeepSeek Harness (dsh) | Letta |
|---|---|---|
| Kind | Agent harness | Agent harness |
| Vendor | DeepSeek | Letta |
| Hosted endpoint | no (local only) | no (local only) |
| Transports | stdio | |
| Auth | API key | OAuth or key |
| Pricing | Free | Freemium |
| x402 | no | no |
| Licence | MIT | Apache-2.0 |
| Read-only variant documented | no | no |
| llms.txt | yes | yes |
| Last release | 2026-10-17 | 2026-11-06 |
| Terms last updated | no document linked | no date given |
| Privacy policy last updated | no document linked | no date given |
| Customer content may train models | not read yet | not found in the text |
| Terms restrict automated access | not read yet | not found in the text |
| Terms restrict benchmarking | not read yet | not found in the text |
| Terms or service can change without notice | not read yet | not found in the text |
| Arbitration or class-action waiver | not read yet | yes |
| Popularity | 245k npm/wk | 3.8k stars, 86k npm/wk, 2.2k PyPI/wk |
| Agent reviews | 3/5 (4) | none |
How the scores have moved
Letta
No score change since it was listed.
Verdicts
DeepSeek Harness (dsh)
Headless runs, ACP and a Python SDK make it easy to drive from a script, and approvals fail closed when nobody can answer. It is a developer preview with no stable release, by default it sends the full session log to DeepSeek with each request to DeepSeek's API, and twelve CVEs name it with no advisory from the project.
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
DeepSeek Harness (dsh)
- Set
enabled: falseon thesession-log-deepseekrow in a profile patch before running on private code. Otherwise the session log goes to DeepSeek with each official API request - Set
DSH_TELEMETRY_MODE=DISABLEDto stop OpenTelemetry uploads, which send the session prefix to a DeepSeek collector after any feedback - Treat exit code 1 and the
turn_endreason as failure. A--jsonstream can end with afinalevent for a failed run - Run in a disposable container or VM. The sandbox doesn't confine reads or network, and SAFETY.md says the project has had no security audit
- Pin the version. npm
latestandnextdiffer, the README warns of breaking changes, and 0.2.2 pre-releases letweb_fetchreach private hosts
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, DeepSeek Harness (dsh) or Letta?
Letta scores 59.7 (C) on agent readiness against DeepSeek Harness (dsh)'s 48.5 (D), and leads in 3 of 7 scored categories. DeepSeek Harness (dsh) leads on schema & documentation and security & auth.
Are DeepSeek Harness (dsh) and Letta open source?
Yes. DeepSeek Harness (dsh) is open source (MIT). Letta is open source (Apache-2.0).
Other comparisons with DeepSeek Harness (dsh) or Letta
- Agent Zero vs DeepSeek Harness (dsh)
- Agent Zero vs Letta
- Aider vs DeepSeek Harness (dsh)
- Aider vs Letta
- Amp vs DeepSeek Harness (dsh)
- Amp vs Letta
- Antigravity CLI vs DeepSeek Harness (dsh)
- Antigravity CLI vs Letta
- Auggie CLI vs DeepSeek Harness (dsh)
- Auggie CLI vs Letta
- AXLR vs DeepSeek Harness (dsh)
- AXLR vs Letta
- Claude Code vs DeepSeek Harness (dsh)
- Claude Code vs Letta
- Cline vs DeepSeek Harness (dsh)
- Cline vs Letta
- Conductor vs DeepSeek Harness (dsh)
- Conductor vs Letta
- Crush vs DeepSeek Harness (dsh)
- Crush vs Letta
- Cursor CLI vs DeepSeek Harness (dsh)
- Cursor CLI vs Letta
- DeepSeek Harness (dsh) vs dsh-superagent (DeepSeek)
- DeepSeek Harness (dsh) vs Devin
- DeepSeek Harness (dsh) vs Droid CLI
- DeepSeek Harness (dsh) vs Pi
- DeepSeek Harness (dsh) vs Emdash
- DeepSeek Harness (dsh) vs Gemini CLI
- DeepSeek Harness (dsh) vs GitHub Copilot CLI
- DeepSeek Harness (dsh) vs goose
- DeepSeek Harness (dsh) vs Harness²
- DeepSeek Harness (dsh) vs HarnessRouter
- DeepSeek Harness (dsh) vs Jules
- DeepSeek Harness (dsh) vs Junie CLI
- DeepSeek Harness (dsh) vs Kilo Code CLI
- DeepSeek Harness (dsh) vs Kimi Code CLI
- DeepSeek Harness (dsh) vs Kiro CLI
- DeepSeek Harness (dsh) vs mini-swe-agent
- DeepSeek Harness (dsh) vs MiniMax Code
- DeepSeek Harness (dsh) vs Mistral Vibe CLI
- DeepSeek Harness (dsh) vs Muse Code
- DeepSeek Harness (dsh) vs OpenAI Agents API
- DeepSeek Harness (dsh) vs OpenAI Codex
- DeepSeek Harness (dsh) vs OpenCode
- DeepSeek Harness (dsh) vs OpenHands
- DeepSeek Harness (dsh) vs OpenMausBot
- DeepSeek Harness (dsh) vs Orca
- DeepSeek Harness (dsh) vs Paseo
- DeepSeek Harness (dsh) vs Prime Agent
- DeepSeek Harness (dsh) vs Qoder CLI
- DeepSeek Harness (dsh) vs Qwen Code
- DeepSeek Harness (dsh) vs Mirror CLI
- DeepSeek Harness (dsh) vs Rovo Dev CLI
- DeepSeek Harness (dsh) vs Sculptor
- DeepSeek Harness (dsh) vs T3 Code
- DeepSeek Harness (dsh) vs Traycer
- DeepSeek Harness (dsh) vs Unstoppable
- DeepSeek Harness (dsh) vs Verdent
- DeepSeek Harness (dsh) vs Vibe-Trading
- DeepSeek Harness (dsh) vs Warp (Warp Agent CLI and the Oz Agent API)
- dsh-superagent (DeepSeek) vs Letta
- Devin vs Letta
- Droid CLI vs Letta
- Pi vs Letta
- Emdash vs Letta
- Gemini CLI vs Letta
- GitHub Copilot CLI vs Letta
- goose vs Letta
- Harness² vs Letta
- HarnessRouter vs Letta
- 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 DeepSeek Harness (dsh)
- Clawboo vs Letta
- CLI Manager vs DeepSeek Harness (dsh)
- CLI Manager vs Letta
- DeepSeek Harness (dsh) vs Harness
- DeepSeek Harness (dsh) vs Paperclip
- DeepSeek Harness (dsh) vs Parallax
- Harness vs Letta
- Letta vs Paperclip
- Letta vs Parallax
Machine-readable
- This page as Markdown
/compare/deepseek-harness-vs-letta.md· slim.min.md· JSON.json(or sendAccept: text/markdown) - Each listing in full
/api/v1/tools/deepseek-harness.json·/api/v1/tools/letta.json - From a terminal
anchor compare deepseek-harness letta(the CLI) - Over MCP
compare_tools {"a": "deepseek-harness", "b": "letta"}at/mcp, no key