← 返回
AI智能 Key 中文

1claw

HSM-backed secret management for AI agents — store, retrieve, rotate, and share secrets via the 1Claw vault without exposing them in context.
基于HSM的AI智能体密钥管理:通过1Claw保险库存储、检索、轮换和共享密钥,确保不在上下文中暴露。
kmjones1979
AI智能 clawhub v1.1.1 4 版本 99801.1 Key: 需要
★ 0
Stars
📥 1,505
下载
💾 33
安装
4
版本
#latest

概述

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":"human@example.com"}'

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

# CLI (no auth needed)
npx @1claw/cli agent enroll my-agent --email human@example.com

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": "<agent-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 <agent-jwt>
  X-Vault-ID: <vault-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":"<key>"}')
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": "" } (or { "agent_id": "", "api_key": "" }) → returns { "access_token": "", "expires_in": 3600, "agent_id": "", "vault_ids": ["..."] }. Agent ID is optional — the server resolves it from the key prefix.
  4. Agent uses Authorization: Bearer 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.

ParameterTypeRequiredDescription
---------------------------------------------------------------
prefixstringnoPath 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.

ParameterTypeRequiredDescription
-----------------------------------------------------------
pathstringyesSecret path (e.g. api-keys/stripe)

put_secret

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

ParameterTypeRequiredDefaultDescription
---------------------------------------------------------------------------------------------------------------------------------------------
pathstringyesSecret path
valuestringyesThe secret value
typestringnoapi_keyOne of: api_key, password, private_key, certificate, file, note, ssh_key, env_bundle
metadataobjectnoArbitrary JSON metadata
expires_atstringnoISO 8601 expiry datetime
max_access_countnumbernoMax reads before auto-expiry (0 = unlimited)

delete_secret

Soft-delete a secret. Reversible by an admin.

ParameterTypeRequiredDescription
--------------------------------------------
pathstringyesSecret path to delete

describe_secret

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

ParameterTypeRequiredDescription
----------------------------------
pathstringyesSecret path

rotate_and_store

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

ParameterTypeRequiredDescription
---------------------------------------
pathstringyesSecret path
valuestringyesNew secret value

get_env_bundle

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

ParameterTypeRequiredDescription
-----------------------------------------------------
pathstringyesPath to an env_bundle secret

create_vault

Create a new vault for organizing secrets.

ParameterTypeRequiredDescription
---------------------------------------------------
namestringyesVault name (1–255 chars)
descriptionstringnoShort description

list_vaults

List all vaults accessible to you. No parameters.

grant_access

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

ParameterTypeRequiredDefaultDescription
------------------------------------------------------------------------------------------------------
vault_idstring (UUID)yesVault ID
principal_typeuser \agentyesWho to grant access to
principal_idstring (UUID)yesThe user or agent UUID
permissionsstring[]no["read"]["read"], ["write"], or ["read","write"]
secret_path_patternstringno**Glob pattern for secret paths

share_secret

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

