Commands
jaw rpc call
Execute any EIP-1193 RPC method through the browser bridge or local session key.
jaw rpc call <method> [params]Arguments
| Argument | Required | Description |
|---|---|---|
method | Yes | RPC method name (e.g., wallet_connect, wallet_sendCalls) |
params | No | JSON string with method parameters |
Flags
| Flag | Short | Default | Description |
|---|---|---|---|
--output | -o | human | Output format: json or human |
--chain | -c | config | Chain ID (e.g., 8453 for Base) |
--api-key | config | JAW API key | |
--timeout | -t | 120 | Request timeout in seconds |
--yes | -y | false | Skip confirmations |
--quiet | -q | false | Suppress non-essential output |
--session | -s | false | Use local session key (Auto Mode) |
Examples
Connect wallet:
jaw rpc call wallet_connectGet accounts:
jaw rpc call eth_accountsSend ETH (0.01 ETH on Base):
jaw rpc call wallet_sendCalls '{"calls":[{"to":"0xRecipient","value":"0x2386F26FC10000"}]}' -c 8453Send ERC-20 tokens:
jaw rpc call wallet_sendCalls '{"calls":[{"to":"0xTokenAddress","data":"0xa9059cbb000000000000000000000000RECIPIENT0000000000000000000000000000000000000000000000000000000000000000000000000000000DE0B6B3A7640000"}]}' -c 8453Sign a message:
jaw rpc call personal_sign '["0x48656c6c6f","0xYourAddress"]'Grant permissions:
jaw rpc call wallet_grantPermissions '{"permissions":[{"type":"call","data":{"to":"0xContractAddress"}},{"type":"spend","data":{"token":"0xUSDCAddress","limit":"1000000","period":"daily"}}],"expiry":1735689600}'Check transaction status:
jaw rpc call wallet_getCallsStatus '["0xBundleId"]'JSON output (for scripts and AI agents):
jaw rpc call eth_accounts -o json -yjaw config set
Set one or more configuration values.
jaw config set [key=value ...]Valid keys: apiKey, defaultChain, keysUrl, ens, relayUrl, sessionExpiry
Examples
# Set API key and chain
jaw config set apiKey=YOUR_KEY defaultChain=8453
# Enable ENS resolution
jaw config set ens=myapp.eth
# Set session expiry
jaw config set sessionExpiry=14
# Use a self-hosted relay
jaw config set relayUrl=wss://relay.mycompany.comjaw config write
Write a full config from inline JSON or a file path.
jaw config write <json-or-filepath>If the input starts with {, it's parsed as inline JSON. Otherwise, it's read as a file path.
Examples
# Inline JSON
jaw config write '{"apiKey":"...","defaultChain":84532,"paymasters":{...}}'
# From file
jaw config write ./my-config.jsonjaw config show
Display current configuration. The API key is redacted in output.
jaw config show
jaw config show -o jsonjaw session setup
Generate a session key and grant scoped on-chain permissions. Opens the browser once for passkey approval. See Auto Mode for details.
jaw session setup [--chain <id>] [--permissions <json|file>] [--expiry <days>]Flags
| Flag | Description |
|---|---|
--permissions | Override config.permissions (inline JSON or file path) |
--expiry | Override config.sessionExpiry (days, default: 7) |
--yes / -y | Skip overwrite confirmation |
Example
jaw session setup --chain 84532
jaw session setup --chain 84532 --expiry 14 --yesjaw session status
Show current session status.
jaw session status
jaw session status -o jsonjaw session add
Add permissions to the current session, keeping the ones it already has.
jaw session add --x402
jaw session add --x402 --limit 10/day
jaw session add --permissions '{"calls":[...]}'jaw session setup replaces a session. An agent working under a scoped session that then discovers it needs to pay could only re-run setup, which revokes the grant it is working under, so it loses its other capabilities in the middle of the task. This grants the union instead.
The session still holds one permission afterwards: the union is granted as a new permission and the old one is revoked, which is why the browser asks twice. Two live grants would be two independent budgets on chain, so two of 5 a day are 10 a day with nothing representing the total. The session key is kept, so the agent's address, its balance and its delegation all survive.
A limit is replaced by one that meters the same token over the same period, and only by that: caps the request does not mention are kept. The contract charges every spend limit matching a token rather than stopping at the first, so limits on one token are ANDed and the tightest binds. Adding 10 a day to a session that also holds 1 a week leaves the week limit in place, and the summary says so, because that is the one payments will run into.
It needs a session that carries the permission it was granted. Sessions created before the CLI stored that cannot be merged against, since a permission id says nothing about what it allows; re-run jaw session setup once and adding works from then on.
jaw session revoke
Revoke the on-chain permission and delete local session files. Opens browser for passkey approval (skipped if session is expired).
jaw session revokeIt revokes the permissions earlier sessions left live on the account as well as the one this session names. jaw session setup replaces a session rather than adding to it, and it does not always revoke what it replaces: declining the prompt keeps the old permission, and --yes never revokes. Those are recorded on the new session and revoked here, on their own chain if setup moved chains since. Expired ones are skipped, since they authorise nothing.
Each one is attempted on its own, so one that fails does not stop the rest. What could not be revoked is listed and the local session is kept so the command can be run again. One case never succeeds on a retry: a permission already revoked from another device, which the wallet reads from the relay and the relay no longer has. Pass --force to delete the local session anyway, and note the ids it prints, because deleting the session is what loses them.
jaw disconnect
Close the relay session and browser tab. Cleans up the session stored in ~/.jaw/relay.json.
jaw disconnectjaw x402 pay
Fetch a URL, paying an x402 402 challenge with the session key. Dry run by default: pass --pay to actually spend. See Paying for APIs for funding and limits.
jaw x402 pay <url>Flags
| Flag | Description |
|---|---|
--pay | Actually sign and send the payment |
--max-amount | Ceiling in base units for this call, on top of the policy |
--method | HTTP method (default GET) |
--body | Request body |
Examples
jaw x402 pay https://api.example.com/resourcejaw x402 pay https://api.example.com/resource --payjaw x402 pay https://api.example.com/resource --pay --max-amount 50000jaw x402 status
Show x402 payment readiness: which account holds the funds, the resolved caps, and what has been spent. Reads only, never pays.
jaw x402 status
jaw x402 status --output jsonjaw x402 log
Show the local x402 payment ledger: every attempt, paid, failed or refused, with amounts and transactions.
jaw x402 logFlags
| Flag | Description |
|---|---|
--limit | Show only the most recent N entries |
--status | Filter by paid, failed or refused |
Examples
jaw x402 log --limit 20jaw x402 log --status failedjaw mcp
Start the MCP server on stdio for AI agent integration. See the MCP Server page for setup details.
jaw mcpjaw version
Display the CLI version.
jaw version
jaw -v