ZeroClaw
ZeroClaw Labs · github.com/zeroclaw-labs/zeroclaw
ZeroClaw is a fully self-hosted, open-source runtime with no vendor service, no telemetry, local-model support, owner-held encrypted secrets and strong runtime-enforced controls (autonomy levels, approvals, allowlists, OS sandboxes, emergency stop). Its main gaps are auditability and verifiability: the action record is best-effort and edits to it are not detectable, contacts can recognize the agent and its messages only through third-party channel accounts, and builds are not shown to be reproducible.
- Single self-hosted binary; no vendor service or telemetry
- Local models via Ollama and any OpenAI-compatible endpoint
- Open state formats: TOML, SQLite, JSONL, markdown
- Runtime-enforced autonomy levels, approval gates, allowlists and OS sandboxes
- Graded emergency stop
- Owner-held encrypted secret store
- Whole-install backup plus timestamped backups with SHA-256 manifests
- Action record is best-effort; actions proceed when it cannot be written
- Edits to the action record are not detectable; the hash chain covers only certificate events
- Agent identity and messages verifiable only through third-party channel accounts
- Per-agent export bundle omits memory, cron jobs and channels
- Reproducible builds not claimed or verified
All 34 findings
v0.8.5, master branch at commit 24e7324 (2026-09-27); source code and in-repo docs reviewed.
Portable · Can you leave, and take the whole agent with you?
83%- P1Round-trip portability
Not restorable in one action: the `agents export` bundle omits memory, cron jobs and channels, and the complete whole-install copy must be made by hand; `zeroclaw agents import` is not implemented, so restoring means merging config.toml and copying directories into place.
Partial - P2Complete export
The documented whole-install backup (config.toml, `.secret_key`, memory, sessions, cron, SOP runs and other state) contains everything that defines the agent. The per-agent `agents export` bundle deliberately omits memory, cron jobs, channels and secrets.
Pass - P3Independent execution
ZeroClaw is a single self-hosted Rust binary under MIT OR Apache-2.0 with no hosted service, and it runs against local models via Ollama or OpenAI-compatible endpoints.
Pass - P4Identity continuity
The agent has no identity of its own that contacts can verify: after migration they recognize it only through the channel accounts and A2A pairing tokens whose credentials travel with the install, relying on each platform. The daemon's Ed25519 key authenticates it to relays and the owner's own clients, not to counterparties.
Partial - P5No kill switch
Docs state there is no telemetry, cloud tenancy or license server, and no license check or remote kill flag was found in the code.
Pass - P6Capability independence
Tools, channels, memory, cron and SOPs are executed by the runtime, and a text tool-call parser lets models without native tool calling use them. Swapping to another provider, including local Ollama, keeps the capability set.
Pass
Transparent · Can you see everything the agent is, with ordinary tools?
83%- T1Open storage format
State is kept in TOML config, SQLite databases (sessions, memory, cron), JSONL logs and markdown files. Secrets and plugin state are encrypted with a local, owner-held key.
Pass - T2No hidden instructions
Runtime-added prompt sections (e.g. Safety, Tool Honesty, tool list, runtime info) are defined in open source code, and full LLM request payloads can be logged via `log_llm_request_payload` (off by default).
Pass - T3No shadow memory
There is no hosted service, account system or telemetry, so the vendor holds no data about the owner. Only the owner-chosen model provider receives content.
Pass - T4Complete action history
Tool calls and messages are kept locally in sessions.db and leave with the install directory. The runtime trace is a rolling 200-event file and the docs describe persistence as best-effort, so the history is not guaranteed to be complete.
Partial - T5Readable logic
Skills are human-readable markdown and scripts, and the runtime itself is open source. WASM plugins are loaded as compiled binaries, so their logic is not necessarily stored as readable source.
Partial - T6No third-party influence channel
No advertising or sponsored channel exists. Server-supplied MCP `pinned_resources` that enter the system prompt are owner-configured and flagged as a risk on export.
Pass
Auditable · Can you reconstruct exactly what the agent did?
40%- A1No unrecorded actions
Actions are not guaranteed a durable record: session-persistence failures are logged and the turn continues, and the runtime trace is best-effort. The config docs state that no production path records command execution in the audit log.
Fail - A2Tamper evidence
Edits to or deletions from sessions.db or the runtime trace are not detectable. A SHA-256 hash-chained audit file exists but records only certificate events, and tool receipts use ephemeral keys and are not persisted.
Fail - A3Separation from the audited
Under the default supervised profile the agent's tools are confined to its workspace, outside the install `data/` directory that holds sessions and logs, so it cannot alter its record. Under `full` autonomy or `unrestricted_filesystem` that confinement is lifted and the record becomes writable.
Partial - A4Readable with ordinary tools
Runtime logs are JSONL and session history is SQLite, both readable with standard tools.
Pass - A5Corroborated interactions
In A2A calls the caller records the peer's task and context ids in its tool result, and the receiving ZeroClaw runs the turn under that context id. The receiving endpoint is stateless with no durable task store, so a matching record on its side is not guaranteed, and exchanges over chat channels have no shared record.
Partial
Verifiable · Can you prove the agent runs what it claims?
60%- V1Open, reproducible runtime
The runtime is open source under OSI-approved MIT OR Apache-2.0, and a Nix flake with a pinned Cargo.lock builds it. Bit-for-bit reproducible builds are not claimed or verified.
Partial - V2Active config is inspectable config
The daemon runs from the canonical `config.toml`; reload re-reads it, and env-var overrides are documented. The config is owner-readable, with secrets encrypted by a local key.
Pass - V3Attributable messages
Messages can be attributed only through the channel accounts and A2A bearer tokens the agent uses, whose credentials travel with the install, so recipients rely on each platform's authentication. Nothing the agent holds lets a recipient verify a message independently of those platforms.
Partial - V4Independently checkable record
The action record (sessions.db and the runtime trace) carries no integrity data, so no tool can check it. The open `verify_chain` code validates only the certificate audit file.
Fail - V5Comparable state
The owner can compare state between two points in time: the backup tool writes timestamped backups with per-file SHA-256 manifests (config, memory, audit and knowledge by default, configurable, optionally on a schedule), and the whole install is documented as open files and SQLite that can be copied and diffed.
Pass
Modifiable · Can you change anything, without asking?
100%- M1Instructions
Personality/identity files and config are owner-editable, and runtime-injected prompt sections can be changed in the open source code.
Pass - M2Memory
Memory can be listed, read and cleared via `zeroclaw memory`, stored and deleted per key via the gateway API and dashboard, and edited directly in SQLite or markdown.
Pass - M3Logic
Skills are editable files, SOPs are configurable, and the whole runtime is open source and modifiable.
Pass - M4Tools and permissions
Owners can add custom MCP servers and WASM plugins, and scope tools via risk profiles (`auto_approve`, `always_ask`, `excluded_tools`, command allowlists).
Pass - M5Model choice
About 20 providers are supported, including local Ollama and any OpenAI-compatible endpoint, and tool-call parsing happens in the runtime.
Pass - M6No gatekeeping
No licensing, paid tiers or approvals exist. Plugin signature checking defaults to disabled and is owner-configurable.
Pass
Controllable · Is your word final?
100%- C1Communication boundaries
Channels enforce owner-set `allowed_users` lists, cross-channel sends through `send_via` can target only the originating chat or owner-configured peer groups, and HTTP, fetch and browser access is bounded by runtime domain allow and block lists.
Pass - C2Approval gates
Supervised autonomy (the default) requires runtime-enforced approval for medium-risk actions; `always_ask`, OTP gating and fail-closed approval routing are also available.
Pass - C3Immediate halt
`zeroclaw estop` halts in-flight tool calls at kill-all, network-kill, domain-block or tool-freeze levels, with optional OTP to resume.
Pass - C4Data sovereignty
No telemetry is sent; OpenTelemetry export is opt-in to an owner-set endpoint. The vendor runs no service that could collect or train on data.
Pass - C5Credential custody
Secrets are stored in config.toml, encrypted with ChaCha20-Poly1305 under a local `.secret_key` (or in plaintext by choice), and can be inspected and revoked. Export lists the required secrets for re-entry.
Pass - C6Full deletion
All state lives in the local install directory and can be deleted after `install.sh --uninstall` or `zeroclaw service uninstall`. The vendor retains nothing; third-party model-provider retention is outside the runtime.
Pass
Vendors and the public can dispute any finding with evidence. Disputes and their resolutions are published.