Skip to main content
The caw CLI lets you manage wallets, addresses, transactions, delegations, policies, and agents from the terminal.

Global options

These options are available on every command.

Config file

The CLI stores configuration in ~/.cobo-agentic-wallet/ (JSON format). The config file tracks the active profile; per-agent credentials (API key, API URL, wallet UUID) are stored under profiles/profile_<agent_id>/credentials. Most commands that accept a wallet UUID as a positional argument will fall back to the wallet_uuid from the active profile’s credentials if the argument is omitted.

Output format

All commands output JSON to stdout:

Error output

Policy denials are written to stderr with structured context and a non-zero exit code:

caw update

Download and install a caw CLI binary from the official download server. Fetches the binary, verifies its checksum, and replaces the current binary in-place. —version is required. Use —check to verify a version is available without installing.

caw version

Print the current version of the caw CLI binary.

caw wallet

Manage Cobo Agentic Wallet wallets and perform on-chain operations. Local wallet commands (list, current) operate on credentials stored on this machine. Platform commands (get, balance, rename, archive, pair) call the Cobo Agentic Wallet service and require an active wallet with valid credentials. Run ‘caw wallet —help’ for a full list of subcommands.

list

List all wallets stored on this machine. Each wallet corresponds to one Cobo Agentic Wallet and holds the credentials and metadata needed to call the Cobo Agentic Wallet service. The active wallet is marked with ‘active’: true.

current

Without —wallet-uuid: shows the currently active wallet. With —wallet-uuid: switches the active wallet to the given one. —wallet-uuid is the UUID of the wallet to switch to; obtain it from ‘caw wallet list’.

get

Get details for the active wallet on the Cobo platform.

balance

List all token balances for the active wallet. Optionally filter by —token-id, —chain-id, or —address to narrow the results.

rename

Rename the active wallet on the Cobo platform.

pair

Initiate pairing and obtain a one-time pairing token (8-digit code) for the user to enter in the Cobo Agentic Wallet app. Share the code with the user through a secure channel. Use caw wallet pair-status to monitor whether the user has completed pairing. To verify pairing completion at any time, run caw status and check the wallet_paired boolean.

pair-status

Check whether the user has completed the wallet ownership pairing initiated by caw wallet pair.

archive

Archive a wallet locally. Archived wallets are hidden from ‘caw wallet list’ but no server-side changes are made. Use —list to view all archived wallets, or —rollback with a wallet UUID to restore one.

caw tx

Manage on-chain transactions for a wallet. Subcommands let you transfer tokens, submit contract calls, sign messages, estimate fees, and manage in-flight transactions via cancel (drop) or replace-by-fee (speedup). All mutating operations are evaluated against active policies before submission.

transfer

Transfer tokens from a wallet to a destination address. The transfer is evaluated against all active policies before submission. If a policy denies the transfer, the command exits non-zero and writes structured denial details to stderr. If a policy requires manual approval, the transfer is queued as a pending operation. Pass —request-id as an idempotency key — retrying with the same value returns the existing record without re-submitting.

call

Submit a smart contract call from a wallet. For EVM chains (e.g. SETH, BASE_ETH), provide —contract and —calldata. EVM addresses must be exactly 42 characters (0x + 40 hex digits). For Solana (SOL), provide —instructions as a JSON array of SolInstruction objects and optionally —address-lookup-tables. Solana addresses must be 43–44 characters (Base58). The call is evaluated against active policies before submission.

list

List transaction records for the active wallet, newest first. Filterable by —status, —token-id, —chain-id, —address, and —type.

get

Retrieve the full details of a single transaction record. Provide either —tx-id (the record UUID from caw tx list or submit response) or —request-id (the same request_id you passed on the submit call). The wallet is taken from your active wallet (use ‘caw wallet current’ to check). The response includes status, amounts, fees, and any policy evaluation results.

estimate-transfer-fee

Estimate the network fee for a token transfer without submitting it and without running policy checks. Provide the same flags you intend to use for caw tx transfer. The response includes the estimated fee amount and the token used to pay it.

estimate-call-fee

Estimate the network fee for a contract call without submitting it. Provide the same flags you intend to use for caw tx call. —context, —request-id, —description, and —gasless are not applicable for estimation. The response includes the estimated fee and the native token used to pay it.

