Changed: TOTP MFA is available on all tiers (including Free); the Pro+ gate was removed.
New: Per-user setting require_passkey_for_vaults (migration 193) — when enabled, GET secret reads require X-Passkey-Token from a user-verified WebAuthn assertion.
New:GET/PATCH /v1/auth/settings — read/update require_passkey_for_vaults (user-only; enabling requires at least one registered passkey).
New:POST /v1/auth/passkeys/vault-assert/begin + .../complete — issue a reusable 5-minute vault unlock token after passkey verification.
New: Dashboard passkey suggestion prompt after login for users without a passkey (dismissible, 7-day snooze). Toggle in Settings → Security ("Vault unlock" card).
v0.49.0 — Policy engine composability & deep inspection (2026-08-17)
New:tx_conditions.match_mode — "all" (default, AND) or "any" (OR) for combining individual condition fields at signing time.
New:tx_conditions.deep_inspect — when true, conditions are also evaluated against inner calls extracted from wrapper transactions (multicall, Safe execTransaction, ERC-4337 handleOps).
New: IANA timezone and cron_expr on policy conditions.time_window — schedule-aware access control with timezone-aware hour/day checks and cron matching.
New:crypto/deep_decode.rs — unwraps multicall, Safe, and ERC-4337 batch transactions to populate inner_calls on TransactionContext for policy evaluation.
New:interface_kind on contract ABIs (migration 190) — evm_abi (default) or solana_idl for Anchor IDL decoding. Solana program instructions populate function_name, program_id_in, and related TransactionContext fields.
New: Single-use approval_id bypass token (migration 191) — consumed atomically on execute, submitter-bound (only the original submitter can execute). Works on the EVM submit path after human approval.
Fixed: Per-delegation guardrails (to_allowlist, allowed_chains, max_value_eth) are now enforced at signing time during treasury-mode Intents API requests — strictest of agent + delegation limits wins.
Changed:ip_filter middleware fail-closed on DB errors (500 instead of silent allow). Production requires ONECLAW_PROXY_SECRET for trusted proxy header validation.
Changed: Dropped the 0.25% of transaction-value Intents fee. Signature overage is a flat per-signature charge (proxy_transaction_submit rates: Free $0.225, Pro $0.15, Team $0.075, Business $0.04) via prepaid credits or x402. Included signatures remain free up to the monthly quota.
Changed: Business API calls/month raised to 1,000,000 (was 500,000).
New: Unified wallet quota covering active treasury wallets, agent signing keys, smart accounts, and agents with an EOA. Free 10, Pro 10,000, Team 250,000, Business 1,000,000, Enterprise unlimited.
New: Monthly signature quota (Free 100, Pro 20,000, Team 200,000, Business 1,000,000). Over quota is billed, not hard-blocked.
Changed: Signing POSTs (POST /v1/agents/{id}/sign, /transactions, /transactions/sign) no longer consume the API Calls meter.
Changed: Treasury wallet generate/import/rotate/send/swap are available on all tiers (no Pro+ gate). Counted against the wallet quota. Dashboard /treasury is no longer Pro-walled.
Fixed: Runtime hour caps now match the pricing page: Pro 100h/mo (was 720h), Team 500h/mo (was 7,200h), Business 2,000h/mo (was 18,000h). Enforcement in tier_limits() was out of sync with customer-facing limits.
Changed: Restored Pro wallet quota to 10,000 and signature quota to 20,000 (reverts interim 100/1,000 limits).
Changed: Pricing page and docs now distinguish Execution Intents (Pro+, HTTP/GraphQL binding calls, hard monthly execution cap) from Intents API (Business+, on-chain signing, Signatures/mo meter).
New: Existing access policies now support effect ("allow" or "deny"), priority (higher wins), and attribute_conditions fields for fine-grained policy evaluation.
New: Cedar policy engine (Team+ tier): POST/GET /v1/org/cedar-policies (CRUD), POST /v1/org/cedar-policies/test (dry-run evaluation). Declarative authorization via Cedar policy language.
New: OPA policy engine (Business+ tier): POST/GET /v1/org/opa-policies (CRUD), POST /v1/org/opa-policies/test (dry-run evaluation). Rego-based policy evaluation with custom data documents.
New: Human-controlled agent-to-agent delegation framework. Agents cannot delegate to other agents without an explicit agent_delegations record created by a human.
New: Three delegation modes: caller (delegate uses own credentials, default/most secure), target (delegate uses target agent's config), both (per-invocation choice).
New: Sub-agent creation wizard at /agents/sub-agent-wizard — 4-step flow with 6 role presets (Research, Image Gen, Treasury, Comms, Code, Custom). Configures capabilities, sets delegation rules with multi-parent support.
New: Delegations tab on agent detail page — outbound (this agent delegates TO others) and inbound (others delegate TO this agent) tables with create, edit, revoke dialogs.
New: Sub-Agents card on runtime detail page — "Create Sub-Agent" button, delegation status badges (green "Authorized" / gray "No Delegation"), "Authorize" quick-action.
New: Sub-agent tag indicators on agents list page, "Create Sub-Agent" button.
DB migrations 174-175: New columns on agent_channels (slash_commands_enabled, voice_transcription_enabled, unified_conversation_id, auto_respond_in_progress, is_home_platform) and channel_messages (is_voice_message, voice_file_id, voice_duration_secs, transcription_status)
New domain modules: slash_commands.rs, voice_transcription.rs, hermes_migration.rs
New: Refresh token support — POST /v1/oauth/token returns refresh_token when offline_access scope is requested. Exchange via grant_type=refresh_token. DB: oauth_refresh_tokens table (migration 173).
New: Token revocation — POST /v1/oauth/revoke revokes access or refresh tokens (RFC 7009).
New: Consent revocation — DELETE /v1/oauth/consent/{app_slug} revokes all consent and tokens for an app (user-only).
New: Scope-filtered UserInfo — GET /v1/oauth/userinfo now respects granted scopes (e.g. email scope required for email field).
New:<SignInWith1Claw /> React component in @1claw/wallet-react for one-click OAuth integration.
Fixed: Duplicate subscription detection — POST /v1/billing/llm-token-billing/subscribe detects and cleans up duplicate Stripe subscriptions. Dashboard shows warning banner when duplicates are detected.
New: Per-template tool configs — each runtime template (hermes, openclaw, openclaude) has a tools-config.js that enables/disables specific tools based on the template's use case.
Dashboard:RuntimeToolsCard component on runtime detail page showing enabled/disabled tools per runtime.
GET /v1/agents/org-directory — Authenticated org-scoped agent directory listing. Returns all agents in the caller's org with name, description, capabilities, and status. Used by the sub-agent list_my_sub_agents tool for agent discovery within an organization.
DALL-E bypass: Image generation requests routed through Shroud now bypass the Stripe AI Gateway. DALL-E has its own billing model and does not need metering through the gateway.
New: Universal OAuth integration for AI agents — connect agents to external services (Google, GitHub, X/Twitter, LinkedIn, Slack, Discord, Notion, Microsoft, Salesforce, HubSpot) via human-approved OAuth flows.
Provider registry seeded with 10 providers (migration 171). OAuth app credentials encrypted at rest (migration 172).
Endpoints: GET /v1/oauth/providers, POST /v1/agents/{id}/oauth/connect, GET .../oauth/connections, POST .../oauth/disconnect/{bindingId}, credential CRUD.
C-1 CRITICAL — Agent memory cross-org isolation (migration 166): Shared memory entries could collide across orgs due to missing org_id in the unique index. Fixed by adding org_id to the constraint.
M-2 — Automation runs status CHECK (migration 167): Added awaiting_approval to the automation_runs status CHECK constraint.
M-4 — Channel sender allowlist (migration 168): Added sender_allowlist and auto_respond_enabled columns to agent channels for restricting which sender IDs can trigger auto-respond.
M-5 — Telegram dedup (migration 169): Track last_telegram_update_id per channel to prevent duplicate message processing.
Delegation scope enforcement: delegation_scopes now enforced on 4 handler groups: secrets, policies, bindings, and discovery. Missing scope → 403.
Disconnected connection rejection: Operations on disconnected platform connections rejected with 403.
Bootstrap runtimes & automations: Template spec now supports runtimes and automations arrays. Bootstrap creates these resources and tracks IDs on the connection (runtime_ids, automation_ids — migration 170).
Dashboard: Platform audit page, key rotation UI, connected apps grant management with expandable panels.
Fixed: ESM module resolution corrected for bundler-free environments (Node.js --conditions, Deno, Bun). Named exports now work correctly with import { createClient } from '@1claw/sdk'.
Webhook automations — trigger_type: webhook returns one-time webhook_url + whk_ token on create. Public trigger: POST /v1/automations/{id}/webhook/{token}. Human-only rotation: POST /v1/automations/{id}/rotate-webhook-token.
Event-trigger wiring — Automations with trigger_type: event and event_filter.event_type fire on secret.created/updated/rotated/deleted and policy.created/updated/deleted.
Automations Assist — POST /v1/automations/assist/draft and /assist/session documented in OpenAPI; dashboard Assist flow + OpenClaude runtime template.
Runtime logs API — GET /v1/runtimes/{id}/logs?tail=N returns { entries: [...] } (replaces legacy lines/since query params). SDK runtimes.logs(), MCP runtime_logs use tail.
Automations create contract — POST /v1/automations requires workflow_spec (+ agent_id; cron_expr when trigger is cron). Dashboard maps legacy action_type UI fields onto workflow_spec. API accepts trigger_type: "schedule" as an alias for cron, and accepts workflow shapes as either a bare step array or { "steps": [...] }.
Clients synced — OpenAPI 2.30.0 / @1claw/openapi-spec@0.43.1, @1claw/sdk@0.43.1 (runtimes.createShellSession), Go SDK (v0.43.0), Python SDK (oneclaw@0.43.3), CLI @1claw/cli@0.43.1, MCP @1claw/mcp@0.43.1 (io.github.1clawAI/1claw-mcp). Updated off the old /v1/agents/{id}/automations + action_type shapes. CLI README examples use --workflow / --cron.
Runtime interactive shell — POST /v1/runtimes/{id}/shell/session (+ /shell/passkey/begin) documented in OpenAPI. Human-only step-up auth (password, TOTP, passkey, or reauth_token). Dashboard terminal uses binary PTY WebSocket; Vault auto-repairs Cloud Run invoker IAM (non-blocking on Connect to avoid gateway 504). Hermes/runtime images must include shroud-sidecar — rebuild templates after base updates; enabling shell while running triggers background reconcile / may still need stop/start.
Manual automations — DB allows trigger_type: "manual"; create no longer 500s for manual workflows.
Agent Memory — Three-tier memory system (scratch, durable, semantic) for AI agents. Scratch is ephemeral and auto-cleared per session; durable persists across sessions; semantic enables vector similarity search via pgvector. All tiers encrypted at rest with envelope encryption. Endpoints: POST/GET/DELETE /v1/agents/{id}/memory, POST /v1/agents/{id}/memory/search. SDK client.memory.*, CLI 1claw memory, MCP tools memory_put/memory_get/memory_list/memory_search/delete_memory. Dashboard: Memory card on agent detail with tier tabs and search UI.
Automations — Cron-scheduled, webhook-triggered, and event-driven automation workflows with multi-step pipelines and AI integration. Visual cron builder in the dashboard. Tier-gated: Free 2, Pro 10, Team 50, Business 200. Endpoints: POST/GET /v1/automations, GET/PATCH/DELETE /v1/automations/{id}, POST /v1/automations/{id}/trigger, GET /v1/automations/{id}/runs. SDK client.automations.*, CLI 1claw automation, MCP list_automations/trigger_automation. Dashboard pages at /automations, /automations/new, /automations/[id].
Cloud Runtimes — Deploy AI agents in managed containers with resource presets: small (0.5 vCPU/512MB), medium (1 vCPU/1GB), large (2 vCPU/4GB), large-cc (4 vCPU/8GB confidential compute). Public URL hosting, idle auto-stop, log streaming, health monitoring. Endpoints: POST/GET /v1/runtimes, GET/PATCH/DELETE /v1/runtimes/{id}, start/stop/logs sub-routes. SDK client.runtimes.*, CLI 1claw runtime, MCP list_runtimes/manage_runtime/runtime_status/runtime_logs. Dashboard pages at /runtimes, /runtimes/new, /runtimes/[id].
Agent Discovery — Public agent directory and platform marketplace. Agents can be made discoverable with capability cards showing A2A/MCP URLs, supported protocols, and pricing. Endpoints: POST/GET /v1/discovery/agents, GET /v1/discovery/agents/{id}, POST /v1/agents/{id}/discovery. SDK client.discovery.*, CLI 1claw directory, MCP search_directory. Dashboard: /directory public page, discovery card on agent detail.
Platform Delegation — Platform apps can perform CRUD on connected user resources via X-Platform-Connection header. Scoped by delegation_enabled and delegation_scopes on platform apps. Operations attributed to the platform app in audit logs. DB: migration 151.
OAuth2 Credential Bindings — Execution Intents bindings support OAuth2 credential type with authorization_code and client_credentials grant flows. Automatic token refresh before execution. DB: migration 150.
New agent columns:llm_default_provider, llm_default_model (migration 143) for agent LLM defaults.
New sidebar entries: Automations, Runtimes, and Directory pages added to dashboard sidebar navigation.
New:card_require_approval on agents (default true). When enabled, POST /v1/agents/{id}/cards/order returns 202 with status: awaiting_approval and approval_id — x402 payment runs only after a human approves.
New:GET /v1/approvals/quick-decide — public one-click approve/deny from email (SHA-256 hashed, single-use tokens in approval_quick_tokens; 7-day TTL). Dashboard proxy: GET /api/approvals/quick-decide.
New: Approval notifications — email with Approve/Deny CTAs; push notification dispatch to registered mobile devices.
New: Auto-execution on POST /v1/approvals/{id}/decide when action == card_order (approved → pay + Laso; rejected → card.rejected webhook).
New: Risk-tier step-up on approve (T2+ requires X-Auth-Confirm re-auth token; T3 passkey/TOTP).
New: TOTP as re-auth method — POST /v1/auth/reauth/begin + complete with method: "totp".
Agents can order prepaid & gift cards, paid with USDC via x402, without ever seeing the PAN
New:POST /v1/agents/{id}/cards/order — order a prepaid or gift card. Paid with an outbound x402 payment the Vault constructs and signs (EIP-3009 TransferWithAuthorization) using the agent's own Ethereum signing key on Base. Requires cards_enabled and an Idempotency-Key header. Available on all tiers (Free: $25/order, 5 cards/month; Pro: 50/month; Team: 200/month; Business+: unlimited). A 3% platform fee per order is debited from prepaid credits. Returns a masked card reference — never a PAN.
New: Card lifecycle endpoints — GET /v1/cards, GET /v1/cards/{id} (masked to last4), POST /v1/cards/{id}/reveal (human X-Auth-Confirm re-auth, or per-card agent reveal policy; audit-logged), PATCH /v1/cards/{id} (reveal policy / void_after, human-only), POST /v1/cards/{id}/void (1Claw-level lock, forward-looking only), POST /v1/cards/{id}/refresh (rate-limited → clean 429 + Retry-After), POST /v1/cards/import (human-only, full encrypted storage with one-time-read CVV), POST /v1/cards/gift-cards/search.
New: Ordering guardrails on agents — cards_enabled, card_max_order_usd, card_daily_limit_usd (enforced atomically over a rolling 24h window), card_payto_allowlist, card_reveal_enabled. These bound the purchase, not how a revealed card is later spent.
New: Outbound x402 client (crypto/x402_client.rs) validates every 402 challenge before signing — payTo allowlist, Base network, exact requested amount, and the pinned Base USDC contract. The stored Laso bearer token is constrained in code to a hardcoded card-endpoint path allowlist (never /withdraw or /send-payment).
New:card_monitor background worker (15s, advisory-lock leader election) — polls the issuer, fills last4/expiry/balance, stores gift-card redemption payloads as secrets, fires webhooks, auto-voids past void_after, and reconciles ordering-stuck rows as orphaned_payment.
Security: PCI-conscious reference mode (only the issuer card id + encrypted refresh token stored; PAN/CVV fetched just-in-time at reveal). Shroud's PII detector now Luhn-validates PANs and detects CVV/expiry patterns, blocking card data in LLM traffic; full-mode PANs are excluded from the admin secrets manifest.
New:tx_max_per_day (INTEGER) on agents — daily transaction count cap (UTC calendar day). Prevents high-frequency drain attacks. Per-chain override via per_chain_guardrails.{chain}.max_per_day.
New:tx_overhead_budget (JSONB) on agents — per-chain daily budget for non-value costs (rent, fees, energy) in native units. Prevents ATA rent drain (Solana), XRP reserve exhaustion, Tron energy drain, and fee storms. Format: {"solana": "0.5", "xrp": "100", "ethereum": "0.01"}.
New:solana_ata_allowlist (TEXT[]) on agents — restricts which Solana wallet addresses may have Associated Token Accounts created. Prevents ATA rent drain attacks by limiting recipients.
New: Response fields tx_count_today and tx_overhead_today_by_chain in GET /v1/agents/{id} for dashboards and Shroud.
New:per_chain_guardrails extended with max_per_day, overhead_budget, and max_ata_creates_per_day fields.
Shroud:AgentTxGuardrails mirrors new fields; enforcement parity with Vault API.
Dashboard: Transaction Guardrails card gains Max Transactions Per Day, Overhead Budget (JSON), and Solana ATA Allowlist fields. Summary badges for active limits.
Clients: SDK (tx_max_per_day, tx_overhead_budget, solana_ata_allowlist, tx_count_today, tx_overhead_today_by_chain), CLI (--tx-max-per-day, --tx-overhead-budget, --solana-ata-allowlist), Python SDK, Go SDK, Mobile, and OpenAPI spec updated.
New:intents_require_tee boolean on agents — when enabled, transaction sign/submit requests to api.1claw.xyz are rejected with 403. Agents must route through shroud.1claw.xyz where signing happens inside the hardware enclave.
New:execution_require_tee boolean on agents — when enabled, execute requests to api.1claw.xyz are rejected AND all direct secret reads by the agent are blocked. Forces use of Execution Intents bindings through the TEE.
New:X-1Claw-TEE-Origin HMAC verification module (vault/src/api/middleware/tee_origin.rs) — Shroud sets this header on proxied requests; Vault validates using shared ONECLAW_TEE_ORIGIN_SECRET.
Changed: "Enable Intents API" toggle moved from the Overview tab to the Signing tab on agent detail page.
Dashboard: Two new TEE enforcement toggles on the Signing tab with Pro+ tier badge, disabled states (dependent on base flags), and confirmation dialog warning about breaking changes.
Migration 133: Adds intents_require_tee BOOLEAN DEFAULT false and execution_require_tee BOOLEAN DEFAULT false to agents table.
JWT claims:intents_require_tee and execution_require_tee included in agent JWTs when true.
Clients: SDK, CLI (--intents-require-tee, --execution-require-tee), Python SDK, Go SDK, and OpenAPI spec updated.
v0.41.0 — Live-pointer credential references for Execution Intents (2026-07-12)
{ type: "vault_ref", vault_id: "...", path: "..." } — live pointer to an existing vault secret. The executor resolves the secret at execution time, so rotations in the source vault are reflected automatically without manual credential rotation.
New:BindingResponse includes credential_source_type ("inline" | "vault_ref"), credential_vault_id, and credential_path so the UI can display how credentials are sourced.
New: Dashboard binding form has a Manual / From Vault toggle — selecting "From Vault" lets users pick an existing vault secret; the binding references it directly (no duplication).
New: Validation ensures the referenced vault belongs to the same org and the secret path exists.
Migration 132: Adds credential_vault_id UUID (FK to vaults, ON DELETE SET NULL) and credential_path TEXT columns to agent_bindings.
New: Trait-based executor framework (domain/execution/) with a shared ExecutionContext that centralizes SSRF validation, host/path allowlisting, credential loading, and timeout resolution — no executor can accidentally skip a guardrail. Replaces the previous single-file HTTP dispatch.
New: Real GraphQL executor — POSTs { query, variables, operationName }, surfaces GraphQL errors[], and uses introspection for connectivity tests (previously GraphQL was an HTTP alias).
New: Per-binding allowed_paths is now enforced at execute time (trailing-* wildcard supported); disallowed paths are recorded as denied.
New: Agent-level execution_guardrails are enforced: allowed_hosts (strictest of binding + agent), allowed_binding_types (at execute, not just create), max_duration_ms (applied as the real client timeout), and max_requests_per_minute (per-agent rate limit).
Changed: Connectivity test now runs through the same ExecutionContext as execute, so SSRF and host-allowlist checks apply to tests too.
New:execution_surface on the execute response truthfully reports vault or tee (TEE only when a Shroud execution endpoint is configured); ONECLAW_EXECUTION_TEE_REQUIRE_SHROUD=true makes TEE requests 501 when no enclave endpoint is present, instead of silently running in Vault.
Fixed: Only successful executions count toward the monthly execution quota; the TEE cost premium is charged as a delta over the base rate to avoid double-billing.
New: Automatic dRPC RPC fallback for 25 EVM chains when DRPC_API_KEY is configured. When a chain has no explicit rpc_url in the database, the Vault and Shroud dynamically construct a dRPC endpoint URL. Supported chains: Ethereum, Base, Optimism, Arbitrum, Polygon, Avalanche, BSC, zkSync Era, Linea, Scroll, Mantle, Blast, Gnosis, Fantom, Celo, Aurora, Metis, Moonbeam, Cronos, Sepolia, Holesky, Base Sepolia, Optimism Sepolia, Arbitrum Sepolia, Polygon Amoy.
New:resolve_effective_rpc() shared helper in Vault consolidates RPC resolution: explicit DB URL → dRPC fallback → public testnet fallback.
New: Shroud ChainRegistry expanded to 29 EVM chains with effective_rpc_url() method mirroring Vault's resolution logic.
New: Numeric chain ID → dRPC reverse lookup via drpc_slug_for_chain_id() — enables dRPC support even when chains are referenced by numeric ID only.
Fixed (HIGH): Execution Intents cross-agent confused-deputy — all binding handlers (list_bindings, get_binding, execute, test_binding, list_execution_events) now enforce caller.id == agent_id ownership check. Previously, an agent with Execution Intents enabled could access another agent's bindings.
Fixed (HIGH): X-Forwarded-For IP spoofing — changed from leftmost to rightmost XFF entry parsing for untrusted requests. GCP's Global Frontend appends the true client IP as the last entry; leftmost parsing was trusting attacker-controlled values.
Fixed (MEDIUM): Platform-grant scope bypass — authorize_platform_grant enforced on delete_secret, get_secret_version, rotate_secret, and disable_version handlers. Previously, platform grants with allowed_paths restrictions were not checked on these operations.
Fixed (MEDIUM): Execution events plaintext response bodies — response bodies are now truncated to 4KB, sensitive headers stripped, and sensitive patterns (API keys, tokens) redacted before persisting to execution_events. Field redactions_applied tracks sanitization.
Fixed (LOW): SSRF trailing-dot bypass — validate_audience_url() and validate_redirect_uri() now strip trailing dots from hostnames before security checks (e.g., metadata.google.internal. no longer bypasses the blocklist).
Fixed (LOW): Execution event caller misattribution — insert_execution_event now uses caller.id instead of agent_id from the URL for correct audit attribution.
Improved:resolve_chain_id() expanded from 10 to 30 chain names/aliases — all dRPC-supported networks are now resolvable by name in transaction requests.
Improved: Shroud drpc_chain_slug() made case-insensitive for parity with Vault.
Improved: Shroud seed_defaults() expanded to cover all 29 EVM chains with correct chain IDs, native currencies, and EIP-1559 support flags.
New:DRPC_API_KEY environment variable on Vault (Cloud Run) and Shroud (GKE). Configured via Terraform (infra/variables.tf), GitHub Actions secrets, and K8s secrets.
New:scripts/test-drpc-connectivity.sh — verifies dRPC connectivity across 22 chains via eth_chainId calls.
New: dRPC connectivity test integrated into run-production-tests.sh (auto-skipped when DRPC_API_KEY is not set).
New: Execution Intents API — agents can make HTTP calls, database queries, and external service interactions through pre-configured bindings. Credentials are stored server-side in the __agent-keys vault and never exposed to agents.
New: Binding types: HTTP, GraphQL (Pro tier), plus Postgres, MySQL, Redis, gRPC, SMTP, Cloud SDK, S3, Custom (Team+ tier). TEE execution mode available on Business+ for enhanced security.
New: Full execution audit trail via execution_events table with per-event cost tracking.
New: CRUD endpoints under /v1/agents/{id}/bindings (human-only creation). Execute endpoint: POST /v1/agents/{id}/execute. Test endpoint: POST /v1/agents/{id}/bindings/{binding_id}/test.
New: Agent field execution_intents_enabled (boolean, default false). JWT claim execution_intents_enabled gates access; middleware require_execution_intents enforces it.
New:execution_guardrails JSONB on agents — per-agent execution guardrails (allowed hosts, max duration, rate limits).
New: Tier-based billing: execution_intent (2¢ Pro → 0.5¢ Business) and execution_intent_tee (10¢ Pro → 2.5¢ Business) per execution. Monthly limits: Pro 1K, Team 10K, Business 50K, Enterprise unlimited.
Token allowlist guardrail (tx_token_allowlist): Controls which token contracts/mints an agent can interact with. Applied to token_mint on non-EVM chains and ERC-20 contract addresses on EVM chains. Checked case-insensitively.
Known tokens only (tx_known_tokens_only): When enabled, restricts agents to verified tokens in the known tokens registry. Unknown token contracts/mints are rejected with 403.
XRP transaction type allowlist (xrpl_allowed_tx_types): Controls which XRPL transaction types are allowed when using xrpl_tx_json. Empty = all supported types. Unsupported types return 403.
Per-chain guardrails (per_chain_guardrails): Chain-specific overrides for max_value, daily_limit, to_allowlist, and token_allowlist. Strictest of global and per-chain values wins.
Per-chain daily spend tracking (tx_spent_today_by_chain): GET /v1/agents/{id} now returns per-chain daily spend in native units with correct decimals (e.g. { "ethereum": "0.5", "solana": "2.0" }). The canonical field is tx_spent_today / tx_spent_today_by_chain; the deprecated tx_spent_today_eth alias is still returned for backward compatibility.
Known tokens registry: Public endpoints GET /v1/tokens (filterable by ?chain=) and GET /v1/chains/{chain}/tokens for listing verified tokens. Admin endpoints POST /v1/admin/tokens and DELETE /v1/admin/tokens/{id} for registry management.
ERC-20 server-side builder: When token_mint is provided on EVM chains, the handler generates ERC-20 transfer(to, amount) calldata server-side — agents no longer need to construct calldata manually.
Extended token balance: GET /v1/agents/{id}/signing-keys/{chain}/balance now accepts optional ?tokens= query param (comma-separated contract addresses/mints) to include specific ERC-20/SPL/TRC-20 token balances alongside native balance.
Solana ATA auto-creation: SPL token transfers automatically create the recipient's Associated Token Account if it doesn't exist, adding a CreateAssociatedTokenAccount instruction before the transfer.
Cardano native asset transfers: Multi-asset output support with min-ADA enforcement. token_mint is policy_id.asset_name hex.
Memo support: Solana (Memo Program v2 instruction appended), XRP (Memos array in xrpl_tx_json), Tron (extra_data field).
UTXO locking: Concurrent Bitcoin and Cardano transactions are serialized via the utxo_locks table to prevent double-spending the same UTXO. Locks auto-expire after 5 minutes.
Daily spend unit mismatch: Per-chain daily spend now uses correct native-unit decimals instead of ETH-equivalent conversion, which could under-count spend on high-decimal chains.
XRP guardrail bypass: xrpl_tx_json transactions now enforce all agent guardrails (chains, allowlist, value caps, daily limits) — previously bypassed when using raw XRPL JSON.
/sign EVM persistence: Transactions submitted via the unified POST /v1/agents/{id}/sign endpoint with intent_type: "transaction" are now correctly persisted for audit and daily-limit tracking.
SDK: CreateAgentRequest, UpdateAgentRequest, and AgentResponse include all new guardrail fields. Token registry types added.
CLI: New flags --tx-token-allowlist, --tx-known-tokens-only, --xrpl-allowed-tx-types, --per-chain-guardrails on agent create and agent update.
Dashboard: Token allowlist editor, known-tokens-only toggle, per-chain guardrails visual editor, and XRPL transaction type multi-select on agent detail page. Token registry hook (use-token-registry.ts).
Vault 0.37.1 / Shroud 0.37.1 — Official Rust SDKs for Bitcoin & Solana signing (2026-07-04)
Improved: Bitcoin transaction signing now uses the official rust-bitcoin crate (v0.32) instead of hand-rolled secp256k1 + BIP-143 logic. All recipient address types are supported: P2PKH, P2SH, P2WPKH, P2WSH, and P2TR (Taproot). Key generation, address derivation, and UTXO-based transaction construction use rust-bitcoin types end-to-end, eliminating custom serialization code.
Improved: Solana transaction signing now uses the official solana-sdk crate (v4) instead of manual Ed25519 + compact message serialization. PDA derivation uses Pubkey::find_program_address (replacing the custom off-curve check with curve25519-dalek). SPL token transfers use proper Associated Token Account derivation. Key generation, address formatting, and transaction construction are fully type-safe.
Improved: Shroud TEE signing mirrors all changes — both vault and shroud now use identical SDK-backed implementations for Bitcoin and Solana.
Tests: Comprehensive unit tests added for both chains in both vault and shroud: key generation determinism, address derivation across networks (mainnet/testnet/signet), signing to all recipient address types, multi-UTXO inputs, dust change handling, invalid address rejection, SPL token transfers, shortvec encoding, and blockhash variation.
Verified end-to-end: Live testnet transactions confirmed on all non-EVM chains — Solana Devnet (sign-only, submit/broadcast, unified sign), Bitcoin Signet (sign-only, submit/broadcast), Tron Shasta (sign-only, submit/broadcast), and Cardano Preprod (sign-only, submit/broadcast).
Docs: Intents API guide updated with comprehensive testnet reference table including faucet links, external API dependencies, and network-specific address format notes for all 5 non-EVM chains.
New:30+ XRPL transaction types via the xrpl_tx_json field on SubmitTransactionRequest, SignTransactionRequest, and SignIntentRequest. Pass a raw XRPL transaction JSON object and the server uses the xrpl-rust binary codec to encode and sign it. Account, Sequence, Fee, LastLedgerSequence, and SigningPubKey are auto-filled when absent. Supported types: Payment, TrustSet, OfferCreate, OfferCancel, AccountSet, AccountDelete, EscrowCreate/Finish/Cancel, PaymentChannelCreate/Fund/Claim, NFTokenMint/Burn/CreateOffer/AcceptOffer/CancelOffer, AMMCreate/Deposit/Withdraw/Bid/Delete/Vote, SetRegularKey, SignerListSet, DepositPreauth, CheckCreate/Cash/Cancel, TicketCreate, Clawback.
New:xrpl-rust v1.1.0 crate added to both Vault and Shroud (TEE), replacing the hand-rolled Payment-only STObject serializer. The legacy to/value/destination_tag Payment path is preserved for backward compatibility.
New: Unsupported XRPL transaction types are rejected with a descriptive error listing all supported types.
SDK:xrpl_tx_json field added to SubmitTransactionRequest, SignTransactionRequest, and SignIntentRequest in the TypeScript SDK, Python SDK, and Go SDK.
MCP:submit_transaction and sign_transaction tools accept xrpl_tx_json parameter.
OpenAPI:xrpl_tx_json field added to all three transaction request schemas.
Tests:test-nonevm-signing-prod.sh extended with TrustSet, AccountSet, unsupported type, and unified /sign OfferCreate tests. test-shroud-prod.sh gains XRP xrpl_tx_json TrustSet dispatch test and XRP Payment dispatch test.
Dashboard: Intents page updated to highlight XRP's 30+ transaction type support.
Examples:examples/non-evm-keys updated with TrustSet example via xrpl_tx_json.
New: Full on-chain transaction signing + broadcast for Bitcoin, Solana, XRP, Cardano, and Tron through the Intents API (POST /v1/agents/{id}/transactions, POST .../transactions/sign, unified POST .../sign with intent_type: "transaction"). 1Claw dispatches by chain family, auto-fetches chain data (Bitcoin UTXOs/fee via mempool.space, Solana blockhash, XRP sequence, Cardano protocol params via Blockfrost, Tron ref block via TronGrid), signs in the HSM (or Shroud TEE), and broadcasts.
New: Chain-specific optional fields on transaction requests: destination_tag (XRP), memo, fee_rate_sat_per_vbyte (Bitcoin), fee_limit_sun (Tron TRC-20), token_mint / token_decimals (Solana SPL + Tron TRC-20), ttl (Cardano). value is the human-readable major unit (BTC/SOL/XRP/ADA/TRX) as a decimal string.
New: Platform resource grants — users can grant platform apps access to specific vaults and agents via POST /v1/platform/connections/{id}/grant. Grants are per-vault with configurable allowed_paths and permissions. List active grants via GET .../grants, revoke individual grants via DELETE .../grants/{grant_id}.
New: Dashboard grant page at /connect/{slug}/grant — vault/agent picker with checkboxes for selecting resources to share with a platform app. Linked from OAuth consent and claim flows.
Enhanced: Connected Apps page (/settings/connected-apps) rewritten — now shows vault/agent counts per app, expandable "Resource Grants" panel with per-grant details, and individual revoke buttons with confirmation dialog.
Fixed:GET /v1/platform/connected-apps response key changed from connected_apps to apps to match the SDK and dashboard expectations.
SDK: New methods on PlatformResource: grantAccess(connectionId, data), listGrants(connectionId), revokeGrant(connectionId, grantId).
API v2.20.1 / SDK 0.34.3 / CLI 0.36.4 — OAuth branding + redirect URI validation (2026-06-29)
New: Platform apps can configure a logo_url for branding on OAuth login and consent pages. When a user visits the "Sign in with 1Claw" flow, the app's logo and name are shown. Set via Dashboard (Platform → app → Settings → App Branding) or PATCH /v1/platform/apps/{id}.
New: Public branding endpoint GET /v1/platform/apps/by-slug/{slug}/branding — returns { name, logo_url, slug } without authentication.
New: Dedicated validate_redirect_uri() function for OAuth redirect URIs allows http://localhost and http://127.0.0.1 per RFC 8252 §7.3 (native/dev clients). Cloud metadata and non-loopback private IPs remain blocked.
Dashboard: Platform app detail page has a "Redirect URIs" editor in the Settings tab. Login and consent pages show app branding (logo + name) when the OAuth client_id query parameter is present.
Docs: Updated Platform API guide with redirect URI management instructions and a warning that client_id must be the app slug (not UUID).
API v2.20.0 / SDK 0.34.2 / MCP 0.34.3 — raw digest signing + EIP-712 fixes (2026-06-26)
New: Raw digest signing intent on POST /v1/agents/{id}/sign — intent_type: "eip712_digest" (alias "digest") signs a client-computed 32-byte hash directly and returns a 65-byte r‖s‖v signature that recovers to the agent's EOA. This unblocks ERC-1271 / ERC-7739 nested EIP-712 flows (e.g. Polymarket CLOB orders) where the canonical hash is computed client-side and must match the verifier exactly, which 1Claw's own typed_data recomputation would otherwise diverge from.
Security: Raw digest signing is blind signing (no domain/transaction inspection, guardrails bypassed), so it is gated behind a new per-agent raw_signing_enabled flag — off by default, only a human can enable it (agents cannot self-enable), and every use is audit-logged as signing_key.raw_digest_sign. Surfaced as a toggle (with an explicit warning) on the dashboard agent detail page.
Fixed: EIP-712 uintN/intN encoding for typed_data now uses arbitrary-precision integers — decimal strings that happened to be valid hex are no longer misparsed, and values larger than u128 are no longer silently encoded as zero. Negative intN values use correct two's-complement.
New: Platform bootstrap templates accept provision_eoa: true per agent — generates a standalone secp256k1 EOA for the agent (returned as agent_evm_address in the bootstrap summary) so platform-provisioned agents can deploy/operate ERC-4337 smart accounts client-side without a Pro+ treasury-wallet flow.
MCP: New sign_digest tool wraps the eip712_digest intent. SDK:signIntent accepts intent_type: "eip712_digest" + hash; AgentResponse/UpdateAgentRequest expose raw_signing_enabled.