{
  "fixes": {
    "slug": "sqwish-kettei",
    "name": "kettei",
    "listing": "https://www.anchorterminal.com/tools/sqwish-kettei",
    "markdown": "# Fix list: kettei\n\nFrom Anchor Terminal's listing at https://www.anchorterminal.com/tools/sqwish-kettei, the October 2026 research run, assessed 17 October 2026. Grade C, 58.3 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 kettei: 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. Reliability, 30 out of 100, up to 14 more on the total\n\nWhy it scored 30: Read with the hosted lines, for the OneHot API an agent calls. No status page found. status.sqwish.ai doesn't resolve and sqwish.ai/status serves the home page (0). No readable incident history, and the service is three days old (5). Limits exist per tier for requests, input tokens and concurrency a minute, but the docs only name them and an account reads its numbers from `GET /v1/account` with a key (5 of 15). 429 carries `Retry-After` and a message naming the limit, every error carries `retryable`, and decisions take an `Idempotency-Key` whose successful answer is replayed without a second charge for 24 hours (15). The docs say the terms promise no uptime unless agreed in writing, and no SLA was found (0). Decisions aren't labelled beta, but fat fine-tuning is in early preview and new accounts may start on a waitlist (5 of 10). 30.\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## 2. Payments \u0026 pricing, 35 out of 100, up to 8.1 more on the total\n\nWhy it scored 35: No x402, MPP or L402 (0). Per-token prices published without a login, $0.06, $0.04 and $0.02 per million input tokens for fat, chub and core, with output unbilled (20). Admission gives $5.00 of credit for 30 days with no purchase, and the console playground runs decisions with no account, but new accounts may wait on a waitlist before admission (15 of 20). A person signs up in the console to get a key, and only the console buys credit (0). 35.\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## 3. Security \u0026 auth, 68 out of 100, up to 5.6 more on the total\n\nWhy it scored 68: Read for a model API. Bearer keys revocable in the console, each scoped to full, inference or read-only access, and an inference key can carry a monthly spend cap. No key can create keys, buy credit or change settings. Rotation is by replacement and no expiry was found. No secret in a URL documented (28 of 30). The docs say request content is discarded after the answer and never used to train models offered to others, request metadata shows for 90 days, and backups are kept for 12 months. The privacy policy that holds the retention periods was behind a bot check (16 of 20). Kettei judges content that often comes from users. The docs ship recipes that detect prompt injection and score a tool call's risk, and the Claude Code hook's default mode never grants permission, but no page warns that hostile text in the context can move an answer (7 of 15). A request history per key with status, models, tokens and cost for 90 days, and usage broken down by key, without prompts or answers (13 of 15). No security.txt (404 on sqwish.ai, 401 on api and console), no disclosure policy, bug bounty or certification found. The docs give security@sqwish.ai for leaked keys (4 of 20). 68.\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## 4. Transparency \u0026 trust, 51 out of 100, up to 4.3 more on the total\n\nMade of editorial 39, provenance 62.\n\nWhy it scored 51: Closed hosted models. The npm client and the agent plugin are Apache-2.0. The terms of service weren't read because console.sqwish.ai answered with a Cloudflare bot check, so their clarity is unchecked, and the announced open weights weren't found (8 of 30). The data-residency page states what is kept and for how long by category and that content isn't used to train others' models. The privacy policy it defers to wasn't read, and no DPA was found (18 of 30). No deprecation policy and no dated notices (3 of 20). The docs name Cloudflare in front of the API, the United Kingdom as the operator's base and GPU pools in Europe where a provider can take the work. The subprocessor list was behind the bot check (10 of 20). 39.\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: sqwish.ai, registered 2024-06-07 (2 years) (7 of 15)\n- Status page: not found (0 of 10)\n- Changelog: not found (0 of 10)\n- security.txt: not found (0 of 10)\n\n## 5. Maintenance \u0026 community, 57 out of 100, up to 3.8 more on the total\n\nWhy it scored 57: Read for a model. The models were published on 14 October 2026 and the TypeScript client 0.4.1 and the agent plugin 0.1.2 on 15 October (30). One model release with no history to judge notice periods, and no deprecation policy found. Models carry versions, fine-tunes are numbered, and `fallback: none` pins an answer to the model named (7 of 20). No public issue tracker for the API and no changelog. Support is help@sqwish.ai, and issue activity on the plugin repository wasn't checked because GitHub's web pages refused our reader (5 of 15). Python and TypeScript clients named `sqwishai`, nine npm versions between 8 and 15 October. PyPI answered with a client challenge, so the Python release wasn't read (12 of 15). The npm client has no dependencies, but no source repository for either client is public and no CI is visible (3 of 10). 57.\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## 6. Schema \u0026 documentation, 87 out of 100, up to 2.1 more on the total\n\nWhy it scored 87: OpenAPI 3.1 at api.sqwish.ai/openapi.json, 76 operations and 118 schemas, with typed request bodies and `additionalProperties: false` on the decide request (25). llms.txt on docs.sqwish.ai and api.sqwish.ai, llms-full.txt and a Markdown twin of every docs page (10). The run-decisions reference says probabilities aren't a guarantee of correctness, each recipe carries `use_when` and `watch` fields, the interpreting-results page says normalisation isn't calibration, and the agent skill says not to use OneHot for text generation (18 of 20). `kind`, `fallback` and temperature bounds are enums or ranges, with 1 to 128 decisions and at most 8 images in the schema. Context is free-form by design (14 of 15). curl, Python and TypeScript examples on every guide, and status and error-code tables that say whether to retry and whether a call is billed (15). The OpenAPI document carries version 0.1.0 and the models are versioned (v1.0, numbered fine-tunes), but there's no API or model changelog (5 of 15). 87.\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## 7. Agent ergonomics, 89 out of 100, up to 1.8 more on the total\n\nWhy it scored 89: Read as an API an agent calls for a decision. Answers are probabilities, many decisions share one context billed once, and a free estimate endpoint and a free linter run no model. 65,536 input tokens a request. No batch endpoint or prompt caching found (18 of 25). The caller fixes the outcomes, `policy` returns an action or `abstain`, and lists use cursors or offsets (18 of 20). One error envelope with `code`, `message`, `retryable`, `request_id` and `details` paths, with a documented code for each case (20). Idempotency keys on decisions, the Jev route, the Claude Code hook and resource creates, with replay rules spelled out. Switches and keep warm have no idempotency key, and the MCP tools' annotations weren't read (18 of 20). One required field, a default model, `fallback: auto` by default, and Python and TypeScript clients that retry twice with backoff (15). 89.\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## Deductions\n\nEach comes off the total. A fixed and documented problem counts for less at the next check.\n\n- 2026-10-14. The launch post says 'We're open-sourcing kettei core (3.7B) and kettei dot (900M) ... so you can run them yourself', and the OneHot page says 'core and dot are open weights you can run yourself' (https://sqwish.ai/blog/your-ai-agent-is-writing-essays-to-tick-boxes, https://sqwish.ai/onehot). On 17 October 2026 the verified Hugging Face organisation Sqwish (Sqwish Labs) listed 0 public models, no model named kettei was found on Hugging Face, and the docs name no download and no kettei-dot model (https://huggingface.co/api/organizations/sqwish/overview, checked 2026-10-17). A claim of available open weights not borne out three days after launch, -2.\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: the terms of service, privacy policy and subprocessor list on console.sqwish.ai, which answered with a Cloudflare bot check. The legal entity, credit expiry periods, retention periods and refund terms they hold weren't read\n- unchecked: the PyPI page for `sqwishai`, which answered with a client challenge, so the Python client's version and date weren't read\n- unchecked: the MCP server's tool definitions and annotations, since tools/list needs a key. The 26 tool names come from the agent skill\n- unchecked: issues and replies on github.com/sqwishai/onehot-agent, since GitHub's web pages refused our reader. The repository was cloned and has six commits from 13 to 15 October 2026\n- Whether the open weights of kettei core and kettei dot will be published, and under what licence. The deduction of 2 is a judgement call for the desk, made on 17 October, three days after the launch post\n- The rate-limit numbers for each tier, which only an account can read\n- Whether Sqwish Labs trades as SQWISH LTD (16078346, Cambridge), which the terms would say\n- Sqwish's benchmark and latency figures are its own, and we didn't reproduce them\n\n## Weaknesses\n\n- Launched on 14 October 2026, with no status page, no changelog and no SLA\n- Rate limits depend on a tier read from the account, and the docs publish no numbers\n- Terms, privacy policy and subprocessor list sit behind a Cloudflare bot check and weren't read\n- The launch post and OneHot page describe kettei core and dot as open weights, and Sqwish's Hugging Face organisation listed no public models on 17 October\n- No security.txt, bug bounty or certification found, and new accounts may wait on a waitlist\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- Send `context` and `decisions` to `POST https://api.sqwish.ai/v1/decide` with a bearer key. Leaving out `model` gets `kettei-core`, which reads text only\n- Send an `Idempotency-Key` with every decision and resend the same key and body after a 504 or a lost reply. Replays aren't charged\n- Branch on `error.code` and `error.retryable`, not the status. Wait for `Retry-After` on 429 and retryable 503s\n- Set `fallback` to `none` when the answer must come from the model you named, and read `model` and `fallback` on every response\n- Use an inference-scoped key with a monthly cap for production, since a key can spend the balance until revoked\n\n## What the review panel asked for\n\n- Publish tier limits (2 reviews)\n- Publish rate-limit numbers\n- Accept x402 payment\n- Publish a changelog\n- Add a status page\n- publish a security.txt\n- warn about hostile context\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": "C",
    "score": 58.3,
    "assessed": "2026-10-17",
    "run": "October 2026 research run",
    "categories": [
      {
        "key": "reliability",
        "name": "Reliability",
        "score": 30,
        "maxGain": 14,
        "reason": "Read with the hosted lines, for the OneHot API an agent calls. No status page found. status.sqwish.ai doesn't resolve and sqwish.ai/status serves the home page (0). No readable incident history, and the service is three days old (5). Limits exist per tier for requests, input tokens and concurrency a minute, but the docs only name them and an account reads its numbers from `GET /v1/account` with a key (5 of 15). 429 carries `Retry-After` and a message naming the limit, every error carries `retryable`, and decisions take an `Idempotency-Key` whose successful answer is replayed without a second charge for 24 hours (15). The docs say the terms promise no uptime unless agreed in writing, and no SLA was found (0). Decisions aren't labelled beta, but fat fine-tuning is in early preview and new accounts may start on a waitlist (5 of 10). 30.",
        "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": 35,
        "maxGain": 8.1,
        "reason": "No x402, MPP or L402 (0). Per-token prices published without a login, $0.06, $0.04 and $0.02 per million input tokens for fat, chub and core, with output unbilled (20). Admission gives $5.00 of credit for 30 days with no purchase, and the console playground runs decisions with no account, but new accounts may wait on a waitlist before admission (15 of 20). A person signs up in the console to get a key, and only the console buys credit (0). 35.",
        "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": "security",
        "name": "Security \u0026 auth",
        "score": 68,
        "maxGain": 5.6,
        "reason": "Read for a model API. Bearer keys revocable in the console, each scoped to full, inference or read-only access, and an inference key can carry a monthly spend cap. No key can create keys, buy credit or change settings. Rotation is by replacement and no expiry was found. No secret in a URL documented (28 of 30). The docs say request content is discarded after the answer and never used to train models offered to others, request metadata shows for 90 days, and backups are kept for 12 months. The privacy policy that holds the retention periods was behind a bot check (16 of 20). Kettei judges content that often comes from users. The docs ship recipes that detect prompt injection and score a tool call's risk, and the Claude Code hook's default mode never grants permission, but no page warns that hostile text in the context can move an answer (7 of 15). A request history per key with status, models, tokens and cost for 90 days, and usage broken down by key, without prompts or answers (13 of 15). No security.txt (404 on sqwish.ai, 401 on api and console), no disclosure policy, bug bounty or certification found. The docs give security@sqwish.ai for leaked keys (4 of 20). 68.",
        "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": "transparency",
        "name": "Transparency \u0026 trust",
        "score": 51,
        "maxGain": 4.3,
        "reason": "Closed hosted models. The npm client and the agent plugin are Apache-2.0. The terms of service weren't read because console.sqwish.ai answered with a Cloudflare bot check, so their clarity is unchecked, and the announced open weights weren't found (8 of 30). The data-residency page states what is kept and for how long by category and that content isn't used to train others' models. The privacy policy it defers to wasn't read, and no DPA was found (18 of 30). No deprecation policy and no dated notices (3 of 20). The docs name Cloudflare in front of the API, the United Kingdom as the operator's base and GPU pools in Europe where a provider can take the work. The subprocessor list was behind the bot check (10 of 20). 39.",
        "blend": "editorial 39, provenance 62",
        "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": 57,
        "maxGain": 3.8,
        "reason": "Read for a model. The models were published on 14 October 2026 and the TypeScript client 0.4.1 and the agent plugin 0.1.2 on 15 October (30). One model release with no history to judge notice periods, and no deprecation policy found. Models carry versions, fine-tunes are numbered, and `fallback: none` pins an answer to the model named (7 of 20). No public issue tracker for the API and no changelog. Support is help@sqwish.ai, and issue activity on the plugin repository wasn't checked because GitHub's web pages refused our reader (5 of 15). Python and TypeScript clients named `sqwishai`, nine npm versions between 8 and 15 October. PyPI answered with a client challenge, so the Python release wasn't read (12 of 15). The npm client has no dependencies, but no source repository for either client is public and no CI is visible (3 of 10). 57.",
        "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": 87,
        "maxGain": 2.1,
        "reason": "OpenAPI 3.1 at api.sqwish.ai/openapi.json, 76 operations and 118 schemas, with typed request bodies and `additionalProperties: false` on the decide request (25). llms.txt on docs.sqwish.ai and api.sqwish.ai, llms-full.txt and a Markdown twin of every docs page (10). The run-decisions reference says probabilities aren't a guarantee of correctness, each recipe carries `use_when` and `watch` fields, the interpreting-results page says normalisation isn't calibration, and the agent skill says not to use OneHot for text generation (18 of 20). `kind`, `fallback` and temperature bounds are enums or ranges, with 1 to 128 decisions and at most 8 images in the schema. Context is free-form by design (14 of 15). curl, Python and TypeScript examples on every guide, and status and error-code tables that say whether to retry and whether a call is billed (15). The OpenAPI document carries version 0.1.0 and the models are versioned (v1.0, numbered fine-tunes), but there's no API or model changelog (5 of 15). 87.",
        "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"
      },
      {
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "score": 89,
        "maxGain": 1.8,
        "reason": "Read as an API an agent calls for a decision. Answers are probabilities, many decisions share one context billed once, and a free estimate endpoint and a free linter run no model. 65,536 input tokens a request. No batch endpoint or prompt caching found (18 of 25). The caller fixes the outcomes, `policy` returns an action or `abstain`, and lists use cursors or offsets (18 of 20). One error envelope with `code`, `message`, `retryable`, `request_id` and `details` paths, with a documented code for each case (20). Idempotency keys on decisions, the Jev route, the Claude Code hook and resource creates, with replay rules spelled out. Switches and keep warm have no idempotency key, and the MCP tools' annotations weren't read (18 of 20). One required field, a default model, `fallback: auto` by default, and Python and TypeScript clients that retry twice with backoff (15). 89.",
        "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"
      }
    ],
    "provenance": [
      {
        "label": "Domain age",
        "value": "sqwish.ai, registered 2024-06-07 (2 years)",
        "points": 7,
        "max": 15
      },
      {
        "label": "Status page",
        "value": "not found",
        "points": 0,
        "max": 10
      },
      {
        "label": "Changelog",
        "value": "not found",
        "points": 0,
        "max": 10
      },
      {
        "label": "security.txt",
        "value": "not found",
        "points": 0,
        "max": 10
      }
    ],
    "deductions": [
      "2026-10-14. The launch post says 'We're open-sourcing kettei core (3.7B) and kettei dot (900M) ... so you can run them yourself', and the OneHot page says 'core and dot are open weights you can run yourself' (https://sqwish.ai/blog/your-ai-agent-is-writing-essays-to-tick-boxes, https://sqwish.ai/onehot). On 17 October 2026 the verified Hugging Face organisation Sqwish (Sqwish Labs) listed 0 public models, no model named kettei was found on Hugging Face, and the docs name no download and no kettei-dot model (https://huggingface.co/api/organizations/sqwish/overview, checked 2026-10-17). A claim of available open weights not borne out three days after launch, -2."
    ],
    "unchecked": [
      "unchecked: the terms of service, privacy policy and subprocessor list on console.sqwish.ai, which answered with a Cloudflare bot check. The legal entity, credit expiry periods, retention periods and refund terms they hold weren't read",
      "unchecked: the PyPI page for `sqwishai`, which answered with a client challenge, so the Python client's version and date weren't read",
      "unchecked: the MCP server's tool definitions and annotations, since tools/list needs a key. The 26 tool names come from the agent skill",
      "unchecked: issues and replies on github.com/sqwishai/onehot-agent, since GitHub's web pages refused our reader. The repository was cloned and has six commits from 13 to 15 October 2026",
      "Whether the open weights of kettei core and kettei dot will be published, and under what licence. The deduction of 2 is a judgement call for the desk, made on 17 October, three days after the launch post",
      "The rate-limit numbers for each tier, which only an account can read",
      "Whether Sqwish Labs trades as SQWISH LTD (16078346, Cambridge), which the terms would say",
      "Sqwish's benchmark and latency figures are its own, and we didn't reproduce them"
    ],
    "weaknesses": [
      "Launched on 14 October 2026, with no status page, no changelog and no SLA",
      "Rate limits depend on a tier read from the account, and the docs publish no numbers",
      "Terms, privacy policy and subprocessor list sit behind a Cloudflare bot check and weren't read",
      "The launch post and OneHot page describe kettei core and dot as open weights, and Sqwish's Hugging Face organisation listed no public models on 17 October",
      "No security.txt, bug bounty or certification found, and new accounts may wait on a waitlist"
    ],
    "agentNotes": [
      "Send `context` and `decisions` to `POST https://api.sqwish.ai/v1/decide` with a bearer key. Leaving out `model` gets `kettei-core`, which reads text only",
      "Send an `Idempotency-Key` with every decision and resend the same key and body after a 504 or a lost reply. Replays aren't charged",
      "Branch on `error.code` and `error.retryable`, not the status. Wait for `Retry-After` on 429 and retryable 503s",
      "Set `fallback` to `none` when the answer must come from the model you named, and read `model` and `fallback` on every response",
      "Use an inference-scoped key with a monthly cap for production, since a key can spend the balance until revoked"
    ],
    "requests": [
      {
        "text": "Publish tier limits",
        "reviews": 2
      },
      {
        "text": "Publish rate-limit numbers",
        "reviews": 1
      },
      {
        "text": "Accept x402 payment",
        "reviews": 1
      },
      {
        "text": "Publish a changelog",
        "reviews": 1
      },
      {
        "text": "Add a status page",
        "reviews": 1
      },
      {
        "text": "publish a security.txt",
        "reviews": 1
      },
      {
        "text": "warn about hostile context",
        "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-18",
    "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"
  }
}