drop

Cancel a transaction that has not yet been confirmed on-chain. Pre-broadcast transactions (pending screening, authorization, or signature) are cancelled directly without a fee. Broadcasting transactions use Replace-By-Fee (RBF): a zero-value replacement is submitted to the same nonce with a higher fee. The fee is derived automatically from the original transaction’s recorded fee bumped by —fee-multiplier (default +15%). —tx-id is the UUID of the transaction to cancel; obtain it from ‘caw tx list’ or the submit response.

speedup

Resubmit a broadcasting transaction to the same nonce with a higher fee (RBF). The replacement fee is derived automatically from the original transaction’s recorded fee bumped by —fee-multiplier (default +15%). Only transactions in the ‘broadcasting’ sub-status can be sped up. —tx-id is the UUID of the transaction to speed up; obtain it from ‘caw tx list’ or the submit response.

sign-message

Sign a message using a wallet address. —pact-id is the pact that scopes the signing key and wallet; obtain it from ‘caw pact list’ or a pact submit response.

caw address

Manage on-chain addresses associated with your Cobo Agentic Wallet. Use the subcommands to list existing addresses or generate new ones for a specific wallet and chain.

list

List all on-chain addresses associated with the active wallet. Run this before creating a new address to check whether one already exists for a given chain. Use ‘caw wallet current’ to check which wallet is active.

create

Generate a new on-chain address for the active wallet on the specified chain. The response includes a compatible_chains field listing all chain IDs that share this address (e.g. all EVM chains share one address).

caw meta

Query metadata about supported blockchains, tokens, and current market prices. Subcommands:

chains

List all blockchains supported by Cobo for a given wallet type. Results are paginated.

chain-info

Retrieve detailed information about a specific blockchain by its chain ID. —chain-id is the Cobo chain identifier, e.g. SETH or BASE_ETH. Use ‘caw meta chains’ to list all supported chain IDs.

tokens

List all token IDs and their metadata supported by Cobo for a given wallet type. Results are paginated.

search-tokens

Search for token candidates matching a symbol and return matching token IDs and their metadata across supported chains.

prices

Get current market prices for one or more Cobo asset coins. —asset-coins is a comma-separated list of Cobo asset coin IDs, e.g. BTC,ETH. Use ‘caw meta tokens’ to discover supported IDs.

caw faucet

Interact with the Cobo testnet faucet to obtain tokens for development and testing. Use the tokens subcommand to browse available testnet tokens, then use the deposit subcommand to request a specific token be sent to an on-chain address.

tokens

List all testnet tokens currently available from the Cobo faucet. The returned token IDs can be passed to —token-id when running caw faucet deposit to request a specific token be sent to an address.

deposit

Request a testnet token deposit from the Cobo faucet to an on-chain address. Example:

caw pending

Manage pending operations that are awaiting approval under your wallet policies. Pending operations are created automatically when a transaction or other action requires human or policy approval before it can execute. Use the subcommands to list, inspect, approve, or reject pending operations.

list

List pending operations that are waiting for approval or are currently executing. Results are paginated.

get

Retrieve full details of a single pending operation. The response includes the operation type, current status, policy context, and any available result payload. —operation-id is the ID of the pending operation to retrieve; obtain IDs from ‘caw pending list’.

approve

Approve a pending operation, allowing it to proceed to execution. This action is irreversible — once approved, the operation will begin executing immediately if all other policy conditions are satisfied. —operation-id is the ID of the pending operation to approve; obtain IDs from ‘caw pending list’.

reject

Reject a pending operation, preventing it from executing. This action is irreversible. —operation-id is the ID of the pending operation to reject; obtain IDs from ‘caw pending list’.

caw node

Manage the local TSS Node process used for threshold signature scheme operations. Subcommands let you start, stop, restart, and inspect the node, view its logs, run health checks, and query its status both locally and via the Cobo API.

status

Show TSS Node status. Without —scope, returns both local process info and remote API status. —scope local: show only the local process state (PID, running, binary path) —scope remote: query only the remote API for the node’s online status

info

