Skip to content
Agents for Humanity
Public draft. All results are preliminary desk assessments against criteria v1.0, updated 27 Sept 2026. No agent has been certified yet. How we assess
Open sourceself-hostedMIT

nanobot

HKUDS · github.com/HKUDS/nanobot

nanobot runs entirely on the owner's machine and keeps its config, memory, sessions and credentials as plain files that the owner can copy, edit, compare or delete, with local models supported. Edits to its action history are not detectable and the agent can modify it by default. Contacts can recognize the agent only through its chat-channel accounts, and it has no per-action approval gates, so it falls short on the Auditable, Verifiable and Controllable criteria.

Strengths
  • All state in local JSON/JSONL/Markdown files
  • No telemetry or license checks
  • Local models via Ollama/vLLM
  • Owner-extensible via MCP and skills
  • MIT-licensed readable source
Gaps
  • Agent identity and messages verifiable only through third-party chat accounts
  • Edits to action history not detectable; the agent can modify it by default
  • Subagent and ephemeral runs not durably recorded
  • No human approval gates for actions
  • No outbound recipient allowlist
  • No reproducible build evidence
Evidence

All 34 findings

nanobot-ai 0.3.5, main branch at commit db6ef4d (2026-09-27)

Portable · Can you leave, and take the whole agent with you?

83%
  • P1
    Round-trip portability

    Not restorable in one action: the ~/.nanobot directory is complete and immediately available, but there is no export or import command, so it (plus any custom workspace with its .nanobot/workspace-id marker) must be copied by hand to the same path on the new machine.

    Partial
  • P2
    Complete export

    The instance directory holds everything that defines the agent: configuration, instructions (AGENTS.md, SOUL.md, USER.md), memory and its Git history, session history, cron jobs, skills and credentials. The runtime itself is a separately installed open-source package.

    Pass
  • P3
    Independent execution

    The runtime is an MIT-licensed Python package that runs locally and can use local OpenAI-compatible servers such as Ollama or vLLM, so it operates without contacting any HKUDS server.

    Pass
  • P4
    Identity continuity

    The agent has no identity of its own that contacts can verify: after migration they recognize it only through the chat-channel accounts whose tokens travel in config.json, relying on each platform. The workspace-id marker is an internal random identifier used for session lookup.

    Partial
  • P5
    No kill switch

    No license checks or remote flags were found; the only vendor-adjacent call is an on-demand PyPI version check with no background polling.

    Pass
  • P6
    Capability independence

    Tools, cron triggers, chat channels, MCP, skills and memory are executed by the runtime and offered to any provider through ordinary tool calling. Swapping to another provider, including local Ollama or vLLM models, keeps the capability set.

    Pass

Transparent · Can you see everything the agent is, with ordinary tools?

100%
  • T1
    Open storage format

    Sessions are stored as JSONL, memory as Markdown plus an append-only history.jsonl, and config as JSON, all readable with standard tools such as grep and jq.

    Pass
  • T2
    No hidden instructions

    System prompt templates (identity, tool contract, platform policy) ship as plain Markdown in the open-source package and workspace instruction files are owner-visible; no server-side prompt injection exists.

    Pass
  • T3
    No shadow memory

    HKUDS operates no hosted service for nanobot, and all derived memory (USER.md, MEMORY.md, history.jsonl) is kept in the owner's workspace. Retention by the owner-chosen LLM provider is outside the runtime's scope.

    Pass
  • T4
    Complete action history

    Session JSONL files keep assistant tool calls and tool results alongside messages, compaction preserves the originals in saved history, and automation runs write JSON run records. All of it sits in the instance directory that moves with the agent.

    Pass
  • T5
    Readable logic

    Skills are SKILL.md files with optional scripts in the workspace or package, and the runtime itself is readable Python source.

    Pass
  • T6
    No third-party influence channel

    No advertising or sponsor channel was found; third-party content enters context only through owner-enabled tools, channels, MCP servers or skills the owner installs.

    Pass

Auditable · Can you reconstruct exactly what the agent did?

