{
  "data": {
    "a": {
      "slug": "earendil-pi",
      "name": "Pi",
      "vendor": "Earendil",
      "vendorUrl": "https://pi.dev",
      "kind": "harness",
      "category": "agent-harnesses",
      "summary": "Pi is an open-source terminal coding agent from Earendil, run on the owner's machine with any of 15 or more model providers. It has interactive, print, JSON and RPC modes, a TypeScript SDK and a built-in MCP client.",
      "url": "https://www.anchorterminal.com/tools/earendil-pi",
      "markdownUrl": "https://www.anchorterminal.com/tools/earendil-pi.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/earendil-pi.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/earendil-pi.json",
      "repo": "https://github.com/earendil-works/pi",
      "license": "MIT",
      "transports": [],
      "packages": [
        {
          "registry": "npm",
          "name": "@earendil-works/pi-coding-agent"
        }
      ],
      "auth": "none",
      "authNotes": "No Pi account needed. Model providers are connected with `/login` (a subscription or an API key, stored in `~/.pi/agent/auth.json`) or with environment variables such as `ANTHROPIC_API_KEY`. MCP servers take headers, bearer tokens from the environment or OAuth, with tokens kept in `~/.pi/agent/mcp-auth.json`. Radius, the optional hosted gateway, needs its own sign-in or `RADIUS_API_KEY`.",
      "pricing": "free",
      "pricingNotes": "Free and MIT, with no paid edition of the harness. The owner pays the model provider. Radius, Earendil's optional hosted gateway, is an early alpha sold by prepaid credits, and no public price list was found (checked 2026-10-08).",
      "priceSummary": "Free · OSS",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the repository or the docs (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 113417,
        "npmWeekly": 5201697,
        "pypiWeekly": null,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://pi.dev/docs/latest",
      "capabilities": [
        "agent.harness",
        "agent.mcp-client"
      ],
      "tags": [
        "open-source",
        "local",
        "free",
        "no-card",
        "typescript",
        "mcp",
        "json-output",
        "rpc",
        "no-sandbox"
      ],
      "lastRelease": "2026-10-07",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 68.4,
        "grade": "B",
        "agentReady": false,
        "rank": 180,
        "ranked": true,
        "rankOf": 722,
        "categoryRank": 6,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 76,
          "maintenance": 87,
          "payments": 60,
          "reliability": 75,
          "schema": 84,
          "security": 61,
          "transparency": 64
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": -4,
        "negativeNotes": [
          "2026-06-08. GHSA-jfgx-wxx8-mp94 (CVE-2026-54328, high). Temporary extension installs used predictable paths under the system temp directory, so another local user on a shared Linux host could plant extension code that Pi then loaded. Fixed in 0.78.1. Fixed, published and four months old, -2. https://github.com/earendil-works/pi/security/advisories/GHSA-jfgx-wxx8-mp94",
          "2026-06-08. GHSA-mqxh-6gq7-558m (CVE-2026-54325, medium). Before 0.79.0 Pi loaded a repository's `.pi` settings and extensions without asking, so starting it in a cloned repository could run that repository's code. Fixed in 0.79.0 with project trust. Fixed and published, -2. https://github.com/earendil-works/pi/security/advisories/GHSA-mqxh-6gq7-558m",
          "2026-06-08. GHSA-7v5m-pr3q-6453 (CVE-2026-54326, low, XSS in HTML session exports) and GHSA-r95r-rj6r-c39x (CVE-2026-54327, low, a race in `auth.json` permissions). Both fixed in 0.78.1. Recorded without a deduction. https://github.com/earendil-works/pi/security/advisories"
        ],
        "verdict": "Four default tools, a JSONL event stream, an RPC mode and MCP tools kept out of the model's declarations by default keep context small and scripting simple. Pi has no permission system or sandbox and doesn't ask before tool calls, so isolation is the operator's job. Version 1.0.0 is dated 1 October 2026.",
        "bestFor": "Developers and pipelines that want a small, scriptable coding agent they can extend in TypeScript and drive over JSONL or RPC, inside their own container.",
        "strengths": [
          "Four default tools (read, bash, edit, write), with MCP tools reachable through codemode scripts and not declared to the model by default",
          "`--mode json` streams JSONL events and `--mode rpc` takes JSONL commands, both documented record by record, with a Python client example",
          "Built-in MCP client for stdio and streamable HTTP servers with OAuth, per-tool exposure settings and a conformance job in CI",
          "Project trust stops a repository's `.pi` settings, extensions and MCP servers loading until approved, and non-interactive modes skip them by default",
          "npm releases carry SLSA provenance from GitHub Actions trusted publishing, and the installer pins transitive dependencies"
        ],
        "weaknesses": [
          "No permission system or sandbox. Tool calls run with the user's rights and without an approval prompt",
          "An anonymous install and update ping to pi.dev and a latest-version request are on by default",
          "Four advisories published on 8 June 2026, one rated high and one medium, all fixed by 0.79.0",
          "No privacy policy for pi.dev or the CLI found, and pi.dev has no security.txt",
          "Eight of the last 15 CI runs on main failed on 7 and 8 October 2026, and a breaking provider rename shipped in patch release 1.0.3"
        ],
        "agentNotes": [
          "Run Pi inside a container or VM for unattended work. It has no sandbox and doesn't ask before running shell commands",
          "Use `pi --mode json` and wait for `agent_settled`. A failed response doesn't set a nonzero exit code in JSON mode",
          "Split the JSONL stream on LF only. Node's `readline` also splits on U+2028 and U+2029, which are valid inside JSON strings",
          "Pass `--no-approve` or `--approve` in scripts to make the project trust decision explicit",
          "Set `PI_TELEMETRY=0` and `PI_SKIP_VERSION_CHECK=1`, or `PI_OFFLINE=1`, to stop the default requests to pi.dev"
        ],
        "metrics": {
          "kind": "local",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 68.4
          }
        ],
        "editorialScores": {
          "ergonomics": 76,
          "maintenance": 87,
          "payments": 60,
          "reliability": 75,
          "schema": 84,
          "security": 61,
          "transparency": 64
        },
        "provenanceScore": 63
      },
      "connect": {
        "install": "curl -fsSL https://pi.dev/install.sh | sh   # or: npm install -g --ignore-scripts @earendil-works/pi-coding-agent",
        "headless": {
          "command": "pi --mode json --no-session --no-approve \"$TASK\"",
          "env": {
            "PI_SKIP_VERSION_CHECK": "1",
            "PI_TELEMETRY": "0"
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/agent.harness",
        "tool": "https://letme.dev/earendil-pi"
      },
      "area": "frameworks",
      "provenance": {
        "legalEntity": "Earendil Inc.",
        "domain": "pi.dev",
        "domainRegistered": "2024-01-30",
        "endpointOnVendorDomain": null,
        "terms": "",
        "privacy": "",
        "statusPage": "",
        "changelog": "https://pi.dev/changelog",
        "securityTxt": "none",
        "checked": "2026-10-08",
        "notes": [
          "The pi.dev and earendil.com footers read Earendil Inc. The Radius alpha terms of 1 September 2026 name Earendil Works Co., and the README calls the company Earendil Works.",
          "We found no terms or privacy page for pi.dev or the CLI. pi.dev/terms, pi.dev/privacy and earendil.com/privacy return 404. Terms exist only for Radius, at radius.earendil.com/terms.",
          "pi.dev/.well-known/security.txt and earendil.com/.well-known/security.txt return 404. SECURITY.md gives security@earendil.com and GitHub private reporting.",
          "RDAP for pi.dev gives a registration date of 2024-01-30 with Cloudflare as registrar. The README says the domain was donated by exe.dev.",
          "The repository moved from badlogic/pi-mono to earendil-works/pi, and the npm package from @mariozechner/pi-coding-agent to @earendil-works/pi-coding-agent at 0.74.0, per the advisories."
        ],
        "score": 63
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/earendil-pi.json",
      "live": {
        "slug": "earendil-pi",
        "versions": [
          {
            "registry": "github",
            "name": "earendil-works/pi",
            "version": "v1.1.0",
            "released": "2026-10-07",
            "seenAt": "2026-10-08T16:09:44.573412777Z"
          },
          {
            "registry": "npm",
            "name": "@earendil-works/pi-coding-agent",
            "version": "1.1.0",
            "seenAt": "2026-10-08T16:09:41.369786574Z"
          }
        ],
        "githubStars": 113482,
        "npmWeekly": 5201697,
        "securityTxt": {
          "url": "https://pi.dev/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-08T15:38:42.51766104Z"
        },
        "pages": [
          {
            "url": "https://pi.dev/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-08T18:22:53.741589246Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "82f9cb8bddf7"
          }
        ],
        "updatedAt": "2026-10-08T18:22:53.741589246Z"
      }
    },
    "answer": "Qwen Code scores 72.4 (BB) on agent readiness against Pi's 68.4 (B), and leads in 3 of 7 scored categories. Pi leads on reliability and security \u0026 auth.",
    "b": {
      "slug": "qwen-code",
      "name": "Qwen Code",
      "vendor": "Alibaba (Qwen team)",
      "vendorUrl": "https://qwenlm.github.io/qwen-code-docs/en/users/overview/",
      "kind": "harness",
      "category": "agent-harnesses",
      "summary": "Open-source coding agent from Alibaba's Qwen team for the terminal, with desktop, browser and editor interfaces. It runs Qwen, OpenAI, Anthropic and Gemini-compatible models or a local one, and runs headless with `qwen -p`.",
      "url": "https://www.anchorterminal.com/tools/qwen-code",
      "markdownUrl": "https://www.anchorterminal.com/tools/qwen-code.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/qwen-code.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/qwen-code.json",
      "repo": "https://github.com/QwenLM/qwen-code",
      "license": "Apache-2.0",
      "transports": [],
      "packages": [
        {
          "registry": "npm",
          "name": "@qwen-code/qwen-code"
        },
        {
          "registry": "npm",
          "name": "@qwen-code/sdk"
        },
        {
          "registry": "pypi",
          "name": "qwen-code-sdk"
        },
        {
          "registry": "oci",
          "name": "ghcr.io/qwenlm/qwen-code"
        }
      ],
      "auth": "api-key",
      "authNotes": "No account of its own. A model key goes in an environment variable or `~/.qwen/settings.json`, for Alibaba Cloud Model Studio (Coding Plan, Token Plan or a standard key), a listed third-party provider, or any OpenAI, Anthropic or Gemini-compatible endpoint including a local server. Vertex AI credentials also work. The Qwen OAuth sign-in was discontinued on 15 April 2026.",
      "pricing": "free",
      "pricingNotes": "Free and Apache-2.0, with nothing to buy for the CLI. The owner pays the model provider, or nothing with a local model. The Qwen OAuth free tier ended on 15 April 2026. Alibaba Cloud sells a fixed-fee Coding Plan and a usage-billed Token Plan for it, and we couldn't load their price pages on 8 October 2026.",
      "priceSummary": "Free · OSS",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the docs or the source (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 28362,
        "npmWeekly": 104819,
        "pypiWeekly": null,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://qwenlm.github.io/qwen-code-docs/en/users/overview/",
      "llmsTxt": "https://qwenlm.github.io/qwen-code-docs/llms.txt",
      "capabilities": [
        "agent.harness",
        "agent.mcp-client",
        "agent.multi-agent"
      ],
      "tags": [
        "official",
        "harness",
        "coding-agent",
        "cli",
        "open-source",
        "typescript",
        "mcp",
        "llms-txt",
        "telemetry-default-on",
        "pre-1.0",
        "free",
        "no-card",
        "local",
        "docker"
      ],
      "lastRelease": "2026-10-05",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 72.4,
        "grade": "BB",
        "agentReady": true,
        "rank": 93,
        "ranked": true,
        "rankOf": 722,
        "categoryRank": 3,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 85,
          "maintenance": 88,
          "payments": 60,
          "reliability": 69,
          "schema": 91,
          "security": 53,
          "transparency": 63
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "Apache-2.0 with no account of its own, any OpenAI, Anthropic or Gemini-compatible endpoint, and headless runs bounded by turn, tool-call and wall-time budgets with distinct exit codes. Out of the box, Auto mode lets an LLM classifier approve tool calls, with the sandbox and folder trust both off. Usage statistics are on by default.",
        "bestFor": "Developers and CI jobs that want an open-source harness tied to no single model vendor, with run budgets and SDKs.",
        "strengths": [
          "Apache-2.0, with CI on main showing 12 passes and 3 cancelled runs in the last 15, none failed",
          "Headless `qwen -p` with json and stream-json output, and exit codes 53 for the turn limit and 55 for a wall-time or tool-call budget",
          "Works with any OpenAI, Anthropic or Gemini-compatible endpoint, including a local server, with keys set by environment variable",
          "39 stable releases in the 90 days to 8 October 2026, each with a Breaking Changes heading in a generated changelog",
          "A Linux tool sandbox (Bubblewrap or Landlock) with `network: closed`, plus Seatbelt, Docker and Podman"
        ],
        "weaknesses": [
          "The default approval mode is Auto, where an LLM classifier approves tool calls, and sandboxing and folder trust are both off by default",
          "Usage statistics are on by default and go to an Alibaba Cloud endpoint that the docs don't name",
          "SECURITY.md points only to an Alibaba Cloud console portal, with no response time, and the repository has no published advisories",
          "Pre-1.0 at 0.25.0, with breaking changes shipped in patch releases such as 0.23.4 and 0.24.1",
          "1,402 open issues and 334 open pull requests on 8 October 2026",
          "The Qwen OAuth free tier ended on 15 April 2026, so every run needs a paid key or a local model"
        ],
        "agentNotes": [
          "Pass `--approval-mode` on every run. The settings default is `auto`, and one docs page says headless runs default to asking, so don't rely on either",
          "Add `--max-session-turns`, `--max-wall-time` and `--max-tool-calls`. All three are unlimited by default. Exit 53 is the turn limit and 55 a budget",
          "`--yolo` doesn't turn on a sandbox. Add `--sandbox`, or on Linux set `tools.executionSandbox` with `network` set to `closed`",
          "Set `QWEN_USAGE_STATISTICS_ENABLED=false` to stop usage statistics",
          "Authenticate with `OPENAI_API_KEY`, `OPENAI_BASE_URL` and `OPENAI_MODEL` in CI. The browser sign-in is discontinued"
        ],
        "metrics": {
          "kind": "local",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "BB",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 72.4
          }
        ],
        "editorialScores": {
          "ergonomics": 85,
          "maintenance": 88,
          "payments": 60,
          "reliability": 69,
          "schema": 91,
          "security": 53,
          "transparency": 77
        },
        "provenanceScore": 48
      },
      "connect": {
        "install": "npm install -g @qwen-code/qwen-code@latest   # or: brew install qwen-code",
        "headless": {
          "command": "qwen -p \"$TASK\" --output-format json --approval-mode auto-edit --max-session-turns 30 --max-wall-time 10m",
          "env": {
            "OPENAI_API_KEY": "\u003ckey\u003e",
            "OPENAI_BASE_URL": "\u003cendpoint\u003e",
            "OPENAI_MODEL": "\u003cmodel\u003e",
            "QWEN_USAGE_STATISTICS_ENABLED": "false"
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/agent.harness",
        "tool": "https://letme.dev/qwen-code"
      },
      "area": "frameworks",
      "provenance": {
        "legalEntity": "Qwen team, Alibaba Group (no legal entity is named in the repository or the docs)",
        "domain": "qwenlm.github.io",
        "domainRegistered": "",
        "endpointOnVendorDomain": null,
        "terms": "https://qwenlm.github.io/qwen-code-docs/en/users/support/tos-privacy/",
        "privacy": "https://qwenlm.github.io/qwen-code-docs/en/users/support/tos-privacy/",
        "statusPage": "",
        "changelog": "https://github.com/QwenLM/qwen-code/blob/main/CHANGELOG.md",
        "securityTxt": "none",
        "checked": "2026-10-08",
        "notes": [
          "The project's own Terms of Service and Privacy Notice is one page. It covers usage statistics and the Chrome extension, and maps each sign-in method to the model provider's terms and privacy policy. The project publishes no separate privacy policy for the CLI, so both fields point at that page.",
          "The LICENSE file carries Copyright 2025 Google LLC and Copyright 2025 Qwen. The docs describe the project as Alibaba's, and SECURITY.md sends reports to an Alibaba Cloud console portal.",
          "The docs are on GitHub Pages. qwen.ai returned its application page for /.well-known/security.txt, so no security.txt was found. alibabacloud.com couldn't be reached from our network on 8 October 2026.",
          "The qwen.ai terms and privacy pages render only with JavaScript and weren't read."
        ],
        "score": 48
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/qwen-code.json",
      "live": {
        "slug": "qwen-code",
        "pages": [
          {
            "url": "https://raw.githubusercontent.com/QwenLM/qwen-code/main/CHANGELOG.md",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-08T18:23:49.8394153Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "0782fd2dec4a"
          },
          {
            "url": "https://qwenlm.github.io/qwen-code-docs/en/users/support/tos-privacy/",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-08T18:23:34.139570921Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "11f3bc6ce7da"
          }
        ],
        "updatedAt": "2026-10-08T18:23:49.8394153Z"
      }
    },
    "facts": [
      {
        "a": "Agent harness",
        "b": "Agent harness",
        "name": "Kind"
      },
      {
        "a": "Earendil",
        "b": "Alibaba (Qwen team)",
        "name": "Vendor"
      },
      {
        "a": "no (local only)",
        "b": "no (local only)",
        "name": "Hosted endpoint"
      },
      {
        "a": "",
        "b": "",
        "name": "Transports"
      },
      {
        "a": "None",
        "b": "API key",
        "name": "Auth"
      },
      {
        "a": "Free",
        "b": "Free",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "MIT",
        "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-07",
        "b": "2026-10-05",
        "name": "Last release"
      },
      {
        "a": "no document linked",
        "b": "2026-10-01",
        "name": "Terms last updated"
      },
      {
        "a": "no document linked",
        "b": "2026-10-01",
        "name": "Privacy policy last updated"
      },
      {
        "a": "",
        "b": "not found in the text",
        "name": "Customer content may train models"
      },
      {
        "a": "",
        "b": "not found in the text",
        "name": "Terms restrict automated access"
      },
      {
        "a": "",
        "b": "not found in the text",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "",
        "b": "not found in the text",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "113k stars, 5.2M npm/wk",
        "b": "28k stars, 105k npm/wk",
        "name": "Popularity"
      }
    ],
    "faq": [
      {
        "answer": "Qwen Code scores 72.4 (BB) on agent readiness against Pi's 68.4 (B), and leads in 3 of 7 scored categories. Pi leads on reliability and security \u0026 auth.",
        "question": "Which is better for AI agents, Pi or Qwen Code?"
      },
      {
        "answer": "Yes. Pi is open source (MIT). Qwen Code is open source (Apache-2.0).",
        "question": "Are Pi and Qwen Code open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 75 against 69",
          "Security \u0026 auth, 61 against 53"
        ],
        "also": [
          "No key needed to call it"
        ],
        "goodFor": "Developers and pipelines that want a small, scriptable coding agent they can extend in TypeScript and drive over JSONL or RPC, inside their own container.",
        "slug": "earendil-pi",
        "watchFor": "No permission system or sandbox. Tool calls run with the user's rights and without an approval prompt"
      },
      {
        "aheadOn": [
          "Schema \u0026 documentation, 91 against 84",
          "Agent ergonomics, 85 against 76"
        ],
        "also": [
          "Agent-ready, a grade of BB or better",
          "No incidents deducted, where Pi loses 4 points for them"
        ],
        "goodFor": "Developers and CI jobs that want an open-source harness tied to no single model vendor, with run budgets and SDKs.",
        "slug": "qwen-code",
        "watchFor": "The default approval mode is Auto, where an LLM classifier approves tool calls, and sandboxing and folder trust are both off by default"
      }
    ],
    "job": {
      "capability": "agent.harness",
      "name": "Agent harness"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/aider-vs-earendil-pi.json",
        "title": "Aider vs Pi",
        "url": "https://www.anchorterminal.com/compare/aider-vs-earendil-pi"
      },
      {
        "json": "https://www.anchorterminal.com/compare/aider-vs-qwen-code.json",
        "title": "Aider vs Qwen Code",
        "url": "https://www.anchorterminal.com/compare/aider-vs-qwen-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/amp-vs-earendil-pi.json",
        "title": "Amp vs Pi",
        "url": "https://www.anchorterminal.com/compare/amp-vs-earendil-pi"
      },
      {
        "json": "https://www.anchorterminal.com/compare/amp-vs-qwen-code.json",
        "title": "Amp vs Qwen Code",
        "url": "https://www.anchorterminal.com/compare/amp-vs-qwen-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/claude-code-vs-earendil-pi.json",
        "title": "Claude Code vs Pi",
        "url": "https://www.anchorterminal.com/compare/claude-code-vs-earendil-pi"
      },
      {
        "json": "https://www.anchorterminal.com/compare/claude-code-vs-qwen-code.json",
        "title": "Claude Code vs Qwen Code",
        "url": "https://www.anchorterminal.com/compare/claude-code-vs-qwen-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cline-vs-earendil-pi.json",
        "title": "Cline vs Pi",
        "url": "https://www.anchorterminal.com/compare/cline-vs-earendil-pi"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cline-vs-qwen-code.json",
        "title": "Cline vs Qwen Code",
        "url": "https://www.anchorterminal.com/compare/cline-vs-qwen-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cursor-cli-vs-earendil-pi.json",
        "title": "Cursor CLI vs Pi",
        "url": "https://www.anchorterminal.com/compare/cursor-cli-vs-earendil-pi"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cursor-cli-vs-qwen-code.json",
        "title": "Cursor CLI vs Qwen Code",
        "url": "https://www.anchorterminal.com/compare/cursor-cli-vs-qwen-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/devin-vs-earendil-pi.json",
        "title": "Devin vs Pi",
        "url": "https://www.anchorterminal.com/compare/devin-vs-earendil-pi"
      },
      {
        "json": "https://www.anchorterminal.com/compare/devin-vs-qwen-code.json",
        "title": "Devin vs Qwen Code",
        "url": "https://www.anchorterminal.com/compare/devin-vs-qwen-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/earendil-pi-vs-gemini-cli.json",
        "title": "Pi vs Gemini CLI",
        "url": "https://www.anchorterminal.com/compare/earendil-pi-vs-gemini-cli"
      },
      {
        "json": "https://www.anchorterminal.com/compare/earendil-pi-vs-github-copilot-cli.json",
        "title": "Pi vs GitHub Copilot CLI",
        "url": "https://www.anchorterminal.com/compare/earendil-pi-vs-github-copilot-cli"
      },
      {
        "json": "https://www.anchorterminal.com/compare/earendil-pi-vs-goose.json",
        "title": "Pi vs goose",
        "url": "https://www.anchorterminal.com/compare/earendil-pi-vs-goose"
      },
      {
        "json": "https://www.anchorterminal.com/compare/earendil-pi-vs-kiro-cli.json",
        "title": "Pi vs Kiro CLI",
        "url": "https://www.anchorterminal.com/compare/earendil-pi-vs-kiro-cli"
      },
      {
        "json": "https://www.anchorterminal.com/compare/earendil-pi-vs-openai-codex.json",
        "title": "Pi vs OpenAI Codex",
        "url": "https://www.anchorterminal.com/compare/earendil-pi-vs-openai-codex"
      },
      {
        "json": "https://www.anchorterminal.com/compare/earendil-pi-vs-opencode.json",
        "title": "Pi vs OpenCode",
        "url": "https://www.anchorterminal.com/compare/earendil-pi-vs-opencode"
      },
      {
        "json": "https://www.anchorterminal.com/compare/earendil-pi-vs-openhands.json",
        "title": "Pi vs OpenHands",
        "url": "https://www.anchorterminal.com/compare/earendil-pi-vs-openhands"
      },
      {
        "json": "https://www.anchorterminal.com/compare/earendil-pi-vs-prime-agent.json",
        "title": "Pi vs Prime Agent",
        "url": "https://www.anchorterminal.com/compare/earendil-pi-vs-prime-agent"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-cli-vs-qwen-code.json",
        "title": "Gemini CLI vs Qwen Code",
        "url": "https://www.anchorterminal.com/compare/gemini-cli-vs-qwen-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/github-copilot-cli-vs-qwen-code.json",
        "title": "GitHub Copilot CLI vs Qwen Code",
        "url": "https://www.anchorterminal.com/compare/github-copilot-cli-vs-qwen-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/goose-vs-qwen-code.json",
        "title": "goose vs Qwen Code",
        "url": "https://www.anchorterminal.com/compare/goose-vs-qwen-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/kiro-cli-vs-qwen-code.json",
        "title": "Kiro CLI vs Qwen Code",
        "url": "https://www.anchorterminal.com/compare/kiro-cli-vs-qwen-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/openai-codex-vs-qwen-code.json",
        "title": "OpenAI Codex vs Qwen Code",
        "url": "https://www.anchorterminal.com/compare/openai-codex-vs-qwen-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/opencode-vs-qwen-code.json",
        "title": "OpenCode vs Qwen Code",
        "url": "https://www.anchorterminal.com/compare/opencode-vs-qwen-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/openhands-vs-qwen-code.json",
        "title": "OpenHands vs Qwen Code",
        "url": "https://www.anchorterminal.com/compare/openhands-vs-qwen-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/prime-agent-vs-qwen-code.json",
        "title": "Prime Agent vs Qwen Code",
        "url": "https://www.anchorterminal.com/compare/prime-agent-vs-qwen-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/paperclip-vs-qwen-code.json",
        "title": "Paperclip vs Qwen Code",
        "url": "https://www.anchorterminal.com/compare/paperclip-vs-qwen-code"
      }
    ],
    "scores": [
      {
        "by": 6,
        "earendil-pi": 75,
        "edge": "earendil-pi",
        "key": "reliability",
        "name": "Reliability",
        "qwen-code": 69,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 7,
        "earendil-pi": 84,
        "edge": "qwen-code",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "qwen-code": 91,
        "weight": 13
      },
      {
        "by": 9,
        "earendil-pi": 76,
        "edge": "qwen-code",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "qwen-code": 85,
        "weight": 13
      },
      {
        "by": 8,
        "earendil-pi": 61,
        "edge": "earendil-pi",
        "key": "security",
        "name": "Security \u0026 auth",
        "qwen-code": 53,
        "weight": 14
      },
      {
        "by": 0,
        "earendil-pi": 60,
        "edge": "",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "qwen-code": 60,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 1,
        "earendil-pi": 87,
        "edge": "qwen-code",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "qwen-code": 88,
        "weight": 7
      },
      {
        "by": 1,
        "earendil-pi": 64,
        "edge": "earendil-pi",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "qwen-code": 63,
        "weight": 7
      }
    ],
    "summary": "Qwen Code scores 72.4 (BB) on agent readiness against Pi's 68.4 (B), and leads in 3 of 7 scored categories. Pi leads on reliability and security \u0026 auth. Both do agent harness.",
    "verdicts": {
      "earendil-pi": "Four default tools, a JSONL event stream, an RPC mode and MCP tools kept out of the model's declarations by default keep context small and scripting simple. Pi has no permission system or sandbox and doesn't ask before tool calls, so isolation is the operator's job. Version 1.0.0 is dated 1 October 2026.",
      "qwen-code": "Apache-2.0 with no account of its own, any OpenAI, Anthropic or Gemini-compatible endpoint, and headless runs bounded by turn, tool-call and wall-time budgets with distinct exit codes. Out of the box, Auto mode lets an LLM classifier approve tool calls, with the sandbox and folder trust both off. Usage statistics are on by default."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/earendil-pi-vs-qwen-code",
    "json": "https://www.anchorterminal.com/compare/earendil-pi-vs-qwen-code.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/earendil-pi-vs-qwen-code.md",
    "slim": "https://www.anchorterminal.com/compare/earendil-pi-vs-qwen-code.min.md"
  },
  "markdown": "Qwen Code scores 72.4 (BB) on agent readiness against Pi's 68.4 (B), and leads in 3 of 7 scored categories. Pi leads on reliability and security \u0026 auth. Both do agent harness.\n\n- Pi: grade B, 68.4/100, rank #180 of 722. Markdown https://www.anchorterminal.com/tools/earendil-pi.md · JSON https://www.anchorterminal.com/api/v1/tools/earendil-pi.json\n- Qwen Code: grade BB, 72.4/100, rank #93 of 722. Markdown https://www.anchorterminal.com/tools/qwen-code.md · JSON https://www.anchorterminal.com/api/v1/tools/qwen-code.json\n\n## Which one, for what\n\n### Pi (B)\n\nGood for: Developers and pipelines that want a small, scriptable coding agent they can extend in TypeScript and drive over JSONL or RPC, inside their own container.\n\nAhead on:\n- Reliability, 75 against 69\n- Security \u0026 auth, 61 against 53\n\nAlso in its favour:\n- No key needed to call it\n\nWatch for: No permission system or sandbox. Tool calls run with the user's rights and without an approval prompt\n\n### Qwen Code (BB)\n\nGood for: Developers and CI jobs that want an open-source harness tied to no single model vendor, with run budgets and SDKs.\n\nAhead on:\n- Schema \u0026 documentation, 91 against 84\n- Agent ergonomics, 85 against 76\n\nAlso in its favour:\n- Agent-ready, a grade of BB or better\n- No incidents deducted, where Pi loses 4 points for them\n\nWatch for: The default approval mode is Auto, where an LLM classifier approves tool calls, and sandboxing and folder trust are both off by default\n\n\n## Score by category\n\n| Category | Weight | Pi | Qwen Code | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 75 | 69 | Pi +6 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 84 | 91 | Qwen Code +7 |\n| Agent ergonomics | 13% (16.2 this run) | 76 | 85 | Qwen Code +9 |\n| Security \u0026 auth | 14% (17.5 this run) | 61 | 53 | Pi +8 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 60 | 60 | even |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 87 | 88 | Qwen Code +1 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 64 | 63 | Pi +1 |\n| Negative events | ≤15 | -4 | 0 | |\n| **Total** | | **68.4 · B** | **72.4 · BB** | |\n\n## Facts side by side\n\n| Fact | Pi | Qwen Code |\n| --- | --- | --- |\n| Kind | Agent harness | Agent harness |\n| Vendor | Earendil | Alibaba (Qwen team) |\n| Hosted endpoint | no (local only) | no (local only) |\n| Transports |  |  |\n| Auth | None | API key |\n| Pricing | Free | Free |\n| x402 | no | no |\n| Licence | MIT | Apache-2.0 |\n| Read-only variant documented | no | no |\n| llms.txt | no | yes |\n| Last release | 2026-10-07 | 2026-10-05 |\n| Terms last updated | no document linked | 2026-10-01 |\n| Privacy policy last updated | no document linked | 2026-10-01 |\n| Customer content may train models |  | not found in the text |\n| Terms restrict automated access |  | not found in the text |\n| Terms restrict benchmarking |  | not found in the text |\n| Terms or service can change without notice |  | not found in the text |\n| Arbitration or class-action waiver |  | not found in the text |\n| Popularity | 113k stars, 5.2M npm/wk | 28k stars, 105k npm/wk |\n\n## Verdicts\n\n**Pi.** Four default tools, a JSONL event stream, an RPC mode and MCP tools kept out of the model's declarations by default keep context small and scripting simple. Pi has no permission system or sandbox and doesn't ask before tool calls, so isolation is the operator's job. Version 1.0.0 is dated 1 October 2026.\n\n**Qwen Code.** Apache-2.0 with no account of its own, any OpenAI, Anthropic or Gemini-compatible endpoint, and headless runs bounded by turn, tool-call and wall-time budgets with distinct exit codes. Out of the box, Auto mode lets an LLM classifier approve tool calls, with the sandbox and folder trust both off. Usage statistics are on by default.\n\n## Before you call either\n\n### Pi\n\n1. Run Pi inside a container or VM for unattended work. It has no sandbox and doesn't ask before running shell commands\n2. Use `pi --mode json` and wait for `agent_settled`. A failed response doesn't set a nonzero exit code in JSON mode\n3. Split the JSONL stream on LF only. Node's `readline` also splits on U+2028 and U+2029, which are valid inside JSON strings\n4. Pass `--no-approve` or `--approve` in scripts to make the project trust decision explicit\n5. Set `PI_TELEMETRY=0` and `PI_SKIP_VERSION_CHECK=1`, or `PI_OFFLINE=1`, to stop the default requests to pi.dev\n\n### Qwen Code\n\n1. Pass `--approval-mode` on every run. The settings default is `auto`, and one docs page says headless runs default to asking, so don't rely on either\n2. Add `--max-session-turns`, `--max-wall-time` and `--max-tool-calls`. All three are unlimited by default. Exit 53 is the turn limit and 55 a budget\n3. `--yolo` doesn't turn on a sandbox. Add `--sandbox`, or on Linux set `tools.executionSandbox` with `network` set to `closed`\n4. Set `QWEN_USAGE_STATISTICS_ENABLED=false` to stop usage statistics\n5. Authenticate with `OPENAI_API_KEY`, `OPENAI_BASE_URL` and `OPENAI_MODEL` in CI. The browser sign-in is discontinued\n\n## Questions\n\n### Which is better for AI agents, Pi or Qwen Code?\n\nQwen Code scores 72.4 (BB) on agent readiness against Pi's 68.4 (B), and leads in 3 of 7 scored categories. Pi leads on reliability and security \u0026 auth.\n\n### Are Pi and Qwen Code open source?\n\nYes. Pi is open source (MIT). Qwen Code is open source (Apache-2.0).\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/earendil-pi-vs-qwen-code.json, and with the fewest tokens: https://www.anchorterminal.com/compare/earendil-pi-vs-qwen-code.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"earendil-pi\", \"b\": \"qwen-code\"}`. From a terminal: `anchor compare earendil-pi qwen-code`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/earendil-pi.json and https://www.anchorterminal.com/api/v1/tools/qwen-code.json\n\n## Other comparisons with Pi or Qwen Code\n\n- [Aider vs Pi](https://www.anchorterminal.com/compare/aider-vs-earendil-pi.md)\n- [Aider vs Qwen Code](https://www.anchorterminal.com/compare/aider-vs-qwen-code.md)\n- [Amp vs Pi](https://www.anchorterminal.com/compare/amp-vs-earendil-pi.md)\n- [Amp vs Qwen Code](https://www.anchorterminal.com/compare/amp-vs-qwen-code.md)\n- [Claude Code vs Pi](https://www.anchorterminal.com/compare/claude-code-vs-earendil-pi.md)\n- [Claude Code vs Qwen Code](https://www.anchorterminal.com/compare/claude-code-vs-qwen-code.md)\n- [Cline vs Pi](https://www.anchorterminal.com/compare/cline-vs-earendil-pi.md)\n- [Cline vs Qwen Code](https://www.anchorterminal.com/compare/cline-vs-qwen-code.md)\n- [Cursor CLI vs Pi](https://www.anchorterminal.com/compare/cursor-cli-vs-earendil-pi.md)\n- [Cursor CLI vs Qwen Code](https://www.anchorterminal.com/compare/cursor-cli-vs-qwen-code.md)\n- [Devin vs Pi](https://www.anchorterminal.com/compare/devin-vs-earendil-pi.md)\n- [Devin vs Qwen Code](https://www.anchorterminal.com/compare/devin-vs-qwen-code.md)\n- [Pi vs Gemini CLI](https://www.anchorterminal.com/compare/earendil-pi-vs-gemini-cli.md)\n- [Pi vs GitHub Copilot CLI](https://www.anchorterminal.com/compare/earendil-pi-vs-github-copilot-cli.md)\n- [Pi vs goose](https://www.anchorterminal.com/compare/earendil-pi-vs-goose.md)\n- [Pi vs Kiro CLI](https://www.anchorterminal.com/compare/earendil-pi-vs-kiro-cli.md)\n- [Pi vs OpenAI Codex](https://www.anchorterminal.com/compare/earendil-pi-vs-openai-codex.md)\n- [Pi vs OpenCode](https://www.anchorterminal.com/compare/earendil-pi-vs-opencode.md)\n- [Pi vs OpenHands](https://www.anchorterminal.com/compare/earendil-pi-vs-openhands.md)\n- [Pi vs Prime Agent](https://www.anchorterminal.com/compare/earendil-pi-vs-prime-agent.md)\n- [Gemini CLI vs Qwen Code](https://www.anchorterminal.com/compare/gemini-cli-vs-qwen-code.md)\n- [GitHub Copilot CLI vs Qwen Code](https://www.anchorterminal.com/compare/github-copilot-cli-vs-qwen-code.md)\n- [goose vs Qwen Code](https://www.anchorterminal.com/compare/goose-vs-qwen-code.md)\n- [Kiro CLI vs Qwen Code](https://www.anchorterminal.com/compare/kiro-cli-vs-qwen-code.md)\n- [OpenAI Codex vs Qwen Code](https://www.anchorterminal.com/compare/openai-codex-vs-qwen-code.md)\n- [OpenCode vs Qwen Code](https://www.anchorterminal.com/compare/opencode-vs-qwen-code.md)\n- [OpenHands vs Qwen Code](https://www.anchorterminal.com/compare/openhands-vs-qwen-code.md)\n- [Prime Agent vs Qwen Code](https://www.anchorterminal.com/compare/prime-agent-vs-qwen-code.md)\n- [Paperclip vs Qwen Code](https://www.anchorterminal.com/compare/paperclip-vs-qwen-code.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-08",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Pi vs Qwen Code",
        "url": ""
      }
    ],
    "description": "Qwen Code scores 72.4 (BB) on agent readiness against Pi's 68.4 (B), and leads in 3 of 7 scored categories. Pi leads on reliability and security \u0026 auth. Both do agent harness. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "Pi B 68.4",
      "Qwen Code BB 72.4",
      "scores"
    ],
    "h1": "Pi vs Qwen Code",
    "image": "https://www.anchorterminal.com/assets/og/compare-earendil-pi-vs-qwen-code.png",
    "path": "/compare/earendil-pi-vs-qwen-code",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Pi vs Qwen Code for AI agents, B 68.4 vs BB 72.4 | Anchor Terminal",
    "toc": null,
    "updated": "2026-10-08",
    "url": "https://www.anchorterminal.com/compare/earendil-pi-vs-qwen-code"
  },
  "tokens": {
    "markdown": 2350,
    "slim": 630
  },
  "version": 1
}