Show installation metadata for the local TSS Node. Reports the TSS directory, binary path, whether the binary and secrets database exist, and the configured environment (dev or prod). If both the binary and database are present, the node ID is also retrieved by running the node’s own info subcommand.

health

Run a suite of health checks on the local TSS Node installation. Verifies that the binary, secrets database, config file, and key file all exist, that the key file has permissions 600, and that the node process is currently running. The node ID is included in the output when the binary and database are present. Exits with a non-zero status code if any check fails, making this command suitable for use in scripts and monitors.

start

Start the TSS Node process as a background daemon. If the node is already running, this command reports its PID and exits without starting a second instance. The process is launched with a new session (detached from the terminal), its PID is written to a file for later management, and output is appended to the log file shown in the result. The command polls briefly to confirm the process stays alive during startup and returns an error with recent log output if it exits immediately.

stop

Stop the running TSS Node process. Before stopping, the command checks whether there are any pending transactions in the configured wallet and refuses to stop if any are found, to avoid interrupting in-flight signing. The process receives SIGTERM and is given up to five seconds to exit gracefully before SIGKILL is sent. The PID file is removed on success.

restart

Restart the TSS Node process. If the node is currently running, it is stopped gracefully (SIGTERM, then SIGKILL after a timeout) before the new instance is launched. If the node is not running, it is started directly. The result includes the new PID and the path to the log file.

logs

View the TSS Node log file. By default, the last 50 lines are printed. The command exits with an error if no log file exists yet.

caw onboard

Interactive onboarding (default): collects input via prompts while wallet KeyGen runs in the background. Re-run until wallet_status is active; JSON output includes prompts for agents to fill in.

bootstrap

Run the MPC wallet bootstrap sequence as a detached background worker. This command is spawned automatically by caw onboard after provisioning and is not intended to be called directly. It prepares the TSS cache, waits for the prime-generation step to complete, creates the MPC wallet record via the Cobo Agentic Wallet API, and writes the resulting wallet UUID back to the wallet state file so that subsequent caw onboard poll calls can detect activation.

health

Check whether the Cobo Agentic Wallet backend API is reachable. Does not require authentication. Useful for verifying network access or environment configuration before running other commands.

self-test

Run two test transfers against the configured wallet to verify that policies are working correctly: one transfer that should be blocked by policy, and one that should be allowed. Exits non-zero if either test produces an unexpected result.

caw fetch

Perform an HTTP request and automatically handle 402 Payment Required responses using the x402 or MPP machine-payment protocols. <pact-id> is the pact UUID used to resolve the paying wallet and the pact-scoped API key (same behavior as ‘caw tx transfer <pact-id>’). <url> is the endpoint to fetch. When a 402 is received, caw detects the payment protocol from the response headers (unless overridden), pays using the wallet bound to the pact, and retries the request with the payment headers. Example:

caw payment

Manage Cobo payment features including MPP (Merchant Payment Protocol) sessions and payment gateway configuration. Use the session subcommand to inspect and manage active or historical payment sessions, and the gateway subcommand to configure payment gateway settings for the active wallet.

session

Manage Micropayment Protocol (MPP) payment sessions. Subcommands let you list active sessions, close individual or all sessions, and withdraw deposited funds after a channel is closed on-chain.

list

List currently active MPP payment sessions stored locally. By default only sessions in active state are shown.

close

Close a single active MPP payment session. By default the session is closed via protocol negotiation with the relay server. Use —force to bypass the relay server and submit an on-chain requestClose transaction directly; after a force-close there is a 15-minute grace period before you can reclaim funds with ‘caw payment session withdraw’. The session is closed under the pact that originally opened it (persisted in active.json). Pass —pact-id to override when that pact has been rotated or revoked, or to recover a session opened by an older CLI that did not persist the pact id.

close-all

Close every active MPP payment session found in the local sessions directory. Each session is closed via protocol negotiation with the relay server by default. Use —force to bypass the relay server and submit an on-chain requestClose for all sessions instead. Each session is closed under the pact that originally opened it. Sessions that have no persisted pact_id (opened by older CLIs) are skipped unless —pact-id is provided to apply the same pact to every session. A summary of closed, close-requested, failed, and skipped sessions is printed on completion.

