{
  "fixes": {
    "slug": "kimi-code-cli",
    "name": "Kimi Code CLI",
    "listing": "https://www.anchorterminal.com/tools/kimi-code-cli",
    "markdown": "# Fix list: Kimi Code CLI\n\nFrom Anchor Terminal's listing at https://www.anchorterminal.com/tools/kimi-code-cli, the October 2026 research run, assessed 18 October 2026. Grade B, 62.1 out of 100.\n\nThis is everything the published grade says the listing lacks, the biggest possible gain to the total first. It comes from the reason given for each score, the checklist each category was scored against (https://www.anchorterminal.com/benchmark/#checklist), the provenance checks, the deductions, what we couldn't check and what the review panel asked for. A fix counts at the next check, once it's public.\n\nFor a coding agent working on Kimi Code CLI: work through the items below in the product, its docs and its public pages. Each category gives the reason for its score, with the points each checklist item earned, and the checklist itself, so the gap is the items that earned less than their points. Change the product, not the wording, and keep a note of what you changed and where it's published.\n\n## 1. Security \u0026 auth, 45 out of 100, up to 9.6 more on the total\n\nWhy it scored 45: Harness reading of the framework checklist. 30 for credentials and 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. OAuth tokens sit in 0600 files and shell keys aren't read unless named. Telemetry is on by default and, in the 2.2.0 package, sends events with a device ID, session ID and model name to telemetry-logs.kimi.com. Auto-update is on by default (14). Interactive sessions ask before edits and commands, and a dangerous-command guard covers `rm -rf` and similar, but `kimi -p` runs under Never Ask, where everything is approved and the guard is off, with only static deny rules left. No sandbox found, and hooks fail open (7). The MCP page warns about untrusted servers and project `.kimi-code/mcp.json` entries, and since 2.1.0 project config waits for workspace trust, but no prompt-injection guidance was found for fetched web pages (6). Sessions on disk, `kimi export`, the `kimi vis` session visualiser, a diagnostic log and hooks for auditing (11). SECURITY.md names private GitHub advisories and an email, supports only the latest version and gives no response time. No security.txt was found on kimi.com, kimi.ai or moonshot.ai, and OSV, the public mirror of the GitHub Advisory Database, lists no advisories for the package, though 2.1.0 shipped security fixes (7).\n\nThe checklist (https://www.anchorterminal.com/benchmark/#checklist-security):\n\n- 0 to 30, the credential model. 30 for OAuth 2.1 with scopes, or scoped and revocable keys with rotation. 20 for plain revocable API keys. 10 for one all-powerful key. 10 off when a secret can travel in a URL query string as a documented option.\n- 0 to 20, read-only or least-privilege modes, and confirmation or approval for destructive actions.\n- 0 to 15, prompt-injection posture where the tool returns untrusted content (documented mitigations or guidance). A tool that returns no untrusted content gets 10.\n- 0 to 15, audit logs or per-call visibility for the operator.\n- 0 to 20, a security programme. security.txt or a disclosure policy, a bug bounty, SOC 2 or ISO 27001, advisories handled in public.\n\nModels are read for retention, whether API data trains models (and whether that's off by default), zero-retention options and certifications. Frameworks for telemetry defaults, approval hooks, guardrails and sandboxing.\n\n## 2. Reliability, 68 out of 100, up to 6.4 more on the total\n\nWhy it scored 68: Local-package reading. An install script that verifies a checksum, npm `@moonshot-ai/kimi-code` with Node 22.19.0 or newer stated, and Homebrew core at 2.2.0, for macOS, Linux and Windows (20). A public CI workflow runs the build, a smoke test, sharded tests on Linux, tests on Windows, lint and typecheck. GitHub refused our requests, so whether it passes on main wasn't checked (15). Read on 18 October through shields.io counts, 1.1k issues are open against 391 closed and 467 pull requests open against 2.3k closed, in a repository whose first commit was on 22 May 2026. Which of the open issues are crashes or regressions, and how fast they are answered, couldn't be read, so the line scores the backlog alone (8). Changesets changelog with Major, Minor and Patch headings and a Breaking note in 0.28.0, but 2.0.0's only major change was a new slash command, and 2.2.0 made configs with `executor = \"kaos\"` fail validation in a minor release (10). 2.2.0, past 1.0 (15).\n\nThe checklist (https://www.anchorterminal.com/benchmark/#checklist-reliability):\n\nHosted APIs, MCP servers, models and platforms.\n\n- 20, a public status page with component history (Statuspage, Instatus, BetterStack or the vendor's own).\n- 0 to 30, the incident record for the last 90 days on that page. 30 for a clean record or trivial incidents only, 20 for minor incidents only, 10 for one major outage (an hour or more of a core API down, or errors across the board), 0 for several. 5 when there's no history we could read, and the note says so.\n- 15, rate limits documented with numbers.\n- 15, documented 429 or overload handling (Retry-After, backoff guidance), and idempotency keys or safe-retry guidance where writes are involved.\n- 10, an SLA published for any paid tier.\n- 10, the surface agents use is generally available, not beta or preview.\n\nLocal packages, SDKs, frameworks and stdio MCP servers.\n\n- 20, installs from an official package with supported runtimes stated.\n- 25, a public CI and test suite, passing on the default branch.\n- 0 to 25, open crash or regression issues relative to activity (25 for few and handled, 0 for many, old and unanswered).\n- 15, semver discipline and breaking changes called out in a changelog.\n- 15, version 1.0 or later, or declared stable.\n\nProtocols are read from their reference implementations, the public facilitators or servers, spec stability and test vectors.\n\n## 3. Payments \u0026 pricing, 60 out of 100, up to 5 more on the total\n\nWhy it scored 60: Self-hosted rule. No payment protocol (0). The CLI is free under MIT with nothing to buy (20). No card or account is needed for the software, and any listed provider's key works (20). An agent can install it from npm and run it with `KIMI_MODEL_*` variables and no sign-up, given a model key (20). The Kimi Code subscription and Kimi Platform API usage are separate purchases.\n\nThe checklist (https://www.anchorterminal.com/benchmark/#checklist-payments):\n\nThe published rubric, also on the [x402 page](https://www.anchorterminal.com/x402/).\n\n- 40, a machine payment protocol (x402, MPP or L402) on the tool's own endpoints. 10 to 30 when it covers only some endpoints or only goes through a third party, and the note says which.\n- 20, per-call or per-unit pricing published without a login. 10 for public plan-only pricing, 0 for \"contact sales\" or prices behind a login.\n- 20, a free tier or trial that doesn't need a card.\n- 20, autonomous onboarding, meaning an agent can get access without a person signing up in a browser (keyless use, x402, a programmatic key API).\n\nPayment platforms and agent wallets rarely charge for their own API over a machine protocol, so the first line has steps for them, and the highest one that applies counts. 40 when x402, MPP or L402 runs on all their own endpoints, 30 when it runs on part of their own API, 25 when their merchants can accept one, 20 for running a facilitator, 15 for paying as a buyer, and 0 when the only protocol is their own. Merchant acceptance sits above a facilitator because the platform's own customers can charge agents through it, while a facilitator settles for sellers who wire up the protocol themselves. The counter-argument (a facilitator does more for the protocol as a whole) has a point. Each note says which step applied.\n\nOpen-source software you run yourself is scored on its hosted or paid option if it has one. A free, self-hosted package with nothing to buy gets 20, 20 and 20 for the last three lines, and 0 to 40 for the first only if it ships a payment protocol.\n\n## 4. Agent ergonomics, 71 out of 100, up to 4.7 more on the total\n\nWhy it scored 71: Framework reading, adapted to a harness driven by a pipeline. Global `tools.enabled` and `tools.disabled` lists, per-agent tool lists, deferred MCP tool loading and a read-only Plan mode (20). `stream-json` output and a step limit per turn by environment variable, but steps are unlimited by default and there's no wall-time or cost limit for the main turn (13). The server API returns coded envelopes and ACP returns standard JSON-RPC errors, but print mode documents no exit codes outside goal runs (12). Retries only on transient failures and never on an exhausted quota, with `--continue`, `--session`, fork, undo and ACP `session/load` (16). `kimi -p` needs one argument, with ACP and the REST API as programmatic surfaces but no SDK package in any language (10).\n\nThe checklist (https://www.anchorterminal.com/benchmark/#checklist-ergonomics):\n\n- 0 to 25, context cost. For MCP, the number and size of the tool definitions (25 for ten or fewer compact tools, 15 for 11 to 30, 5 for more than 30, plus up to 10 back for toolsets, dynamic loading or read-only subsets). For APIs, whether responses can be sized (field selection, limits, summaries).\n- 20, pagination, filtering and output-size controls.\n- 20, actionable, documented error responses, codes and messages an agent can recover from.\n- 20, idempotency or safe retries, and for MCP the `readOnlyHint` and `destructiveHint` annotations.\n- 15, sensible defaults, few required parameters, and official SDKs in at least two languages.\n\nModels are read for tool use, structured output, prompt caching, context length, batch and SDKs. Frameworks for how much code and how many defaults a tool-calling agent with MCP needs.\n\n## 5. Transparency \u0026 trust, 62 out of 100, up to 3.3 more on the total\n\nMade of editorial 64, provenance 59.\n\nWhy it scored 62: MIT (30). The docs have no privacy page for the CLI. The Kimi terms (effective 13 August 2026, NOVASCENT PRIVATE LIMITED, Singapore) let Moonshot use content to train its services unless the user opts out by email, prospectively only, and the Kimi privacy policy says content is used for training. The Kimi Platform privacy policy keeps inputs while the account is active. Neither says which applies to CLI sessions (12). The `kimi server` tree prints a deprecation notice until the next major version, a table names each deprecated config key and the version that replaced it, and the Python Kimi CLI was archived with a migration guide, though its notice gives no date for when old installations stop working (13). Telemetry is documented as on, with a config key and an environment variable to turn it off, but what it collects isn't listed, and print mode ignored the opt-out until 0.41.0 (9).\n\nThe checklist (https://www.anchorterminal.com/benchmark/#checklist-transparency):\n\n- 0 to 30, source availability and licence clarity. 30 for open source under an OSI licence, 15 for closed with clear terms, 0 for unclear terms.\n- 0 to 30, data handling and retention statements that agree with each other (privacy policy, DPA, retention periods, subprocessors).\n- 0 to 20, a deprecation policy or notices with dates.\n- 0 to 20, telemetry disclosed with an opt-out (local software), or subprocessors and data locations disclosed (hosted).\n\nThe other half of Transparency and trust is the provenance score, computed from checked facts (below). The category score is the mean of the two.\n\nProvenance checks not met in full (half of this category, computed from checked facts):\n\n- Domain age: moonshotai.github.io, no registry record we could read (0 of 15)\n- Status page: not found (0 of 10)\n- security.txt: not found (0 of 10)\n\n## 6. Maintenance \u0026 community, 72 out of 100, up to 2.5 more on the total\n\nWhy it scored 72: 2.2.0 on 14 October 2026 (30). 32 releases on npm in the 90 days to 14 October (20). Pull requests are closed at pace, 2.3k closed against 467 open, and the changelog credits merged pull requests up to #4159 from many contributors, with 742 commits in the 90 days to 18 October. Issues lag, with 1.1k open against 391 closed, and reply times couldn't be read (11). No SDK packages. The ACP server and REST API ship inside the CLI, and Homebrew core is current at 2.2.0 (5). CI with a frozen lockfile, lint and a dependency check (sherif), with no Dependabot file found and the pass state unchecked (6).\n\nThe checklist (https://www.anchorterminal.com/benchmark/#checklist-maintenance):\n\n- 0 to 30, time since the last release, or the last published model or API change for a closed service. 30 within 30 days, 20 within 90, 10 within 180, 0 older.\n- 20, at least three releases or dated changelog entries in the last 90 days.\n- 0 to 25, responsiveness. Issues and pull requests answered on GitHub (the open issues and how recent the replies are). For closed services, a public changelog and a support or community channel that answers, 0 to 15.\n- 15, presence in the official MCP registry under a verified namespace (MCP servers), or current official SDKs (APIs and models).\n- 10, package health, current dependencies and CI.\n\nModels are read for deprecation notice periods and model churn rather than release counts.\n\n## 7. Schema \u0026 documentation, 85 out of 100, up to 2.4 more on the total\n\nWhy it scored 85: Framework reading. The `kimi web` server serves `/openapi.json` and `/asyncapi.json`, generated from its runtime validation schemas, but only from a running server behind auth, and the API is marked experimental. The ACP server's methods and capabilities are tabled (20). llms.txt indexes every page and each page is served as Markdown (10). The permission-mode, goal-mode and MCP pages say when to use each mode and what to avoid (16). The config reference gives type and default for each key, with enums for permission modes, output formats and rule decisions (13). Many examples, the server's error-code bands and ACP error codes are documented, but print-mode exit codes are documented only for goal runs (11). A dated changelog in the docs plus the technical changelog in the repository (15).\n\nThe checklist (https://www.anchorterminal.com/benchmark/#checklist-schema):\n\nAPIs and MCP servers.\n\n- 25, a machine-readable contract (a public OpenAPI file or similar; for MCP, typed JSON Schema inputs on every tool).\n- 10, llms.txt or Markdown docs served for agents.\n- 0 to 20, descriptions that say what a tool is for, when to use it and when not to, read from the tool definitions in the source or the API reference.\n- 0 to 15, typed inputs with enums, constraints and required fields, and no free-form JSON blobs.\n- 0 to 15, examples and documented error responses.\n- 15, versioning and a public changelog.\n\nModels are read from the API reference, the OpenAPI file, llms.txt, the structured-output and tool-use docs and the model cards. Frameworks from docs a model can follow, typed interfaces, examples and the API reference.\n\n## Deductions\n\nEach comes off the total. A fixed and documented problem counts for less at the next check.\n\n- 2026-09-04. Version 0.41.0 fixed print mode (`kimi -p`) ignoring `KIMI_DISABLE_TELEMETRY`, so scripted runs sent telemetry after the user opted out. Fixed and stated in the changelog, -2. https://moonshotai.github.io/kimi-code/en/release-notes/changelog\n- 2026-09-23. Version 2.1.0 fixed file tools reaching outside the working directory through symlinks, repository git configuration running commands during background git operations, and project config applied before the workspace was trusted. Fixed and listed in the changelog, with no advisory published in OSV on 18 October 2026, -2. https://moonshotai.github.io/kimi-code/en/release-notes/changelog\n\n## What we couldn't check\n\nWhat we couldn't read counted as absent. Publishing it on a page a plain HTTP fetch can read (not only in a browser) lets the next check count it.\n\n- unchecked: GitHub stars (the shields.io badge returned \"invalid\"), CI run results on main, and maintainer response times on issues and pull requests. Open and closed counts, commits, tags and OSV advisories come from our GitHub record, read on 18 October 2026\n- unchecked: Kimi Code subscription prices and quotas on kimi.ai, which render only with JavaScript\n- Which data terms apply to CLI sessions isn't stated. The Kimi consumer terms use content for training unless the user opts out by email, and the Kimi Platform policy covers API keys\n- The docs don't say what telemetry collects. The 2.2.0 package sends events with a device ID, session ID and model name to telemetry-logs.kimi.com, and the global region profile sets no telemetry endpoint. We read the bundle and didn't run it\n- No sandbox was found in the docs pages read, so we treat the CLI as running with the user's full rights\n- The lead was right on licence, version 2.2.0 on 14 October 2026, `kimi -p`, `kimi acp`, the Server API, the install routes and the archived Python CLI. It didn't mention that print mode runs under Never Ask or that telemetry is on by default\n\n## Weaknesses\n\n- Print mode approves every tool call under Never Ask, where the dangerous-command guard is off\n- No sandbox and no network control found in the docs\n- Telemetry is on by default, the docs don't say what it sends, and print mode ignored the opt-out before 0.41.0\n- No privacy page for the CLI, and the Kimi terms use content for training unless the user opts out by email\n- Lifecycle hooks fail open, so a hook that errors or times out lets the tool call through\n\n## What costs an agent a turn today\n\nThe notes we give agents before they call it. Each one is a workaround an agent shouldn't need.\n\n- `kimi -p` approves every tool call. Add `[[permission.rules]]` deny entries and run it in a container, since no sandbox is documented\n- Set `KIMI_LOOP_MAX_STEPS_PER_TURN` for unattended runs. Steps per turn are unlimited by default\n- Pass the model with `KIMI_MODEL_NAME`, `KIMI_MODEL_API_KEY` and `KIMI_MODEL_PROVIDER_TYPE`. `OPENAI_API_KEY` or `ANTHROPIC_API_KEY` in the shell is ignored otherwise\n- Set `KIMI_DISABLE_TELEMETRY=1` and use 0.41.0 or later, since earlier print-mode runs ignored it\n- Install `@moonshot-ai/kimi-code` or the `kimi-code` formula. The `kimi-cli` and `kimi-code` packages on PyPI are the archived Python CLI\n\n## What the review panel asked for\n\n- breaking changes in majors only\n- dated end for Python CLI\n- static OpenAPI file\n- print-mode exit codes\n- wall-time and cost limits\n- exit codes for print mode\n- ask becomes deny headless\n- list telemetry fields\n\n## When it's done\n\nSend what changed and where it's published as a dispute (https://www.anchorterminal.com/builders/#disputes, or `POST https://www.anchorterminal.com/api/v1/contact` with `\"kind\": \"dispute\"`). Disputes are answered in public, and the listing is checked again by the same checklist. Paying for an audit or a listing claim changes nothing here.\n",
    "grade": "B",
    "score": 62.1,
    "assessed": "2026-10-18",
    "run": "October 2026 research run",
    "categories": [
      {
        "key": "security",
        "name": "Security \u0026 auth",
        "score": 45,
        "maxGain": 9.6,
        "reason": "Harness reading of the framework checklist. 30 for credentials and 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. OAuth tokens sit in 0600 files and shell keys aren't read unless named. Telemetry is on by default and, in the 2.2.0 package, sends events with a device ID, session ID and model name to telemetry-logs.kimi.com. Auto-update is on by default (14). Interactive sessions ask before edits and commands, and a dangerous-command guard covers `rm -rf` and similar, but `kimi -p` runs under Never Ask, where everything is approved and the guard is off, with only static deny rules left. No sandbox found, and hooks fail open (7). The MCP page warns about untrusted servers and project `.kimi-code/mcp.json` entries, and since 2.1.0 project config waits for workspace trust, but no prompt-injection guidance was found for fetched web pages (6). Sessions on disk, `kimi export`, the `kimi vis` session visualiser, a diagnostic log and hooks for auditing (11). SECURITY.md names private GitHub advisories and an email, supports only the latest version and gives no response time. No security.txt was found on kimi.com, kimi.ai or moonshot.ai, and OSV, the public mirror of the GitHub Advisory Database, lists no advisories for the package, though 2.1.0 shipped security fixes (7).",
        "checklist": [
          "- 0 to 30, the credential model. 30 for OAuth 2.1 with scopes, or scoped and revocable keys with rotation. 20 for plain revocable API keys. 10 for one all-powerful key. 10 off when a secret can travel in a URL query string as a documented option.\n- 0 to 20, read-only or least-privilege modes, and confirmation or approval for destructive actions.\n- 0 to 15, prompt-injection posture where the tool returns untrusted content (documented mitigations or guidance). A tool that returns no untrusted content gets 10.\n- 0 to 15, audit logs or per-call visibility for the operator.\n- 0 to 20, a security programme. security.txt or a disclosure policy, a bug bounty, SOC 2 or ISO 27001, advisories handled in public.",
          "Models are read for retention, whether API data trains models (and whether that's off by default), zero-retention options and certifications. Frameworks for telemetry defaults, approval hooks, guardrails and sandboxing."
        ],
        "checklistUrl": "https://www.anchorterminal.com/benchmark/#checklist-security"
      },
      {
        "key": "reliability",
        "name": "Reliability",
        "score": 68,
        "maxGain": 6.4,
        "reason": "Local-package reading. An install script that verifies a checksum, npm `@moonshot-ai/kimi-code` with Node 22.19.0 or newer stated, and Homebrew core at 2.2.0, for macOS, Linux and Windows (20). A public CI workflow runs the build, a smoke test, sharded tests on Linux, tests on Windows, lint and typecheck. GitHub refused our requests, so whether it passes on main wasn't checked (15). Read on 18 October through shields.io counts, 1.1k issues are open against 391 closed and 467 pull requests open against 2.3k closed, in a repository whose first commit was on 22 May 2026. Which of the open issues are crashes or regressions, and how fast they are answered, couldn't be read, so the line scores the backlog alone (8). Changesets changelog with Major, Minor and Patch headings and a Breaking note in 0.28.0, but 2.0.0's only major change was a new slash command, and 2.2.0 made configs with `executor = \"kaos\"` fail validation in a minor release (10). 2.2.0, past 1.0 (15).",
        "checklist": [
          "Hosted APIs, MCP servers, models and platforms.",
          "- 20, a public status page with component history (Statuspage, Instatus, BetterStack or the vendor's own).\n- 0 to 30, the incident record for the last 90 days on that page. 30 for a clean record or trivial incidents only, 20 for minor incidents only, 10 for one major outage (an hour or more of a core API down, or errors across the board), 0 for several. 5 when there's no history we could read, and the note says so.\n- 15, rate limits documented with numbers.\n- 15, documented 429 or overload handling (Retry-After, backoff guidance), and idempotency keys or safe-retry guidance where writes are involved.\n- 10, an SLA published for any paid tier.\n- 10, the surface agents use is generally available, not beta or preview.",
          "Local packages, SDKs, frameworks and stdio MCP servers.",
          "- 20, installs from an official package with supported runtimes stated.\n- 25, a public CI and test suite, passing on the default branch.\n- 0 to 25, open crash or regression issues relative to activity (25 for few and handled, 0 for many, old and unanswered).\n- 15, semver discipline and breaking changes called out in a changelog.\n- 15, version 1.0 or later, or declared stable.",
          "Protocols are read from their reference implementations, the public facilitators or servers, spec stability and test vectors."
        ],
        "checklistUrl": "https://www.anchorterminal.com/benchmark/#checklist-reliability"
      },
      {
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "score": 60,
        "maxGain": 5,
        "reason": "Self-hosted rule. No payment protocol (0). The CLI is free under MIT with nothing to buy (20). No card or account is needed for the software, and any listed provider's key works (20). An agent can install it from npm and run it with `KIMI_MODEL_*` variables and no sign-up, given a model key (20). The Kimi Code subscription and Kimi Platform API usage are separate purchases.",
        "checklist": [
          "The published rubric, also on the [x402 page](https://www.anchorterminal.com/x402/).",
          "- 40, a machine payment protocol (x402, MPP or L402) on the tool's own endpoints. 10 to 30 when it covers only some endpoints or only goes through a third party, and the note says which.\n- 20, per-call or per-unit pricing published without a login. 10 for public plan-only pricing, 0 for \"contact sales\" or prices behind a login.\n- 20, a free tier or trial that doesn't need a card.\n- 20, autonomous onboarding, meaning an agent can get access without a person signing up in a browser (keyless use, x402, a programmatic key API).",
          "Payment platforms and agent wallets rarely charge for their own API over a machine protocol, so the first line has steps for them, and the highest one that applies counts. 40 when x402, MPP or L402 runs on all their own endpoints, 30 when it runs on part of their own API, 25 when their merchants can accept one, 20 for running a facilitator, 15 for paying as a buyer, and 0 when the only protocol is their own. Merchant acceptance sits above a facilitator because the platform's own customers can charge agents through it, while a facilitator settles for sellers who wire up the protocol themselves. The counter-argument (a facilitator does more for the protocol as a whole) has a point. Each note says which step applied.",
          "Open-source software you run yourself is scored on its hosted or paid option if it has one. A free, self-hosted package with nothing to buy gets 20, 20 and 20 for the last three lines, and 0 to 40 for the first only if it ships a payment protocol."
        ],
        "checklistUrl": "https://www.anchorterminal.com/benchmark/#checklist-payments"
      },
      {
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "score": 71,
        "maxGain": 4.7,
        "reason": "Framework reading, adapted to a harness driven by a pipeline. Global `tools.enabled` and `tools.disabled` lists, per-agent tool lists, deferred MCP tool loading and a read-only Plan mode (20). `stream-json` output and a step limit per turn by environment variable, but steps are unlimited by default and there's no wall-time or cost limit for the main turn (13). The server API returns coded envelopes and ACP returns standard JSON-RPC errors, but print mode documents no exit codes outside goal runs (12). Retries only on transient failures and never on an exhausted quota, with `--continue`, `--session`, fork, undo and ACP `session/load` (16). `kimi -p` needs one argument, with ACP and the REST API as programmatic surfaces but no SDK package in any language (10).",
        "checklist": [
          "- 0 to 25, context cost. For MCP, the number and size of the tool definitions (25 for ten or fewer compact tools, 15 for 11 to 30, 5 for more than 30, plus up to 10 back for toolsets, dynamic loading or read-only subsets). For APIs, whether responses can be sized (field selection, limits, summaries).\n- 20, pagination, filtering and output-size controls.\n- 20, actionable, documented error responses, codes and messages an agent can recover from.\n- 20, idempotency or safe retries, and for MCP the `readOnlyHint` and `destructiveHint` annotations.\n- 15, sensible defaults, few required parameters, and official SDKs in at least two languages.",
          "Models are read for tool use, structured output, prompt caching, context length, batch and SDKs. Frameworks for how much code and how many defaults a tool-calling agent with MCP needs."
        ],
        "checklistUrl": "https://www.anchorterminal.com/benchmark/#checklist-ergonomics"
      },
      {
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "score": 62,
        "maxGain": 3.3,
        "reason": "MIT (30). The docs have no privacy page for the CLI. The Kimi terms (effective 13 August 2026, NOVASCENT PRIVATE LIMITED, Singapore) let Moonshot use content to train its services unless the user opts out by email, prospectively only, and the Kimi privacy policy says content is used for training. The Kimi Platform privacy policy keeps inputs while the account is active. Neither says which applies to CLI sessions (12). The `kimi server` tree prints a deprecation notice until the next major version, a table names each deprecated config key and the version that replaced it, and the Python Kimi CLI was archived with a migration guide, though its notice gives no date for when old installations stop working (13). Telemetry is documented as on, with a config key and an environment variable to turn it off, but what it collects isn't listed, and print mode ignored the opt-out until 0.41.0 (9).",
        "blend": "editorial 64, provenance 59",
        "checklist": [
          "- 0 to 30, source availability and licence clarity. 30 for open source under an OSI licence, 15 for closed with clear terms, 0 for unclear terms.\n- 0 to 30, data handling and retention statements that agree with each other (privacy policy, DPA, retention periods, subprocessors).\n- 0 to 20, a deprecation policy or notices with dates.\n- 0 to 20, telemetry disclosed with an opt-out (local software), or subprocessors and data locations disclosed (hosted).",
          "The other half of Transparency and trust is the provenance score, computed from checked facts (below). The category score is the mean of the two."
        ],
        "checklistUrl": "https://www.anchorterminal.com/benchmark/#checklist-transparency"
      },
      {
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "score": 72,
        "maxGain": 2.5,
        "reason": "2.2.0 on 14 October 2026 (30). 32 releases on npm in the 90 days to 14 October (20). Pull requests are closed at pace, 2.3k closed against 467 open, and the changelog credits merged pull requests up to #4159 from many contributors, with 742 commits in the 90 days to 18 October. Issues lag, with 1.1k open against 391 closed, and reply times couldn't be read (11). No SDK packages. The ACP server and REST API ship inside the CLI, and Homebrew core is current at 2.2.0 (5). CI with a frozen lockfile, lint and a dependency check (sherif), with no Dependabot file found and the pass state unchecked (6).",
        "checklist": [
          "- 0 to 30, time since the last release, or the last published model or API change for a closed service. 30 within 30 days, 20 within 90, 10 within 180, 0 older.\n- 20, at least three releases or dated changelog entries in the last 90 days.\n- 0 to 25, responsiveness. Issues and pull requests answered on GitHub (the open issues and how recent the replies are). For closed services, a public changelog and a support or community channel that answers, 0 to 15.\n- 15, presence in the official MCP registry under a verified namespace (MCP servers), or current official SDKs (APIs and models).\n- 10, package health, current dependencies and CI.",
          "Models are read for deprecation notice periods and model churn rather than release counts."
        ],
        "checklistUrl": "https://www.anchorterminal.com/benchmark/#checklist-maintenance"
      },
      {
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "score": 85,
        "maxGain": 2.4,
        "reason": "Framework reading. The `kimi web` server serves `/openapi.json` and `/asyncapi.json`, generated from its runtime validation schemas, but only from a running server behind auth, and the API is marked experimental. The ACP server's methods and capabilities are tabled (20). llms.txt indexes every page and each page is served as Markdown (10). The permission-mode, goal-mode and MCP pages say when to use each mode and what to avoid (16). The config reference gives type and default for each key, with enums for permission modes, output formats and rule decisions (13). Many examples, the server's error-code bands and ACP error codes are documented, but print-mode exit codes are documented only for goal runs (11). A dated changelog in the docs plus the technical changelog in the repository (15).",
        "checklist": [
          "APIs and MCP servers.",
          "- 25, a machine-readable contract (a public OpenAPI file or similar; for MCP, typed JSON Schema inputs on every tool).\n- 10, llms.txt or Markdown docs served for agents.\n- 0 to 20, descriptions that say what a tool is for, when to use it and when not to, read from the tool definitions in the source or the API reference.\n- 0 to 15, typed inputs with enums, constraints and required fields, and no free-form JSON blobs.\n- 0 to 15, examples and documented error responses.\n- 15, versioning and a public changelog.",
          "Models are read from the API reference, the OpenAPI file, llms.txt, the structured-output and tool-use docs and the model cards. Frameworks from docs a model can follow, typed interfaces, examples and the API reference."
        ],
        "checklistUrl": "https://www.anchorterminal.com/benchmark/#checklist-schema"
      }
    ],
    "provenance": [
      {
        "label": "Domain age",
        "value": "moonshotai.github.io, no registry record we could read",
        "points": 0,
        "max": 15
      },
      {
        "label": "Status page",
        "value": "not found",
        "points": 0,
        "max": 10
      },
      {
        "label": "security.txt",
        "value": "not found",
        "points": 0,
        "max": 10
      }
    ],
    "deductions": [
      "2026-09-04. Version 0.41.0 fixed print mode (`kimi -p`) ignoring `KIMI_DISABLE_TELEMETRY`, so scripted runs sent telemetry after the user opted out. Fixed and stated in the changelog, -2. https://moonshotai.github.io/kimi-code/en/release-notes/changelog",
      "2026-09-23. Version 2.1.0 fixed file tools reaching outside the working directory through symlinks, repository git configuration running commands during background git operations, and project config applied before the workspace was trusted. Fixed and listed in the changelog, with no advisory published in OSV on 18 October 2026, -2. https://moonshotai.github.io/kimi-code/en/release-notes/changelog"
    ],
    "unchecked": [
      "unchecked: GitHub stars (the shields.io badge returned \"invalid\"), CI run results on main, and maintainer response times on issues and pull requests. Open and closed counts, commits, tags and OSV advisories come from our GitHub record, read on 18 October 2026",
      "unchecked: Kimi Code subscription prices and quotas on kimi.ai, which render only with JavaScript",
      "Which data terms apply to CLI sessions isn't stated. The Kimi consumer terms use content for training unless the user opts out by email, and the Kimi Platform policy covers API keys",
      "The docs don't say what telemetry collects. The 2.2.0 package sends events with a device ID, session ID and model name to telemetry-logs.kimi.com, and the global region profile sets no telemetry endpoint. We read the bundle and didn't run it",
      "No sandbox was found in the docs pages read, so we treat the CLI as running with the user's full rights",
      "The lead was right on licence, version 2.2.0 on 14 October 2026, `kimi -p`, `kimi acp`, the Server API, the install routes and the archived Python CLI. It didn't mention that print mode runs under Never Ask or that telemetry is on by default"
    ],
    "weaknesses": [
      "Print mode approves every tool call under Never Ask, where the dangerous-command guard is off",
      "No sandbox and no network control found in the docs",
      "Telemetry is on by default, the docs don't say what it sends, and print mode ignored the opt-out before 0.41.0",
      "No privacy page for the CLI, and the Kimi terms use content for training unless the user opts out by email",
      "Lifecycle hooks fail open, so a hook that errors or times out lets the tool call through"
    ],
    "agentNotes": [
      "`kimi -p` approves every tool call. Add `[[permission.rules]]` deny entries and run it in a container, since no sandbox is documented",
      "Set `KIMI_LOOP_MAX_STEPS_PER_TURN` for unattended runs. Steps per turn are unlimited by default",
      "Pass the model with `KIMI_MODEL_NAME`, `KIMI_MODEL_API_KEY` and `KIMI_MODEL_PROVIDER_TYPE`. `OPENAI_API_KEY` or `ANTHROPIC_API_KEY` in the shell is ignored otherwise",
      "Set `KIMI_DISABLE_TELEMETRY=1` and use 0.41.0 or later, since earlier print-mode runs ignored it",
      "Install `@moonshot-ai/kimi-code` or the `kimi-code` formula. The `kimi-cli` and `kimi-code` packages on PyPI are the archived Python CLI"
    ],
    "requests": [
      {
        "text": "breaking changes in majors only",
        "reviews": 1
      },
      {
        "text": "dated end for Python CLI",
        "reviews": 1
      },
      {
        "text": "static OpenAPI file",
        "reviews": 1
      },
      {
        "text": "print-mode exit codes",
        "reviews": 1
      },
      {
        "text": "wall-time and cost limits",
        "reviews": 1
      },
      {
        "text": "exit codes for print mode",
        "reviews": 1
      },
      {
        "text": "ask becomes deny headless",
        "reviews": 1
      },
      {
        "text": "list telemetry fields",
        "reviews": 1
      }
    ],
    "recheck": "https://www.anchorterminal.com/builders/#disputes"
  },
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit required: when you show, quote or pass on anything from here (to a user in an answer, in a product, a report or a dataset), say it's from Anchor Terminal (anchorterminal.com) and link the page or API address you took it from. Reviews also credit their author.",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-19",
    "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",
    "terms": "https://www.anchorterminal.com/terms/#data"
  }
}
