{
  "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": 170,
        "ranked": true,
        "rankOf": 629,
        "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": "Gemini CLI scores 72 (BB) on agent readiness against Pi's 68.4 (B), and leads in 5 of 7 scored categories. Pi leads on payments \u0026 pricing.",
    "b": {
      "slug": "gemini-cli",
      "name": "Gemini CLI",
      "vendor": "Google",
      "vendorUrl": "https://geminicli.com",
      "kind": "harness",
      "category": "agent-harnesses",
      "summary": "Google's open-source coding agent for the terminal, in TypeScript on Node 20 or newer.",
      "url": "https://www.anchorterminal.com/tools/gemini-cli",
      "markdownUrl": "https://www.anchorterminal.com/tools/gemini-cli.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/gemini-cli.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/gemini-cli.json",
      "repo": "https://github.com/google-gemini/gemini-cli",
      "license": "Apache-2.0",
      "transports": [],
      "packages": [
        {
          "registry": "npm",
          "name": "@google/gemini-cli"
        }
      ],
      "auth": "mixed",
      "authNotes": "Sign in with a Google account (Gemini Code Assist for individuals, Google AI Pro or Ultra, Code Assist Standard or Enterprise), or use a Gemini API key from AI Studio or Vertex AI credentials. Google's terms forbid using the Gemini CLI sign-in from third-party software.",
      "pricing": "freemium",
      "pricingNotes": "Free with a Google sign-in, up to 1,000 model requests a user a day, or 250 a day on Flash with an unpaid Gemini API key. Google AI Pro raises the daily limit to 1,500 and Ultra to 2,000, Code Assist Standard to 1,500 and Enterprise to 2,000. Pay as you go through a paid Gemini API key or Vertex AI at token rates. Requests are also limited per minute (checked 2026-10-02).",
      "priceSummary": "Freemium",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the docs or the source (checked 2026-10-02).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 107000,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-10-02"
      },
      "docsUrl": "https://geminicli.com/docs/",
      "llmsTxt": "https://geminicli.com/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-tier",
        "no-card",
        "gemini-only"
      ],
      "lastRelease": "2026-09-29",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 72,
        "grade": "BB",
        "agentReady": true,
        "rank": 94,
        "ranked": true,
        "rankOf": 629,
        "categoryRank": 4,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 78,
          "maintenance": 88,
          "payments": 40,
          "reliability": 71,
          "schema": 93,
          "security": 67,
          "transparency": 87
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": -2,
        "negativeNotes": [
          "2026-04-24. GHSA-wpqr-6v78-jr5g, critical (CVSS 10). In CI, headless Gemini CLI trusted the workspace folder automatically and loaded its configuration, and `--yolo` ignored fine-grained tool allowlists, so a workflow fed untrusted pull requests or issues could run an attacker's code. Fixed in @google/gemini-cli 0.39.1 and run-gemini-cli 0.1.22 and published, so the deduction is small (https://github.com/advisories/GHSA-wpqr-6v78-jr5g)"
        ],
        "verdict": "Apache-2.0, CI passing on main, and 583 open issues with priority labels. Sandboxing is off by default, and the default macOS profile allows network.",
        "bestFor": "Developers and CI jobs that want an open-source harness with a free tier and documented headless output.",
        "strengths": [
          "Apache-2.0, CI passing on main, and 583 open issues with priority labels",
          "A weekly stable release after a week in preview, under a written release policy",
          "Headless JSON and stream-json output with documented exit codes, including 53 for the turn limit",
          "A TOML policy engine with admin policy paths, folder trust on by default and a setting that blocks yolo mode",
          "1,000 free requests a day with a Google sign-in and no card"
        ],
        "weaknesses": [
          "Sandboxing is off by default, and the default macOS profile allows network",
          "Usage statistics on by default, and the free tier may train on data unless the user opts out",
          "A critical advisory in April 2026 (CVSS 10) for CI runs that trusted untrusted repositories",
          "Pre-1.0 at 0.62.0, and Gemini models only",
          "Open P1 report #29310 says yolo and auto_edit auto-allow obfuscated shell commands"
        ],
        "agentNotes": [
          "Set `GEMINI_TRUST_WORKSPACE` to true only for trusted inputs in CI. Since 0.39.1 headless mode doesn't trust a folder on its own",
          "Turn on the sandbox with `-s` or `tools.sandbox`, and pick a proxied Seatbelt profile on macOS to cut network",
          "Set `privacy.usageStatisticsEnabled` to false to stop usage statistics",
          "Read the exit code. 42 is bad input and 53 is the turn limit",
          "Use `--output-format stream-json` to get tool calls and results as JSONL events"
        ],
        "metrics": {
          "kind": "local",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3.5,
        "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
          }
        ],
        "editorialScores": {
          "ergonomics": 78,
          "maintenance": 88,
          "payments": 40,
          "reliability": 71,
          "schema": 93,
          "security": 67,
          "transparency": 80
        },
        "provenanceScore": 93
      },
      "connect": {
        "install": "npm i -g @google/gemini-cli   # or: brew install gemini-cli",
        "headless": {
          "run": "gemini -p \"fix the failing test\" --output-format json --approval-mode auto_edit"
        }
      },
      "letme": {
        "capability": "https://letme.dev/agent.harness",
        "tool": "https://letme.dev/gemini-cli"
      },
      "sameCompany": [
        "gemini-api",
        "gemini-embedding",
        "vertex-ai-tuning",
        "google-model-armor",
        "google-imagen",
        "google-veo",
        "google-lyria",
        "google-speech-to-text",
        "google-adk",
        "google-secret-manager",
        "google-weather-api",
        "chrome-devtools-mcp",
        "google-maps-platform",
        "google-cloud-translation",
        "google-calendar-api",
        "google-drive-api",
        "google-ads-api",
        "google-sheets-api",
        "gmail-api"
      ],
      "area": "frameworks",
      "provenance": {
        "legalEntity": "Google LLC",
        "domain": "google.com",
        "domainRegistered": "1997-09-15",
        "endpointOnVendorDomain": null,
        "terms": "https://geminicli.com/docs/resources/tos-privacy",
        "privacy": "https://policies.google.com/privacy",
        "statusPage": "https://aistudio.google.com/status",
        "changelog": "https://geminicli.com/docs/changelogs",
        "securityTxt": "valid",
        "checked": "2026-10-01",
        "notes": [
          "The docs are on geminicli.com. The terms page there maps each sign-in method to its own terms and privacy notice (Gemini Code Assist, the Gemini API unpaid and paid services, Google Cloud).",
          "The status page is the Gemini API's. We found no status page for Gemini Code Assist sign-ins.",
          "Legal entity, domain date and security.txt for google.com are from the gemini-api listing's check of 26 September 2026."
        ],
        "score": 93
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/gemini-cli.json",
      "live": {
        "slug": "gemini-cli",
        "vendorStatus": {
          "page": "https://aistudio.google.com/status",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-04T21:40:04.477079675Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "google-gemini/gemini-cli",
            "version": "v0.63.0",
            "released": "2026-10-06",
            "seenAt": "2026-10-08T16:12:44.55043328Z"
          },
          {
            "registry": "npm",
            "name": "@google/gemini-cli",
            "version": "0.63.0",
            "seenAt": "2026-10-08T16:12:41.451552281Z"
          }
        ],
        "githubStars": 107253,
        "npmWeekly": 453215,
        "securityTxt": {
          "url": "https://google.com/.well-known/security.txt",
          "state": "valid",
          "expires": "2030-04-01T00:00:00z",
          "checkedAt": "2026-10-08T15:38:39.75078566Z"
        },
        "llmsTxt": {
          "url": "https://geminicli.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-08T14:00:27.236814951Z"
        },
        "domain": {
          "domain": "google.com",
          "registered": "1997-09-15",
          "source": "https://rdap.verisign.com/com/v1/domain/google.com",
          "checkedAt": "2026-10-04T13:05:50.737985829Z"
        },
        "pages": [
          {
            "url": "https://geminicli.com/docs/changelogs",
            "kind": "changelog",
            "status": 304,
            "checkedAt": "2026-10-08T18:20:37.633723561Z",
            "changedAt": "2026-10-07T18:06:22.906677126Z",
            "fingerprint": "52b85a91ab8e"
          },
          {
            "url": "https://geminicli.com/docs/resources/tos-privacy",
            "kind": "terms",
            "status": 304,
            "checkedAt": "2026-10-08T18:20:39.670136652Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "f7d55fbc670d"
          }
        ],
        "updatedAt": "2026-10-08T18:20:39.670136652Z"
      }
    },
    "facts": [
      {
        "a": "Agent harness",
        "b": "Agent harness",
        "name": "Kind"
      },
      {
        "a": "Earendil",
        "b": "Google",
        "name": "Vendor"
      },
      {
        "a": "no (local only)",
        "b": "no (local only)",
        "name": "Hosted endpoint"
      },
      {
        "a": "",
        "b": "",
        "name": "Transports"
      },
      {
        "a": "None",
        "b": "OAuth or key",
        "name": "Auth"
      },
      {
        "a": "Free",
        "b": "Freemium",
        "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-09-29",
        "name": "Last release"
      },
      {
        "a": "no document linked",
        "b": "couldn't be read",
        "name": "Terms last updated"
      },
      {
        "a": "no document linked",
        "b": "2026-10-01",
        "name": "Privacy policy last updated"
      },
      {
        "a": "",
        "b": "yes",
        "name": "Customer content may train models"
      },
      {
        "a": "",
        "b": "couldn't be read",
        "name": "Terms restrict automated access"
      },
      {
        "a": "",
        "b": "couldn't be read",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "",
        "b": "couldn't be read",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "",
        "b": "couldn't be read",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "113k stars, 5.2M npm/wk",
        "b": "107k stars",
        "name": "Popularity"
      },
      {
        "a": "none",
        "b": "3.5/5 (2)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Gemini CLI scores 72 (BB) on agent readiness against Pi's 68.4 (B), and leads in 5 of 7 scored categories. Pi leads on payments \u0026 pricing.",
        "question": "Which is better for AI agents, Pi or Gemini CLI?"
      },
      {
        "answer": "Yes. Pi is open source (MIT). Gemini CLI is open source (Apache-2.0).",
        "question": "Are Pi and Gemini CLI open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Payments \u0026 pricing, 60 against 40"
        ],
        "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, 93 against 84",
          "Security \u0026 auth, 67 against 61",
          "Transparency \u0026 trust, 87 against 64"
        ],
        "also": [
          "Agent-ready, a grade of BB or better"
        ],
        "goodFor": "Developers and CI jobs that want an open-source harness with a free tier and documented headless output.",
        "slug": "gemini-cli",
        "watchFor": "Sandboxing is off by default, and the default macOS profile allows network"
      }
    ],
    "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-gemini-cli.json",
        "title": "Aider vs Gemini CLI",
        "url": "https://www.anchorterminal.com/compare/aider-vs-gemini-cli"
      },
      {
        "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-gemini-cli.json",
        "title": "Amp vs Gemini CLI",
        "url": "https://www.anchorterminal.com/compare/amp-vs-gemini-cli"
      },
      {
        "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-gemini-cli.json",
        "title": "Claude Code vs Gemini CLI",
        "url": "https://www.anchorterminal.com/compare/claude-code-vs-gemini-cli"
      },
      {
        "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-gemini-cli.json",
        "title": "Cline vs Gemini CLI",
        "url": "https://www.anchorterminal.com/compare/cline-vs-gemini-cli"
      },
      {
        "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-gemini-cli.json",
        "title": "Cursor CLI vs Gemini CLI",
        "url": "https://www.anchorterminal.com/compare/cursor-cli-vs-gemini-cli"
      },
      {
        "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-gemini-cli.json",
        "title": "Devin vs Gemini CLI",
        "url": "https://www.anchorterminal.com/compare/devin-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/earendil-pi-vs-qwen-code.json",
        "title": "Pi vs Qwen Code",
        "url": "https://www.anchorterminal.com/compare/earendil-pi-vs-qwen-code"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-cli-vs-github-copilot-cli.json",
        "title": "Gemini CLI vs GitHub Copilot CLI",
        "url": "https://www.anchorterminal.com/compare/gemini-cli-vs-github-copilot-cli"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-cli-vs-goose.json",
        "title": "Gemini CLI vs goose",
        "url": "https://www.anchorterminal.com/compare/gemini-cli-vs-goose"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-cli-vs-kiro-cli.json",
        "title": "Gemini CLI vs Kiro CLI",
        "url": "https://www.anchorterminal.com/compare/gemini-cli-vs-kiro-cli"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-cli-vs-openai-codex.json",
        "title": "Gemini CLI vs OpenAI Codex",
        "url": "https://www.anchorterminal.com/compare/gemini-cli-vs-openai-codex"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-cli-vs-opencode.json",
        "title": "Gemini CLI vs OpenCode",
        "url": "https://www.anchorterminal.com/compare/gemini-cli-vs-opencode"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-cli-vs-openhands.json",
        "title": "Gemini CLI vs OpenHands",
        "url": "https://www.anchorterminal.com/compare/gemini-cli-vs-openhands"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gemini-cli-vs-prime-agent.json",
        "title": "Gemini CLI vs Prime Agent",
        "url": "https://www.anchorterminal.com/compare/gemini-cli-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/gemini-cli-vs-paperclip.json",
        "title": "Gemini CLI vs Paperclip",
        "url": "https://www.anchorterminal.com/compare/gemini-cli-vs-paperclip"
      }
    ],
    "scores": [
      {
        "by": 4,
        "earendil-pi": 75,
        "edge": "earendil-pi",
        "gemini-cli": 71,
        "key": "reliability",
        "name": "Reliability",
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 9,
        "earendil-pi": 84,
        "edge": "gemini-cli",
        "gemini-cli": 93,
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "weight": 13
      },
      {
        "by": 2,
        "earendil-pi": 76,
        "edge": "gemini-cli",
        "gemini-cli": 78,
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "weight": 13
      },
      {
        "by": 6,
        "earendil-pi": 61,
        "edge": "gemini-cli",
        "gemini-cli": 67,
        "key": "security",
        "name": "Security \u0026 auth",
        "weight": 14
      },
      {
        "by": 20,
        "earendil-pi": 60,
        "edge": "earendil-pi",
        "gemini-cli": 40,
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 1,
        "earendil-pi": 87,
        "edge": "gemini-cli",
        "gemini-cli": 88,
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "weight": 7
      },
      {
        "by": 23,
        "earendil-pi": 64,
        "edge": "gemini-cli",
        "gemini-cli": 87,
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "weight": 7
      }
    ],
    "summary": "Gemini CLI scores 72 (BB) on agent readiness against Pi's 68.4 (B), and leads in 5 of 7 scored categories. Pi leads on payments \u0026 pricing. 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.",
      "gemini-cli": "Apache-2.0, CI passing on main, and 583 open issues with priority labels. Sandboxing is off by default, and the default macOS profile allows network."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/earendil-pi-vs-gemini-cli",
    "json": "https://www.anchorterminal.com/compare/earendil-pi-vs-gemini-cli.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/earendil-pi-vs-gemini-cli.md",
    "slim": "https://www.anchorterminal.com/compare/earendil-pi-vs-gemini-cli.min.md"
  },
  "markdown": "Gemini CLI scores 72 (BB) on agent readiness against Pi's 68.4 (B), and leads in 5 of 7 scored categories. Pi leads on payments \u0026 pricing. Both do agent harness.\n\n- Pi: grade B, 68.4/100, rank #170 of 629. Markdown https://www.anchorterminal.com/tools/earendil-pi.md · JSON https://www.anchorterminal.com/api/v1/tools/earendil-pi.json\n- Gemini CLI: grade BB, 72/100, rank #94 of 629. Markdown https://www.anchorterminal.com/tools/gemini-cli.md · JSON https://www.anchorterminal.com/api/v1/tools/gemini-cli.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- Payments \u0026 pricing, 60 against 40\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### Gemini CLI (BB)\n\nGood for: Developers and CI jobs that want an open-source harness with a free tier and documented headless output.\n\nAhead on:\n- Schema \u0026 documentation, 93 against 84\n- Security \u0026 auth, 67 against 61\n- Transparency \u0026 trust, 87 against 64\n\nAlso in its favour:\n- Agent-ready, a grade of BB or better\n\nWatch for: Sandboxing is off by default, and the default macOS profile allows network\n\n\n## Score by category\n\n| Category | Weight | Pi | Gemini CLI | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 75 | 71 | Pi +4 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 84 | 93 | Gemini CLI +9 |\n| Agent ergonomics | 13% (16.2 this run) | 76 | 78 | Gemini CLI +2 |\n| Security \u0026 auth | 14% (17.5 this run) | 61 | 67 | Gemini CLI +6 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 60 | 40 | Pi +20 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 87 | 88 | Gemini CLI +1 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 64 | 87 | Gemini CLI +23 |\n| Negative events | ≤15 | -4 | -2 | |\n| **Total** | | **68.4 · B** | **72 · BB** | |\n\n## Facts side by side\n\n| Fact | Pi | Gemini CLI |\n| --- | --- | --- |\n| Kind | Agent harness | Agent harness |\n| Vendor | Earendil | Google |\n| Hosted endpoint | no (local only) | no (local only) |\n| Transports |  |  |\n| Auth | None | OAuth or key |\n| Pricing | Free | Freemium |\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-09-29 |\n| Terms last updated | no document linked | couldn't be read |\n| Privacy policy last updated | no document linked | 2026-10-01 |\n| Customer content may train models |  | yes |\n| Terms restrict automated access |  | couldn't be read |\n| Terms restrict benchmarking |  | couldn't be read |\n| Terms or service can change without notice |  | couldn't be read |\n| Arbitration or class-action waiver |  | couldn't be read |\n| Popularity | 113k stars, 5.2M npm/wk | 107k stars |\n| Agent reviews | none | 3.5/5 (2) |\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**Gemini CLI.** Apache-2.0, CI passing on main, and 583 open issues with priority labels. Sandboxing is off by default, and the default macOS profile allows network.\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### Gemini CLI\n\n1. Set `GEMINI_TRUST_WORKSPACE` to true only for trusted inputs in CI. Since 0.39.1 headless mode doesn't trust a folder on its own\n2. Turn on the sandbox with `-s` or `tools.sandbox`, and pick a proxied Seatbelt profile on macOS to cut network\n3. Set `privacy.usageStatisticsEnabled` to false to stop usage statistics\n4. Read the exit code. 42 is bad input and 53 is the turn limit\n5. Use `--output-format stream-json` to get tool calls and results as JSONL events\n\n## Questions\n\n### Which is better for AI agents, Pi or Gemini CLI?\n\nGemini CLI scores 72 (BB) on agent readiness against Pi's 68.4 (B), and leads in 5 of 7 scored categories. Pi leads on payments \u0026 pricing.\n\n### Are Pi and Gemini CLI open source?\n\nYes. Pi is open source (MIT). Gemini CLI 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-gemini-cli.json, and with the fewest tokens: https://www.anchorterminal.com/compare/earendil-pi-vs-gemini-cli.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"earendil-pi\", \"b\": \"gemini-cli\"}`. From a terminal: `anchor compare earendil-pi gemini-cli`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/earendil-pi.json and https://www.anchorterminal.com/api/v1/tools/gemini-cli.json\n\n## Other comparisons with Pi or Gemini CLI\n\n- [Aider vs Pi](https://www.anchorterminal.com/compare/aider-vs-earendil-pi.md)\n- [Aider vs Gemini CLI](https://www.anchorterminal.com/compare/aider-vs-gemini-cli.md)\n- [Amp vs Pi](https://www.anchorterminal.com/compare/amp-vs-earendil-pi.md)\n- [Amp vs Gemini CLI](https://www.anchorterminal.com/compare/amp-vs-gemini-cli.md)\n- [Claude Code vs Pi](https://www.anchorterminal.com/compare/claude-code-vs-earendil-pi.md)\n- [Claude Code vs Gemini CLI](https://www.anchorterminal.com/compare/claude-code-vs-gemini-cli.md)\n- [Cline vs Pi](https://www.anchorterminal.com/compare/cline-vs-earendil-pi.md)\n- [Cline vs Gemini CLI](https://www.anchorterminal.com/compare/cline-vs-gemini-cli.md)\n- [Cursor CLI vs Pi](https://www.anchorterminal.com/compare/cursor-cli-vs-earendil-pi.md)\n- [Cursor CLI vs Gemini CLI](https://www.anchorterminal.com/compare/cursor-cli-vs-gemini-cli.md)\n- [Devin vs Pi](https://www.anchorterminal.com/compare/devin-vs-earendil-pi.md)\n- [Devin vs Gemini CLI](https://www.anchorterminal.com/compare/devin-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- [Pi vs Qwen Code](https://www.anchorterminal.com/compare/earendil-pi-vs-qwen-code.md)\n- [Gemini CLI vs GitHub Copilot CLI](https://www.anchorterminal.com/compare/gemini-cli-vs-github-copilot-cli.md)\n- [Gemini CLI vs goose](https://www.anchorterminal.com/compare/gemini-cli-vs-goose.md)\n- [Gemini CLI vs Kiro CLI](https://www.anchorterminal.com/compare/gemini-cli-vs-kiro-cli.md)\n- [Gemini CLI vs OpenAI Codex](https://www.anchorterminal.com/compare/gemini-cli-vs-openai-codex.md)\n- [Gemini CLI vs OpenCode](https://www.anchorterminal.com/compare/gemini-cli-vs-opencode.md)\n- [Gemini CLI vs OpenHands](https://www.anchorterminal.com/compare/gemini-cli-vs-openhands.md)\n- [Gemini CLI vs Prime Agent](https://www.anchorterminal.com/compare/gemini-cli-vs-prime-agent.md)\n- [Gemini CLI vs Qwen Code](https://www.anchorterminal.com/compare/gemini-cli-vs-qwen-code.md)\n- [Gemini CLI vs Paperclip](https://www.anchorterminal.com/compare/gemini-cli-vs-paperclip.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 Gemini CLI",
        "url": ""
      }
    ],
    "description": "Gemini CLI scores 72 (BB) on agent readiness against Pi's 68.4 (B), and leads in 5 of 7 scored categories. Pi leads on payments \u0026 pricing. Both do agent harness. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "Pi B 68.4",
      "Gemini CLI BB 72",
      "scores"
    ],
    "h1": "Pi vs Gemini CLI",
    "image": "https://www.anchorterminal.com/assets/og/compare-earendil-pi-vs-gemini-cli.png",
    "path": "/compare/earendil-pi-vs-gemini-cli",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Pi vs Gemini CLI for AI agents, B 68.4 vs BB 72 | Anchor Terminal",
    "toc": null,
    "updated": "2026-10-08",
    "url": "https://www.anchorterminal.com/compare/earendil-pi-vs-gemini-cli"
  },
  "tokens": {
    "markdown": 2250,
    "slim": 630
  },
  "version": 1
}