withdraw

Reclaim deposited funds from an MPP channel that has been closed on-chain and whose grace period has expired. The session must be in ‘close_requested’ status; use ‘caw payment session close —force’ to initiate an on-chain close if it is not. The withdraw is signed under the pact that opened the session. Pass —pact-id to override when that pact has been rotated, or to recover a session opened by an older CLI.

gateway

Start a local HTTP proxy that intercepts outgoing requests and automatically handles payment challenges using the x402 or MPP protocol. <pact-id> is the pact UUID used to resolve the paying wallet and the pact-scoped API key (same behavior as ‘caw tx transfer <pact-id>’). All payments signed by the gateway are authorized under that pact. Two proxy modes are available. In forward mode the proxy accepts plain HTTP requests whose URL contains the full target address. In MITM mode the proxy intercepts HTTPS traffic by acting as a transparent TLS terminator; a CA certificate is generated on first run and must be trusted by the HTTP client. Example:

caw export-key

Exports the wallet’s MPC private key through a secure MPC reshare and local reconstruction, writing derived private keys to a CSV file. The first invocation creates an export request and prints an authorization URL that the wallet owner must approve in the Cobo Agentic Wallet app. Re-run the command after approval; it will detect the approved state, spin up two temporary TSS recovery nodes, perform the reshare, reconstruct the root private key, derive keys for all wallet addresses, and write the result to —output-dir.
  • —wallet: specify the wallet UUID (from caw wallet list); omit to use the active profile default
  • —output-dir: control where the CSV is written; defaults to the profile directory
The export session is resumable: re-running at any intermediate stage continues from where it left off. Example:

caw status

Show a compact wallet snapshot: whether the backend is reachable (healthy), the current wallet lifecycle state (wallet_status, e.g. active or pending), whether ownership pairing has been completed (wallet_paired boolean), active pact count, and pending transaction count.

caw util

Utility commands for encoding, decoding, and inspecting data used in transactions. Intended for development and debugging. Subcommands:
  • abi: ABI encode and decode EVM calldata, and compute function selectors.
  • base64: Base64 encode and decode strings.

abi

ABI encoding and decoding utilities for EVM smart-contract calldata. Subcommands:
  • encode: Encode a function call into hex calldata.
  • decode: Decode hex calldata back into function name and arguments.

encode

Encode a function call into hex calldata for use with caw tx call —calldata. Pass numeric arguments as decimal strings (e.g. “1000000”), not raw integers. Tuple arguments must be encoded as nested JSON arrays. Token amounts must always be in the token’s smallest unit (e.g. 0.001 WETH = 1000000000000000). Always verify the result with caw util abi decode before submitting. Examples:

decode

Decode hex calldata back into function name and arguments, or decode an eth_call return value using —output-types. Examples:

selector

Compute the 4-byte function selector from a function signature. Examples:

call

Send a raw eth_call to an EVM contract and return the hex result. Use this when you already have ABI-encoded calldata. For a higher-level command that handles encoding and decoding automatically, use ‘caw util eth-call’. Example:

base64

Encode and decode data in base64 format. Use the encode subcommand to convert hex bytes, raw strings, or stdin to a base64 string. Use the decode subcommand to recover the original bytes from a base64 string, with output as hex or raw text. Both subcommands support standard and URL-safe base64 variants via —url.

encode

Encode hex, raw string, or stdin to base64. Examples:

decode

Decode a base64 string and output as hex or raw. Examples:

eth-call

Read on-chain contract state by calling a view function: encodes calldata, calls the contract via eth_call, and decodes the return value automatically. Use —abi erc20 to query standard ERC-20 methods (name, symbol, decimals, balanceOf, allowance) without writing a full ABI. —args is a JSON array of positional arguments; omit for zero-argument methods. For raw eth_call without encoding/decoding, use ‘caw util abi call’. Examples:

caw pact

Manage pacts — delegated access agreements that grant an operator agent permission to act on a wallet owner’s behalf within defined policy limits. Use submit to request a new pact, status or show to inspect one, and revoke to terminate an active pact.

list

List pacts accessible to the authenticated principal. Defaults to —status active. Filter by —status (e.g. pending_approval, completed, expired, revoked) to see other states. Results are paginated.

