1clawai/1claw
Secure secrets management, multi-chain signing, agent memory, automations, and 155 tools (offered per agent entitlement, in toolsets) for AI agents via 1Claw vault.
Changelog
0.63.0 (2026-09-17)
Added
@1claw/mcp-vaultand@1claw/mcp-guard(plan Phase 3). Two split packages built from this tree:mcp-vaultinstalls only thevaultandapprovalstoolset modules and ships aVaultClient(core + secrets + approvals) — no signing, execute, cards, memory, platform or admin code is in the package;mcp-guardisinspect_contentalone with no vault client at all.scripts/prune-dist.mjskeeps only the runtime import closure aftertsc, andsplit_packages.test.tsfails if a forbidden file becomes reachable from either entry. Lockstep versions.
Changed
- Bootstrap moved to
core/server.ts.startServer({ name, version, modules, createClient, localOnly?, instructions? })builds and starts the server; the entrypoint decides which toolset modules and which client class it gets.toolsets.tsno longer imports every module — the entrypoint callsinstallToolsets(), andcore/session.tstakes its client frominstallClientFactory().index.tsis 20 lines. - Tool modules import the client as a type only (and
OneClawApiErrorfromclient/error.ts), so a tool's runtime footprint is itself plus the security module.
0.62.1 (2026-09-17)
Changed
-
Client split (plan Phase 2).
client.ts(2,155 lines, one class) is nowclient/core.ts(auth, exchange, request primitive) plus 14 per-domain mixin classes (secrets,intents,execute,platform,admin, …) assembled into the sameOneClawClientfacade, so no tool changed.import_boundaries.test.tspins that domains only extend core and never import each other, and that every domain method resolves on the facade.src/client.tsis a re-export shim. -
Module split (plan Phase 2). Each toolset is now a module under
src/toolsets/that owns its tool list and gate description;toolsets.tsderives the catalog from them; the five tools that lived inline inindex.tsmoved tosrc/tools/{secret_versions,env}.ts; session state moved tosrc/core/.import_boundaries.test.tsenforces that toolset modules import only tools + client (never each other), tools never reach up, and@1claw/mcp/securitystays dependency-light.index.tsis 760 lines, down from ~1170. No tool renamed, no behaviour change (prod stdio probe: 52 tools before and after). -
Entitlements from the token exchange. Vault ≥ 0.61.17 returns
entitlementsonPOST /v1/auth/agent-token; the server uses it and skips theGET /v1/agents/{id}round trip. It also carriestreasury_signerandhas_delegations, so thetreasuryanddelegationtoolsets now come on by default when the vault says the agent uses them (still opt-in-able otherwise). Older vaults fall back to the profile GET as before.
0.62.0 (2026-09-17)
Changed
- Entitlement-based toolsets. Every tool now belongs to a toolset (
src/toolsets.ts) and a session is only offered the toolsets its agent is entitled to:inspect,vaultandapprovalsalways;intents,execute,cards,memory,channels,directoryfrom the agent's flags;treasury,delegation,chat,automations,runtimes,notificationby explicit opt-in (ONECLAW_MCP_TOOLSETS/X-1Claw-Toolsets);adminandplatformnever on an agent session. A vault-only agent sees ~24 tools instead of 155.allmeans everything the agent could use — it still excludesadmin/platformand cannot add a flag-gated set. execution_require_teehides secret reads (get_secret,get_env_bundle,resolve_env) and keeps writes/metadata, matching what the vault will actually allow.- One client per session. Hosted mode used to build a fresh
OneClawClient— and re-run the API-key exchange, vault probe and now the profile read — on every tool call, because the HTTP layer callsauthenticateper request. Admissions are memoised by credential (10 min) and the same session object is reused, so the exchange happens once. - Entitlements are re-resolved every 15 minutes and immediately after a
403from the vault; hosted sessions getnotifications/tools/list_changedwhen the visible set changes. Over stdio the set is fixed at startup — restart to pick up flag changes. - Degraded lookups are visible. Each admission logs
toolsets=… lookup=full|jwt_only|failed; a degraded lookup only ever narrows. resolve_envjoins the secret-carrying tool list (its values are registered for redaction and it is exempt from output redaction likeget_secret), and the hide list / redaction list now derive from one place.- Secret redaction cache evicts per agent. The 1000-entry cap is applied per scope so one agent filling its bucket cannot evict another's entries; the scope is the agent id, with vault id only as a logged fallback.
vault://secretsis gated likelist_secrets.- Added the in-process two-session harness (
hosted_sessions.test.ts) that boots the real server against a fake vault and diffstools/listbetween two agents.
0.43.1 (2026-08-03)
Fixed
list_automationsformatting: Output now uses API fieldsis_active,trigger_type, andcron_expr(was incorrectly reading non-existentstatus/schedule/description).
Changed
- Version bump aligned with platform
0.43.1clients (OpenAPI / SDK / CLI). Automations create remains human/SDK/CLI (workflow_spec); MCP exposes list + trigger only.
0.40.3 (2026-07-12)
Fixed
- Agent id resolution in static-token mode: When authenticating with a legacy static agent JWT (
ONECLAW_AGENT_TOKEN), the client now decodes the agent id from the token'ssub: "agent:<uuid>"claim. Previouslyclient.agentIdwas left unset in this mode, so every agent-scoped tool (transactions, signing,execute_http, bindings, bankr leasing) failed with "Agent ID not resolved". Key-exchange mode (ONECLAW_AGENT_API_KEY) is unaffected.
0.40.2 (2026-07-12)
Added
- Execution Intents tools:
execute_intent(generic/non-HTTP intents, e.g. GraphQL),create_binding(human-only),test_binding(connectivity check), andlist_executions(recent execution events). These join the existingexecute_httpandlist_bindingstools. - Client methods
createBinding,testBinding, andlistExecutionson the lightweight MCP client.
0.12.0 (2026-03-11)
Security
- Token validation (httpStream): The
authenticatecallback now validates the Bearer token against the vault API (GET /v1/vaults/{vaultId}). Invalid or expired tokens are rejected at session establishment instead of being passed through. - Vault ID cross-check: When using a JWT with a non-empty
vault_idsclaim, the providedX-Vault-IDheader is validated against the API. If the vault is not in the token's allowed list, the session is rejected with a clear error. - Security inspection for all tools:
rotate_and_storeandget_env_bundlenow run through the same input/output security inspection pipeline as the other tools (injections, PII, etc.), instead of bypassing it.
0.11.0
- Initial public release with list/get/put/delete secrets, vaults, policies, sharing, and transaction simulation/submit.