ParameterTypeRequiredDescription
------------------------------------------------------------------------------------------------------------------------------------------------------------
secret_idstring (UUID)yesThe secret's UUID
recipient_typeuser \agent \anyone_with_link \creatoryescreator shares with the human who registered this agent — no ID needed
recipient_idstring (UUID)conditionalRequired for user and agent types
expires_atstringyesISO 8601 expiry
max_access_countnumberno (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.

ParameterTypeRequiredDefaultDescription
--------------------------------------------------------------------------------------------------
tostringyesDestination address (0x-prefixed)
valuestringyesValue in ETH (e.g. "0.01")
chainstringyesChain name or chain ID (see Supported Chains)
datastringnoHex-encoded calldata
signing_key_pathstringnokeys/{chain}-signerVault path to signing key
gas_limitnumberno21000Gas limit

submit_transaction

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

ParameterTypeRequiredDefaultDescription
-------------------------------------------------------------------------------------------------------
tostringyesDestination address
valuestringyesValue in ETH
chainstringyesChain name or chain ID
datastringnoHex-encoded calldata
signing_key_pathstringnokeys/{chain}-signerVault path to signing key
noncenumbernoauto-resolvedTransaction nonce
gas_pricestringnoGas price in wei (legacy mode)
gas_limitnumberno21000Gas limit
max_fee_per_gasstringnoEIP-1559 max fee in wei (triggers Type 2)
max_priority_fee_per_gasstringnoEIP-1559 priority fee in wei
simulate_firstbooleannotrueRun Tenderly simulation before signing

REST API Quick Reference

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

Auth (public — no token required)

MethodPathDescription
----------------------------------------------------------------------------------
POST/v1/auth/tokenLogin (email + password) → { access_token }
POST/v1/auth/agent-tokenAgent login (agent_id + api_key) → { access_token }
POST/v1/auth/googleGoogle OAuth
POST/v1/auth/signupCreate account → sends verification email
POST/v1/auth/verify-emailVerify email token → creates user
POST/v1/auth/mfa/verifyVerify MFA code during login

Auth (authenticated)

MethodPathDescription
--------------------------------------------------------------------------------------------------
GET/v1/auth/meGet current user profile
PATCH/v1/auth/meUpdate profile (display_name, marketing_emails)
DELETE/v1/auth/meDelete account (body: { "confirmation": "DELETE MY ACCOUNT" })
DELETE/v1/auth/tokenRevoke current token
POST/v1/auth/change-passwordChange password

Vaults

MethodPathDescription
-------------------------------------------------------------------------------------------------------------------
POST/v1/vaultsCreate vault ({ name, description? }) → 201
GET/v1/vaultsList vaults → { vaults: [...] }
GET/v1/vaults/{id}Get vault details
DELETE/v1/vaults/{id}Delete vault → 204
POST/v1/vaults/{id}/cmekEnable CMEK ({ fingerprint })
DELETE/v1/vaults/{id}/cmekDisable CMEK
POST/v1/vaults/{id}/cmek-rotateStart 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

MethodPathDescription
--------------------------------------------------------------------------------------------------------------------------------------
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

MethodPathDescription
------------------------------------------------------------------------------------------------------------------------
POST/v1/agentsCreate agent → { agent: {...}, api_key: "ocv_..." }
GET/v1/agentsList agents → { agents: [...] }
GET/v1/agents/{id}Get agent
GET/v1/agents/meGet 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-keyRotate agent API key → { api_key: "ocv_..." }
POST/v1/agents/{id}/rotate-identity-keysRotate agent SSH + ECDH keypairs (user-only; keys in __agent-keys vault)

Policies (Access Control)

MethodPathDescription
------------------------------------------------------------------------------------------------------------------------------------------------------
POST/v1/vaults/{id}/policiesCreate policy ({ principal_type, principal_id, secret_path_pattern, permissions, conditions?, expires_at? })
GET/v1/vaults/{id}/policiesList 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

MethodPathDescription
--------------------------------------------------------------------------------
POST/v1/secrets/{id}/shareCreate share link
GET/v1/shares/outboundList shares you created
GET/v1/shares/inboundList shares sent to you
POST/v1/shares/{id}/acceptAccept an inbound share
POST/v1/shares/{id}/declineDecline 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)

MethodPathDescription
-----------------------------------------------------------------------------------------------------------------------------------------------------
POST/v1/agents/{id}/transactionsSubmit transaction for signing. Optional Idempotency-Key header for replay protection (24h TTL)
GET/v1/agents/{id}/transactionsList 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/simulateSimulate single transaction
POST/v1/agents/{id}/transactions/simulate-bundleSimulate transaction bundle

Audit

MethodPathDescription
-----------------------------------------------------------------------------
GET/v1/audit/events?limit=N&action=...&from=...&to=...Query audit events

Billing

MethodPathDescription
-----------------------------------------------------------------------------------
GET/v1/billing/subscriptionSubscription status, usage, credit balance
GET/v1/billing/credits/balanceCredit balance + expiring credits
GET/v1/billing/credits/transactionsCredit transaction ledger
PATCH/v1/billing/overage-methodSet overage method (credits or x402)
GET/v1/billing/usageUsage summary (current month)
GET/v1/billing/historyUsage event history

Chains

MethodPathDescription
----------------------------------------------------
GET/v1/chainsList supported chains
GET/v1/chains/{name_or_id}Get chain details

Other

MethodPathDescription
--------------------------------------------------------------------------------------------------
GET/v1/healthHealth check → { status, service, version }
GET/v1/health/hsmHSM 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>. Access via client..(...).

