← Back to Skills Marketplace
kmjones1979

1claw

by Kevin J · GitHub ↗ · v1.1.1 · MIT-0
cross-platform ✓ Security Clean
913
Downloads
0
Stars
1
Active Installs
11
Versions
Install in OpenClaw
/install 1claw
Description
HSM-backed secret management for AI agents — store, retrieve, rotate, and share secrets via the 1Claw vault without exposing them in context.
README (SKILL.md)

1Claw — HSM-Backed Secret Management for AI Agents

1Claw is a cloud HSM-backed secrets manager. Agents access API keys, passwords, and credentials at runtime without them ever entering the conversation context. Secrets are encrypted with keys that never leave the HSM.

API base URL: https://api.1claw.xyz Shroud (TEE proxy): https://shroud.1claw.xyz MCP endpoint: https://mcp.1claw.xyz/mcp Dashboard: https://1claw.xyz Docs: https://docs.1claw.xyz

When to use this skill

  • You need an API key, password, or credential to complete a task
  • You want to store a newly generated credential securely
  • You need to share a secret with a user or another agent
  • You need to rotate a credential after regenerating it
  • You want to check what secrets are available before using one
  • You need to sign or simulate an EVM transaction without exposing private keys
  • You want TEE-grade key isolation for transaction signing (use Shroud at shroud.1claw.xyz)

Setup

Option 0: Self-enrollment (new agents)

If you don't have credentials yet, self-enroll — this sends them to your human:

# curl
curl -s -X POST https://api.1claw.xyz/v1/agents/enroll \
  -H "Content-Type: application/json" \
  -d '{"name":"my-agent","human_email":"[email protected]"}'

# TypeScript SDK (static method, no auth needed)
import { AgentsResource } from "@1claw/sdk";
await AgentsResource.enroll("https://api.1claw.xyz", {
  name: "my-agent",
  human_email: "[email protected]",
});

# CLI (no auth needed)
npx @1claw/cli agent enroll my-agent --email [email protected]

The human receives the Agent ID + API key by email. They then configure policies for your access.

Option 1: MCP server (recommended for AI agents)

Add to your MCP client configuration. Only the API key is required — agent ID and vault are auto-discovered.

{
    "mcpServers": {
        "1claw": {
            "command": "npx",
            "args": ["-y", "@1claw/mcp"],
            "env": {
                "ONECLAW_AGENT_API_KEY": "\x3Cagent-api-key>"
            }
        }
    }
}

Optional overrides: ONECLAW_AGENT_ID (explicit agent), ONECLAW_VAULT_ID (explicit vault).

Hosted HTTP streaming mode:

URL: https://mcp.1claw.xyz/mcp
Headers:
  Authorization: Bearer \x3Cagent-jwt>
  X-Vault-ID: \x3Cvault-uuid>

Option 2: TypeScript SDK

npm install @1claw/sdk
import { createClient } from "@1claw/sdk";

const client = createClient({
    baseUrl: "https://api.1claw.xyz",
    apiKey: process.env.ONECLAW_AGENT_API_KEY,
});

Option 3: Direct REST API

Authenticate, then pass the Bearer token on every request.

# Exchange agent API key for a JWT (key-only — agent_id is auto-resolved)
RESP=$(curl -s -X POST https://api.1claw.xyz/v1/auth/agent-token \
  -H "Content-Type: application/json" \
  -d '{"api_key":"\x3Ckey>"}')
TOKEN=$(echo "$RESP" | jq -r .access_token)
AGENT_ID=$(echo "$RESP" | jq -r .agent_id)

# Use the JWT
curl -H "Authorization: Bearer $TOKEN" https://api.1claw.xyz/v1/vaults

Alternative: 1ck_ API keys (personal or agent) can be used directly as Bearer tokens — no JWT exchange needed.


Authentication

Agent auth flow

  1. Human registers an agent in the dashboard or via POST /v1/agents with an auth_method (api_key default, mtls, or oidc_client_credentials). For api_key agents → receives agent_id + api_key (prefix ocv_). For mTLS/OIDC agents → receives agent_id only (no API key).
  2. All agents auto-receive an Ed25519 SSH keypair (public key on agent record, private key in __agent-keys vault).
  3. API key agents exchange credentials: POST /v1/auth/agent-token with { "api_key": "\x3Ckey>" } (or { "agent_id": "\x3Cuuid>", "api_key": "\x3Ckey>" }) → returns { "access_token": "\x3Cjwt>", "expires_in": 3600, "agent_id": "\x3Cuuid>", "vault_ids": ["..."] }. Agent ID is optional — the server resolves it from the key prefix.
  4. Agent uses Authorization: Bearer \x3Cjwt> on all subsequent requests.
  5. JWT scopes derive from the agent's access policies (path patterns). If no policies exist, scopes are empty (zero access). The agent's vault_ids are also included in the JWT — requests to unlisted vaults are rejected.
  6. Token TTL defaults to ~1 hour but can be set per-agent via token_ttl_seconds. The MCP server auto-refreshes 60s before expiry.

