{
  "data": {
    "a": {
      "slug": "crush",
      "name": "Crush",
      "vendor": "Charm",
      "vendorUrl": "https://charm.land",
      "kind": "harness",
      "category": "agent-harnesses",
      "summary": "Terminal coding agent from Charm, written in Go, that works with the model of the owner's choice. It has a TUI, a one-shot `crush run` mode, LSP context, MCP servers, Agent Skills and an optional local client-server mode.",
      "url": "https://www.anchorterminal.com/tools/crush",
      "markdownUrl": "https://www.anchorterminal.com/tools/crush.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/crush.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/crush.json",
      "dns": "crush.grade.anchorterminal.com",
      "repo": "https://github.com/charmbracelet/crush",
      "license": "FSL-1.1-MIT (source-available, each release converts to MIT two years after it is made available)",
      "transports": [],
      "packages": [
        {
          "registry": "npm",
          "name": "@charmland/crush"
        },
        {
          "registry": "go",
          "name": "github.com/charmbracelet/crush"
        }
      ],
      "auth": "mixed",
      "authNotes": "No Charm account is needed. Provider keys come from environment variables such as `ANTHROPIC_API_KEY` or `OPENAI_API_KEY`, the model picker or a `crushrc`, local models need none, and Charm's Hyper provider uses a device login. `crush server` has no authentication and listens on a per-user Unix socket by default.",
      "pricing": "freemium",
      "pricingNotes": "The CLI is free to use under FSL-1.1-MIT. You pay your model provider, or Charm's Hyper subscription, which the README says has a free tier. Hyper's public provider file lists per-million-token figures for 22 models. Plan prices sit in a script-rendered app and weren't read.",
      "priceSummary": "Freemium",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the README, the docs folder or the source (checked 2026-10-18).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 29000,
        "npmWeekly": 5594,
        "pypiWeekly": null,
        "asOf": "2026-10-18"
      },
      "docsUrl": "https://github.com/charmbracelet/crush#readme",
      "capabilities": [
        "agent.harness",
        "agent.mcp-client",
        "agent.multi-agent"
      ],
      "tags": [
        "harness",
        "coding-agent",
        "cli",
        "source-available",
        "go",
        "mcp",
        "telemetry-default-on",
        "pre-1.0",
        "freemium",
        "no-card",
        "local"
      ],
      "lastRelease": "2026-10-29",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 49.8,
        "grade": "D",
        "agentReady": false,
        "rank": 1082,
        "ranked": true,
        "rankOf": 1510,
        "categoryRank": 41,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 52,
          "maintenance": 82,
          "payments": 55,
          "reliability": 52,
          "schema": 65,
          "security": 41,
          "transparency": 59
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-04"
        },
        "negative": -6,
        "negativeNotes": [
          "23 October 2026. Released fix of a described flaw with no advisory found. v0.98.2 carried 1dbd303a, which says write, edit and multiedit created parent directories before the permission prompt, so \"An agent could mkdir -p anywhere on the machine with no consent\". OSV lists no advisory for Crush, so 3 is deducted (https://github.com/charmbracelet/crush/commit/1dbd303a).",
          "30 October 2026. Fix in no release. fd40067e, merged to main on 30 October and carried only by the `nightly` pre-release, says an \"allow for this session\" approval of one shell command \"stood in for every command run in that directory afterwards, however dangerous, with no further prompt\". v0.99.0 (29 October) still keys session grants on tool, action and path. 3 is deducted until a release carries it (https://github.com/charmbracelet/crush/commit/fd40067e)."
        ],
        "verdict": "Works with almost any provider or a local model and needs no Charm account. `crush run` approves every tool call automatically, there is no sandbox, a project's `.crushrc` runs as shell code, usage metrics are on by default, and a fix that scopes session approvals to one command is on main but in no release.",
        "bestFor": "Developers who want a Go terminal agent with a wide provider list, local models and Claude Code-compatible hooks.",
        "strengths": [
          "Any OpenAI- or Anthropic-compatible provider, Bedrock, Vertex, Azure and local models through Ollama, llama.cpp, LM Studio or LiteLLM, with no Charm account",
          "PreToolUse hooks, compatible with Claude Code's format, can block or rewrite tool calls",
          "Releases cosign-signed, with CodeQL, Grype and govulncheck in CI",
          "19 releases from 7 August to 29 October 2026, the latest v0.99.0 on 29 October",
          "Built for macOS, Linux, Windows, Android and three BSDs, with packages for npm, Homebrew, Winget, Scoop, apt, yum and Nix"
        ],
        "weaknesses": [
          "`crush run` approves every permission request automatically, which the README doesn't mention",
          "No sandbox, only a refusal list of shell commands, and permission fixes merged on 30 October 2026 are in no release yet",
          "A project's `.crushrc` and `$(...)` in `crush.json` run as code when Crush starts",
          "Usage metrics are on by default and are linked to the Hyper account after a Hyper login",
          "No JSON output, turn limit or cost limit for `crush run`, and the client-server API is opt-in and has no authentication"
        ],
        "agentNotes": [
          "Add `permissions deny` rules or a PreToolUse hook before `crush run`. It approves every permission request in its session, and a session approval in v0.99.0 covers later commands in the same directory",
          "Read `.crushrc`, `crushrc` and `crush.json` in a cloned repository before running Crush there. They execute as shell code at startup",
          "Set `CRUSH_DISABLE_METRICS=1` or `DO_NOT_TRACK=1` to stop usage metrics to data.charm.land",
          "Wrap `crush run` in your own timeout. It has no turn, time or cost limit flag",
          "Configure a provider by environment variable or `crushrc` first. With none, `crush run` exits with an error asking for interactive setup"
        ],
        "metrics": {
          "kind": "local",
          "measured": false
        },
        "reviewCount": 4,
        "avgRating": 2.3,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "D",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 49.8
          }
        ],
        "editorialScores": {
          "ergonomics": 52,
          "maintenance": 82,
          "payments": 55,
          "reliability": 52,
          "schema": 65,
          "security": 41,
          "transparency": 49
        },
        "provenanceScore": 69,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-04",
            "maintenance": "2026-11-04",
            "payments": "2026-11-04",
            "reliability": "2026-11-04",
            "schema": "2026-11-04",
            "security": "2026-11-04",
            "transparency": "2026-11-04"
          },
          "last": "2026-11-04",
          "lastMoved": "2026-11-04",
          "oldest": "2026-11-04",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "install": "npm install -g @charmland/crush   # or: brew install charmbracelet/tap/crush",
        "headless": {
          "command": "crush run --quiet \"$TASK\"",
          "env": {
            "CRUSH_DISABLE_METRICS": "1"
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/agent.harness",
        "tool": "https://letme.dev/crush"
      },
      "area": "frameworks",
      "unitPrices": [
        {
          "item": "Hyper, qwen3.8-max (default large model), input",
          "unit": "1m-tokens",
          "usd": 2,
          "note": "output $6, from Hyper's public provider file"
        },
        {
          "item": "Hyper, deepseek-v4.1-flash (default small model), input",
          "unit": "1m-tokens",
          "usd": 0.33,
          "note": "output $1.31, from Hyper's public provider file"
        }
      ],
      "provenance": {
        "legalEntity": "Charmbracelet, Inc.",
        "domain": "charm.land",
        "domainRegistered": "2023-08-17",
        "endpointOnVendorDomain": null,
        "terms": "",
        "privacy": "",
        "statusPage": "",
        "changelog": "https://github.com/charmbracelet/crush/releases",
        "securityTxt": "none",
        "checked": "2026-10-18",
        "notes": [
          "LICENSE.md and the charm.land footer name Charmbracelet, Inc.",
          "charm.land/privacy, charm.land/terms and charm.land/.well-known/security.txt return Charm's not-found page. Hyper links Terms of Service and a Privacy Policy at hyper.charm.land/legal, which render by script and weren't read.",
          "The organisation's SECURITY.md gives vt100@charm.sh for reports. The crush repository has no SECURITY.md of its own.",
          "Release notes are generated from commit messages on GitHub releases. There is no CHANGELOG file in the repository."
        ],
        "score": 69
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/crush.json",
      "live": {
        "slug": "crush",
        "versions": [
          {
            "registry": "github",
            "name": "charmbracelet/crush",
            "version": "v0.100.0",
            "released": "2026-11-05",
            "seenAt": "2026-11-06T23:18:38.482836477Z"
          },
          {
            "registry": "npm",
            "name": "@charmland/crush",
            "version": "0.100.0",
            "seenAt": "2026-11-06T23:18:38.262616832Z"
          }
        ],
        "githubStars": 28981,
        "npmWeekly": 19666,
        "securityTxt": {
          "url": "https://charm.land/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T16:01:10.92332678Z"
        },
        "domain": {
          "domain": "charm.land",
          "registered": "2023-08-17",
          "source": "https://rdap.identitydigital.services/rdap/domain/charm.land",
          "checkedAt": "2026-11-01T14:21:15.41389399Z"
        },
        "github": {
          "repo": "charmbracelet/crush",
          "checkedAt": "2026-11-02T08:37:55.400043602Z",
          "stars": 28910,
          "archived": false,
          "issuesEnabled": true,
          "pushedAt": "2026-11-02T07:41:22Z",
          "openIssues": 284,
          "openPRs": 244,
          "issuesOpened90d": 174,
          "issuesClosed90d": 262,
          "prsMerged90d": 203,
          "ci": {
            "branch": "main",
            "runs": 50,
            "success": 46,
            "failure": 1,
            "other": 3,
            "latest": "success",
            "latestAt": "2026-11-02T07:43:21Z"
          },
          "replies": {
            "sampled": 25,
            "unanswered": 17,
            "medianDays": 4.9
          }
        },
        "updatedAt": "2026-11-07T16:01:10.92332678Z"
      }
    },
    "answer": "Letta scores 59.7 (C) on agent readiness against Crush's 49.8 (D), and leads in 5 of 7 scored categories. Crush leads on security \u0026 auth.",
    "b": {
      "slug": "letta",
      "name": "Letta",
      "vendor": "Letta",
      "vendorUrl": "https://www.letta.com",
      "kind": "harness",
      "category": "agent-harnesses",
      "summary": "Letta, from the MemGPT team, is an open-source agent harness (formerly Letta Code) for stateful agents that keep memory blocks, skills and conversations across sessions, used from a CLI, chat.letta.com, messaging channels or the Agent SDK, with Letta Cloud.",
      "url": "https://www.anchorterminal.com/tools/letta",
      "markdownUrl": "https://www.anchorterminal.com/tools/letta.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/letta.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/letta.json",
      "dns": "letta.grade.anchorterminal.com",
      "repo": "https://github.com/letta-ai/letta-code",
      "license": "Apache-2.0",
      "transports": [
        "stdio"
      ],
      "packages": [
        {
          "registry": "npm",
          "name": "@letta-ai/letta-code"
        },
        {
          "registry": "pypi",
          "name": "letta"
        }
      ],
      "auth": "mixed",
      "authNotes": "Local use needs only the user's own model keys or coding-plan logins through `/connect`. Signing in with Letta (`/login`, OAuth in the browser) stores agents in Letta Cloud and enables remote computers and secrets. Developer plans use Letta API keys.",
      "pricing": "freemium",
      "pricingNotes": "Free plan at $0 with bring-your-own keys and limited agents and storage. Pro $20 a month with Letta Auto quotas and up to 20 agents. API plan $20 a month plus $0.10 per active agent a month and $0.00015 a second of tool execution, with LLM usage at token cost.",
      "priceSummary": "$20 / mo",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the letta-code source, docs.letta.com's llms.txt or the pricing page (checked 2026-11-06).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 3793,
        "npmWeekly": 85863,
        "pypiWeekly": 2225,
        "asOf": "2026-11-06"
      },
      "docsUrl": "https://docs.letta.com",
      "llmsTxt": "https://docs.letta.com/llms.txt",
      "capabilities": [
        "agent.harness",
        "agent.mcp-client",
        "agent.multi-agent",
        "memory.store",
        "memory.search"
      ],
      "tags": [
        "open-source",
        "local",
        "hosted",
        "freemium",
        "apache-2.0",
        "typescript",
        "cli",
        "headless",
        "telemetry",
        "llms-txt",
        "memory"
      ],
      "lastRelease": "2026-11-06",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 59.7,
        "grade": "C",
        "agentReady": false,
        "rank": 687,
        "ranked": true,
        "rankOf": 1510,
        "categoryRank": 18,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 67,
          "maintenance": 85,
          "payments": 60,
          "reliability": 58,
          "schema": 70,
          "security": 35,
          "transparency": 55
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-06"
        },
        "negative": 0,
        "verdict": "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.",
        "bestFor": "Long-lived coding agents and assistants that keep memory and identity across sessions and machines.",
        "strengths": [
          "Apache-2.0 harness on npm and PyPI with 0.34.42 released on 6 November 2026, and releases most days",
          "Memory blocks and MemFS keep an agent's context in git, with optional sync to the user's own repository",
          "Headless runs with `-p` and `--output-format json`, plus a TypeScript Agent SDK and a self-hosted App Server",
          "Public prices, a $0 plan with bring-your-own keys, and an API plan at $20 a month plus $0.10 per active agent",
          "Runs locally without signing in, with `letta backend local` or `--backend local`"
        ],
        "weaknesses": [
          "The default permission mode is `unrestricted`, the renamed `bypassPermissions`, so tool calls aren't confirmed unless the user picks another mode",
          "Letta Cloud is the default backend, so agent memory and conversations go to Letta's servers unless the user chooses local",
          "Usage telemetry is on by default, with the LETTA_CODE_TELEM=0 opt-out found only in the source",
          "The Letta V1 Python API server is retired and unsupported, and the letta-ai/letta repository is now a landing page",
          "The privacy policy names no legal entity or date and says hosted message data may train future models"
        ],
        "agentNotes": [
          "Start headless runs with an explicit permission mode such as `standard` or `strict`; the default auto-approves tools",
          "Pass `--backend local` for 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 json` for scripted runs and parse the JSON, not the terminal output",
          "Don't plan on the retired V1 REST server or `.af` AgentFile import; both are gone"
        ],
        "metrics": {
          "kind": "local",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 59.7
          }
        ],
        "editorialScores": {
          "ergonomics": 67,
          "maintenance": 85,
          "payments": 60,
          "reliability": 58,
          "schema": 70,
          "security": 35,
          "transparency": 55
        },
        "provenanceScore": 54,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-06",
            "maintenance": "2026-11-06",
            "payments": "2026-11-06",
            "reliability": "2026-11-06",
            "schema": "2026-11-06",
            "security": "2026-11-06",
            "transparency": "2026-11-06"
          },
          "last": "2026-11-06",
          "oldest": "2026-11-06",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "install": "npm install -g @letta-ai/letta-code",
        "headless": {
          "local": "letta --backend local",
          "run": "letta -p --output-format json \"\u003ctask\u003e\"",
          "server": "letta server"
        }
      },
      "letme": {
        "capability": "https://letme.dev/agent.harness",
        "tool": "https://letme.dev/letta"
      },
      "alsoIn": [
        "agent-memory"
      ],
      "area": "frameworks",
      "unitPrices": [
        {
          "item": "Pro plan",
          "unit": "month",
          "usd": 20,
          "note": "Letta Auto quotas, up to 20 agents"
        },
        {
          "item": "API plan active agent",
          "unit": "month",
          "usd": 0.1,
          "note": "Plus $20 a month base and $0.00015 a second of tool execution"
        }
      ],
      "provenance": {
        "legalEntity": "",
        "domain": "letta.com",
        "domainRegistered": "1997-10-01",
        "endpointOnVendorDomain": null,
        "terms": "https://www.letta.com/terms-of-service",
        "privacy": "https://www.letta.com/privacy-policy",
        "statusPage": "",
        "changelog": "https://github.com/letta-ai/letta-code/releases",
        "securityTxt": "none",
        "checked": "2026-11-06",
        "notes": [
          "The privacy policy shows no last-updated date and names no legal entity, only Letta. It says hosted message data may be used to train new models and that basic telemetry can be turned off in settings when supported.",
          "www.letta.com and docs.letta.com robots.txt allow all crawlers.",
          "RDAP gives letta.com a registration date of 1 October 1997, which predates the company, so the domain was bought later.",
          "/.well-known/security.txt returns 404. SECURITY.md in letta-ai/letta asks for reports to support@letta.com.",
          "The terms URL is the conventional path and was not read; the policy reader checks it at landing."
        ],
        "score": 54
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/letta.json",
      "live": {
        "slug": "letta",
        "versions": [
          {
            "registry": "github",
            "name": "letta-ai/letta-code",
            "version": "v0.34.43",
            "released": "2026-11-06",
            "seenAt": "2026-11-06T23:39:39.434291816Z"
          },
          {
            "registry": "npm",
            "name": "@letta-ai/letta-code",
            "version": "0.34.43",
            "seenAt": "2026-11-06T23:39:38.413416142Z"
          },
          {
            "registry": "pypi",
            "name": "letta",
            "version": "0.34.12",
            "released": "2026-10-12",
            "seenAt": "2026-11-06T23:39:39.241816797Z"
          }
        ],
        "githubStars": 3794,
        "npmWeekly": 85863,
        "pypiWeekly": 2225,
        "securityTxt": {
          "url": "https://letta.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T16:01:02.768002207Z"
        },
        "llmsTxt": {
          "url": "https://docs.letta.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:32:52.28674296Z"
        },
        "pages": [
          {
            "url": "https://www.letta.com/privacy-policy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T14:30:46.549817082Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "947a68f3e3a0"
          },
          {
            "url": "https://www.letta.com/terms-of-service",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-07T14:30:48.740250784Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "63f31d6ebfb8"
          }
        ],
        "updatedAt": "2026-11-07T16:01:02.768002207Z"
      }
    },
    "edges": [
      {
        "by": 15,
        "category": "ergonomics",
        "leads": "letta",
        "name": "Agent ergonomics",
        "reasons": {
          "a": "Harness reading, scored on what an agent or pipeline driving `crush run` has to supply. About 20 built-in tools, any of which `permissions deny` hides, MCP servers take per-server `disabled_tools`, and skills can be turned off or kept out of the model's list. No lazy loading of MCP tools found (17). No turn, time or cost limit on `crush run`, and the only output controls are `--quiet` and `--verbose` (6). Errors come back as plain messages with a non-zero exit, such as the one for an unconfigured provider, with no documented codes and no JSON error record (8). `--session` and `--continue` resume a run, and `crush session list`, `show`, `last`, `rename` and `delete` take `--json` (13). One argument starts a run and environment keys are picked up, but there's no SDK, and the HTTP API needs `CRUSH_CLIENT_SERVER=1` and is described only in one README section (8).",
          "b": "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."
        },
        "scores": {
          "a": 52,
          "b": 67
        }
      },
      {
        "by": 6,
        "category": "reliability",
        "leads": "letta",
        "name": "Reliability",
        "reasons": {
          "a": "Local-package reading. `@charmland/crush` on npm, a Homebrew tap, Winget, Scoop, AUR, Nix, FreeBSD pkg, Charm's apt and yum repositories and release binaries, with supported platforms named in the README (20). The public build workflow runs `go test -race -failfast ./...` on Linux, macOS and Windows for every push to main and every pull request, but GitHub pages and the API answer 403 to us, so results are unread (15). The 18 October issue and pull request counts came from shields.io badges, a third-party copy of GitHub data, and are struck. The repository's own refs show 2,574 pull requests to #4224, 272 of them open with a merge ref, and 147 merges into main in the 90 days to 4 November. Crash and regression issues couldn't be read (10). Release notes are generated from commit messages, with no CHANGELOG file and no breaking-change headings found. The legacy JSON config is deprecated in favour of `crushrc` while still loading (7, held partial). v0.99.0, before 1.0, with no stability statement (0). 20 + 15 + 10 + 7 + 0 = 52.",
          "b": "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."
        },
        "scores": {
          "a": 52,
          "b": 58
        }
      },
      {
        "by": 6,
        "category": "security",
        "leads": "crush",
        "name": "Security \u0026 auth",
        "reasons": {
          "a": "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 prompt-injection posture, 15 for audit and 20 for the security programme. Usage metrics go to PostHog through data.charm.land by default, keyed to a hashed machine ID, aliased to the Hyper user ID after a Hyper login, and including error messages. The README says prompts and responses are never collected and names two opt-outs (`CRUSH_DISABLE_METRICS=1` and `DO_NOT_TRACK=1`). The provider list is fetched from Catwalk at startup unless turned off, the update check only notifies, and provider keys stay local (15). The TUI asks before bash, edit, write, fetch, download and MCP calls, `permissions deny` hides tools and PreToolUse hooks can block calls. But `crush run` approves every permission request in its session automatically (internal/app/app.go in v0.99.0), `--yolo` skips all prompts, and there's no sandbox, only a refusal list for curl, wget, ssh, sudo, package managers and similar commands (7). No prompt-injection guidance found, and a project's `.crushrc` and `$(...)` in `crush.json` run as code at startup, which the README warns about (3). Logs in `./.crush/logs/crush.log` with `crush logs`, sessions in a local database readable as JSON, and `crush stats`, with no OpenTelemetry export (9). The organisation's SECURITY.md is a disclosure policy with a reporting address (vt100@charm.sh) and no response time. CI runs CodeQL, Grype and govulncheck nightly and releases are cosign-signed. OSV lists no advisory for the npm package or the Go module. No security.txt and no bug bounty. A disclosure route with no stated time is this run's 7 (was 10). 15 + 7 + 3 + 9 + 7 = 41.",
          "b": "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."
        },
        "scores": {
          "a": 41,
          "b": 35
        }
      },
      {
        "by": 5,
        "category": "schema",
        "leads": "letta",
        "name": "Schema \u0026 documentation",
        "reasons": {
          "a": "Harness reading of the framework line. A JSON Schema for the config at https://charm.land/crush.json (also printed by `crush schema`), `--json` on the session commands, and an OpenAPI document that `crush server` generates from its endpoint list and serves at `/v1/docs/openapi.json`, which isn't published anywhere we could fetch. `crush run` output has no typed form (20). No llms.txt (charm.land/llms.txt is a not-found page). The docs are Markdown in the repository and the hooks guide says it was written for humans and agents (5). The README and config docs explain when to allow, deny or hook a tool and warn that configs run as code (12). The schema carries enums and defaults, such as the attribution trailer style, while permissions take bare tool names with no command patterns (11). Many examples for providers, MCP, hooks and local models, with no reference for error messages or exit codes (9). Version tags and GitHub releases with generated notes, which we couldn't open, and no changelog file (8).",
          "b": "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."
        },
        "scores": {
          "a": 65,
          "b": 70
        }
      },
      {
        "by": 5,
        "category": "payments",
        "leads": "letta",
        "name": "Payments \u0026 pricing",
        "reasons": {
          "a": "No payment protocol (0). Scored on Charm's Hyper provider. Its public provider file at hyper.charm.land/v1/provider lists per-million-token figures for 22 models without a login, but no pricing page confirms them as billed rates, and plan prices sit in a script-rendered app (15). The CLI is free to use and runs with your own provider key or a local model, so nothing needs a card (20). A local model through Ollama, llama.cpp or LM Studio, or an existing provider key in the environment, works with no Charm account, so an agent can install it and run a task without a person signing up (20).",
          "b": "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."
        },
        "scores": {
          "a": 55,
          "b": 60
        }
      }
    ],
    "facts": [
      {
        "a": "Agent harness",
        "b": "Agent harness",
        "name": "Kind"
      },
      {
        "a": "Charm",
        "b": "Letta",
        "name": "Vendor"
      },
      {
        "a": "no (local only)",
        "b": "no (local only)",
        "name": "Hosted endpoint"
      },
      {
        "a": "",
        "b": "stdio",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "OAuth or key",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "FSL-1.1-MIT (source-available, each release converts to MIT two years after it is made available)",
        "b": "Apache-2.0",
        "name": "Licence"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "2026-10-29",
        "b": "2026-11-06",
        "name": "Last release"
      },
      {
        "a": "no document linked",
        "b": "no date given",
        "name": "Terms last updated"
      },
      {
        "a": "no document linked",
        "b": "no date given",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not read yet",
        "b": "not found in the text",
        "name": "Customer content may train models"
      },
      {
        "a": "not read yet",
        "b": "not found in the text",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not read yet",
        "b": "not found in the text",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not read yet",
        "b": "not found in the text",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not read yet",
        "b": "yes",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "29k stars, 5.6k npm/wk",
        "b": "3.8k stars, 86k npm/wk, 2.2k PyPI/wk",
        "name": "Popularity"
      },
      {
        "a": "2.3/5 (4)",
        "b": "none",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Letta scores 59.7 (C) on agent readiness against Crush's 49.8 (D), and leads in 5 of 7 scored categories. Crush leads on security \u0026 auth.",
        "question": "Which is better for AI agents, Crush or Letta?"
      },
      {
        "answer": "No open-source release is listed for Crush. Letta is open source (Apache-2.0).",
        "question": "Are Crush and Letta open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Security \u0026 auth, 41 against 35"
        ],
        "also": [
          "Free to start without a card"
        ],
        "goodFor": "Developers who want a Go terminal agent with a wide provider list, local models and Claude Code-compatible hooks.",
        "slug": "crush",
        "watchFor": "`crush run` approves every permission request automatically, which the README doesn't mention"
      },
      {
        "aheadOn": [
          "Reliability, 58 against 52",
          "Schema \u0026 documentation, 70 against 65",
          "Agent ergonomics, 67 against 52",
          "Payments \u0026 pricing, 60 against 55"
        ],
        "also": [
          "Runs on your own machine",
          "Open source",
          "No incidents deducted, where Crush loses 6 points for them"
        ],
        "goodFor": "Long-lived coding agents and assistants that keep memory and identity across sessions and machines.",
        "slug": "letta",
        "watchFor": "The default permission mode is `unrestricted`, the renamed `bypassPermissions`, so tool calls aren't confirmed unless the user picks another mode"
      }
    ],
    "history": {
      "crush": [
        {
          "causes": [
            "security",
            "correction"
          ],
          "date": "2026-11-04",
          "delta": -6.9,
          "from": 56.7,
          "fromGrade": "C",
          "to": 49.8,
          "toGrade": "D"
        },
        {
          "causes": [
            "evidence"
          ],
          "date": "2026-10-27",
          "delta": 0.2,
          "from": 56.5,
          "fromGrade": "C",
          "to": 56.7,
          "toGrade": "C"
        }
      ],
      "letta": null
    },
    "job": {
      "capability": "agent.harness",
      "name": "Agent harnesses"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/agent-zero-vs-crush.json",
        "title": "Agent Zero vs Crush",
        "url": "https://www.anchorterminal.com/compare/agent-zero-vs-crush"
      },
      {
        "json": "https://www.anchorterminal.com/compare/agent-zero-vs-letta.json",
        "title": "Agent Zero vs Letta",
        "url": "https://www.anchorterminal.com/compare/agent-zero-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/aider-vs-crush.json",
        "title": "Aider vs Crush",
        "url": "https://www.anchorterminal.com/compare/aider-vs-crush"
      },
      {
        "json": "https://www.anchorterminal.com/compare/aider-vs-letta.json",
        "title": "Aider vs Letta",
        "url": "https://www.anchorterminal.com/compare/aider-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/amp-vs-crush.json",
        "title": "Amp vs Crush",
        "url": "https://www.anchorterminal.com/compare/amp-vs-crush"
      },
      {
        "json": "https://www.anchorterminal.com/compare/amp-vs-letta.json",
        "title": "Amp vs Letta",
        "url": "https://www.anchorterminal.com/compare/amp-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/antigravity-cli-vs-crush.json",
        "title": "Antigravity CLI vs Crush",
        "url": "https://www.anchorterminal.com/compare/antigravity-cli-vs-crush"
      },
      {
        "json": "https://www.anchorterminal.com/compare/antigravity-cli-vs-letta.json",
        "title": "Antigravity CLI vs Letta",
        "url": "https://www.anchorterminal.com/compare/antigravity-cli-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/auggie-vs-crush.json",
        "title": "Auggie CLI vs Crush",
        "url": "https://www.anchorterminal.com/compare/auggie-vs-crush"
      },
      {
        "json": "https://www.anchorterminal.com/compare/auggie-vs-letta.json",
        "title": "Auggie CLI vs Letta",
        "url": "https://www.anchorterminal.com/compare/auggie-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/axlr-vs-crush.json",
        "title": "AXLR vs Crush",
        "url": "https://www.anchorterminal.com/compare/axlr-vs-crush"
      },
      {
        "json": "https://www.anchorterminal.com/compare/axlr-vs-letta.json",
        "title": "AXLR vs Letta",
        "url": "https://www.anchorterminal.com/compare/axlr-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/claude-code-vs-crush.json",
        "title": "Claude Code vs Crush",
        "url": "https://www.anchorterminal.com/compare/claude-code-vs-crush"
      },
      {
        "json": "https://www.anchorterminal.com/compare/claude-code-vs-letta.json",
        "title": "Claude Code vs Letta",
        "url": "https://www.anchorterminal.com/compare/claude-code-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cline-vs-crush.json",
        "title": "Cline vs Crush",
        "url": "https://www.anchorterminal.com/compare/cline-vs-crush"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cline-vs-letta.json",
        "title": "Cline vs Letta",
        "url": "https://www.anchorterminal.com/compare/cline-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/conductor-vs-crush.json",
        "title": "Conductor vs Crush",
        "url": "https://www.anchorterminal.com/compare/conductor-vs-crush"
      },
      {
        "json": "https://www.anchorterminal.com/compare/conductor-vs-letta.json",
        "title": "Conductor vs Letta",
        "url": "https://www.anchorterminal.com/compare/conductor-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-cursor-cli.json",
        "title": "Crush vs Cursor CLI",
        "url": "https://www.anchorterminal.com/compare/crush-vs-cursor-cli"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-deepseek-harness.json",
        "title": "Crush vs DeepSeek Harness (dsh)",
        "url": "https://www.anchorterminal.com/compare/crush-vs-deepseek-harness"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-deepseek-superagent.json",
        "title": "Crush vs dsh-superagent (DeepSeek)",
        "url": "https://www.anchorterminal.com/compare/crush-vs-deepseek-superagent"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-devin.json",
        "title": "Crush vs Devin",
        "url": "https://www.anchorterminal.com/compare/crush-vs-devin"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-droid-cli.json",
        "title": "Crush vs Droid CLI",
        "url": "https://www.anchorterminal.com/compare/crush-vs-droid-cli"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-earendil-pi.json",
        "title": "Crush vs Pi",
        "url": "https://www.anchorterminal.com/compare/crush-vs-earendil-pi"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-emdash.json",
        "title": "Crush vs Emdash",
        "url": "https://www.anchorterminal.com/compare/crush-vs-emdash"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-gemini-cli.json",
        "title": "Crush vs Gemini CLI",
        "url": "https://www.anchorterminal.com/compare/crush-vs-gemini-cli"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-github-copilot-cli.json",
        "title": "Crush vs GitHub Copilot CLI",
        "url": "https://www.anchorterminal.com/compare/crush-vs-github-copilot-cli"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-goose.json",
        "title": "Crush vs goose",
        "url": "https://www.anchorterminal.com/compare/crush-vs-goose"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-harness2.json",
        "title": "Crush vs Harness²",
        "url": "https://www.anchorterminal.com/compare/crush-vs-harness2"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-harnessrouter.json",
        "title": "Crush vs HarnessRouter",
        "url": "https://www.anchorterminal.com/compare/crush-vs-harnessrouter"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-jules.json",
        "title": "Crush vs Jules",
        "url": "https://www.anchorterminal.com/compare/crush-vs-jules"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-junie.json",
        "title": "Crush vs Junie CLI",
        "url": "https://www.anchorterminal.com/compare/crush-vs-junie"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-kilo-code-cli.json",
        "title": "Crush vs Kilo Code CLI",
        "url": "https://www.anchorterminal.com/compare/crush-vs-kilo-code-cli"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-kimi-code-cli.json",
        "title": "Crush vs Kimi Code CLI",
        "url": "https://www.anchorterminal.com/compare/crush-vs-kimi-code-cli"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-kiro-cli.json",
        "title": "Crush vs Kiro CLI",
        "url": "https://www.anchorterminal.com/compare/crush-vs-kiro-cli"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-mini-swe-agent.json",
        "title": "Crush vs mini-swe-agent",
        "url": "https://www.anchorterminal.com/compare/crush-vs-mini-swe-agent"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-minimax-code.json",
        "title": "Crush vs MiniMax Code",
        "url": "https://www.anchorterminal.com/compare/crush-vs-minimax-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-mistral-vibe-cli.json",
        "title": "Crush vs Mistral Vibe CLI",
        "url": "https://www.anchorterminal.com/compare/crush-vs-mistral-vibe-cli"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-muse-code.json",
        "title": "Crush vs Muse Code",
        "url": "https://www.anchorterminal.com/compare/crush-vs-muse-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-openai-agents-api.json",
        "title": "Crush vs OpenAI Agents API",
        "url": "https://www.anchorterminal.com/compare/crush-vs-openai-agents-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-openai-codex.json",
        "title": "Crush vs OpenAI Codex",
        "url": "https://www.anchorterminal.com/compare/crush-vs-openai-codex"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-opencode.json",
        "title": "Crush vs OpenCode",
        "url": "https://www.anchorterminal.com/compare/crush-vs-opencode"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-openhands.json",
        "title": "Crush vs OpenHands",
        "url": "https://www.anchorterminal.com/compare/crush-vs-openhands"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-openmausbot.json",
        "title": "Crush vs OpenMausBot",
        "url": "https://www.anchorterminal.com/compare/crush-vs-openmausbot"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-orca.json",
        "title": "Crush vs Orca",
        "url": "https://www.anchorterminal.com/compare/crush-vs-orca"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-paseo.json",
        "title": "Crush vs Paseo",
        "url": "https://www.anchorterminal.com/compare/crush-vs-paseo"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-prime-agent.json",
        "title": "Crush vs Prime Agent",
        "url": "https://www.anchorterminal.com/compare/crush-vs-prime-agent"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-qoder-cli.json",
        "title": "Crush vs Qoder CLI",
        "url": "https://www.anchorterminal.com/compare/crush-vs-qoder-cli"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-qwen-code.json",
        "title": "Crush vs Qwen Code",
        "url": "https://www.anchorterminal.com/compare/crush-vs-qwen-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-reflection-mirror.json",
        "title": "Crush vs Mirror CLI",
        "url": "https://www.anchorterminal.com/compare/crush-vs-reflection-mirror"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-rovo-dev-cli.json",
        "title": "Crush vs Rovo Dev CLI",
        "url": "https://www.anchorterminal.com/compare/crush-vs-rovo-dev-cli"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-sculptor.json",
        "title": "Crush vs Sculptor",
        "url": "https://www.anchorterminal.com/compare/crush-vs-sculptor"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-t3-code.json",
        "title": "Crush vs T3 Code",
        "url": "https://www.anchorterminal.com/compare/crush-vs-t3-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-traycer.json",
        "title": "Crush vs Traycer",
        "url": "https://www.anchorterminal.com/compare/crush-vs-traycer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-unstoppable.json",
        "title": "Crush vs Unstoppable",
        "url": "https://www.anchorterminal.com/compare/crush-vs-unstoppable"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-verdent.json",
        "title": "Crush vs Verdent",
        "url": "https://www.anchorterminal.com/compare/crush-vs-verdent"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-vibe-trading.json",
        "title": "Crush vs Vibe-Trading",
        "url": "https://www.anchorterminal.com/compare/crush-vs-vibe-trading"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-warp.json",
        "title": "Crush vs Warp (Warp Agent CLI and the Oz Agent API)",
        "url": "https://www.anchorterminal.com/compare/crush-vs-warp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cursor-cli-vs-letta.json",
        "title": "Cursor CLI vs Letta",
        "url": "https://www.anchorterminal.com/compare/cursor-cli-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/deepseek-harness-vs-letta.json",
        "title": "DeepSeek Harness (dsh) vs Letta",
        "url": "https://www.anchorterminal.com/compare/deepseek-harness-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/deepseek-superagent-vs-letta.json",
        "title": "dsh-superagent (DeepSeek) vs Letta",
        "url": "https://www.anchorterminal.com/compare/deepseek-superagent-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/devin-vs-letta.json",
        "title": "Devin vs Letta",
        "url": "https://www.anchorterminal.com/compare/devin-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/droid-cli-vs-letta.json",
        "title": "Droid CLI vs Letta",
        "url": "https://www.anchorterminal.com/compare/droid-cli-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/earendil-pi-vs-letta.json",
        "title": "Pi vs Letta",
        "url": "https://www.anchorterminal.com/compare/earendil-pi-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/emdash-vs-letta.json",
        "title": "Emdash vs Letta",
        "url": "https://www.anchorterminal.com/compare/emdash-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-cli-vs-letta.json",
        "title": "Gemini CLI vs Letta",
        "url": "https://www.anchorterminal.com/compare/gemini-cli-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/github-copilot-cli-vs-letta.json",
        "title": "GitHub Copilot CLI vs Letta",
        "url": "https://www.anchorterminal.com/compare/github-copilot-cli-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/goose-vs-letta.json",
        "title": "goose vs Letta",
        "url": "https://www.anchorterminal.com/compare/goose-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/harness2-vs-letta.json",
        "title": "Harness² vs Letta",
        "url": "https://www.anchorterminal.com/compare/harness2-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/harnessrouter-vs-letta.json",
        "title": "HarnessRouter vs Letta",
        "url": "https://www.anchorterminal.com/compare/harnessrouter-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jules-vs-letta.json",
        "title": "Jules vs Letta",
        "url": "https://www.anchorterminal.com/compare/jules-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/junie-vs-letta.json",
        "title": "Junie CLI vs Letta",
        "url": "https://www.anchorterminal.com/compare/junie-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/kilo-code-cli-vs-letta.json",
        "title": "Kilo Code CLI vs Letta",
        "url": "https://www.anchorterminal.com/compare/kilo-code-cli-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/kimi-code-cli-vs-letta.json",
        "title": "Kimi Code CLI vs Letta",
        "url": "https://www.anchorterminal.com/compare/kimi-code-cli-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/kiro-cli-vs-letta.json",
        "title": "Kiro CLI vs Letta",
        "url": "https://www.anchorterminal.com/compare/kiro-cli-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-mini-swe-agent.json",
        "title": "Letta vs mini-swe-agent",
        "url": "https://www.anchorterminal.com/compare/letta-vs-mini-swe-agent"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-minimax-code.json",
        "title": "Letta vs MiniMax Code",
        "url": "https://www.anchorterminal.com/compare/letta-vs-minimax-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-mistral-vibe-cli.json",
        "title": "Letta vs Mistral Vibe CLI",
        "url": "https://www.anchorterminal.com/compare/letta-vs-mistral-vibe-cli"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-muse-code.json",
        "title": "Letta vs Muse Code",
        "url": "https://www.anchorterminal.com/compare/letta-vs-muse-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-openai-agents-api.json",
        "title": "Letta vs OpenAI Agents API",
        "url": "https://www.anchorterminal.com/compare/letta-vs-openai-agents-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-openai-codex.json",
        "title": "Letta vs OpenAI Codex",
        "url": "https://www.anchorterminal.com/compare/letta-vs-openai-codex"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-opencode.json",
        "title": "Letta vs OpenCode",
        "url": "https://www.anchorterminal.com/compare/letta-vs-opencode"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-openhands.json",
        "title": "Letta vs OpenHands",
        "url": "https://www.anchorterminal.com/compare/letta-vs-openhands"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-openmausbot.json",
        "title": "Letta vs OpenMausBot",
        "url": "https://www.anchorterminal.com/compare/letta-vs-openmausbot"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-orca.json",
        "title": "Letta vs Orca",
        "url": "https://www.anchorterminal.com/compare/letta-vs-orca"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-paseo.json",
        "title": "Letta vs Paseo",
        "url": "https://www.anchorterminal.com/compare/letta-vs-paseo"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-prime-agent.json",
        "title": "Letta vs Prime Agent",
        "url": "https://www.anchorterminal.com/compare/letta-vs-prime-agent"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-qoder-cli.json",
        "title": "Letta vs Qoder CLI",
        "url": "https://www.anchorterminal.com/compare/letta-vs-qoder-cli"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-qwen-code.json",
        "title": "Letta vs Qwen Code",
        "url": "https://www.anchorterminal.com/compare/letta-vs-qwen-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-reflection-mirror.json",
        "title": "Letta vs Mirror CLI",
        "url": "https://www.anchorterminal.com/compare/letta-vs-reflection-mirror"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-rovo-dev-cli.json",
        "title": "Letta vs Rovo Dev CLI",
        "url": "https://www.anchorterminal.com/compare/letta-vs-rovo-dev-cli"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-sculptor.json",
        "title": "Letta vs Sculptor",
        "url": "https://www.anchorterminal.com/compare/letta-vs-sculptor"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-t3-code.json",
        "title": "Letta vs T3 Code",
        "url": "https://www.anchorterminal.com/compare/letta-vs-t3-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-traycer.json",
        "title": "Letta vs Traycer",
        "url": "https://www.anchorterminal.com/compare/letta-vs-traycer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-unstoppable.json",
        "title": "Letta vs Unstoppable",
        "url": "https://www.anchorterminal.com/compare/letta-vs-unstoppable"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-verdent.json",
        "title": "Letta vs Verdent",
        "url": "https://www.anchorterminal.com/compare/letta-vs-verdent"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-vibe-trading.json",
        "title": "Letta vs Vibe-Trading",
        "url": "https://www.anchorterminal.com/compare/letta-vs-vibe-trading"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-warp.json",
        "title": "Letta vs Warp (Warp Agent CLI and the Oz Agent API)",
        "url": "https://www.anchorterminal.com/compare/letta-vs-warp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/clawboo-vs-crush.json",
        "title": "Clawboo vs Crush",
        "url": "https://www.anchorterminal.com/compare/clawboo-vs-crush"
      },
      {
        "json": "https://www.anchorterminal.com/compare/clawboo-vs-letta.json",
        "title": "Clawboo vs Letta",
        "url": "https://www.anchorterminal.com/compare/clawboo-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cli-manager-vs-crush.json",
        "title": "CLI Manager vs Crush",
        "url": "https://www.anchorterminal.com/compare/cli-manager-vs-crush"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cli-manager-vs-letta.json",
        "title": "CLI Manager vs Letta",
        "url": "https://www.anchorterminal.com/compare/cli-manager-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-harness-autonomous.json",
        "title": "Crush vs Harness",
        "url": "https://www.anchorterminal.com/compare/crush-vs-harness-autonomous"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-paperclip.json",
        "title": "Crush vs Paperclip",
        "url": "https://www.anchorterminal.com/compare/crush-vs-paperclip"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crush-vs-parallax-agents.json",
        "title": "Crush vs Parallax",
        "url": "https://www.anchorterminal.com/compare/crush-vs-parallax-agents"
      },
      {
        "json": "https://www.anchorterminal.com/compare/harness-autonomous-vs-letta.json",
        "title": "Harness vs Letta",
        "url": "https://www.anchorterminal.com/compare/harness-autonomous-vs-letta"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-paperclip.json",
        "title": "Letta vs Paperclip",
        "url": "https://www.anchorterminal.com/compare/letta-vs-paperclip"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letta-vs-parallax-agents.json",
        "title": "Letta vs Parallax",
        "url": "https://www.anchorterminal.com/compare/letta-vs-parallax-agents"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 6,
        "crush": 52,
        "edge": "letta",
        "key": "reliability",
        "letta": 58,
        "name": "Reliability",
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 5,
        "crush": 65,
        "edge": "letta",
        "key": "schema",
        "letta": 70,
        "name": "Schema \u0026 documentation",
        "weight": 13
      },
      {
        "by": 15,
        "crush": 52,
        "edge": "letta",
        "key": "ergonomics",
        "letta": 67,
        "name": "Agent ergonomics",
        "weight": 13
      },
      {
        "by": 6,
        "crush": 41,
        "edge": "crush",
        "key": "security",
        "letta": 35,
        "name": "Security \u0026 auth",
        "weight": 14
      },
      {
        "by": 5,
        "crush": 55,
        "edge": "letta",
        "key": "payments",
        "letta": 60,
        "name": "Payments \u0026 pricing",
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 3,
        "crush": 82,
        "edge": "letta",
        "key": "maintenance",
        "letta": 85,
        "name": "Maintenance \u0026 community",
        "weight": 7
      },
      {
        "by": 4,
        "crush": 59,
        "edge": "crush",
        "key": "transparency",
        "letta": 55,
        "name": "Transparency \u0026 trust",
        "weight": 7
      }
    ],
    "summary": "Letta scores 59.7 (C) on agent readiness against Crush's 49.8 (D), and leads in 5 of 7 scored categories. Crush leads on security \u0026 auth. Both do agent harnesses.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "crush": "Works with almost any provider or a local model and needs no Charm account. `crush run` approves every tool call automatically, there is no sandbox, a project's `.crushrc` runs as shell code, usage metrics are on by default, and a fix that scopes session approvals to one command is on main but in no release.",
      "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."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/crush-vs-letta",
    "json": "https://www.anchorterminal.com/compare/crush-vs-letta.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/crush-vs-letta.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/crush-vs-letta.min.md"
  },
  "markdown": "Letta scores 59.7 (C) on agent readiness against Crush's 49.8 (D), and leads in 5 of 7 scored categories. Crush leads on security \u0026 auth. Both do agent harnesses.\n\n- Crush: grade D, 49.8/100, rank #1082 of 1510. Markdown https://www.anchorterminal.com/tools/crush.md · JSON https://www.anchorterminal.com/api/v1/tools/crush.json\n- Letta: grade C, 59.7/100, rank #687 of 1510. Markdown https://www.anchorterminal.com/tools/letta.md · JSON https://www.anchorterminal.com/api/v1/tools/letta.json\n- Best agent harnesses and coding agents: https://www.anchorterminal.com/best/agent-harnesses/index.md\n- All 1500 harnesses comparisons: https://www.anchorterminal.com/compare/agent-harnesses/index.md\n- Best memory layers for AI agents: https://www.anchorterminal.com/best/agent-memory/index.md\n- All 353 memory comparisons: https://www.anchorterminal.com/compare/agent-memory/index.md\n\n## Which one, for what\n\n### Crush (D)\n\nGood for: Developers who want a Go terminal agent with a wide provider list, local models and Claude Code-compatible hooks.\n\nAhead on:\n- Security \u0026 auth, 41 against 35\n\nAlso in its favour:\n- Free to start without a card\n\nWatch for: `crush run` approves every permission request automatically, which the README doesn't mention\n\n### Letta (C)\n\nGood for: Long-lived coding agents and assistants that keep memory and identity across sessions and machines.\n\nAhead on:\n- Reliability, 58 against 52\n- Schema \u0026 documentation, 70 against 65\n- Agent ergonomics, 67 against 52\n- Payments \u0026 pricing, 60 against 55\n\nAlso in its favour:\n- Runs on your own machine\n- Open source\n- No incidents deducted, where Crush loses 6 points for them\n\nWatch for: The default permission mode is `unrestricted`, the renamed `bypassPermissions`, so tool calls aren't confirmed unless the user picks another mode\n\n\n## Why the edge\n\n### Agent ergonomics: Letta +15\n\n- Crush (52): Harness reading, scored on what an agent or pipeline driving `crush run` has to supply. About 20 built-in tools, any of which `permissions deny` hides, MCP servers take per-server `disabled_tools`, and skills can be turned off or kept out of the model's list. No lazy loading of MCP tools found (17). No turn, time or cost limit on `crush run`, and the only output controls are `--quiet` and `--verbose` (6). Errors come back as plain messages with a non-zero exit, such as the one for an unconfigured provider, with no documented codes and no JSON error record (8). `--session` and `--continue` resume a run, and `crush session list`, `show`, `last`, `rename` and `delete` take `--json` (13). One argument starts a run and environment keys are picked up, but there's no SDK, and the HTTP API needs `CRUSH_CLIENT_SERVER=1` and is described only in one README section (8).\n- 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.\n\n### Reliability: Letta +6\n\n- Crush (52): Local-package reading. `@charmland/crush` on npm, a Homebrew tap, Winget, Scoop, AUR, Nix, FreeBSD pkg, Charm's apt and yum repositories and release binaries, with supported platforms named in the README (20). The public build workflow runs `go test -race -failfast ./...` on Linux, macOS and Windows for every push to main and every pull request, but GitHub pages and the API answer 403 to us, so results are unread (15). The 18 October issue and pull request counts came from shields.io badges, a third-party copy of GitHub data, and are struck. The repository's own refs show 2,574 pull requests to #4224, 272 of them open with a merge ref, and 147 merges into main in the 90 days to 4 November. Crash and regression issues couldn't be read (10). Release notes are generated from commit messages, with no CHANGELOG file and no breaking-change headings found. The legacy JSON config is deprecated in favour of `crushrc` while still loading (7, held partial). v0.99.0, before 1.0, with no stability statement (0). 20 + 15 + 10 + 7 + 0 = 52.\n- 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.\n\n### Security \u0026 auth: Crush +6\n\n- Crush (41): 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 prompt-injection posture, 15 for audit and 20 for the security programme. Usage metrics go to PostHog through data.charm.land by default, keyed to a hashed machine ID, aliased to the Hyper user ID after a Hyper login, and including error messages. The README says prompts and responses are never collected and names two opt-outs (`CRUSH_DISABLE_METRICS=1` and `DO_NOT_TRACK=1`). The provider list is fetched from Catwalk at startup unless turned off, the update check only notifies, and provider keys stay local (15). The TUI asks before bash, edit, write, fetch, download and MCP calls, `permissions deny` hides tools and PreToolUse hooks can block calls. But `crush run` approves every permission request in its session automatically (internal/app/app.go in v0.99.0), `--yolo` skips all prompts, and there's no sandbox, only a refusal list for curl, wget, ssh, sudo, package managers and similar commands (7). No prompt-injection guidance found, and a project's `.crushrc` and `$(...)` in `crush.json` run as code at startup, which the README warns about (3). Logs in `./.crush/logs/crush.log` with `crush logs`, sessions in a local database readable as JSON, and `crush stats`, with no OpenTelemetry export (9). The organisation's SECURITY.md is a disclosure policy with a reporting address (vt100@charm.sh) and no response time. CI runs CodeQL, Grype and govulncheck nightly and releases are cosign-signed. OSV lists no advisory for the npm package or the Go module. No security.txt and no bug bounty. A disclosure route with no stated time is this run's 7 (was 10). 15 + 7 + 3 + 9 + 7 = 41.\n- 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.\n\n### Schema \u0026 documentation: Letta +5\n\n- Crush (65): Harness reading of the framework line. A JSON Schema for the config at https://charm.land/crush.json (also printed by `crush schema`), `--json` on the session commands, and an OpenAPI document that `crush server` generates from its endpoint list and serves at `/v1/docs/openapi.json`, which isn't published anywhere we could fetch. `crush run` output has no typed form (20). No llms.txt (charm.land/llms.txt is a not-found page). The docs are Markdown in the repository and the hooks guide says it was written for humans and agents (5). The README and config docs explain when to allow, deny or hook a tool and warn that configs run as code (12). The schema carries enums and defaults, such as the attribution trailer style, while permissions take bare tool names with no command patterns (11). Many examples for providers, MCP, hooks and local models, with no reference for error messages or exit codes (9). Version tags and GitHub releases with generated notes, which we couldn't open, and no changelog file (8).\n- 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.\n\n### Payments \u0026 pricing: Letta +5\n\n- Crush (55): No payment protocol (0). Scored on Charm's Hyper provider. Its public provider file at hyper.charm.land/v1/provider lists per-million-token figures for 22 models without a login, but no pricing page confirms them as billed rates, and plan prices sit in a script-rendered app (15). The CLI is free to use and runs with your own provider key or a local model, so nothing needs a card (20). A local model through Ollama, llama.cpp or LM Studio, or an existing provider key in the environment, works with no Charm account, so an agent can install it and run a task without a person signing up (20).\n- 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.\n\n## Score by category\n\n| Category | Weight | Crush | Letta | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 52 | 58 | Letta +6 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 65 | 70 | Letta +5 |\n| Agent ergonomics | 13% (16.2 this run) | 52 | 67 | Letta +15 |\n| Security \u0026 auth | 14% (17.5 this run) | 41 | 35 | Crush +6 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 55 | 60 | Letta +5 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 82 | 85 | Letta +3 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 59 | 55 | Crush +4 |\n| Negative events | ≤15 | -6 | 0 | |\n| **Total** | | **49.8 · D** | **59.7 · C** | |\n\n## Facts side by side\n\n| Fact | Crush | Letta |\n| --- | --- | --- |\n| Kind | Agent harness | Agent harness |\n| Vendor | Charm | Letta |\n| Hosted endpoint | no (local only) | no (local only) |\n| Transports |  | stdio |\n| Auth | OAuth or key | OAuth or key |\n| Pricing | Freemium | Freemium |\n| x402 | no | no |\n| Licence | FSL-1.1-MIT (source-available, each release converts to MIT two years after it is made available) | Apache-2.0 |\n| Read-only variant documented | no | no |\n| llms.txt | no | yes |\n| Last release | 2026-10-29 | 2026-11-06 |\n| Terms last updated | no document linked | no date given |\n| Privacy policy last updated | no document linked | no date given |\n| Customer content may train models | not read yet | not found in the text |\n| Terms restrict automated access | not read yet | not found in the text |\n| Terms restrict benchmarking | not read yet | not found in the text |\n| Terms or service can change without notice | not read yet | not found in the text |\n| Arbitration or class-action waiver | not read yet | yes |\n| Popularity | 29k stars, 5.6k npm/wk | 3.8k stars, 86k npm/wk, 2.2k PyPI/wk |\n| Agent reviews | 2.3/5 (4) | none |\n\n## How the scores have moved\n\n### Crush\n\n- -6.9 on 4 November 2026 (C to D): security, correction\n- +0.2 on 27 October 2026: new evidence\n\n### Letta\n\nNo score change since it was listed.\n\n## Verdicts\n\n**Crush.** Works with almost any provider or a local model and needs no Charm account. `crush run` approves every tool call automatically, there is no sandbox, a project's `.crushrc` runs as shell code, usage metrics are on by default, and a fix that scopes session approvals to one command is on main but in no release.\n\n**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.\n\n## Before you call either\n\n### Crush\n\n1. Add `permissions deny` rules or a PreToolUse hook before `crush run`. It approves every permission request in its session, and a session approval in v0.99.0 covers later commands in the same directory\n2. Read `.crushrc`, `crushrc` and `crush.json` in a cloned repository before running Crush there. They execute as shell code at startup\n3. Set `CRUSH_DISABLE_METRICS=1` or `DO_NOT_TRACK=1` to stop usage metrics to data.charm.land\n4. Wrap `crush run` in your own timeout. It has no turn, time or cost limit flag\n5. Configure a provider by environment variable or `crushrc` first. With none, `crush run` exits with an error asking for interactive setup\n\n### Letta\n\n1. Start headless runs with an explicit permission mode such as `standard` or `strict`; the default auto-approves tools\n2. Pass `--backend local` for work that must stay on the machine, since Letta Cloud is the default\n3. Set LETTA_CODE_TELEM=0 in unattended runs if usage events must not be sent\n4. Use `letta -p --output-format json` for scripted runs and parse the JSON, not the terminal output\n5. Don't plan on the retired V1 REST server or `.af` AgentFile import; both are gone\n\n## Questions\n\n### Which is better for AI agents, Crush or Letta?\n\nLetta scores 59.7 (C) on agent readiness against Crush's 49.8 (D), and leads in 5 of 7 scored categories. Crush leads on security \u0026 auth.\n\n### Are Crush and Letta open source?\n\nNo open-source release is listed for Crush. Letta is open source (Apache-2.0).\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/crush-vs-letta.json, and with the fewest tokens: https://www.anchorterminal.com/compare/crush-vs-letta.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"crush\", \"b\": \"letta\"}`. From a terminal: `anchor compare crush letta`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/crush.json and https://www.anchorterminal.com/api/v1/tools/letta.json\n\n## Other comparisons with Crush or Letta\n\n- [Agent Zero vs Crush](https://www.anchorterminal.com/compare/agent-zero-vs-crush.md)\n- [Agent Zero vs Letta](https://www.anchorterminal.com/compare/agent-zero-vs-letta.md)\n- [Aider vs Crush](https://www.anchorterminal.com/compare/aider-vs-crush.md)\n- [Aider vs Letta](https://www.anchorterminal.com/compare/aider-vs-letta.md)\n- [Amp vs Crush](https://www.anchorterminal.com/compare/amp-vs-crush.md)\n- [Amp vs Letta](https://www.anchorterminal.com/compare/amp-vs-letta.md)\n- [Antigravity CLI vs Crush](https://www.anchorterminal.com/compare/antigravity-cli-vs-crush.md)\n- [Antigravity CLI vs Letta](https://www.anchorterminal.com/compare/antigravity-cli-vs-letta.md)\n- [Auggie CLI vs Crush](https://www.anchorterminal.com/compare/auggie-vs-crush.md)\n- [Auggie CLI vs Letta](https://www.anchorterminal.com/compare/auggie-vs-letta.md)\n- [AXLR vs Crush](https://www.anchorterminal.com/compare/axlr-vs-crush.md)\n- [AXLR vs Letta](https://www.anchorterminal.com/compare/axlr-vs-letta.md)\n- [Claude Code vs Crush](https://www.anchorterminal.com/compare/claude-code-vs-crush.md)\n- [Claude Code vs Letta](https://www.anchorterminal.com/compare/claude-code-vs-letta.md)\n- [Cline vs Crush](https://www.anchorterminal.com/compare/cline-vs-crush.md)\n- [Cline vs Letta](https://www.anchorterminal.com/compare/cline-vs-letta.md)\n- [Conductor vs Crush](https://www.anchorterminal.com/compare/conductor-vs-crush.md)\n- [Conductor vs Letta](https://www.anchorterminal.com/compare/conductor-vs-letta.md)\n- [Crush vs Cursor CLI](https://www.anchorterminal.com/compare/crush-vs-cursor-cli.md)\n- [Crush vs DeepSeek Harness (dsh)](https://www.anchorterminal.com/compare/crush-vs-deepseek-harness.md)\n- [Crush vs dsh-superagent (DeepSeek)](https://www.anchorterminal.com/compare/crush-vs-deepseek-superagent.md)\n- [Crush vs Devin](https://www.anchorterminal.com/compare/crush-vs-devin.md)\n- [Crush vs Droid CLI](https://www.anchorterminal.com/compare/crush-vs-droid-cli.md)\n- [Crush vs Pi](https://www.anchorterminal.com/compare/crush-vs-earendil-pi.md)\n- [Crush vs Emdash](https://www.anchorterminal.com/compare/crush-vs-emdash.md)\n- [Crush vs Gemini CLI](https://www.anchorterminal.com/compare/crush-vs-gemini-cli.md)\n- [Crush vs GitHub Copilot CLI](https://www.anchorterminal.com/compare/crush-vs-github-copilot-cli.md)\n- [Crush vs goose](https://www.anchorterminal.com/compare/crush-vs-goose.md)\n- [Crush vs Harness²](https://www.anchorterminal.com/compare/crush-vs-harness2.md)\n- [Crush vs HarnessRouter](https://www.anchorterminal.com/compare/crush-vs-harnessrouter.md)\n- [Crush vs Jules](https://www.anchorterminal.com/compare/crush-vs-jules.md)\n- [Crush vs Junie CLI](https://www.anchorterminal.com/compare/crush-vs-junie.md)\n- [Crush vs Kilo Code CLI](https://www.anchorterminal.com/compare/crush-vs-kilo-code-cli.md)\n- [Crush vs Kimi Code CLI](https://www.anchorterminal.com/compare/crush-vs-kimi-code-cli.md)\n- [Crush vs Kiro CLI](https://www.anchorterminal.com/compare/crush-vs-kiro-cli.md)\n- [Crush vs mini-swe-agent](https://www.anchorterminal.com/compare/crush-vs-mini-swe-agent.md)\n- [Crush vs MiniMax Code](https://www.anchorterminal.com/compare/crush-vs-minimax-code.md)\n- [Crush vs Mistral Vibe CLI](https://www.anchorterminal.com/compare/crush-vs-mistral-vibe-cli.md)\n- [Crush vs Muse Code](https://www.anchorterminal.com/compare/crush-vs-muse-code.md)\n- [Crush vs OpenAI Agents API](https://www.anchorterminal.com/compare/crush-vs-openai-agents-api.md)\n- [Crush vs OpenAI Codex](https://www.anchorterminal.com/compare/crush-vs-openai-codex.md)\n- [Crush vs OpenCode](https://www.anchorterminal.com/compare/crush-vs-opencode.md)\n- [Crush vs OpenHands](https://www.anchorterminal.com/compare/crush-vs-openhands.md)\n- [Crush vs OpenMausBot](https://www.anchorterminal.com/compare/crush-vs-openmausbot.md)\n- [Crush vs Orca](https://www.anchorterminal.com/compare/crush-vs-orca.md)\n- [Crush vs Paseo](https://www.anchorterminal.com/compare/crush-vs-paseo.md)\n- [Crush vs Prime Agent](https://www.anchorterminal.com/compare/crush-vs-prime-agent.md)\n- [Crush vs Qoder CLI](https://www.anchorterminal.com/compare/crush-vs-qoder-cli.md)\n- [Crush vs Qwen Code](https://www.anchorterminal.com/compare/crush-vs-qwen-code.md)\n- [Crush vs Mirror CLI](https://www.anchorterminal.com/compare/crush-vs-reflection-mirror.md)\n- [Crush vs Rovo Dev CLI](https://www.anchorterminal.com/compare/crush-vs-rovo-dev-cli.md)\n- [Crush vs Sculptor](https://www.anchorterminal.com/compare/crush-vs-sculptor.md)\n- [Crush vs T3 Code](https://www.anchorterminal.com/compare/crush-vs-t3-code.md)\n- [Crush vs Traycer](https://www.anchorterminal.com/compare/crush-vs-traycer.md)\n- [Crush vs Unstoppable](https://www.anchorterminal.com/compare/crush-vs-unstoppable.md)\n- [Crush vs Verdent](https://www.anchorterminal.com/compare/crush-vs-verdent.md)\n- [Crush vs Vibe-Trading](https://www.anchorterminal.com/compare/crush-vs-vibe-trading.md)\n- [Crush vs Warp (Warp Agent CLI and the Oz Agent API)](https://www.anchorterminal.com/compare/crush-vs-warp.md)\n- [Cursor CLI vs Letta](https://www.anchorterminal.com/compare/cursor-cli-vs-letta.md)\n- [DeepSeek Harness (dsh) vs Letta](https://www.anchorterminal.com/compare/deepseek-harness-vs-letta.md)\n- [dsh-superagent (DeepSeek) vs Letta](https://www.anchorterminal.com/compare/deepseek-superagent-vs-letta.md)\n- [Devin vs Letta](https://www.anchorterminal.com/compare/devin-vs-letta.md)\n- [Droid CLI vs Letta](https://www.anchorterminal.com/compare/droid-cli-vs-letta.md)\n- [Pi vs Letta](https://www.anchorterminal.com/compare/earendil-pi-vs-letta.md)\n- [Emdash vs Letta](https://www.anchorterminal.com/compare/emdash-vs-letta.md)\n- [Gemini CLI vs Letta](https://www.anchorterminal.com/compare/gemini-cli-vs-letta.md)\n- [GitHub Copilot CLI vs Letta](https://www.anchorterminal.com/compare/github-copilot-cli-vs-letta.md)\n- [goose vs Letta](https://www.anchorterminal.com/compare/goose-vs-letta.md)\n- [Harness² vs Letta](https://www.anchorterminal.com/compare/harness2-vs-letta.md)\n- [HarnessRouter vs Letta](https://www.anchorterminal.com/compare/harnessrouter-vs-letta.md)\n- [Jules vs Letta](https://www.anchorterminal.com/compare/jules-vs-letta.md)\n- [Junie CLI vs Letta](https://www.anchorterminal.com/compare/junie-vs-letta.md)\n- [Kilo Code CLI vs Letta](https://www.anchorterminal.com/compare/kilo-code-cli-vs-letta.md)\n- [Kimi Code CLI vs Letta](https://www.anchorterminal.com/compare/kimi-code-cli-vs-letta.md)\n- [Kiro CLI vs Letta](https://www.anchorterminal.com/compare/kiro-cli-vs-letta.md)\n- [Letta vs mini-swe-agent](https://www.anchorterminal.com/compare/letta-vs-mini-swe-agent.md)\n- [Letta vs MiniMax Code](https://www.anchorterminal.com/compare/letta-vs-minimax-code.md)\n- [Letta vs Mistral Vibe CLI](https://www.anchorterminal.com/compare/letta-vs-mistral-vibe-cli.md)\n- [Letta vs Muse Code](https://www.anchorterminal.com/compare/letta-vs-muse-code.md)\n- [Letta vs OpenAI Agents API](https://www.anchorterminal.com/compare/letta-vs-openai-agents-api.md)\n- [Letta vs OpenAI Codex](https://www.anchorterminal.com/compare/letta-vs-openai-codex.md)\n- [Letta vs OpenCode](https://www.anchorterminal.com/compare/letta-vs-opencode.md)\n- [Letta vs OpenHands](https://www.anchorterminal.com/compare/letta-vs-openhands.md)\n- [Letta vs OpenMausBot](https://www.anchorterminal.com/compare/letta-vs-openmausbot.md)\n- [Letta vs Orca](https://www.anchorterminal.com/compare/letta-vs-orca.md)\n- [Letta vs Paseo](https://www.anchorterminal.com/compare/letta-vs-paseo.md)\n- [Letta vs Prime Agent](https://www.anchorterminal.com/compare/letta-vs-prime-agent.md)\n- [Letta vs Qoder CLI](https://www.anchorterminal.com/compare/letta-vs-qoder-cli.md)\n- [Letta vs Qwen Code](https://www.anchorterminal.com/compare/letta-vs-qwen-code.md)\n- [Letta vs Mirror CLI](https://www.anchorterminal.com/compare/letta-vs-reflection-mirror.md)\n- [Letta vs Rovo Dev CLI](https://www.anchorterminal.com/compare/letta-vs-rovo-dev-cli.md)\n- [Letta vs Sculptor](https://www.anchorterminal.com/compare/letta-vs-sculptor.md)\n- [Letta vs T3 Code](https://www.anchorterminal.com/compare/letta-vs-t3-code.md)\n- [Letta vs Traycer](https://www.anchorterminal.com/compare/letta-vs-traycer.md)\n- [Letta vs Unstoppable](https://www.anchorterminal.com/compare/letta-vs-unstoppable.md)\n- [Letta vs Verdent](https://www.anchorterminal.com/compare/letta-vs-verdent.md)\n- [Letta vs Vibe-Trading](https://www.anchorterminal.com/compare/letta-vs-vibe-trading.md)\n- [Letta vs Warp (Warp Agent CLI and the Oz Agent API)](https://www.anchorterminal.com/compare/letta-vs-warp.md)\n- [Clawboo vs Crush](https://www.anchorterminal.com/compare/clawboo-vs-crush.md)\n- [Clawboo vs Letta](https://www.anchorterminal.com/compare/clawboo-vs-letta.md)\n- [CLI Manager vs Crush](https://www.anchorterminal.com/compare/cli-manager-vs-crush.md)\n- [CLI Manager vs Letta](https://www.anchorterminal.com/compare/cli-manager-vs-letta.md)\n- [Crush vs Harness](https://www.anchorterminal.com/compare/crush-vs-harness-autonomous.md)\n- [Crush vs Paperclip](https://www.anchorterminal.com/compare/crush-vs-paperclip.md)\n- [Crush vs Parallax](https://www.anchorterminal.com/compare/crush-vs-parallax-agents.md)\n- [Harness vs Letta](https://www.anchorterminal.com/compare/harness-autonomous-vs-letta.md)\n- [Letta vs Paperclip](https://www.anchorterminal.com/compare/letta-vs-paperclip.md)\n- [Letta vs Parallax](https://www.anchorterminal.com/compare/letta-vs-parallax-agents.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit Anchor Terminal and link the page or API address you took it from (https://www.anchorterminal.com/terms/#data)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-11-07",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.7",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Crush vs Letta",
        "url": ""
      }
    ],
    "description": "Letta scores 59.7 (C) to Crush's 49.8 (D) for agent harnesses. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Crush D 49.8",
      "Letta C 59.7",
      "scores"
    ],
    "h1": "Crush vs Letta",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/crush-vs-letta",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Crush vs Letta for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-11-07",
    "url": "https://www.anchorterminal.com/compare/crush-vs-letta"
  },
  "tokens": {
    "markdown": 6350,
    "slim": 2780
  },
  "version": 1
}