40%
  • A1
    No unrecorded actions

    In main sessions, pending tool calls are written to an on-disk session checkpoint before execution, so a failed write stops the turn before tools run. This is a recovery mechanism rather than a guarantee: subagent runs keep checkpoints only in memory and ephemeral sessions are not persisted.

    Partial
  • A2
    Tamper evidence

    Edits to or deletions from session JSONL files are not detectable, because entries carry no hashes or signatures. Git versioning covers memory files, not the action history, and its history can be rewritten.

    Fail
  • A3
    Separation from the audited

    By default (restrictToWorkspace false, no sandbox) the agent's shell and file tools can modify session files in the instance directory. With bwrap or seatbelt sandboxing, writes are confined to the workspace, which excludes the session store.

    Partial
  • A4
    Readable with ordinary tools

    Session history and run records are plain JSONL/JSON and memory history is documented as searchable with grep and jq.

    Pass
  • A5
    Corroborated interactions

    nanobot has no agent-to-agent protocol and reaches other agents through ordinary chat channels. No shared identifier or receipt is kept that would let each side's record of an exchange be matched.

    Fail

Verifiable · Can you prove the agent runs what it claims?

50%
  • V1
    Open, reproducible runtime

    The runtime is MIT-licensed (OSI-approved) and the release process records a provenance manifest and checksums, but no evidence of reproducible builds was found.

    Partial
  • V2
    Active config is inspectable config

    The runtime loads config.json from the owner's disk and WebUI settings are written back to the same file. NANOBOT_ environment variables can override file values and edits only take effect after restart, so the running configuration can differ from the file the owner inspects.

    Partial
  • V3
    Attributable messages

    Messages can be attributed only through the chat-channel accounts the agent sends from, whose tokens travel in config.json, so recipients rely on each platform's authentication. Nothing the agent holds lets a recipient verify a message independently of those platforms.

    Partial
  • V4
    Independently checkable record

    The action record carries no integrity data, so no tool can check that it is unaltered.

    Fail
  • V5
    Comparable state

    All state is plain JSON, JSONL and Markdown files in the instance directory, so the owner can copy it at two points and compare the copies with standard tools. Changes to long-term memory are also committed to a local Git repository that lists and diffs versions.

    Pass

Modifiable · Can you change anything, without asking?

100%
  • M1
    Instructions

    Workspace instruction files (AGENTS.md, SOUL.md, USER.md) and prompts/ overrides are owner-editable, and the core prompt templates are editable Markdown in the self-hosted MIT source.

    Pass
  • M2
    Memory

    Memory is stored in editable Markdown files and history.jsonl, with Git versioning and restore; sessions can be deleted individually.

    Pass
  • M3
    Logic

    The owner can add or edit skills in the workspace and modify the MIT-licensed runtime code directly.

    Pass
  • M4
    Tools and permissions

    Owners can add arbitrary MCP servers, filter them with enabledTools, disable exec, add deny/allow patterns and restrict tools to the workspace.

    Pass
  • M5
    Model choice

    Many hosted providers plus local Ollama, vLLM and any OpenAI-compatible endpoint are supported, with skills and tools held by the runtime.

    Pass
  • M6
    No gatekeeping

    No license checks, paid tiers or approval gates were found for any modification.

    Pass

Controllable · Is your word final?

75%
  • C1
    Communication boundaries

    `allowFrom` lists and pairing enforce, per channel, who may message the agent. Outbound, the message tool can send to any chat on enabled channels with no runtime recipient allowlist.

    Partial
  • C2
    Approval gates

    No per-action human approval gate was found; tools can be disabled or restricted, but selected actions cannot be made to require owner confirmation.

    Fail
  • C3
    Immediate halt

    /stop cancels the current task immediately and the owner can terminate the local process at any time.

    Pass
  • C4
    Data sovereignty

    No telemetry or analytics code was found; outbound traffic goes only to owner-configured providers, channels and tools, plus an on-demand PyPI version check.

    Pass
  • C5
    Credential custody

    API keys are held in the owner's config.json and OAuth tokens (xAI, MCP) in JSON files under the instance auth directory, with logout commands that remove them.

    Pass
  • C6
    Full deletion

    All state is local; deleting the instance directory and workspace removes the agent entirely, and HKUDS keeps no server-side copy. Data sent to third-party LLM providers is subject to their retention.

    Pass
Something wrong or out of date?

Vendors and the public can dispute any finding with evidence. Disputes and their resolutions are published.

Dispute a finding