ResourceMethodDescription
-----------------------------------------------------------------------------------------------------------------------------------------------------------
vaultscreate({ name, description? })Create vault
vaultsget(vaultId)Get vault
vaultslist()List vaults
vaultsdelete(vaultId)Delete vault
secretsset(vaultId, key, value, { type?, metadata?, expires_at?, max_access_count? })Store/update secret
secretsget(vaultId, key)Read secret (decrypted)
secretslist(vaultId, prefix?)List secret metadata
secretsdelete(vaultId, key)Delete secret
secretsrotate(vaultId, key, newValue)Rotate secret to new version
agentscreate({ name, description?, scopes?, expires_at?, intents_api_enabled?, token_ttl_seconds?, vault_ids? })Create agent → returns agent + api_key
agentsget(agentId)Get agent
agentslist()List agents
agentsupdate(agentId, { is_active?, scopes?, intents_api_enabled?, tx_*? })Update agent
agentsdelete(agentId)Delete agent
agentsrotateKey(agentId)Rotate agent API key
agentssubmitTransaction(agentId, { to, value, chain, ... })Submit EVM transaction
agentssimulateTransaction(agentId, { to, value, chain, ... })Simulate transaction
agentssimulateBundle(agentId, bundle)Simulate transaction bundle
agentsgetTransaction(agentId, txId)Get transaction
agentslistTransactions(agentId)List agent transactions
accessgrantAgent(vaultId, agentId, permissions, { path?, conditions?, expires_at? })Grant agent access
accessgrantHuman(vaultId, userId, permissions, { path?, conditions?, expires_at? })Grant user access
accesslistGrants(vaultId)List policies
accessupdate(vaultId, policyId, { permissions?, conditions?, expires_at? })Update policy
accessrevoke(vaultId, policyId)Revoke policy
sharingcreate(secretId, { recipient_type, recipient_id?, expires_at, max_access_count? })Create share
sharingaccess(shareId)Access shared secret
sharinglistOutbound()Shares you created
sharinglistInbound()Shares sent to you
sharingaccept(shareId)Accept inbound share
sharingdecline(shareId)Decline inbound share
sharingrevoke(shareId)Revoke outbound share
auditquery({ action?, actor_id?, from?, to?, limit?, offset? })Query audit events
billingusage()Current month usage
billinghistory(limit?)Usage event history
authlogin({ email, password })Human login
authagentToken({ agent_id, api_key })Agent JWT exchange
authlogout()Revoke token
apiKeyscreate({ name, scopes?, expires_at? })Create personal API key
apiKeyslist()List API keys
apiKeysrevoke(keyId)Revoke key
chainslist()List supported chains
chainsget(identifier)Get chain by name or ID
orglistMembers()List org members
orgupdateMemberRole(userId, role)Update member role
orgremoveMember(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):

NameChain IDTestnet
---------------------------
ethereum1no
base8453no
optimism10no
arbitrum-one42161no
polygon137no
sepolia11155111yes
base-sepolia84532yes

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: 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:

GuardrailFieldEffect
---------------------------------------------------------------------------------------------
Allowed destinationstx_to_allowlistOnly listed addresses permitted. Empty = unrestricted
Max value per txtx_max_value_ethSingle-tx cap in ETH. NULL = unlimited
Daily spend limittx_daily_limit_ethRolling 24h cumulative cap. NULL = unlimited
Allowed chainstx_allowed_chainsChain 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

FieldTypeDescription
--------------------------------------------------------------------------------------------------------------------------
pii_policy"block" \"redact" \"warn" \"allow"How PII in LLM traffic is handled
injection_thresholdnumber (0.0–1.0)Prompt injection detection sensitivity
context_injection_thresholdnumber (0.0–1.0)Context injection detection sensitivity
allowed_providersstring[]LLM providers the agent may use (empty = all)
allowed_modelsstring[]Models the agent may use (empty = all)
denied_modelsstring[]Models explicitly blocked
max_tokens_per_requestnumberToken cap per LLM request
max_requests_per_minutenumberPer-minute rate limit
max_requests_per_daynumberPer-day rate limit
daily_budget_usdnumberDaily LLM spend cap in USD
enable_secret_redactionbooleanRedact vault secrets from LLM context
enable_response_filteringbooleanFilter sensitive data from LLM responses

Threat detection settings

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