API key auth

Tokens starting with 1ck_ (human personal API keys) or ocv_ (agent API keys) can be used as Bearer tokens directly on any authenticated endpoint.


MCP Tools Reference

list_secrets

List all secrets in the vault. Returns paths, types, and versions — never values.

Parameter Type Required Description
prefix string no Path prefix to filter (e.g. api-keys/)

get_secret

Fetch the decrypted value of a secret. Use immediately before the API call that needs it. Never store the value or include it in summaries.

Parameter Type Required Description
path string yes Secret path (e.g. api-keys/stripe)

put_secret

Store a new secret or update an existing one. Each call creates a new version.

Parameter Type Required Default Description
path string yes Secret path
value string yes The secret value
type string no api_key One of: api_key, password, private_key, certificate, file, note, ssh_key, env_bundle
metadata object no Arbitrary JSON metadata
expires_at string no ISO 8601 expiry datetime
max_access_count number no Max reads before auto-expiry (0 = unlimited)

delete_secret

Soft-delete a secret. Reversible by an admin.

Parameter Type Required Description
path string yes Secret path to delete

describe_secret

Get metadata (type, version, expiry) without fetching the value. Use to check existence.

Parameter Type Required Description
path string yes Secret path

rotate_and_store

Store a new value for an existing secret, creating a new version. Use after regenerating a key.

Parameter Type Required Description
path string yes Secret path
value string yes New secret value

get_env_bundle

Fetch an env_bundle secret and parse its KEY=VALUE lines as JSON.

Parameter Type Required Description
path string yes Path to an env_bundle secret

create_vault

Create a new vault for organizing secrets.

Parameter Type Required Description
name string yes Vault name (1–255 chars)
description string no Short description

list_vaults

List all vaults accessible to you. No parameters.

grant_access

Grant a user or agent access to a vault path pattern.

Parameter Type Required Default Description
vault_id string (UUID) yes Vault ID
principal_type user | agent yes Who to grant access to
principal_id string (UUID) yes The user or agent UUID
permissions string[] no ["read"] ["read"], ["write"], or ["read","write"]
secret_path_pattern string no ** Glob pattern for secret paths

share_secret

Share a secret via link, with your creator, or with a specific user/agent.

Parameter Type Required Description
secret_id string (UUID) yes The secret's UUID
recipient_type user | agent | anyone_with_link | creator yes creator shares with the human who registered this agent — no ID needed
recipient_id string (UUID) conditional Required for user and agent types
expires_at string yes ISO 8601 expiry
max_access_count number no (default 5) Max reads (0 = unlimited)

Targeted shares (creator/user/agent) require the recipient to explicitly accept before access.

simulate_transaction

Simulate an EVM transaction via Tenderly without signing. Returns balance changes, gas estimates, success/revert status.

Parameter Type Required Default Description
to string yes Destination address (0x-prefixed)
value string yes Value in ETH (e.g. "0.01")
chain string yes Chain name or chain ID (see Supported Chains)
data string no Hex-encoded calldata
signing_key_path string no keys/{chain}-signer Vault path to signing key
gas_limit number no 21000 Gas limit

submit_transaction

Submit an EVM transaction for signing and optional broadcast. Requires intents_api_enabled.

Parameter Type Required Default Description
to string yes Destination address
value string yes Value in ETH
chain string yes Chain name or chain ID
data string no Hex-encoded calldata
signing_key_path string no keys/{chain}-signer Vault path to signing key
nonce number no auto-resolved Transaction nonce
gas_price string no Gas price in wei (legacy mode)
gas_limit number no 21000 Gas limit
max_fee_per_gas string no EIP-1559 max fee in wei (triggers Type 2)
max_priority_fee_per_gas string no EIP-1559 priority fee in wei
simulate_first boolean no true Run Tenderly simulation before signing

REST API Quick Reference

Base URL: https://api.1claw.xyz. All authenticated endpoints require Authorization: Bearer \x3Ctoken>.

Auth (public — no token required)

Method Path Description
POST /v1/auth/token Login (email + password) → { access_token }
POST /v1/auth/agent-token Agent login (agent_id + api_key) → { access_token }
POST /v1/auth/google Google OAuth
POST /v1/auth/signup Create account → sends verification email
POST /v1/auth/verify-email Verify email token → creates user
POST /v1/auth/mfa/verify Verify MFA code during login

Auth (authenticated)

Method Path Description
GET /v1/auth/me Get current user profile
PATCH /v1/auth/me Update profile (display_name, marketing_emails)
DELETE /v1/auth/me Delete account (body: { "confirmation": "DELETE MY ACCOUNT" })
DELETE /v1/auth/token Revoke current token
POST /v1/auth/change-password Change password

Vaults

