Claude Code
Anthropic · code.claude.com/docs/en/overview
Claude Code keeps most agent state as plaintext files on the owner's machine and gives the owner broad control over tools, memory, permissions and protections. The runtime is a closed binary used under revocable consumer terms, and it is officially tied to Claude models. There is no whole-agent export, the action record is pruned after 30 days by default with no integrity protection, and consumer-plan data terms allow training and long provider-side retention.
- Memory, instructions and settings are local, editable plain files (M2, P5)
- Open tool interface via MCP and plugins, with removable built-ins (M3)
- Every documented protection can be changed by the owner (M4)
- Per-tool, per-path and per-domain permission rules with an optional OS sandbox (C1, C2)
- Closed runtime under a revocable licence, with no supported non-Claude models (V1, P3, P4)
- No whole-agent export; claude.ai-held connectors and skills (P1, P2)
- Action record pruned by default, with no tamper evidence (A1, A2)
- Training and retention defaults on consumer plans, and no full deletion (C4, T3, C6)
All 26 findings
Claude Code 2.1.285 (changelog dated 2026-09-29) on Linux/WSL2. Public repo anthropics/claude-code at commit 732e167ee9d71296b4b63d6f529ac1334513826a (runtime source not public). Consumer Terms effective 2025-10-08; Privacy Policy effective 2026-09-10. Desk review dated 2026-09-30. Cloud sessions, routines and desktop scheduled tasks were considered only where they reach the default CLI.
Portable · Can you leave, take the whole agent with you, and keep it alive?
30%- P1Owner-usable round trip
Claude Code documents no whole-agent export or matching import. /export writes only the current conversation as plain text. Agent state is spread across ~/.claude, ~/.claude.json and project .claude/ files, and no procedure is documented for moving it to another machine.
› How it could pass
Suggestions. Any change that meets the test counts.
- Ship an export/import pair (or a documented copy-folder procedure) that covers config, memory, skills, hooks, MCP servers and transcripts
- Make restore a single command that leaves the agent working
Fail - P2Complete export
The only export is conversation text. Several classes of state are held by the provider on claude.ai and are not in any export: claude.ai connectors, synced skills and plugins, and cloud sessions/routines. Anthropic-hosted connectors (e.g. Gmail, Google Calendar, Microsoft 365) can only be linked through the redirect URL registered by claude.ai.
› How it could pass
Suggestions. Any change that meets the test counts.
- Export every class of agent state, including account-synced skills and connector configuration
- Allow re-linking of every integration without an Anthropic-registered OAuth client
Fail - P3Runs without the provider
The runtime is a closed binary. Its right to use comes from Anthropic's Consumer Terms, under which Anthropic 'may suspend or terminate your access to the Services ... at any time without notice' and may revise the terms at its discretion. No perpetual or irrevocable right to run is granted. Anthropic also 'doesn't support routing Claude Code to non-Claude models through any gateway'.
- Anthropic Consumer Terms (sections 9, 10, 12)
- Legal and compliance
- claude-code repository LICENSE.md (commit 732e167)
- Other LLM gateways
› How it could pass
Suggestions. Any change that meets the test counts.
- Grant a perpetual, irrevocable right to run the distributed runtime
- Make every provider endpoint (feature flags, WebFetch preflight, updates) optional or owner-replaceable
Fail - P4Model independence
ANTHROPIC_BASE_URL, gateway model discovery and CLAUDE_CODE_MAX_CONTEXT_TOKENS are documented and let an Anthropic-format endpoint serve other model IDs. However, Anthropic states it doesn't support routing Claude Code to non-Claude models, so local open-weight models work only through an unofficial workaround. Features tied to Anthropic API betas degrade on non-first-party hosts, e.g. MCP tool search is disabled by default.
› How it could pass
Suggestions. Any change that meets the test counts.
- Officially support and document a minimum model contract, and test it against a local open-weight model
- Keep every capability working when the model is not a Claude model
Partial - P5Exit survives termination
In the default local CLI, configuration, CLAUDE.md, auto memory, skills and transcripts are plain files on the owner's machine, so they stay available after account termination. Skills synced from claude.ai stay on disk once downloaded. Provider-held classes and 30-day transcript pruning are graded in P2 and A1.
Pass
Transparent · Can you see everything the agent is, and everything shaping it?
38%- T1Readable without the provider
State is stored as plaintext JSONL, JSON and Markdown with no encryption. However, the docs say the transcript entry format 'is internal to Claude Code and changes between versions', and the provider-supplied base prompt and built-in logic ship inside a closed binary rather than as documented readable files.
› How it could pass
Suggestions. Any change that meets the test counts.
- Publish a schema for transcript and config files
- Ship provider-supplied prompts and built-in skills as readable files
Partial - T2What runs is what you see
/context breaks down the context by category, and OTEL_LOG_RAW_API_BODIES can log the full request JSON (including the system prompt) to an owner-run collector. /status and /model show the model in use. One shortfall: behaviour is also shaped by GrowthBook feature flags fetched from Anthropic (they can change the starting permission mode and turn features or 'server configuration' experiments on), and the owner has no documented way to see which flag values are in effect.
- Debug your config (/context)
- Monitoring usage (OTEL_LOG_RAW_API_BODIES)
- Env vars: features that need feature-flag fetching
- Permission modes: which mode a session starts in
› How it could pass
Suggestions. Any change that meets the test counts.
- Expose the fetched feature-flag values and any server-side switches in /status or a config dump
Partial - T3No shadow data
For consumer plans, Anthropic keeps sessions for 30 days, or up to 5 years if training is allowed. Flagged sessions are kept for up to 2 years, and trust-and-safety classification scores for up to 7 years. De-identified data may be kept 'longer' for research, and data may also be kept 'as necessary to combat violations'. Classification scores are derived data that the owner cannot see, and some retention periods are open-ended.
› How it could pass
Suggestions. Any change that meets the test counts.
- Bound every retention period, including de-identified and enforcement data
- Let the owner see classification scores and any other derived data held about them
Fail - T4No hidden steering
The provider-preferred defaults found are disclosed and can be switched off: the auto-added 'claude.ai Claude Docs' connector (deniedMcpServers), claude.ai-synced Anthropic skills (syncClaudeAiSkills), official marketplace auto-install (env var) and Claude Code commit/PR attribution lines (attribution setting). Because the runtime is closed, the absence of other self-preferencing rests on no binding commitment.
- MCP: use MCP servers from claude.ai
- How Claude Code works: context Claude Code adds
- Data usage: default behaviors
› How it could pass
Suggestions. Any change that meets the test counts.
- Make a binding commitment that no paid or self-preferencing influence is placed in context, rankings or tool defaults
Partial
Auditable · Can you reconstruct exactly what the agent did, and trust the record?
17%- A1Complete action record
Session transcripts record every tool call with its arguments and results, but two shortfalls apply. (1) Transcripts are deleted after cleanupPeriodDays, which defaults to 30 days. (2) Hook commands are an entry path whose own actions are not written to the transcript: stdout and stderr go only to the debug log. The transcript is also written asynchronously, and no alert on recording failure is documented.
› How it could pass
Suggestions. Any change that meets the test counts.
- Keep the action record until the owner deletes it
- Record hook-executed actions, and alert the owner when recording fails
Fail - A2Tamper-evident, owner-checkable
No integrity data (hash chaining, signatures or checkpoints) is documented for transcripts or logs. They are plain JSONL files that can be changed without trace.
› How it could pass
Suggestions. Any change that meets the test counts.
- Hash-chain or sign record entries and anchor checkpoints with the owner
- Publish an open verifier
Fail - A3Agent cannot rewrite its record
In the default auto mode, the model-based classifier blocks writes to session transcripts (v2.1.205+). That is a classifier policy, not a structural guarantee. The OS-level sandbox protects 'most of' ~/.claude, but it is off by default, covers only Bash, and bypassPermissions skips the protected-path checks.
› How it could pass
Suggestions. Any change that meets the test counts.
- Write the record from a component the agent's tools cannot reach
- Document the transcript directory as a sandbox-protected path in all modes
Partial
Verifiable · Can you prove what it runs, who it is, and what changed?
17%- V1Obtainable source, matching build
The runtime is closed: the public anthropics/claude-code repository's LICENSE.md says '© Anthropic PBC. All rights reserved', and the repository holds plugins, examples and the changelog, not the runtime source. A GPG-signed manifest verifies that binaries came from Anthropic, not that they match any source.
› How it could pass
Suggestions. Any change that meets the test counts.
- Publish the runtime source under terms that allow modification and third-party maintenance
- Make the distributed build reproducible or provenance-attested against that source
Fail - V2Owner-rooted identity
The agent has no identity of its own that the owner roots. It acts through the owner's claude.ai OAuth login, which Anthropic can revoke, and through the owner's own tool credentials. Its only default outward marker is a provider-branded 'Co-Authored-By: Claude' attribution.
› How it could pass
Suggestions. Any change that meets the test counts.
- Give the agent an owner-held key or identity that can sign or attribute its actions
- Let the owner rotate and recover it without the provider
Fail - V3Change history and rollback
Checkpointing (Esc Esc / rewind) restores the conversation and Claude's file edits. It does not track Bash-made or external changes, or changes to settings, permissions, model or runtime version. The provider-side sync of claude.ai skills and connectors has no change history. Memory edits appear only as tool calls in transcripts, which are pruned.
› How it could pass
Suggestions. Any change that meets the test counts.
- Version all agent state (settings, memory, skills, permissions, model/runtime) with attribution
- Offer one-step restore to any earlier state
Partial
Modifiable · Can you change anything, and can only you change it?
80%- M1Instructions and logic
The owner can replace the whole system prompt with --system-prompt or --system-prompt-file, add output styles, CLAUDE.md, rules and skills, and turn off git instructions and attribution. However, the system-prompt replacement is a per-launch flag rather than a persistent setting, and the docs do not show that every injected system reminder can be removed. Local edits to claude.ai-synced skills 'can be overwritten or removed' by a later sync.
› How it could pass
Suggestions. Any change that meets the test counts.
- Make a replacement base prompt a persistent setting
- Document a switch for every injected reminder, and never overwrite owner edits during sync
Partial - M2Memory
Persistent memory is CLAUDE.md/AGENTS.md files, .claude/rules, and auto memory saved as Markdown files in ~/.claude/projects/<project>/memory/. All of them can be listed, edited and deleted as ordinary files or through /memory, and auto memory can be turned off.
Pass - M3Tools
The owner can add any tool, with no provider review, through MCP servers (claude mcp add), plugins, skills and hooks. Built-in tools can be removed with --tools, --disallowedTools or permission deny rules, and claude.ai connectors can be disabled.
Pass - M4Owner has the final say
Every documented protection can be switched off by the owner: sandboxing (sandbox settings), the auto-mode classifier (permission mode choice), protected-path checks (bypassPermissions), the WebFetch domain blocklist (skipWebFetchPreflight), telemetry, and the auto-updater. The actions no mode auto-approves (e.g. rm on critical paths) still ask the owner rather than refuse outright.
Pass - M5No unilateral change
By default, native installs auto-update on the 'latest' channel, and features and the starting permission mode can change through server-fetched GrowthBook flags. Anthropic can also 'temporarily turn off' auto mode server-side. The owner can pin a version (DISABLE_AUTOUPDATER, DISABLE_UPDATES, or installing a specific version), disable flag fetching (DISABLE_GROWTHBOOK), and pin a full model ID. However, hosted models retire with at least 60 days' notice, which cannot be declined, and v2.1.257 rewrote a saved 'claude-fable-5' model setting to the 'fable' alias.
- Setup: auto-updates, release channel, disable auto-updates
- Env vars: DISABLE_GROWTHBOOK and feature-flag fetching
- Model configuration: aliases and pinning
- Model deprecations
- Permission modes
› How it could pass
Suggestions. Any change that meets the test counts.
- Never rewrite a pinned model setting
- Give at least 6 months' notice of model retirement, or make behaviour-affecting changes opt-in
Partial
Controllable · Is your word final?
33%- C1Boundaries
Limits can be set per tool, path, command prefix and domain through permission rules, and the OS sandbox adds file and network isolation. Channel plugins keep a per-sender allowlist, and the agent is blocked from editing its own settings files (protected paths). Spend is treated as met under G11 because there is no payment capability. One shortfall: sandbox limits cover only Bash commands, so MCP server and hook processes run outside them, and the docs call Bash rules 'not a security boundary'.
› How it could pass
Suggestions. Any change that meets the test counts.
- Apply file and network limits to every execution path, including MCP servers and hooks
Partial - C2Approval gates
The owner can put ask rules on any tool or pattern, and ask rules are honoured in every mode, including bypassPermissions. However, the docs say Bash ask and deny rules match only the command text as written and are 'not a security boundary around the program'. As a result, a gate on an action class performed through the shell (e.g. a given program) can be bypassed by another invocation form.
› How it could pass
Suggestions. Any change that meets the test counts.
- Make gates on shell action classes hold whatever form the command takes
Partial - C3Immediate halt
Esc or Ctrl+C stops the foreground turn. Background subagents need a separate Ctrl+X Ctrl+K. Background sessions in agent view keep running after Ctrl+C or exit and need /stop or Ctrl+X per session. Cloud routines and desktop scheduled tasks are stopped separately.
› How it could pass
Suggestions. Any change that meets the test counts.
- Provide one control that stops foreground, background, scheduled and cloud work, and require explicit resume
Partial - C4Data serves only the owner
On the default Pro/Max sign-in, Anthropic trains on sessions when the consumer 'help improve Claude' setting is on. Anthropic's own pages do not say what the setting defaults to at signup. Third-party reporting (TechCrunch, labelled) says the consent pop-up toggle was preset to 'On', with a smaller switch than the Accept button. Under G12 the opt-in is not shown. Other flows: metrics telemetry, error reports (third-party service) and the WebFetch hostname check are on by default but can be turned off. Consumer Terms changes take effect when the owner keeps using the service ('continue to access'). Flagged content is used to train trust-and-safety classifiers.
- Data usage
- Anthropic: Updates to Consumer Terms and Privacy Policy
- Anthropic Privacy Policy
- Anthropic Consumer Terms
- Third-party: TechCrunch, 28 Aug 2025
› How it could pass
Suggestions. Any change that meets the test counts.
- Make training and any secondary use opt-in, with an unticked default documented in binding terms
- Turn telemetry and error reporting off by default
- Require specific consent for data-term changes
Fail - C5Credential custody
Local credentials are listed and revoked one at a time: /logout revokes the login, and each MCP server has 'Clear authentication' or claude mcp logout. Connector credentials for claude.ai connectors are held by Anthropic and managed at claude.ai/customize/connectors. No public statement says provider-side copies are deleted on revocation, so under G12 the pass is withheld.
› How it could pass
Suggestions. Any change that meets the test counts.
- Disclose that provider-held connector credentials are deleted on revocation, and bound how long that takes
- List every credential and grant in one place
Partial - C6Full deletion
claude project purge deletes local state one project at a time, and account deletion is a separate step on claude.ai. Provider-side copies survive: flagged sessions (up to 2 years), classification scores (up to 7 years), de-identified training data, and data kept 'as required by law ... or as necessary to combat violations'.
› How it could pass
Suggestions. Any change that meets the test counts.
- Offer one action that deletes all local and provider-side state, with a stated limit and a confirmation
- Make deletion reach classifier scores, backups and training copies
Fail
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 Claude Code (https://code.claude.com/docs/en/overview).
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 14:15:46 UTC · 45 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/claude-code.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.