{
  "fixes": {
    "slug": "town",
    "name": "Town",
    "listing": "https://www.anchorterminal.com/tools/town",
    "markdown": "# Fix list: Town\n\nFrom Anchor Terminal's listing at https://www.anchorterminal.com/tools/town, the October 2026 research run, assessed 14 October 2026. Grade D, 48.7 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 Town: 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, 35 out of 100, up to 13 more on the total\n\nWhy it scored 35: Read with the hosted lines, on the routine webhooks. No status page was found on the pages town.com's robots.txt lets ClaudeBot read, and status.town.com doesn't resolve (0). No readable incident history (5). The Free plan's allowance is published as 30 chat messages a month and each paid plan's monthly credits are numbered, while the webhook docs say requests are rate limited with no figure. The Wajo dossier got 10 for numbered plan limits without per-endpoint numbers, and we took that reading (10 of 15). The webhook docs list 429 among the responses and document an X-Town-Idempotency-Key header that stops duplicate runs when a sender retries, with no Retry-After or backoff guidance (10 of 15). No SLA found (0). Nothing labels Town or its webhooks beta (10).\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. Schema \u0026 documentation, 33 out of 100, up to 10.9 more on the total\n\nWhy it scored 33: Graded on the routine webhooks, the one documented route by which an outside system can start Town's work, as the Poke listing was graded on its inbound API. No OpenAPI file or other machine-readable contract (0). llms.txt isn't on the ClaudeBot allow list in town.com's robots.txt, so it is unchecked, and no Markdown docs for agents were found on the allowed pages (0, unchecked). The webhook page says what a webhook is for (Zapier, your own backend, structured events), how the trigger account is chosen, that payloads are treated as untrusted, and advises approval-required mode for routines that act, with no guidance on when not to use it. Poke's purpose and use cases got 12 (12 of 20). The body is application/json or text/plain, with an optional account_email field and a free-form data object. Poke's any-JSON body got 2, and the named field and the content-type check add one (3 of 15). A JSON body example, a curl example, Zapier steps and six documented responses (202, 400, 404, 413, 415, 429), against Poke's 9 for three-language examples and one error (12 of 15). The webhook URL carries no version and the page was last updated on 13 October 2026. The updates page is a public dated changelog for the product as a whole (6 of 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## 3. Payments \u0026 pricing, 30 out of 100, up to 8.8 more on the total\n\nWhy it scored 30: Read with the hosted rule. No x402, MPP or L402 (0). Plan prices are public (Starter $15, Pro $49, Power $99 and Power Plus $199 a month, Team $59 and Team Plus $149 a seat), and so are overage prices per credit ($0.030 to $0.044). The credits docs say work draws credits down by how much it reads, reasons and acts, with no cost per action, so nothing is priced per call. Poke's priced credits with unnumbered usage got 10 (10). The pricing page lists Free at $0 forever with no credit card required and a 7-day Pro trial on signup (20). A person signs up in a browser, and a webhook secret is created by the owner in Routine Settings (0).\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, 49 out of 100, up to 8.3 more on the total\n\nWhy it scored 49: Graded on the routine webhooks. A call returns 202 and the run's result goes to the owner, not to the caller, so a calling agent can't read the outcome, the Poke dossier's 10 (10 of 25). Nothing to page or filter (3 of 20). Six status codes with their meanings, including a deliberate shared 404 for a wrong secret, a disabled endpoint and a missing one (12 of 20). An X-Town-Idempotency-Key header de-duplicates retried deliveries, and the page recommends it whenever a sender can retry. It isn't an MCP server, so there are no annotations to read (16 of 20). One URL, one bearer header and no required field, with the trigger account falling back to the webhook's default, and Zapier works with its stock webhook step. No SDK (8 of 15).\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. Security \u0026 auth, 79 out of 100, up to 3.7 more on the total\n\nWhy it scored 79: Graded on the routine webhooks. Each routine gets its own whsec_ bearer secret, shown once, rotatable, and sent only in the Authorization header. A secret starts one routine, inside that routine's account scope, and account_email can't widen it. No expiry and no statement on how secrets are stored (26 of 30). Routines run read-only, approval-required or autonomous, with per-tool overrides, and the webhook page advises approval-required for routines that act. Town can block a webhook whose routine combines untrusted input with autonomous sending, but an owner can still set a webhook routine to act without approval (15 of 20). Webhook payloads are framed as untrusted data inside a fixed Town message, routines that read private data, take untrusted input and send externally are flagged, and routine prompts are checked for injection patterns. The Screenpipe dossier got 8 for guidance in its skills only (12 of 15). Every action is logged with what, when, why, trigger and result, and security events are visible to the owner, per the security docs, more than Pally's activity feed (12 of 15). The trust page names security@corp.town.com for vulnerability reports and says Town is SOC 2 Type 2 audited with a penetration test report under NDA. security.txt isn't on the ClaudeBot allow list and is unchecked, and no bug bounty was found. The Screenpipe dossier got 14 for a disclosure route and SOC 2 Type 2 without a bounty (14 of 20).\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## 6. Maintenance \u0026 community, 60 out of 100, up to 3.5 more on the total\n\nWhy it scored 60: Read for a closed service. iOS Town Assistant 1.27 on 10 October 2026 (30). The updates page has dated entries on 24 days between 16 July and 30 September 2026, and the App Store lists eight iOS versions from 1.20 on 29 July to 1.27 (20). A public changelog dated entry by entry and support at support@corp.town.com, which we didn't test, the Pally dossier's 10 (10 of 15). Not an MCP server and no official SDK (0). No package or CI to judge (0).\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. Transparency \u0026 trust, 63 out of 100, up to 3.2 more on the total\n\nMade of editorial 50, provenance 76.\n\nWhy it scored 63: Closed service under terms updated on 21 July 2026 naming Town.com, Inc. (15). The trust page says training on customer data is off by default and applies only after an opt-in, while the privacy policy of 21 July 2026 says Town may use personal information to train its AI models with an opt-out toggle in account settings. Both exclude Google data, deletion completes within 30 days, a public DPA carries Standard Contractual Clauses, and retention otherwise follows stated criteria with no periods. The two training statements disagree (15 of 30). The privacy policy takes effect on posting, and no deprecation policy or dated notices were found (2 of 20). A public subprocessor list of 24 August 2026 names each vendor, an AI model providers page names the model hosts, and the trust page says data is hosted only in the United States on Convex and AWS (18 of 20).\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- Status page: not found (0 of 10)\n- security.txt: could not be fetched (0 of 10)\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: town.com's llms.txt and security.txt, which aren't on the ClaudeBot allow list in its robots.txt.\n- The webhook host isn't shown in the docs (the example uses your-town-url), so whether endpoints sit on town.com is unknown.\n- No numeric webhook rate limit is published.\n- Which of the privacy policy (opt-out) and the trust page (opt-in) governs the training default.\n\n## Weaknesses\n\n- The privacy policy describes training with an opt-out and the trust page says training is opt-in.\n- The trust page says Town never sends without the owner's OK, while the docs describe autonomous routines and an Allow all actions session mode.\n- A webhook call returns only 202, so the caller can't read what the routine did.\n- No status page, published webhook rate limit or SLA found.\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- Start a Town routine with POST to its webhook URL, Authorization Bearer whsec_ secret, and application/json or text/plain. Expect 202 only.\n- Send X-Town-Idempotency-Key with a stable event id on every retry so Town doesn't start a second run.\n- Treat 404 as wrong secret, disabled endpoint or missing endpoint alike, and ask the owner to check Routine Settings rather than retrying.\n- Send account_email only if the owner allowed the override. It must match a connected account in full and can't widen the routine's scope.\n- Ask the owner to keep routines that act on webhook input in approval-required mode, as Town's own docs advise.\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": "D",
    "score": 48.7,
    "assessed": "2026-10-14",
    "run": "October 2026 research run",
    "categories": [
      {
        "key": "reliability",
        "name": "Reliability",
        "score": 35,
        "maxGain": 13,
        "reason": "Read with the hosted lines, on the routine webhooks. No status page was found on the pages town.com's robots.txt lets ClaudeBot read, and status.town.com doesn't resolve (0). No readable incident history (5). The Free plan's allowance is published as 30 chat messages a month and each paid plan's monthly credits are numbered, while the webhook docs say requests are rate limited with no figure. The Wajo dossier got 10 for numbered plan limits without per-endpoint numbers, and we took that reading (10 of 15). The webhook docs list 429 among the responses and document an X-Town-Idempotency-Key header that stops duplicate runs when a sender retries, with no Retry-After or backoff guidance (10 of 15). No SLA found (0). Nothing labels Town or its webhooks beta (10).",
        "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": "schema",
        "name": "Schema \u0026 documentation",
        "score": 33,
        "maxGain": 10.9,
        "reason": "Graded on the routine webhooks, the one documented route by which an outside system can start Town's work, as the Poke listing was graded on its inbound API. No OpenAPI file or other machine-readable contract (0). llms.txt isn't on the ClaudeBot allow list in town.com's robots.txt, so it is unchecked, and no Markdown docs for agents were found on the allowed pages (0, unchecked). The webhook page says what a webhook is for (Zapier, your own backend, structured events), how the trigger account is chosen, that payloads are treated as untrusted, and advises approval-required mode for routines that act, with no guidance on when not to use it. Poke's purpose and use cases got 12 (12 of 20). The body is application/json or text/plain, with an optional account_email field and a free-form data object. Poke's any-JSON body got 2, and the named field and the content-type check add one (3 of 15). A JSON body example, a curl example, Zapier steps and six documented responses (202, 400, 404, 413, 415, 429), against Poke's 9 for three-language examples and one error (12 of 15). The webhook URL carries no version and the page was last updated on 13 October 2026. The updates page is a public dated changelog for the product as a whole (6 of 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"
      },
      {
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "score": 30,
        "maxGain": 8.8,
        "reason": "Read with the hosted rule. No x402, MPP or L402 (0). Plan prices are public (Starter $15, Pro $49, Power $99 and Power Plus $199 a month, Team $59 and Team Plus $149 a seat), and so are overage prices per credit ($0.030 to $0.044). The credits docs say work draws credits down by how much it reads, reasons and acts, with no cost per action, so nothing is priced per call. Poke's priced credits with unnumbered usage got 10 (10). The pricing page lists Free at $0 forever with no credit card required and a 7-day Pro trial on signup (20). A person signs up in a browser, and a webhook secret is created by the owner in Routine Settings (0).",
        "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": 49,
        "maxGain": 8.3,
        "reason": "Graded on the routine webhooks. A call returns 202 and the run's result goes to the owner, not to the caller, so a calling agent can't read the outcome, the Poke dossier's 10 (10 of 25). Nothing to page or filter (3 of 20). Six status codes with their meanings, including a deliberate shared 404 for a wrong secret, a disabled endpoint and a missing one (12 of 20). An X-Town-Idempotency-Key header de-duplicates retried deliveries, and the page recommends it whenever a sender can retry. It isn't an MCP server, so there are no annotations to read (16 of 20). One URL, one bearer header and no required field, with the trigger account falling back to the webhook's default, and Zapier works with its stock webhook step. No SDK (8 of 15).",
        "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": "security",
        "name": "Security \u0026 auth",
        "score": 79,
        "maxGain": 3.7,
        "reason": "Graded on the routine webhooks. Each routine gets its own whsec_ bearer secret, shown once, rotatable, and sent only in the Authorization header. A secret starts one routine, inside that routine's account scope, and account_email can't widen it. No expiry and no statement on how secrets are stored (26 of 30). Routines run read-only, approval-required or autonomous, with per-tool overrides, and the webhook page advises approval-required for routines that act. Town can block a webhook whose routine combines untrusted input with autonomous sending, but an owner can still set a webhook routine to act without approval (15 of 20). Webhook payloads are framed as untrusted data inside a fixed Town message, routines that read private data, take untrusted input and send externally are flagged, and routine prompts are checked for injection patterns. The Screenpipe dossier got 8 for guidance in its skills only (12 of 15). Every action is logged with what, when, why, trigger and result, and security events are visible to the owner, per the security docs, more than Pally's activity feed (12 of 15). The trust page names security@corp.town.com for vulnerability reports and says Town is SOC 2 Type 2 audited with a penetration test report under NDA. security.txt isn't on the ClaudeBot allow list and is unchecked, and no bug bounty was found. The Screenpipe dossier got 14 for a disclosure route and SOC 2 Type 2 without a bounty (14 of 20).",
        "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": "maintenance",
        "name": "Maintenance \u0026 community",
        "score": 60,
        "maxGain": 3.5,
        "reason": "Read for a closed service. iOS Town Assistant 1.27 on 10 October 2026 (30). The updates page has dated entries on 24 days between 16 July and 30 September 2026, and the App Store lists eight iOS versions from 1.20 on 29 July to 1.27 (20). A public changelog dated entry by entry and support at support@corp.town.com, which we didn't test, the Pally dossier's 10 (10 of 15). Not an MCP server and no official SDK (0). No package or CI to judge (0).",
        "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": "transparency",
        "name": "Transparency \u0026 trust",
        "score": 63,
        "maxGain": 3.2,
        "reason": "Closed service under terms updated on 21 July 2026 naming Town.com, Inc. (15). The trust page says training on customer data is off by default and applies only after an opt-in, while the privacy policy of 21 July 2026 says Town may use personal information to train its AI models with an opt-out toggle in account settings. Both exclude Google data, deletion completes within 30 days, a public DPA carries Standard Contractual Clauses, and retention otherwise follows stated criteria with no periods. The two training statements disagree (15 of 30). The privacy policy takes effect on posting, and no deprecation policy or dated notices were found (2 of 20). A public subprocessor list of 24 August 2026 names each vendor, an AI model providers page names the model hosts, and the trust page says data is hosted only in the United States on Convex and AWS (18 of 20).",
        "blend": "editorial 50, provenance 76",
        "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"
      }
    ],
    "provenance": [
      {
        "label": "Status page",
        "value": "not found",
        "points": 0,
        "max": 10
      },
      {
        "label": "security.txt",
        "value": "could not be fetched",
        "points": 0,
        "max": 10
      }
    ],
    "unchecked": [
      "unchecked: town.com's llms.txt and security.txt, which aren't on the ClaudeBot allow list in its robots.txt.",
      "The webhook host isn't shown in the docs (the example uses your-town-url), so whether endpoints sit on town.com is unknown.",
      "No numeric webhook rate limit is published.",
      "Which of the privacy policy (opt-out) and the trust page (opt-in) governs the training default."
    ],
    "weaknesses": [
      "The privacy policy describes training with an opt-out and the trust page says training is opt-in.",
      "The trust page says Town never sends without the owner's OK, while the docs describe autonomous routines and an Allow all actions session mode.",
      "A webhook call returns only 202, so the caller can't read what the routine did.",
      "No status page, published webhook rate limit or SLA found."
    ],
    "agentNotes": [
      "Start a Town routine with POST to its webhook URL, Authorization Bearer whsec_ secret, and application/json or text/plain. Expect 202 only.",
      "Send X-Town-Idempotency-Key with a stable event id on every retry so Town doesn't start a second run.",
      "Treat 404 as wrong secret, disabled endpoint or missing endpoint alike, and ask the owner to check Routine Settings rather than retrying.",
      "Send account_email only if the owner allowed the override. It must match a connected account in full and can't widen the routine's scope.",
      "Ask the owner to keep routines that act on webhook input in approval-required mode, as Town's own docs advise."
    ],
    "recheck": "https://www.anchorterminal.com/builders/#disputes"
  },
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-14",
    "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"
  }
}