Method Path Description
POST /v1/vaults Create vault ({ name, description? }) → 201
GET /v1/vaults List vaults → { vaults: [...] }
GET /v1/vaults/{id} Get vault details
DELETE /v1/vaults/{id} Delete vault → 204
POST /v1/vaults/{id}/cmek Enable CMEK ({ fingerprint })
DELETE /v1/vaults/{id}/cmek Disable CMEK
POST /v1/vaults/{id}/cmek-rotate Start CMEK key rotation (headers: X-CMEK-Old-Key, X-CMEK-New-Key)
GET /v1/vaults/{id}/cmek-rotate/{job_id} Get rotation job status

Secrets

Method Path Description
PUT /v1/vaults/{id}/secrets/{path} Store/update secret ({ type, value, metadata?, expires_at?, max_access_count? }) → 201
GET /v1/vaults/{id}/secrets/{path} Read secret → { path, type, value, version, metadata }
DELETE /v1/vaults/{id}/secrets/{path} Delete secret → 204
GET /v1/vaults/{id}/secrets?prefix=... List secrets (metadata only, no values)

Agents

Method Path Description
POST /v1/agents Create agent → { agent: {...}, api_key: "ocv_..." }
GET /v1/agents List agents → { agents: [...] }
GET /v1/agents/{id} Get agent
GET /v1/agents/me Get current agent (self)
PATCH /v1/agents/{id} Update agent (is_active, scopes, intents_api_enabled, guardrails)
DELETE /v1/agents/{id} Delete agent → 204
POST /v1/agents/{id}/rotate-key Rotate agent API key → { api_key: "ocv_..." }
POST /v1/agents/{id}/rotate-identity-keys Rotate agent SSH + ECDH keypairs (user-only; keys in __agent-keys vault)

Policies (Access Control)

Method Path Description
POST /v1/vaults/{id}/policies Create policy ({ principal_type, principal_id, secret_path_pattern, permissions, conditions?, expires_at? })
GET /v1/vaults/{id}/policies List policies for vault
PUT /v1/vaults/{id}/policies/{pid} Update policy (permissions, conditions, expires_at only)
DELETE /v1/vaults/{id}/policies/{pid} Delete policy → 204

Sharing

Method Path Description
POST /v1/secrets/{id}/share Create share link
GET /v1/shares/outbound List shares you created
GET /v1/shares/inbound List shares sent to you
POST /v1/shares/{id}/accept Accept an inbound share
POST /v1/shares/{id}/decline Decline an inbound share
DELETE /v1/share/{id} Revoke a share
GET /v1/share/{id} Access a share (public, may require passphrase)

Intents API (requires intents_api_enabled)

Method Path Description
POST /v1/agents/{id}/transactions Submit transaction for signing. Optional Idempotency-Key header for replay protection (24h TTL)
GET /v1/agents/{id}/transactions List agent's transactions. signed_tx redacted unless ?include_signed_tx=true
GET /v1/agents/{id}/transactions/{txid} Get transaction details. signed_tx redacted unless ?include_signed_tx=true
POST /v1/agents/{id}/transactions/simulate Simulate single transaction
POST /v1/agents/{id}/transactions/simulate-bundle Simulate transaction bundle

Audit

Method Path Description
GET /v1/audit/events?limit=N&action=...&from=...&to=... Query audit events

Billing

Method Path Description
GET /v1/billing/subscription Subscription status, usage, credit balance
GET /v1/billing/credits/balance Credit balance + expiring credits
GET /v1/billing/credits/transactions Credit transaction ledger
PATCH /v1/billing/overage-method Set overage method (credits or x402)
GET /v1/billing/usage Usage summary (current month)
GET /v1/billing/history Usage event history

Chains

Method Path Description
GET /v1/chains List supported chains
GET /v1/chains/{name_or_id} Get chain details

Other

Method Path Description
GET /v1/health Health check → { status, service, version }
GET /v1/health/hsm HSM health → { status, hsm_provider, connected }
POST/GET/DELETE /v1/auth/api-keys[/{id}] Manage personal API keys
GET/POST/DELETE /v1/security/ip-rules[/{id}] Manage IP allowlist/blocklist
GET/PATCH/DELETE /v1/org/members[/{id}] Manage org members

SDK Method Reference

All methods return Promise\x3COneclawResponse\x3CT>>. Access via client.\x3Cresource>.\x3Cmethod>(...).

