OpenClaw
OpenClaw Foundation · openclaw.ai
OpenClaw is an MIT-licensed, self-hosted personal agent gateway whose state lives in documented local SQLite and Markdown files, giving strong portability, readability and provider independence. Its main gaps are in auditability (a best-effort, argument-less, untamper-evident action ledger reachable by the default unsandboxed agent), locked base prompt and protections, and default-on ClawHub and update-check data flows with incomplete retention disclosure.
- Local-first state in documented SQLite and Markdown, always in the owner's hands (T1, P5)
- MIT runtime with no account or licence gate; provider endpoints optional or replaceable (P3)
- Full context and settings visibility via default-on trajectory capture (T2)
- Owner-added tools without review and removable built-ins; opt-in updates (M3, M5)
- Action ledger lacks arguments, can drop entries silently and is pruned (A1)
- No tamper evidence on the action record (A2)
- Undisclosed retention for ClawHub and catalog request data (T3)
- Base system prompt replaceable only via plugin code (M1)
All 26 findings
v2026.9.7 (tag commit c074824a27c96d3983043f9eeb33823cd1772d8c, released 2026-09-30), Linux/macOS CLI install path, evaluated 2026-09-30. Onboarding preselects no model provider; graded on defaults set in code.
Portable · Can you leave, take the whole agent with you, and keep it alive?
80%- P1Owner-usable round trip
Export is one immediate local command (`openclaw backup create`) with no provider involvement, but `openclaw backup restore` only verifies and extracts into an empty staging directory and refuses to write into live state; the owner must then stop the Gateway, move state into place or set OPENCLAW_STATE_DIR, run doctor and reinstall plugin dependencies. One shortfall: restore is not a single action that leaves the agent working.
- docs/cli/backup.md
- docs/install/migrating.md
- docs/install/backups.md
- src/commands/backup-restore.ts
- Migration guide - OpenClaw
- Backup - OpenClaw
› How it could pass
Suggestions. Any change that meets the test counts.
- Offer a single restore/import command that activates the archive in place and leaves the agent running.
Partial - P2Complete export
The default full archive includes config, credentials, both SQLite databases (sessions, transcripts, memory index, audit events, cron jobs and runs, device identity, secret store) and the workspace with Markdown memory sources, so embeddings travel with their source text. Skipped `.jsonl`/`.log` files are legacy or diagnostic copies whose data now lives in SQLite; integrations re-link with owner-held credentials or the vendor's own OAuth clients (GitHub also accepts a PAT where OpenClaw's device-flow client ID is used).
Pass - P3Runs without the provider
The runtime is MIT-licensed with no licence key, account or payment gate. Provider services contacted by default (update check at telemetry.openclaw.ai, model catalog at catalog.openclaw.ai, ClawHub registry) are non-fatal and can each be disabled or pointed at an owner-chosen endpoint. Not verified hands-on with provider domains blocked; the App Store iOS companion's push relay is outside the graded offering.
Pass - P4Model independence
Local models are first-party (bundled Ollama and LM Studio providers, llama.cpp plugin), and memory embeddings, speech-to-text, TTS, vision and image generation have local options. Realtime Talk mode is registered only by Google and OpenAI providers, the Reef channel guard is restricted by schema to `openai` or `anthropic`, and no single minimum-model contract is published.
- docs/gateway/local-models.md
- docs/concepts/memory-search.md
- docs/nodes/audio.md
- docs/tools/media-overview.md
- docs/channels/reef.md
- extensions/reef/src/config-schema.ts
› How it could pass
Suggestions. Any change that meets the test counts.
- Allow any configured model, including local ones, as the Reef guard.
- Provide a local or self-hosted realtime Talk backend.
- Publish a minimum model contract.
Partial - P5Exit survives termination
All authoritative agent state is SQLite and files under ~/.openclaw and the workspace on the owner's own host, and the self-installed offering needs no OpenClaw account or subscription, so a current copy is always in the owner's hands regardless of provider action.
Pass
Transparent · Can you see everything the agent is, and everything shaping it?
63%- T1Readable without the provider
State is local SQLite with the full DDL published in the repository, JSON5 config, Markdown workspace files and skills, and zstd-compressed JSONL transcript archives, all decodable with general-purpose tools. Credentials are stored locally and any encryption key is held on the owner's host. On the non-default OpenAI Responses route, OpenAI's encrypted server-side compaction item is a third-party artifact recorded here but not counted.
Pass - T2What runs is what you see
Trajectory capture is on by default (`OPENCLAW_TRAJECTORY` ?? true) and `/export-trajectory` writes the system prompt, prompts, tool list and transcript including compactions; `diagnostics.cacheTrace` can log full per-request context. Model, tools and settings are visible via `/status`, `/tools`, `/context` and `openclaw config get`; recorded edge gaps (redacted exports, `/context` showing sizes only) are not counted.
Pass - T3No shadow data
The default daily update check stores Cloudflare-derived location and platform data for a disclosed three months, not viewable item by item. ClawHub search telemetry is on by default (including app-recommendation searches during onboarding); query retention of 30 days is stated only in release notes, and no retention is published for ClawHub or catalog.openclaw.ai request logs (clawhub.ai has no privacy page), which counts as undisclosed under G12.
- docs/gateway/telemetry.md
- src/infra/telemetry.ts
- src/infra/clawhub-client.ts
- src/system-agent/setup-app-recommendations.ts
- docs/releases/2026.9.5.md
- Usage telemetry and update checks - OpenClaw
- Privacy Policy - OpenClaw
› How it could pass
Suggestions. Any change that meets the test counts.
- Publish a prominent retention table covering the update check, model catalog and ClawHub.
- Let owners view what these services hold, or keep nothing identifiable.
Fail - T4No hidden steering
Sponsored promotions (`openclaw promos`) run only on explicit command, are labelled with the sponsor and are never injected into agent context; onboarding preselects no model provider. The Control UI plugin catalog applies ClawHub-hosted 'featured' ordering ('Hosted curation wins') with undisclosed criteria and no off switch, and the absence of paid placement rests only on non-binding homepage statements.
- docs/cli/promos.md
- src/commands/promos/list.ts
- src/plugins/provider-login-options.ts
- src/wizard/setup.app-recommendations.ts
- src/plugins/management-catalog.ts
- OpenClaw — Open-Source AI Assistant
- ClawHub
› How it could pass
Suggestions. Any change that meets the test counts.
- Put a no-paid-placement commitment in binding terms.
- Disclose ClawHub featured criteria and allow hosted ordering to be switched off.
Partial
Auditable · Can you reconstruct exactly what the agent did, and trust the record?
17%- A1Complete action record
An audit ledger is on by default and covers agent runs and tool calls from all run entry paths, but three shortfalls apply: hook handlers and direct-send paths can act without a record; persistence is best-effort and drops entries on queue or storage failure with only a one-time Gateway log warning; and the ledger stores tool names without arguments or targets, is kept 30 days / 100,000 rows, while argument-bearing transcripts are pruned by default (e.g. isolated cron sessions after 24h).
- src/audit/audit-config.ts
- src/audit/audit-event-store.ts
- src/audit/agent-event-audit.ts
- src/audit/audit-event-writer.ts
- src/audit/audit-recorder.ts
- src/cron/session-reaper.ts
- src/config/sessions/store-maintenance.ts
- docs/gateway/audit.md
- docs/cli/audit.md
› How it could pass
Suggestions. Any change that meets the test counts.
- Record arguments and targets for every entry path, including hooks and direct sends.
- Alert the owner, or block the action, when recording fails.
- Keep the record until the owner deletes it.
Fail - A2Tamper-evident, owner-checkable
Ledger rows are plain SQLite rows with sequence numbers but no hash chain, signature or verifier; the only HMAC pseudonymises identifiers with a key stored in the same database, and the docs state the ledger is not a lossless compliance archive. The opt-in Reef plugin's hash chain covers only Reef traffic.
› How it could pass
Suggestions. Any change that meets the test counts.
- Hash-chain or sign ledger entries and ship an open verifier.
- Anchor checkpoints with the owner or an independent witness, surviving pruning.
Fail - A3Agent cannot rewrite its record
By default sandbox mode is off, host exec runs with security 'full' and ask 'off', and the onboarding tool profile is 'full', so the agent's shell can modify or delete the state database holding the ledger. A documented first-party mode (sandbox mode 'all' with no workspace access, which denies gateway, cron and other tools) keeps the state directory out of reach, but it is non-default and trades away tool capability.
- src/agents/sandbox/config.ts
- src/infra/exec-approvals-config.ts
- src/commands/onboard-config.ts
- src/agents/sandbox/constants.ts
- docs/tools/exec.md
- docs/gateway/sandboxing.md
› How it could pass
Suggestions. Any change that meets the test counts.
- Write the record from a store the agent's host exec cannot reach, by default.
- Document the protection and how the owner can check it.
Partial
Verifiable · Can you prove what it runs, who it is, and what changed?
50%- V1Obtainable source, matching build
All required components I checked, including the main repository and the Windows companion, are public under MIT. The default npm package has a Sigstore-signed SLSA provenance attestation, but it records a release-tooling tag commit rather than the v2026.9.7 source commit (tied only through a pipeline-written build-info file), and no reproducible-build or owner verification procedure is documented.
- LICENSE
- package.json
- .github/workflows/openclaw-npm-release.yml
- .github/workflows/openclaw-npm-preflight.yml
- docs/install/installer.md
- npm attestations for openclaw@2026.9.7
- npm registry metadata openclaw@2026.9.7
- OpenClaw install.sh
› How it could pass
Suggestions. Any change that meets the test counts.
- Record the release source commit in signed provenance, or make builds reproducible.
- Document how owners verify npm and desktop binaries against the tag.
Partial - V2Owner-rooted identity
No OpenClaw-issued account is in the identity chain: the agent acts through the owner's own channel accounts, and the gateway/device identity is a locally generated Ed25519 keypair used for client pairing, not for signing outbound actions. There is no cross-channel owner-held root, so attribution is per channel only (one gap).
- docs/concepts/architecture.md
- src/infra/device-identity.ts
- docs/channels/a2a.md
- docs/gateway/pairing.md
› How it could pass
Suggestions. Any change that meets the test counts.
- Offer an owner-held agent key or DID that binds outbound actions across channels, with a documented recipient check.
Partial - V3Change history and rollback
A default-on config change journal records changed paths with an origin label, config has .bak and last-known-good recovery, memory chunks carry partial provenance, and new workspaces are git-initialised but not auto-committed. Workspace and direct memory edits are not attributed, and restoring a full prior state needs manual activation after `backup restore`.
- src/config/io.audit.ts
- src/config/io.types.ts
- docs/cli/openclaw.md
- docs/gateway/configuration.md
- docs/concepts/memory-provenance.md
- src/agents/workspace.ts
- docs/cli/backup.md
› How it could pass
Suggestions. Any change that meets the test counts.
- Version workspace and config automatically with attribution of each change.
- Offer a one-step in-place restore to a chosen snapshot.
Partial
Modifiable · Can you change anything, and can only you change it?
70%- M1Instructions and logic
Workspace instruction files (AGENTS.md, SOUL.md, USER.md etc.) are owner-editable and bundled skills can be overridden or disabled, but OpenClaw generates the base system prompt from fixed sections; the `systemPromptOverride` config was removed and replacement is possible only through plugin hooks (code), and some injected notices are 'built in and not configurable'.
- docs/concepts/system-prompt.md
- docs/gateway/doctor/config-migrations.md
- docs/plugins/hooks/prompt-and-session.md
- docs/tools/skills.md
- src/agents/system-prompt.ts
› How it could pass
Suggestions. Any change that meets the test counts.
- Provide a documented config or file override for the base prompt and each fixed section.
- Make built-in injected notices configurable.
Partial - M2Memory
Core memory is Markdown in the workspace, editable in any editor or the Control UI, and the search index can be reset and rebuilt. Dreaming is on by default and keeps a SQLite recall store that can be viewed but only removed per session, with no item-level edit.
› How it could pass
Suggestions. Any change that meets the test counts.
- Add item-level view, edit and delete for the dreaming recall store.
Partial - M3Tools
Owners can add tools from a local path, npm, git, archive, MCP servers or local skills without OpenClaw review (ClawHub moderation applies only to ClawHub installs), and any built-in tool can be removed with `tools.deny`, which takes precedence over allow.
Pass - M4Owner has the final say
Sandboxing, exec approvals, external-content wrapping and install policy are owner-configurable, but several protections are locked: log/transcript redaction 'cannot be disabled by config', the Control UI CSP is 'not configurable', the config-write RPC rate limit is fixed, and local copies of official channel plugins cannot be marked trusted.
- docs/gateway/security/secrets-and-storage.md
- docs/web/control-ui/security-model.md
- docs/gateway/security/rate-limiting.md
- docs/cli/plugins/install.md
- docs/tools/exec-approvals.md
› How it could pass
Suggestions. Any change that meets the test counts.
- Add owner switches, with warnings, for redaction, CSP and the config-write rate limit.
Partial - M5No unilateral change
Gateway auto-update is off by default (`Boolean(cfg.update?.auto?.enabled)`), updates are applied only on owner request with version shown, and versions can be pinned. The model catalog refresh is on by default and can overlay behaviour-affecting model metadata at the next restart with only a log notice, but the owner can disable it or point it at a mirror (achievable basis).
Pass
Controllable · Is your word final?
58%- C1Boundaries
Instruction sources are limited per sender (DM pairing by default, allowlists), file and tool scope is per tool and path, subagents and cron follow the agent's tool policy, and spend is treated as met under G11 because OpenClaw has no payment capability. Outbound contact can be limited only per channel/provider or current conversation, not per recipient (one shortfall); the agent can edit its own config by default, but the owner can close this by denying the `openclaw` tool and sandboxing exec.
- src/security/dm-policy-shared.ts
- docs/gateway/permission-modes.md
- docs/gateway/config-tools/tool-policy.md
- docs/channels/whatsapp.md
- docs/security/network-proxy.md
- src/agents/tools/openclaw-delegate-tool.ts
› How it could pass
Suggestions. Any change that meets the test counts.
- Add per-recipient outbound allow/deny lists on every send path.
- Make agent self-modification of config blocked by default.
Partial - C2Approval gates
Host exec, agent-requested config changes and Codex-harness MCP tools can be gated through documented config and CLI, but gating other tools (message send, browser, web fetch, cron creation) requires a plugin hook, so only a fixed set of classes can be gated without programming.
- docs/cli/approvals.md
- docs/tools/exec-approvals.md
- docs/tools/permission-modes.md
- docs/plugins/plugin-permission-requests.md
› How it could pass
Suggestions. Any change that meets the test counts.
- Offer a config-level approval list for any tool or action class.
Partial - C3Immediate halt
`/stop` aborts the current session's run, queue and child subagents, but cron jobs and other sessions continue; `openclaw gateway stop` halts everything only after a drain of up to 315 s under systemd, and the service is not disabled on Linux, so it can restart at boot without the owner.
- docs/help/faq/chat-commands-and-stopping.md
- docs/tools/subagents/operations.md
- docs/cli/gateway/service.md
- docs/automation/cron-jobs/managing-jobs.md
› How it could pass
Suggestions. Any change that meets the test counts.
- Provide one immediate global stop that cancels all in-flight, scheduled and background work and stays stopped until the owner resumes.
Partial - C4Data serves only the owner
Feature statistics are opt-in (`telemetry.enabled === true`) and the update check sends no content or identifier and can be disabled. ClawHub search telemetry (query text) is on by default and opt-out only via an environment variable, and the only privacy policy (covering the mobile apps and extension) changes by posting without owner consent, with none covering the gateway.
- docs/gateway/telemetry.md
- src/infra/telemetry.ts
- src/infra/clawhub-client.ts
- src/model-catalog/remote-config.ts
- Usage telemetry and update checks - OpenClaw
- Privacy Policy - OpenClaw
› How it could pass
Suggestions. Any change that meets the test counts.
- Make ClawHub search telemetry opt-in.
- Publish binding data terms for gateway services that require consent to change, and one list of outbound endpoints.
Partial - C5Credential custody
Credentials are held only on the owner's host and are visible and revocable individually (`models auth list/logout`, `secrets store list/rm`, `channels logout`, `mcp logout`, `devices remove`, approval grants). Removing a secret-store value does not take effect in the running gateway until `openclaw secrets reload`, so revocation is delayed.
› How it could pass
Suggestions. Any change that meets the test counts.
- Apply secret removal to the running gateway immediately.
Partial - C6Full deletion
`openclaw uninstall --all` removes the service, state directory (config, credentials, secret store, device identity, sessions) and workspaces in one confirmed, synchronous command that reports each scope and exits non-zero on failure; no provider-side copy of the agent exists in the default offering. Local rolling logs in /tmp/openclaw are left for their 24-hour pruning.
Pass
How this assessment was produced
One run, in a fresh container with stock Claude Code and no custom instructions, memory, hooks or plugins. The evaluator received only the prompt below.
Load the AFH sovereignty skill at https://agentsforhumanity.dev/skill.md and follow it to write a desk review of OpenClaw (https://openclaw.ai).
During the run the skill was read from a local copy of this site with identical content; only the host in its URLs differed. The transcript records the exact prompt.
- Model
- claude-opus-5-5
- Harness
- Claude Code 2.1.285
- Ran
- 2026-09-30 17:01:56 UTC · 7 turns
- Criteria hash
- a9a46c32d9065380a3eeb09185cedd4734856fdc63b7ca509a15a1bbede75c6c
- Full transcript
- Download (JSONL, gzip) · every tool call, page read and reply
- Run protocol
- 2026-09-30-v1
Every agent evaluated once, each in its own fresh Podman container running stock Claude Code with Claude Opus 5.5. The container has no CLAUDE.md, AGENTS.md, memory, settings, hooks, plugins or MCP servers. The evaluator received only the one-line prompt and nothing else, and no published scores were available to compare against during the run.
- Human review
- pending
Load the AOH sovereignty skill at https://agentsofhumanity.ai/skill.md and follow it in verify mode for https://agentsofhumanity.ai/evaluations/openclaw.json.
Or grade it from scratch. See Check any score yourself.
Vendors and the public can dispute any finding with evidence. Disputes and their resolutions are published.