FieldTypeDescription
-------------------------------------------------------------------------------------------------------
unicode_normalizationobjectHomoglyph/zero-width character normalization (see below)
command_injection_detectionobjectDetect shell commands, path traversal, reverse shells
social_engineering_detectionobjectDetect urgency, authority claims, secrecy requests, bypass attempts
encoding_detectionobjectDetect base64, hex, Unicode escapes that may hide payloads
network_detectionobjectDetect blocked domains, IP URLs, data exfiltration patterns
filesystem_detectionobjectDetect sensitive paths (/etc/passwd, .ssh/, .env, etc.)
sanitization_modestring"block" (reject threats), "sanitize" (strip), "warn" (log)
threat_loggingbooleanLog detected threats for audit (default: true)

unicode_normalization object:

FieldTypeDefaultDescription
--------------------------------------------------------------------------------
enabledbooleantrueEnable Unicode normalization
strip_zero_widthbooleantrueRemove zero-width characters (U+200B, U+200C)
normalize_homoglyphsbooleantrueConvert look-alike characters (Cyrillic а → a)
normalization_formstring"NFKC"Unicode form: "NFC", "NFKC", "NFD", "NFKD"

command_injection_detection object:

FieldTypeDefaultDescription
------------------------------------------------------------------------
actionstring"block""block", "sanitize", or "warn"
strictnessstring"default""strict" (more patterns), "default", "relaxed"

social_engineering_detection object:

FieldTypeDefaultDescription
-----------------------------------------------------------------
actionstring"warn""block" or "warn"
sensitivitystring"medium""low" (more triggers), "medium", "high"

encoding_detection object:

FieldTypeDefaultDescription
-----------------------------------------------------------------
actionstring"warn""block", "decode", or "warn"
detect_base64booleantrueDetect base64 encoded content
detect_hexbooleantrueDetect \xNN hex escapes
detect_unicodebooleantrueDetect \uNNNN Unicode escapes

network_detection object:

FieldTypeDefaultDescription
-----------------------------------------------------------------------------------
actionstring"warn""block" or "warn"
blocked_domainsstring[]pastebin, ngrok, etc.Domains to block (subdomains auto)
allowed_domainsstring[][]Allowlist (empty = blocklist mode)

filesystem_detection object:

FieldTypeDefaultDescription
---------------------------------------------------------------------------
actionstring"log""block", "sanitize", or "log"
blocked_pathsstring[]/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 <agent-id> --shroud true
1claw agent update <agent-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

CodeMeaningAction
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
400Bad requestCheck request body format
401Not authenticatedToken expired — re-authenticate
402Quota exhausted / payment requiredBody 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
403No permissionAsk user to grant access via a policy. Or: guardrail violation (check error detail)
403Resource limit reached (type: "resource_limit_exceeded")Tier limit on vaults/secrets/agents hit — ask user to upgrade at 1claw.xyz/settings/billing
404Not foundCheck path with list_secrets
405Method not allowedWrong HTTP verb for this endpoint
409ConflictResource already exists (e.g. duplicate vault name)
410GoneSecret expired or max access count reached — ask user to store a new version
422Validation error or simulation revertedCheck input. For simulate_first: transaction would revert
413Payload too largeRequest body over 5MB — reduce payload size
429Rate limitedWait 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

TierRequests/moVaultsSecretsAgentsPrice
---------------------------------------------------------------------------------
Free1,0003502$0
Pro25,0002550010$29/mo
Business100,0001005,00050$149/mo (+ CMEK)
EnterpriseCustomUnlimitedUnlimitedUnlimitedContact (+ 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

版本历史

共 4 个版本

  • v1.1.1 当前
    2026-03-29 01:14 安全 安全
  • v1.1.0
    2026-03-11 11:20
  • v1.0.9
    2026-03-11 09:42
  • v1.0.8
    2026-03-07 01:46

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

ai-intelligence

Nano Banana Pro

steipete
使用 Nano Banana Pro (Gemini 3 Pro Image) 生成或编辑图像。支持文生图、图生图及 1K/2K/4K 分辨率,适用于图像创建、修改及编辑请求,使用 --input-image 指定输入图像。
★ 417 📥 115,152
ai-intelligence

Self-Improving + Proactive Agent

ivangdavila
自我反思+自我批评+自我学习+自组织记忆。智能体评估自身工作、发现错误并持续改进。
★ 1,355 📥 318,021
ai-intelligence

Proactive Agent

halthelobster
将AI智能体从任务执行者升级为主动预判需求、持续优化的智能伙伴。集成WAL协议、工作缓冲区、自主定时任务及实战验证模式。Hal Stack核心组件 🦞
★ 834 📥 212,990