Resource Method Description
vaults create({ name, description? }) Create vault
vaults get(vaultId) Get vault
vaults list() List vaults
vaults delete(vaultId) Delete vault
secrets set(vaultId, key, value, { type?, metadata?, expires_at?, max_access_count? }) Store/update secret
secrets get(vaultId, key) Read secret (decrypted)
secrets list(vaultId, prefix?) List secret metadata
secrets delete(vaultId, key) Delete secret
secrets rotate(vaultId, key, newValue) Rotate secret to new version
agents create({ name, description?, scopes?, expires_at?, intents_api_enabled?, token_ttl_seconds?, vault_ids? }) Create agent → returns agent + api_key
agents get(agentId) Get agent
agents list() List agents
agents update(agentId, { is_active?, scopes?, intents_api_enabled?, tx_*? }) Update agent
agents delete(agentId) Delete agent
agents rotateKey(agentId) Rotate agent API key
agents submitTransaction(agentId, { to, value, chain, ... }) Submit EVM transaction
agents simulateTransaction(agentId, { to, value, chain, ... }) Simulate transaction
agents simulateBundle(agentId, bundle) Simulate transaction bundle
agents getTransaction(agentId, txId) Get transaction
agents listTransactions(agentId) List agent transactions
access grantAgent(vaultId, agentId, permissions, { path?, conditions?, expires_at? }) Grant agent access
access grantHuman(vaultId, userId, permissions, { path?, conditions?, expires_at? }) Grant user access
access listGrants(vaultId) List policies
access update(vaultId, policyId, { permissions?, conditions?, expires_at? }) Update policy
access revoke(vaultId, policyId) Revoke policy
sharing create(secretId, { recipient_type, recipient_id?, expires_at, max_access_count? }) Create share
sharing access(shareId) Access shared secret
sharing listOutbound() Shares you created
sharing listInbound() Shares sent to you
sharing accept(shareId) Accept inbound share
sharing decline(shareId) Decline inbound share
sharing revoke(shareId) Revoke outbound share
audit query({ action?, actor_id?, from?, to?, limit?, offset? }) Query audit events
billing usage() Current month usage
billing history(limit?) Usage event history
auth login({ email, password }) Human login
auth agentToken({ agent_id, api_key }) Agent JWT exchange
auth logout() Revoke token
apiKeys create({ name, scopes?, expires_at? }) Create personal API key
apiKeys list() List API keys
apiKeys revoke(keyId) Revoke key
chains list() List supported chains
chains get(identifier) Get chain by name or ID
org listMembers() List org members
org updateMemberRole(userId, role) Update member role
org removeMember(userId) Remove member

OpenAPI spec for custom SDKs

The API spec is published as an npm package for generating clients in any language:

npm install @1claw/openapi-spec

Ships openapi.yaml and openapi.json. Use with any OpenAPI 3.1 codegen tool:

# TypeScript
npx openapi-typescript node_modules/@1claw/openapi-spec/openapi.yaml -o ./types.ts

# Python
openapi-generator generate -i node_modules/@1claw/openapi-spec/openapi.yaml -g python -o ./oneclaw-py

# Go
oapi-codegen -package oneclaw node_modules/@1claw/openapi-spec/openapi.yaml > oneclaw.go

SDK also re-exports generated types: import type { ApiSchemas } from "@1claw/sdk".


Supported Chains

Default chain registry (query GET /v1/chains for live list):

Name Chain ID Testnet
ethereum 1 no
base 8453 no
optimism 10 no
arbitrum-one 42161 no
polygon 137 no
sepolia 11155111 yes
base-sepolia 84532 yes

Use chain names (e.g. "base", "sepolia") or numeric chain IDs in transaction requests.


Access Control Model

