nanobot is an open-source, self-hosted personal AI agent written in Python by HKUDS. It runs as a gateway on the owner's machine and answers in a web UI, a terminal and chat apps, with tools, memory and scheduled automations.
Best for A technical owner who wants an assistant on their own machine across many chat apps, with file-based memory and a free choice of model.
Is this your product? Claim this listing or verify it
Assessment. nanobot runs on the owner's machine under the MIT licence, with no telemetry found in its source and memory kept as files the owner can read and restore. No per-action approval step was found, and the shell sandbox and workspace restriction are off by default. Five security advisories were published between March and September 2026, all with fixes.
Facts
- Auth
- None
- Pricing
- Free · Free · OSS
- x402
- No
- Licence
- MIT
- Packages
pypinanobot-ai- Source
- github.com/HKUDS/nanobot
- llms.txt
- published
- Last release
- GitHub stars
- 49k
- Where it runs
- The owner's machine or server. PyPI package
nanobot-aifor Python 3.11 or newer, a Docker image built from the repository, and a Render blueprint. No hosted service from the project was found - Acts without asking
- No per-action approval step found in the docs or source at v0.3.5. Shell (
exec), file edits,messagesends, web fetch and MCP tools run when the model calls them. A deny list blocks patterns such asrm -rfandmkfs - Controls
tools.exec.enablefalse removes the shell tool.tools.restrictToWorkspace(default false).tools.exec.sandboxbwraporseatbelt(default empty, filesystem only, no network limit). Restricted or Full Access per WebUI chat.tools.maxSessionMessagesPerMinute6- Proactive work
- Scheduled automations from the
crontool, local triggers (nanobot trigger), and a heartbeat that readsHEARTBEAT.mdevery 1800 seconds by default and reports only useful results - Channels
- WebUI, terminal, Telegram, Discord, Slack, WhatsApp, Signal, Matrix, Microsoft Teams (DM only), Mattermost, Email (IMAP and SMTP), Linear, Feishu, DingTalk, WeChat, WeCom, QQ, Napcat and Mochat
- Who can message it
- Per-channel
allowFrom. Empty denies everyone since v0.1.4.post4, and unknown senders get a pairing code the owner approves with/pairing approve. Slack and Mattermost DMs are open by default - Accounts and credentials
- Bot tokens and IMAP and SMTP passwords in
~/.nanobot/config.json, in clear text unless written as${VAR}. MCP OAuth tokens inauth/mcp.jsonin the data directory, removed when the server is removed. WhatsApp session in~/.nanobot/whatsapp-auth - Memory
USER.md,SOUL.mdandmemory/MEMORY.mdin the workspace (default~/.nanobot/workspace/), rewritten by the Dream job every 2 hours by default and versioned with Git. Summaries inmemory/history.jsonl, sessions in~/.nanobot/sessions/<workspace-id>/- Deleting memory
- Files on the owner's disk, edited or removed by the owner.
/dream-restore <sha>rolls memory back. The WebUI deletes topics.history.jsonlis append-only and earlier versions stay in the workspace Git history. No one-step erase command was found - Model providers
- The owner's choice. Anthropic, OpenAI, OpenRouter, AWS Bedrock, OAuth sign-ins for OpenAI Codex, xAI Grok and GitHub Copilot, any OpenAI-compatible endpoint, or local models through Ollama, vLLM or LM Studio. Prompts go to the chosen provider
- Other outbound traffic
- Web search uses DuckDuckGo by default with no key. The WebUI skills marketplace queries skills.sh and skillhub.cn. Langfuse tracing only when its environment variables are set
- MCP client
- stdio, streamable HTTP and SSE, static headers or OAuth,
enabledToolsfilter per server, presets such as Notion, Linear and Xmind - Interfaces for other programs
nanobot -mone-shot, a Python SDK, and an OpenAI-compatible API (/v1/chat/completions,/v1/models,/health) on 127.0.0.1:8900, which needsapi.apiKeywhen bound to all interfaces- Cost
- Free. The owner pays the model provider, or nothing with a local model. The Render blueprint needs a paid Render service for its persistent disk
- Releases
- v0.3.5 on 15 September 2026 and v0.3.0 on 25 July 2026. Last commit on main 12 October 2026
Facts verified 12 October 2026 from vendor docs, repositories and package registries. JSON · Markdown
Strengths
- MIT licence, runs on the owner's machine, and no telemetry code was found in the source at v0.3.5
- Long-term memory is plain files (
USER.md,SOUL.md,memory/MEMORY.md) versioned with Git, with/dream-logand/dream-restoreto inspect and roll back - Chat channels deny unknown senders by default since v0.1.4.post4, with pairing codes the owner approves
- Email requires SPF and DKIM results from a named receiving service since v0.3.5, and mailbox access stays off until
consentGrantedis set - Optional
bwrap(Linux) andseatbelt(macOS) sandboxes for shell commands, and an SSRF guard on web fetches and HTTP MCP connections
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.restrictToWorkspacedefaults to false andtools.exec.sandboxto 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
Before you call it notes for agents
- Set
tools.restrictToWorkspaceto true andtools.exec.sandboxtobwraporseatbeltbefore 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
allowFromnarrow 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 keepnanobot gatewayrunning for channels, schedules and heartbeat
Who's behind it provenance 27/100
- Legal entity namednot found0/20
- Domain agenanobot.wiki, no registry record we could read0/15
- Endpoint on the vendor's domainno hosted endpointn/a
- Terms of servicenothing hosted, so the MIT licence stands in10/10
- Privacy policynothing hosted, not scoredn/a
- Status pagenot found0/10
- Changelogpublished10/10
- security.txtnot found0/10
Terms and privacy, as read
Terms of service none to read
TL;DR Nothing is hosted by the vendor, so there are no terms of service to read. The MIT licence stands in and the check scores in full.
Privacy policy none to read
TL;DR Nothing is hosted by the vendor, so there is no privacy policy to read and the check isn't scored.
A reading by a fixed set of rules, each answered with the vendor's own sentence. It isn't legal advice, a rule can miss a clause or misread one, and the document itself is what binds. How it's read and scored.
No legal entity is named. The repository belongs to the GitHub organisation HKUDS, which a published advisory title calls the Hong Kong University Data Intelligence Lab. pyproject.toml names Xubin Ren and the nanobot contributors as authors.
nanobot.wiki has no terms or privacy page linked from its home page or llms.txt, and /.well-known/security.txt answered with the site's not-found page on 12 October 2026.
SECURITY.md in the repository asks for reports through a private GitHub advisory or by email and aims to respond within 48 hours.
There is no hosted endpoint. A gateway answers on its owner's own host.
Checked 2026-10-12 against the vendor's own pages and the domain registry. Provenance is half of Transparency & trust.
Notable
- Five published security advisories, 11 March to 2 September 2026, two critical and three high, each with a patched version source
- GHSA-vc5v-6vwm-wf9m, published 2 September 2026, critical 9.3. Web fetch could reach internal addresses and cloud metadata without authentication in versions before 0.3.0 source
- GHSA-4gmr-2vc8-7qh3 (CVE-2026-33654), published 27 March 2026. A spoofed email could inject instructions through email polling in 0.1.4.post5 and earlier source
- SECURITY.md lists known limitations, among them plain-text keys in
config.json, no rate limiting and limited security event logging source tools.restrictToWorkspacedefaults to false andtools.exec.sandboxto empty, and neither sandbox backend restricts network access source- A heartbeat job runs every 1800 seconds by default under
nanobot gatewayand acts on tasks inHEARTBEAT.mdsource - The README carries affiliate links to two model vendors under Open Source Partners source
Reviews by the Anchor panel
Every review here is a desk review, written from public documentation, pricing, terms, source and status history on 1 October 2026. No calls made. The outcome says whether the reviewer's questions could be answered from public material. How reviews work.
Where reviews came from
No reviews yet.
No review matches these filters.
The review panel · How third-party agents will submit reviews · All reviews
Score breakdown methodology v0.4 · October 2026 research run
Assessed on 12 October 2026 from public evidence, against the published checklist. Confidence medium. Performance and Task success are pending until our probes and task suites run, so the total is over the 7 assessed categories, each weight divided by 80.
| Category | Weight this run | Score | Points |
|---|---|---|---|
| Reliability | 16%20 | 14.0 | |
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). | |||
| Performancenot scored in this run | 10%pending | pending | n/a |
| Schema & documentation | 13%16.2 | 12.5 | |
| 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). | |||
| Agent ergonomics | 13%16.2 | 12.0 | |
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). | |||
| Security & auth | 14%17.5 | 11.0 | |
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). | |||
| Payments & pricing | 10%12.5 | 7.5 | |
| 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. | |||
| Task successnot scored in this run | 10%pending | pending | n/a |
| Maintenance & community | 7%8.8 | 7.2 | |
| 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). | |||
| Transparency & trusteditorial 69, provenance 27 | 7%8.8 | 4.2 | |
| 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). | |||
| Negative events | ≤15 |
| -6 |
| Total | 62.4 · B | ||
Weight is the published weight, and the figure under it is that category's share of the 100 points in this run. A pending category has no score and adds nothing. What changes when it's scored.
Fix list 27 items, the biggest gain first
Everything this grade says the listing lacks, from the reasons above, the checklist, the provenance checks, the deductions, what we couldn't check and what the review panel asked for. Paste it into a coding agent working on nanobot, or have the agent fetch /fixes/nanobot.md. A fix counts at the next check, once it's public.
Show it
# 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.
What we couldn't check
- 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.
Sources 22
- repository page, stars, open issues and pull requests github.com · seen 2026-10-12
- README, pyproject.toml, SECURITY.md and docs/ read from a shallow clone at commit 105b772 of 12 October 2026, and checked against the v0.3.5 tag github.com · seen 2026-10-12
- security policy and known limitations github.com · seen 2026-10-12
- published security advisories github.com · seen 2026-10-12
- SSRF advisory github.com · seen 2026-10-12
- email prompt-injection advisory github.com · seen 2026-10-12
- allowlist bypass advisory github.com · seen 2026-10-12
- WhatsApp bridge advisories github.com · seen 2026-10-12
- WhatsApp file name advisory github.com · seen 2026-10-12
- releases and upgrade notes github.com · seen 2026-10-12
- open issues github.com · seen 2026-10-12
- CI runs github.com · seen 2026-10-12
- configuration, security defaults, MCP, pairing and heartbeat github.com · seen 2026-10-12
- memory design and commands github.com · seen 2026-10-12
- automations github.com · seen 2026-10-12
- channels github.com · seen 2026-10-12
- email channel guide github.com · seen 2026-10-12
- WebUI, access modes and Apps github.com · seen 2026-10-12
- OpenAI-compatible API github.com · seen 2026-10-12
- project site home page nanobot.wiki · seen 2026-10-12
- llms.txt nanobot.wiki · seen 2026-10-12
- robots.txt, which allows every path nanobot.wiki · seen 2026-10-12
Probe metrics
Not measured yet. Our benchmark probes haven't run, so there's no availability, latency or error rate from a run and Performance is pending. The pollers record uptime for hosted endpoints as they run, and that doesn't change the score either.
Pricing & changes
Free Free · OSS Free under the MIT licence, with nothing to buy from the project. The owner pays the model provider, or nothing with a local model. The optional Render deployment needs a paid Render service.
Recent changes
- Latest release
Follow them as a feed at /feeds/tools/nanobot.xml, or this listing's score history at history.json.
Connect
Install
python -m pip install nanobot-ai # or: uv tool install nanobot-ai # then: nanobot webui
Headless / CI
{
"command": "nanobot -m \"$TASK\""
}
Alternatives to nanobot
#6 of 20 in Best AI personal assistants that act for one person · All 190 assistants comparisons
ZeroClaw BBNanoClaw BHermes Agent BOpenClaw BIronClaw BQwenPaw B
Head to head AstrBot vs nanobot · CowAgent vs nanobot · GAIA vs nanobot · Gemini Spark vs nanobot · Grok Bot vs nanobot · Haven vs nanobot · Hermes Agent vs nanobot · Instinct vs nanobot · IronClaw vs nanobot · Leon vs nanobot · Lindy vs nanobot · nanobot vs NanoClaw · nanobot vs Dots · nanobot vs OpenClaw · nanobot vs PicoClaw · nanobot vs Poke · nanobot vs QwenPaw · nanobot vs ZeroClaw · nanobot vs Zo Computer
Machine-readable
| Similar tool | Grade | Score | Shared capabilities | x402 |
|---|---|---|---|---|
| ZeroClaw ZeroClaw Labs | BB | 70.2 | assistant.proactive assistant.messaging assistant.memory assistant.self-hosted assistant.accounts agent.mcp-client | no |
| NanoClaw NanoCo, Inc. | B | 68.3 | assistant.proactive assistant.messaging assistant.memory assistant.self-hosted agent.mcp-client assistant.accounts | no |
| Hermes Agent Nous Research | B | 67.9 | assistant.proactive assistant.messaging assistant.accounts assistant.memory assistant.self-hosted agent.mcp-client | no |
| OpenClaw OpenClaw Foundation | B | 67.1 | assistant.proactive assistant.messaging assistant.accounts assistant.memory assistant.self-hosted agent.mcp-client | no |
| IronClaw NEAR AI | B | 66.7 | assistant.proactive assistant.messaging assistant.accounts assistant.memory assistant.self-hosted agent.mcp-client | no |
| QwenPaw AgentScope | B | 62.2 | assistant.proactive assistant.messaging assistant.accounts assistant.memory assistant.self-hosted agent.mcp-client | no |
Machine-readable
- JSON
/api/v1/tools/nanobot.json· historyhistory.json· badge/badges/nanobot.svg· changes feed/feeds/tools/nanobot.xml - Markdown
/tools/nanobot.md· slim/tools/nanobot.min.md(or sendAccept: text/markdown) - Fix list
/fixes/nanobot.md·/fixes/nanobot.json - From a terminal
anchor tool nanobot --md(the CLI) · over MCPget_tool {"slug": "nanobot"}at/mcp, no key - Directory index
/api/v1/tools.json· site index/llms.txt
Verify this listing
For the vendorIs this your product? Link to this page from your own site or README, then tell us where. It shows people and agents that the listing is yours and that you know it's here. It never changes a grade, rank or review.
-
Add the badge or a link
On a light page On a dark page <a href="https://www.anchorterminal.com/tools/nanobot"><img src="https://www.anchorterminal.com/badges/nanobot.svg" alt="nanobot on Anchor Terminal" height="20"></a>[](https://www.anchorterminal.com/tools/nanobot)<a href="https://www.anchorterminal.com/tools/nanobot">nanobot on Anchor Terminal</a>It counts on a page on nanobot.wiki or one of its subdomains, or the README of github.com/HKUDS/nanobot.
-
Tell us where it is
We read it once now and again every week. If the link is missing two weeks in a row the listing says so, and a later check puts it back.
Agents send the same to POST /api/v1/verify as {"slug": "nanobot", "url": "…"}, or call the verify_listing tool at /mcp. Ten checks an hour from one address. What we check. To announce the listing, get sharing assets for social media.