status

Fetch the current status of a pact by its ID, triggering lazy activation if the pact is ready to become active. —pact-id is returned when you run ‘caw pact submit’, or found via ‘caw pact list’.

show

Show the full detail of a pact, including its spec, status, policies, and completion conditions. —pact-id is returned when you run ‘caw pact submit’, or found via ‘caw pact list’.

events

List all lifecycle events recorded for a pact in chronological order. Events capture state transitions such as submission, approval, activation, and revocation. —pact-id is returned when you run ‘caw pact submit’, or found via ‘caw pact list’.

submit

Submit a new pact request. A pact grants an agent delegated access to the wallet, scoped by policies (spending caps, chain/token filters, address constraints, approval thresholds) and completion conditions (transaction count, amount spent, or elapsed time) that automatically terminate the delegation when reached. caw pact submit Flag Reference Translate the user’s request into caw pact submit flags. Each row maps one aspect of the user’s intent to the corresponding flag and describes how to derive the value. Least privilege: Default to the narrowest scope — shortest duration, tightest token/chain/contract allowlist, and lowest spend cap that fulfills the user’s intent. Only widen when the user explicitly asks. Complete Example User request: “Help me transfer 1000 USDC to 0xABC…123 on Base”
Execution Plan (—execution-plan) Describe the operations the agent will run after the pact is active. Use these sections:
  • # Summary — one-line goal
  • # Operations — concrete calls/transfers (token, amount, target contract)
  • # Risk Controls — per-tx cap, daily cap, etc
Completion Conditions (—completion-conditions) JSON array defining when a pact is considered complete. Each object has type and threshold (required). At least one condition is required. Types cannot be duplicated within a pact. Multiple conditions can be set; the pact completes when any one is satisfied (any-of semantics). Once complete, the pact is revoked immediately and no further operations can be executed under it. Policy Reference (—policies) Policies constrain operations within a pact via the —policies flag. Each policy targets a specific operation type (transfer, contract_call, or message_sign) and always uses allow effect. Default-deny semantics apply: any operation not matching the when conditions of at least one policy is automatically denied — no implicit pass-through. Always define policies that explicitly cover every operation the agent needs to perform. Policy Structure
Allowlist Conditions (when) For transfer policies: For contract_call policies (EVM): For contract_call policies (Solana): Usage Limits (deny_if) Review Threshold (review_if) Matching operations require owner approval before execution. Message Sign Policies message_sign policies control EIP-712 typed-data signing. Example — restrict Permit2 signatures to a specific contract:
Amount Units and USD Pricing Amount units: amount_gt values are in the token’s transfer unit — the same unit used when submitting a transfer. For example, “1.5” means 1.5 USDC for USDC, or 1.5 ETH for ETH/SETH (not wei). USD Conditions: USD-based conditions (amount_usd_gt, usage_limits.rolling_24h.amount_usd_gt) only apply to tokens with available price data — tokens without price data bypass them entirely. For tokens without price data, use token-denominated limits (amount_gt, usage_limits.rolling_24h.amount_gt) instead.

revoke

Revoke an active pact. Only the wallet owner can revoke a pact. Revoking removes the associated delegation and invalidates the pact-scoped API key. This action cannot be undone.

caw schema

Output a machine-readable JSON description of any caw command, including its flags, positional arguments, and exit codes. Without arguments, returns a lightweight index of all commands (name + description). With arguments, returns the full schema for the specified command. Examples:

caw track

Read tracked transactions and query their current status. Each tracked entry records a command type (tx, pact, or wallet pair) and a response ID; caw resolves the current status by querying the Cobo WaaS API. The notification channel, target, and prompt are read from the context JSON recorded at submission time.

caw recipe

Search and retrieve recipes from the Cobo Agentic Wallet knowledge base. Use the search subcommand to find relevant recipes using natural language queries via LightRAG.
Search the recipe knowledge base before executing DeFi operations to load domain knowledge: contract addresses, ABIs, execution steps, and risk notes for the target protocol. Use —keywords to specify protocol name or token symbols, and —chain to filter by chain. Always run this before contract calls on unfamiliar protocols.