# Fix list: nanobot From Anchor Terminal's listing at https://www.anchorterminal.com/tools/nanobot, the October 2026 research run, assessed 12 October 2026. Grade B, 62.4 out of 100. This 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. For a coding agent working on nanobot: 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. ## 1. Security & auth, 63 out of 100, up to 6.5 more on the total Why it scored 63: Harness reading used for goose. 30 for 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. No telemetry code was found in the source at v0.3.5, the WebUI binds to localhost, the API refuses to bind to all interfaces without a key and channels deny unknown senders, but keys sit in clear text in `config.json` unless written as `${VAR}`, and the docs carry no statement that nothing is collected (24). No per-action approval step was found. The shell tool is on, `restrictToWorkspace` is false and the sandbox is empty by default, the `bwrap` and `seatbelt` backends limit files and not the network, and Windows has none (9). Web content is labelled as data in tool results and in the system prompt, email needs SPF and DKIM results from a named receiver, and an SSRF guard covers web fetch and HTTP MCP. The email and SSRF guards each followed a published advisory (10). Gateway logs, a WebUI activity timeline with diffs, Git-versioned memory and trigger run records, while SECURITY.md lists limited security event logging as a known limitation (8). SECURITY.md with private reporting and a 48-hour target and five advisories published with fixes, four with a CVE. No bounty, and no security.txt on nanobot.wiki (12). The checklist (https://www.anchorterminal.com/benchmark/#checklist-security): - 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. - 0 to 20, read-only or least-privilege modes, and confirmation or approval for destructive actions. - 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. - 0 to 15, audit logs or per-call visibility for the operator. - 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. ## 2. Reliability, 70 out of 100, up to 6 more on the total Why it scored 70: Read with the local-software lines, as for goose and Khoj. `nanobot-ai` installs from PyPI with pip, uv or pipx for Python 3.11 or newer, with platform wheels for macOS 13+, glibc 2.17+ Linux and Windows x64 (20). The Test Suite workflow runs on pushes to main, the repository holds 381 test files, and the three most recent runs on main shown on 12 October 2026 passed (25). 214 open issues and 614 open pull requests. Recent reports mostly carry replies or labels, but a P1 report that the agent loops on sudo (#5924, 26 September) and a compaction deadlock (#5849, 21 September) are open (15 of 25). The v0.3.5 and v0.3.0 release notes carry upgrade notes, and v0.3.5 names a required email setting change, but the project is on 0.x with post-releases and one advisory names a patched version, 0.1.5.post4, that has no tag (10 of 15). Version 0.3.5 with the classifier Development Status 3, Alpha (0). The checklist (https://www.anchorterminal.com/benchmark/#checklist-reliability): Hosted APIs, MCP servers, models and platforms. - 20, a public status page with component history (Statuspage, Instatus, BetterStack or the vendor's own). - 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. - 15, rate limits documented with numbers. - 15, documented 429 or overload handling (Retry-After, backoff guidance), and idempotency keys or safe-retry guidance where writes are involved. - 10, an SLA published for any paid tier. - 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. - 25, a public CI and test suite, passing on the default branch. - 0 to 25, open crash or regression issues relative to activity (25 for few and handled, 0 for many, old and unanswered). - 15, semver discipline and breaking changes called out in a changelog. - 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. ## 3. Payments & pricing, 60 out of 100, up to 5 more on the total Why it scored 60: Read with the self-hosted rule. No payment protocol (0). Free under the MIT licence with nothing to buy from the project, so 20, 20 and 20 on the last three lines. It runs with a local model through Ollama, vLLM or LM Studio and needs no sign-up. The Render blueprint is a third party's paid hosting and is not scored. The checklist (https://www.anchorterminal.com/benchmark/#checklist-payments): 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. - 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. - 20, a free tier or trial that doesn't need a card. - 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. ## 4. Transparency & trust, 48 out of 100, up to 4.6 more on the total Made of editorial 69, provenance 27. Why it scored 48: MIT (30). There is no privacy policy and none is needed for a hosted service, since there is none. SECURITY.md says model providers see prompts, chat history is stored locally and keys are in plain text, and the docs name where sessions, memory and OAuth tokens are stored. Nothing states what the skills marketplace sends to skills.sh and skillhub.cn (16 of 30). Deprecated flags and fields are marked in the docs and release notes carry migration steps. No deprecation policy (9 of 20). No telemetry was found in the source and Langfuse tracing is off until configured, but the docs do not state that nothing is collected (14 of 20). The checklist (https://www.anchorterminal.com/benchmark/#checklist-transparency): - 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. - 0 to 30, data handling and retention statements that agree with each other (privacy policy, DPA, retention periods, subprocessors). - 0 to 20, a deprecation policy or notices with dates. - 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. Provenance checks not met in full (half of this category, computed from checked facts): - Legal entity named: not found (0 of 20) - Domain age: nanobot.wiki, no registry record we could read (0 of 15) - Status page: not found (0 of 10) - security.txt: not found (0 of 10) ## 5. Agent ergonomics, 74 out of 100, up to 4.2 more on the total Why it scored 74: Harness reading, scored on what an agent or script driving it has to supply. About 25 built-in tools, an `enabledTools` filter per MCP server, skills loaded on demand and automatic context compaction (19 of 25). A 60-second default shell timeout, truncated tool output, a 30-second MCP call timeout and a cap of 6 sends a minute per session (15 of 20). `nanobot -m` for one request, an OpenAI-compatible API with streaming and a Python SDK, with errors covered by a troubleshooting page and no documented exit codes or JSON output mode (15 of 20). Sessions resume, interrupted work recovers and model fallbacks are configurable (15 of 20). One command starts it and setup continues in the browser, a model provider must be configured first, and the SDK is Python only (10 of 15). The checklist (https://www.anchorterminal.com/benchmark/#checklist-ergonomics): - 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). - 20, pagination, filtering and output-size controls. - 20, actionable, documented error responses, codes and messages an agent can recover from. - 20, idempotency or safe retries, and for MCP the `readOnlyHint` and `destructiveHint` annotations. - 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. ## 6. Schema & documentation, 77 out of 100, up to 3.7 more on the total Why it scored 77: Harness reading of the framework line, as for goose. Configuration is documented in tables with defaults, tools take JSON Schema parameters in the source and the Python SDK and the three OpenAI-compatible routes are documented, but no OpenAPI file was found (15 of 25). llms.txt at nanobot.wiki (10). The security and configuration pages say what each setting guards and what it does not, such as that neither sandbox restricts the network (15 of 20). Pydantic settings and typed tool schemas (11 of 15). Per-channel guides, a provider cookbook and a troubleshooting page with symptom and fix tables (13 of 15). Dated release notes with upgrade notes on GitHub, a release archive and versioned docs, with no changelog file (13 of 15). The checklist (https://www.anchorterminal.com/benchmark/#checklist-schema): APIs and MCP servers. - 25, a machine-readable contract (a public OpenAPI file or similar; for MCP, typed JSON Schema inputs on every tool). - 10, llms.txt or Markdown docs served for agents. - 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. - 0 to 15, typed inputs with enums, constraints and required fields, and no free-form JSON blobs. - 0 to 15, examples and documented error responses. - 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. ## 7. Maintenance & community, 82 out of 100, up to 1.6 more on the total Why it scored 82: v0.3.5 was released on 15 September 2026, 27 days before this check (30). Two tagged releases in the last 90 days, v0.3.0 on 25 July and v0.3.5 on 15 September. The README's Recent Updates list has five dated entries in September, which we counted as dated changelog entries, a judgement call (20). The last commit on main is from 12 October 2026 and recent issues draw replies, against 214 open issues and 614 open pull requests (14 of 25). A Python SDK, platform wheels and a Dockerfile ship from the same repository. Not an MCP server, so the registry line does not apply (11 of 15). Dependencies carry version bounds and CI passes on main. No Dependabot configuration was found (7 of 10). The checklist (https://www.anchorterminal.com/benchmark/#checklist-maintenance): - 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. - 20, at least three releases or dated changelog entries in the last 90 days. - 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. - 15, presence in the official MCP registry under a verified namespace (MCP servers), or current official SDKs (APIs and models). - 10, package health, current dependencies and CI. Models are read for deprecation notice periods and model churn rather than release counts. ## Deductions Each comes off the total. A fixed and documented problem counts for less at the next check. - 2026-09-02. GHSA-vc5v-6vwm-wf9m (critical, 9.3, no CVE). Web fetch did not block internal addresses, so cloud metadata and internal services could be read without authentication in versions before 0.3.0. Fixed in 0.3.0 of 25 July and published, -2. https://github.com/HKUDS/nanobot/security/advisories/GHSA-vc5v-6vwm-wf9m - 2026-03-27. GHSA-4gmr-2vc8-7qh3 (CVE-2026-33654, high). A spoofed email could inject instructions through email polling with no user action, up to command execution, in 0.1.4.post5 and earlier. Fixed in 0.1.4.post6 and published, more than six months ago, -2. https://github.com/HKUDS/nanobot/security/advisories/GHSA-4gmr-2vc8-7qh3 - 2026-03-11. GHSA-g6cf-xjwr-pm77 (CVE-2026-31977, critical, 9.0). A sender ID containing `|` passed the `allowFrom` check in versions before 0.1.4.post4. Fixed and published, more than six months ago, -1. https://github.com/HKUDS/nanobot/security/advisories/GHSA-g6cf-xjwr-pm77 - 2026-04-14 and 2026-05-24. GHSA-v5j3-4q66-58cf (CVE-2026-35589, high, 8.0), cross-site WebSocket hijacking of the WhatsApp bridge, fixed in 0.1.5, and GHSA-3f63-vcp3-hvqr (CVE-2026-48716, high, 8.7), file write through a WhatsApp document name. Both fixed and published, -1 together. https://github.com/HKUDS/nanobot/security/advisories ## What we couldn't check What 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. - Kind is `harness`. nanobot is a self-hosted agent program the owner runs, which is closest to the harnesses the briefs define, and it was graded with the local-software Reliability lines, the harness reading of Schema, Ergonomics and Security, and the self-hosted Payments rule. - No per-action approval step was found in the docs or by searching the source for approval and confirmation hooks. It was not run, so this rests on reading. - The repository docs describe main, which is ahead of v0.3.5. The settings the scores rest on (sandbox backends, `trustedAuthservIds`, `maxSessionMessagesPerMinute`, heartbeat, `auth/mcp.json`) were confirmed in the docs at the v0.3.5 tag. - The three-releases line was awarded on five dated entries in the README's Recent Updates list. Counting tagged releases only (two) would lower Maintenance by 20. - GHSA-3f63-vcp3-hvqr names 0.1.5.post4 as the patched version, and the repository has no tag of that name. Which release carries the fix was not established. - No statement on telemetry was found in the docs. None was found in the source, which is a reading of the code and not a network trace. - No legal entity was established. The lead's vendor, HKUDS, is a GitHub organisation. - unchecked: PyPI release dates and download counts, because PyPI's robots.txt disallows `/pypi/`. The release date is from the GitHub release. - unchecked: the registration date of nanobot.wiki. - unchecked: the exact star count. The repository page showed 49k on 12 October 2026, which agrees with the lead's 48,968. - unchecked: the stable docs pages on nanobot.wiki, which were not read. The repository's docs/ were read in their place. - unchecked: what the WebUI skills marketplace sends to skills.sh and skillhub.cn. ## Weaknesses - No per-action approval was found in the docs or source. The agent sends messages, runs shell commands and edits files without asking - `tools.restrictToWorkspace` defaults to false and `tools.exec.sandbox` to empty. Neither sandbox restricts network access, and Windows has none - Five advisories published from 11 March to 2 September 2026, two rated critical, among them an allowlist bypass and unauthenticated SSRF in web fetch - SECURITY.md lists plain-text API keys in `config.json`, no rate limiting and limited security event logging as known limitations - Version 0.3.5 with an Alpha classifier, 214 open issues and 614 open pull requests on 12 October 2026 ## What costs an agent a turn today The notes we give agents before they call it. Each one is a workaround an agent shouldn't need. - Set `tools.restrictToWorkspace` to true and `tools.exec.sandbox` to `bwrap` or `seatbelt` before giving it real accounts. Both are off by default - Run 0.3.0 or later. Earlier versions carry the published SSRF flaw in web fetch (GHSA-vc5v-6vwm-wf9m) - Keep `allowFrom` narrow on every channel and never set `["*"]` on Email, which has no pairing - Write secrets as `${VAR}` references in `~/.nanobot/config.json`. Plain values are stored in clear text - Use `nanobot -m "..."` for a one-shot run, and keep `nanobot gateway` running for channels, schedules and heartbeat ## When it's done Send 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.