Agents do not get blanket access. A human must create a policy to grant an agent access to specific secret paths.

  • Path patterns: Glob syntax — api-keys/*, db/**, ** (all)
  • Permissions: read, write (delete requires write)
  • Conditions: IP allowlist, time windows (JSON)
  • Expiry: Optional ISO 8601 date

If no policy matches → 403 Forbidden. Vault creators always have full access (owner bypass).

Vault binding and token scoping

Agents can be restricted beyond policies:

  • vault_ids: Restrict the agent to specific vaults. If non-empty, any request to a vault not in the list returns 403.
  • token_ttl_seconds: Custom JWT expiry per agent (e.g., 300 for 5-minute tokens).
  • Scopes from policies: JWT scopes are derived from the agent's access policies. If an agent has no policies and no explicit scopes, it has zero access.

Set via dashboard, CLI (--token-ttl, --vault-ids), SDK, or API.

Customer-Managed Encryption Keys (CMEK)

Enterprise opt-in feature (Business tier and above). A human generates a 256-bit AES key in the dashboard — the key never leaves their device. Only its SHA-256 fingerprint is stored on the server.

  • Enable: POST /v1/vaults/{id}/cmek with { fingerprint }
  • Disable: DELETE /v1/vaults/{id}/cmek
  • Rotate: POST /v1/vaults/{id}/cmek-rotate (server-assisted, batched in 100s)
  • Secrets stored in a CMEK vault have cmek_encrypted: true in responses

Agents reading from a CMEK vault receive the encrypted blob. The CMEK key is required to decrypt client-side. This is designed for organizations with compliance requirements — the default HSM encryption is already strong.

Intents API

When intents_api_enabled = true (set by a human):

  1. Agent gains transaction signing via the Intents API (keys stay in HSM)
  2. Agent is blocked from reading private_key and ssh_key secrets directly (403)

Default signing key path: keys/{chain}-signer. Override with signing_key_path.

Replay protection (Idempotency-Key)

Include an Idempotency-Key: \x3Cunique-string> header on POST /v1/agents/{id}/transactions. The server SHA-256 hashes the key and caches the result for 24 hours. Duplicate submissions with the same key return the cached response instead of re-signing and re-broadcasting. If two concurrent requests share a key, one returns 409 (retry after a moment).

Server-side nonce serialization

When nonce is omitted from a transaction request, the server resolves it automatically via eth_getTransactionCount (pending) and serializes concurrent callers with SELECT FOR UPDATE. This prevents two in-flight submissions from the same agent+chain+address from receiving the same nonce. You can still pass an explicit nonce to override.

signed_tx field gating

GET endpoints (/v1/agents/{id}/transactions and /v1/agents/{id}/transactions/{txid}) redact the signed_tx field by default to reduce exfiltration risk. To include it, pass ?include_signed_tx=true. The initial POST response always includes signed_tx for the originating caller.

Transaction guardrails

Human-configured, server-enforced limits on what the Intents API allows:

Guardrail Field Effect
Allowed destinations tx_to_allowlist Only listed addresses permitted. Empty = unrestricted
Max value per tx tx_max_value_eth Single-tx cap in ETH. NULL = unlimited
Daily spend limit tx_daily_limit_eth Rolling 24h cumulative cap. NULL = unlimited
Allowed chains tx_allowed_chains Chain names. Empty = all chains

Agents cannot modify their own guardrails. Violations return 403 with a descriptive error.

Shroud per-agent LLM proxy

When shroud_enabled = true (set by a human), the agent's LLM traffic is routed through Shroud (shroud.1claw.xyz) for secret redaction, PII scrubbing, prompt injection defense, threat detection, and policy enforcement inside a TEE.

shroud_config is an optional JSON object that lets humans fine-tune the proxy behavior per agent:

Basic settings

Field Type Description
pii_policy "block" | "redact" | "warn" | "allow" How PII in LLM traffic is handled
injection_threshold number (0.0–1.0) Prompt injection detection sensitivity
context_injection_threshold number (0.0–1.0) Context injection detection sensitivity
allowed_providers string[] LLM providers the agent may use (empty = all)
allowed_models string[] Models the agent may use (empty = all)
denied_models string[] Models explicitly blocked
max_tokens_per_request number Token cap per LLM request
max_requests_per_minute number Per-minute rate limit
max_requests_per_day number Per-day rate limit
daily_budget_usd number Daily LLM spend cap in USD
enable_secret_redaction boolean Redact vault secrets from LLM context
enable_response_filtering boolean Filter sensitive data from LLM responses

Threat detection settings

Multi-layered detection for prompt injection, command injection, social engineering, and data exfiltration attempts:

Field Type Description
unicode_normalization object Homoglyph/zero-width character normalization (see below)
command_injection_detection object Detect shell commands, path traversal, reverse shells
social_engineering_detection object Detect urgency, authority claims, secrecy requests, bypass attempts
encoding_detection object Detect base64, hex, Unicode escapes that may hide payloads
network_detection object Detect blocked domains, IP URLs, data exfiltration patterns
filesystem_detection object Detect sensitive paths (/etc/passwd, .ssh/, .env, etc.)
sanitization_mode string "block" (reject threats), "sanitize" (strip), "warn" (log)
threat_logging boolean Log detected threats for audit (default: true)

unicode_normalization object:

Field Type Default Description
enabled boolean true Enable Unicode normalization
strip_zero_width boolean true Remove zero-width characters (U+200B, U+200C)
normalize_homoglyphs boolean true Convert look-alike characters (Cyrillic а → a)
normalization_form string "NFKC" Unicode form: "NFC", "NFKC", "NFD", "NFKD"

command_injection_detection object:

Field Type Default Description
action string "block" "block", "sanitize", or "warn"
strictness string "default" "strict" (more patterns), "default", "relaxed"

social_engineering_detection object:

Field Type Default Description
action string "warn" "block" or "warn"
sensitivity string "medium" "low" (more triggers), "medium", "high"

encoding_detection object:

Field Type Default Description
action string "warn" "block", "decode", or "warn"
detect_base64 boolean true Detect base64 encoded content
detect_hex boolean true Detect \xNN hex escapes
detect_unicode boolean true Detect \uNNNN Unicode escapes

network_detection object:

Field Type Default Description
action string "warn" "block" or "warn"
blocked_domains string[] pastebin, ngrok, etc. Domains to block (subdomains auto)
allowed_domains string[] [] Allowlist (empty = blocklist mode)

filesystem_detection object:

Field Type Default Description
action string "log" "block", "sanitize", or "log"
blocked_paths string[] /etc/passwd, .ssh/, .env, etc. Paths to detect

SDK:

await client.agents.create({
    name: "my-agent",
    shroud_enabled: true,
    shroud_config: {
        pii_policy: "redact",
        injection_threshold: 0.8,
        allowed_providers: ["openai", "anthropic"],
        max_requests_per_day: 1000,
        daily_budget_usd: 10.0,
        enable_secret_redaction: true,
        // Threat detection
        unicode_normalization: { enabled: true, normalize_homoglyphs: true },
        command_injection_detection: { action: "block", strictness: "default" },
        social_engineering_detection: { action: "warn", sensitivity: "medium" },
        encoding_detection: { action: "warn", detect_base64: true },
        network_detection: { action: "warn", blocked_domains: ["pastebin.com"] },
        filesystem_detection: { action: "log" },
        sanitization_mode: "block",
        threat_logging: true,
    },
});

await client.agents.update(agentId, {
    shroud_enabled: true,
    shroud_config: { pii_policy: "block", injection_threshold: 0.9 },
});

CLI:

1claw agent create my-agent --shroud
1claw agent update \x3Cagent-id> --shroud true
1claw agent update \x3Cagent-id> --shroud false

MCP: When shroud_enabled is true, the agent can send LLM requests through shroud.1claw.xyz. The Shroud proxy enforces the agent's shroud_config policy automatically — no client-side changes needed.


Share with Your Human

Agents can share secrets back with the human who created or enrolled them. Use recipient_type: "creator" — no email or user ID needed.

Via MCP:

share_secret(secret_id: "...", recipient_type: "creator", expires_at: "2026-12-31T00:00:00Z")

Via SDK:

await client.sharing.create(secretId, {
    recipient_type: "creator",
    expires_at: "2026-12-31T00:00:00Z",
    max_access_count: 5,
});

The human sees the share in their Inbound shares and accepts it. This is the primary pattern for agents that discover or generate credentials and need to report them to their human.


Fleet Patterns

When many agents operate in the same organization:

  • Vault organization: Use a shared vault with path-scoped policies (e.g. agents/{name}/**) or per-agent vaults for strict isolation.
  • Bulk provisioning: Use the authenticated POST /v1/agents endpoint with a human API key to create many agents, or stagger self-enrollment calls to respect the 10-min per-email cooldown.
  • Vault binding: Set vault_ids on each agent to restrict JWT scope beyond what policies allow.
  • Token TTL: Shorten to 5 min for ephemeral tasks (token_ttl_seconds: 300), keep default 1h for long-running agents.
  • Transaction guardrails: Apply tx_max_value_eth, tx_daily_limit_eth, and tx_allowed_chains to all Intents API agents.
  • Monitoring: Filter the audit log by agent ID to track per-agent activity. Use billing usage to monitor org-wide consumption.

Security Model

  • Credentials are configured by the human, not the agent. The MCP server reads them from env vars.
  • The agent never sees its own credentials. The MCP server authenticates on the agent's behalf.
  • Access is deny-by-default. Even with valid credentials, only policy-allowed secrets are accessible.
  • Secret values are fetched just-in-time and must never be stored, echoed, or included in summaries.
  • Agents cannot create email-based shares (prevents unsolicited email sharing).
  • Intents API is opt-in. When enabled, raw key reads are blocked.
  • Transaction guardrails are human-controlled and server-enforced.
  • Token revocation: DELETE /v1/auth/token (or SDK auth.logout()) revokes the current Bearer token; revoked tokens return 401.
  • Request body limit: 5MB max; larger requests return 413.

Error Handling

Code Meaning Action
400 Bad request Check request body format
401 Not authenticated Token expired — re-authenticate
402 Quota exhausted / payment required Body may include required_usd, message. Intents submit over quota: 0.25% of tx value; top up credits or send X-PAYMENT for required amount. Otherwise upgrade at 1claw.xyz/settings/billing
403 No permission Ask user to grant access via a policy. Or: guardrail violation (check error detail)
403 Resource limit reached (type: "resource_limit_exceeded") Tier limit on vaults/secrets/agents hit — ask user to upgrade at 1claw.xyz/settings/billing
404 Not found Check path with list_secrets
405 Method not allowed Wrong HTTP verb for this endpoint
409 Conflict Resource already exists (e.g. duplicate vault name)
410 Gone Secret expired or max access count reached — ask user to store a new version
422 Validation error or simulation reverted Check input. For simulate_first: transaction would revert
413 Payload too large Request body over 5MB — reduce payload size
429 Rate limited Wait and retry. Auth routes: 5 req burst, 1/sec. Share creation: 10/min/org

All error responses include a detail field with a human-readable message.


Best Practices

  1. Fetch secrets just-in-time. Call get_secret immediately before the API call that needs the credential.
  2. Never echo secret values. Say "I retrieved the API key and used it" — never include raw values in responses.
  3. Use describe_secret first to check existence or validity before fetching the full value.
  4. Use list_secrets to discover available credentials before guessing paths.
  5. Rotate after regeneration. If you regenerate an API key at a provider, immediately rotate_and_store the new value.
  6. Use grant_access for vault-level sharing — creates a fine-grained policy with path patterns.
  7. Use share_secret for one-off sharing — creates a time-limited, access-counted share link.
  8. Simulate before signing. Always use simulate_first: true (default) or call simulate_transaction before submit_transaction.
  9. Check list_vaults before creating. Avoid creating duplicate vaults.
  10. Handle 402 gracefully. Billing/quota errors should be surfaced to the user, not retried.

Billing Tiers

Tier Requests/mo Vaults Secrets Agents Price
Free 1,000 3 50 2 $0
Pro 25,000 25 500 10 $29/mo
Business 100,000 100 5,000 50 $149/mo (+ CMEK)
Enterprise Custom Unlimited Unlimited Unlimited Contact (+ CMEK + KMS delegation)

Overage methods: prepaid credits (top up via Stripe, deducted per request) or x402 micropayments (per-query on-chain payments on Base).

Audit, org, security, chain, billing, and auth endpoints are free and never consume quota.


Links

Usage Guidance
This skill appears to do what it says: it teaches an agent to use the 1Claw vault and requires the agent's 1Claw credentials plus a vault ID. Before installing: (1) verify the npm package (@1claw/mcp) and its source (GitHub/npm pages) to ensure it matches the vendor; (2) do not give the agent more vault permissions than necessary — avoid granting delete/policy/create/tx:sign unless needed; (3) confirm which env variable form you will use (agent API key + ID vs a static JWT) because the docs show multiple options and a minor metadata inconsistency; (4) if you need stronger assurance, create a dedicated, narrowly-scoped agent with the minimal vault path patterns and short-lived tokens rather than using an organization-wide key.
Capability Analysis
Type: OpenClaw Skill Name: 1claw Version: 1.1.1 The '1claw' skill bundle provides a legitimate HSM-backed secret management service for AI agents, enabling secure storage, retrieval, and rotation of credentials, as well as EVM transaction signing. The instructions in SKILL.md and EXAMPLES.md emphasize security best practices, explicitly directing the agent to fetch secrets just-in-time and never echo raw values in conversation contexts. While the skill handles highly sensitive data and provides transaction-signing capabilities, these are aligned with its stated purpose and are protected by human-configured policies and server-side guardrails.
Capability Assessment
Purpose & Capability
Name/description (HSM-backed secret management) matches the declared env vars (ONECLAW_AGENT_ID, ONECLAW_AGENT_API_KEY, ONECLAW_VAULT_ID), the documented API endpoints, and the npm MCP helper. Asking for an agent ID/API key and a vault ID is proportionate for a vault integration.
Instruction Scope
SKILL.md instructs the agent to call 1Claw APIs (enroll, exchange key for JWT, list/get/put/share secrets, simulate/sign txs) and to use the MCP helper or SDK. It does not instruct reading unrelated local files or exfiltrating system credentials. All runtime actions described are within the service's domain.
Install Mechanism
Install spec uses an npm package (@1claw/mcp) which is a plausible and traceable distribution mechanism for an MCP helper binary. This is a moderate-risk channel (npm packages run code), but it is expected for this functionality and not a raw URL download or obscure host.
Credentials
The env vars requested are relevant to a vault client. However, there is a minor inconsistency in metadata: some docs mark ONECLAW_AGENT_ID and ONECLAW_VAULT_ID as "optional" while other parts and the top-level requirements list them as required. Also the skill requests broad vault-related permissions (read/write/delete, policy:create, share:create, tx:sign), which are reasonable for full vault management but are high privilege — you should grant only the minimum policies required for the agent's tasks.
Persistence & Privilege
The skill is not always-enabled and does not request system-wide config paths or to modify other skills. Autonomous invocation is allowed (the platform default) but not combined with any unusual permanent privileges.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install 1claw
  3. After installation, invoke the skill by name or use /1claw
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.1.1
No changes detected in this version. - Version 1.0.0 released. - No file changes since the previous release.
v1.1.0
1.1.0 is a documentation formatting and minor update release. - Improved formatting for parameter reference tables in the documentation. - Clarified table columns and display in the "MCP Tools Reference" section. - No changes to functionality or requirements. - Version updated from 1.0.9 to 1.1.0.
v1.0.9
1claw 1.0.9 - Simplified credential requirements: only ONECLAW_AGENT_API_KEY is now required; ONECLAW_AGENT_ID and ONECLAW_VAULT_ID are optional. - Added a new "Self-enrollment" setup option for agents without credentials. - Updated MCP and REST API usage examples to support API key-only flows; agent ID discovered automatically. - Added reference to the Shroud TEE proxy endpoint for enhanced key isolation. - Improved documentation and clarified optional/required environment variables and authentication methods.
v1.0.8
- Added detailed versioning (1.0.8) to SKILL.md metadata. - Expanded agent authentication flow to include mTLS and OIDC methods, with description of automatic Ed25519 SSH keypair provisioning for agents. - Clarified JWT scope and vault access mechanisms; tokens now reflect explicit agent policy and vault_ids. - Noted per-agent JWT TTL configuration via token_ttl_seconds. - Improved documentation structure and completeness, especially in the authentication section.
v1.0.7
1claw v1.0.0 - Updated environment variable requirements to use `ONECLAW_AGENT_ID`, `ONECLAW_AGENT_API_KEY`, and `ONECLAW_VAULT_ID` for authentication (was: `ONECLAW_AGENT_TOKEN`, `ONECLAW_VAULT_ID`). - Clarified recommended setup—MCP server now prioritizes auto-refreshing JWTs via agent credentials. - Expanded and streamlined setup instructions: distinct sections for MCP server, TypeScript SDK, and direct REST API usage. - Improved API key and authentication documentation, including usage of `1ck_` and `ocv_` keys as Bearer tokens. - Added organized reference tables for all supported MCP tool actions and parameters. - General documentation restructuring for clarity and fast onboarding.
v1.0.6
- Added crypto transaction proxy endpoints: agents can now sign and simulate on-chain transactions using HSM-backed keys, with support for simulation and EIP-1559 fee modes. - Introduced detailed transaction guardrails, including allowed recipient addresses, max value per tx, daily spend limits, and allowed chains, configurable by humans via dashboard, CLI, or SDK. - Expanded required permissions to include tx:sign and tx:simulate for transaction features. - Updated documentation to detail transaction workflows, protections, and configuration options.
v1.0.5
- Updated access control documentation to clarify how policy scopes are reflected in agent JWTs and how humans create/edit/delete policies via the dashboard. - Added setup instructions for using API key authentication (`1ck_` keys) and the official CLI for human access. - Documented recommended MCP server authentication using `ONECLAW_AGENT_ID` + `ONECLAW_AGENT_API_KEY` for auto-refreshing agent credentials, alongside usage of static JWTs. - Improved setup guidance with clear distinctions between human and agent credential usage. - No functional changes to tools or interfaces. Documentation is now more comprehensive and precise.
v1.0.4
1claw 1.0.0 initial release - Provides HSM-backed secret management for AI agents, enabling secure storage, retrieval, rotation, and sharing of secrets. - Includes tools for listing, fetching, storing, deleting, rotating, describing secrets, managing vaults, granting access, and sharing secrets. - Access control is fine-grained and enforced through human-created policies. - Supports opt-in crypto transaction signing via a secure proxy, preventing direct key exfiltration. - Security best practices and usage guidance are included for safe operation.
v1.0.2
- Added support for a crypto transaction proxy: agents with `crypto_proxy_enabled` can submit on-chain transaction intents via a signing proxy, without direct access to signing keys. - When crypto proxy is enabled, agents are blocked from directly reading `private_key` and `ssh_key` secrets, enhancing key security. - Updated security section to explain the crypto proxy workflow and opt-in enforcement. - No changes to existing tools or API usage.
v1.0.1
- Introduced detailed access control and security model, emphasizing deny-by-default policies and environment-based agent authentication. - Clarified that agents cannot share secrets via email and can only share with users or other agents via share links or direct policies. - Added new metadata, repository URL, required environment variables, install instructions, and explicit permissions in the skill manifest. - Updated documentation for `grant_access` and `share_secret` tools, including new recipient types and workflow clarifications. - Included a new error code (429) for rate limits and updated best practices around sharing and secret management.
v1.0.0
- Initial release of the 1claw skill: HSM-backed secret management for AI agents. - Securely store, retrieve, rotate, and share secrets using the 1Claw vault without exposing secret values in context. - Provides tools for listing, fetching, updating, describing, rotating, and deleting secrets, as well as sharing secrets via email and managing vaults and access policies. - Includes detailed setup instructions for both CLI and TypeScript SDK. - Contains error handling guidance and best practices for safe secret management.
Metadata
Slug 1claw
Version 1.1.1
License MIT-0
All-time Installs 1
Active Installs 1
Total Versions 11
Frequently Asked Questions

What is 1claw?

HSM-backed secret management for AI agents — store, retrieve, rotate, and share secrets via the 1Claw vault without exposing them in context. It is an AI Agent Skill for Claude Code / OpenClaw, with 913 downloads so far.

How do I install 1claw?

Run "/install 1claw" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is 1claw free?

Yes, 1claw is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does 1claw support?

1claw is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created 1claw?

It is built and maintained by Kevin J (@kmjones1979); the current version is v1.1.1.

💬 Comments