Dexter
Dexter
Docs
Operator

Verified against @dexterai/x402 5.3.1 · 2026-07-07

OpenDexter for non-developers

By the end of this page you will have signed in with a Dextercard, opened a spend tab with a cap, watched your agent spend against it, checked what it spent, and closed the tab — all from a terminal, no code.

Every command is npx @dexterai/opendexter@latest <command>. You never install anything permanently; npx fetches the latest CLI each time. If you would rather type opendexter directly, run npm install -g @dexterai/opendexter once and drop the npx …@latest prefix from every command below.

What a tab gives you

A tab is a pre-approved spend channel between you and one seller, capped at an amount you approve. Once it is open, your agent's paid calls to that seller ride the tab and settle in the background — you approve the cap once instead of approving every call. The funds stay in your own vault, and you can close the tab at any time. See Tabs — the concept for the full model.

Before you start

You need Node.js (v18 or newer) and a wallet with a small USDC balance to pay for calls. Check your wallet address and balances:

npx @dexterai/opendexter@latest wallet

Real output (balances are in the token's smallest unit — 1560000 is 1.56 USDC on Solana):

{
  "address": "5gBx21UVshnMozTGMa6Hpyq3KE7N5fzSrEd3a56eXRMm",
  "solanaAddress": "5gBx21UVshnMozTGMa6Hpyq3KE7N5fzSrEd3a56eXRMm",
  "evmAddress": "0xE1B4Eec2F02c8E55D5D68e2fd060CD282923e73d",
  "network": "multichain",
  "chainBalances": {
    "eip155:8453": { "available": "1628370", "name": "Base", "tier": "first" },
    "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp": { "available": "1560000", "name": "Solana", "tier": "first" }
  }
}

Steps

Sign in with your Dextercard

Your Dextercard session is your Dexter vault sign-in. A tab is opened against your vault, so sign in first. Login takes an email and mails you a one-time code:

npx @dexterai/opendexter@latest dextercard login --email [email protected]

Check the session at any time:

npx @dexterai/opendexter@latest dextercard status

Before you log in, status reports no session:

{
  "hasSession": false,
  "path": "/home/you/.config/dexter/dextercard.enc"
}

Nothing in the older docs told you this ordering. Sign in with dextercard login before tab connect so the tab attaches to your signed-in vault instead of a bare local keypair.

Check what a seller charges

Before opening a tab, inspect the endpoint. check reads the price and payment options without paying anything:

npx @dexterai/opendexter@latest check https://api.dexter.cash/api/x402/tab-demo/tick

Real output — this seller offers both a tab scheme and an exact (pay-per-call) scheme at $0.01 a call:

{
  "requiresPayment": true,
  "statusCode": 402,
  "paymentOptions": [
    { "price": 0.01, "scheme": "tab",   "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" },
    { "price": 0.01, "scheme": "exact", "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" }
  ],
  "resource": {
    "url": "https://api.dexter.cash/api/x402/tab-demo/tick",
    "description": "Live Solana mainnet slot and epoch telemetry. Tab-metered: open a spend tab and stream ticks at $0.01 each, or pay one-shot."
  },
  "authMode": "paid"
}

A seller that lists a tab scheme can back a tab. If it only lists exact, you pay per call and skip the tab.

Open a capped tab

tab connect starts the approval for a tab with one seller:

npx @dexterai/opendexter@latest tab connect https://api.dexter.cash/api/x402/tab-demo/tick

This prints a passkey approval link. You open the link, approve the tab, and choose the cap there — the dollar ceiling the tab may spend. The CLI polls the chain for your approval (up to --timeout minutes, default 10) and returns once it is live. Add --no-wait to print the link and exit instead of waiting.

There is no --cap flag on tab connect today. You set the cap in the approval step, not on the command line. After approval, the cap shows up in tab list as capUsdc.

If a tab with that seller is already open, the CLI tells you and does not open a second one:

A tab with this seller is already open (cap $1.00, expires 2026-07-13T21:47:25.000Z).
Paid calls to it already ride the tab. `opendexter tab list` shows its state.

Let your agent spend, and set spend guards

With the tab open, fetch the paid resource. Payment rides the tab automatically:

npx @dexterai/opendexter@latest fetch https://api.dexter.cash/api/x402/tab-demo/tick

fetch pays via an open tab by default when the seller offers one. Pass --no-tab to force an exact per-call payment instead, or --max-amount 0.02 to cap a single call.

Independently of the tab's on-chain cap, you can set two spend guards on this machine. --max-amount is a per-call ceiling; --daily-budget is a rolling 24-hour budget:

npx @dexterai/opendexter@latest settings --max-amount 0.10 --daily-budget 2

Check what it spent

tab list shows every open tab with its cap, what it has spent, and what has settled on-chain:

npx @dexterai/opendexter@latest tab list

Real output:

{
  "tabs": [
    {
      "status": "active",
      "seller": "https://api.dexter.cash/api/x402/tab-demo/tick",
      "counterparty": "FKF63wLt122SLDNPBfpDgrMcQzxtdLfLyrUS1KziRR1h",
      "agentKey": "GCSpCNgjZwPbpgtU5w1vAGF1ncRpiwSsoAvhDmc4SuVH",
      "capUsdc": "1.00",
      "expiresAt": "2026-07-13T21:47:25.000Z",
      "live": true,
      "spentUsdc": "0.08",
      "crystallizedUsdc": "0.00"
    }
  ]
}

capUsdc is the ceiling you approved. spentUsdc is what your agent has run up against the tab. crystallizedUsdc is how much of that has been settled on-chain to the seller so far.

For a machine-wide total, settings with no flags reports your 24-hour spend:

npx @dexterai/opendexter@latest settings
{
  "settings": { "maxAmountUsdc": 0.1, "dailyBudgetUsdc": 2 },
  "spend": { "last24hUsdc": 0.05, "budgetRemainingUsdc": 1.95 }
}

Close the tab and sign out

Close the tab with the seller (accepts the seller URL or the counterparty pubkey shown in tab list):

npx @dexterai/opendexter@latest tab close https://api.dexter.cash/api/x402/tab-demo/tick

tab remove deletes the local tab record; tab close is the one that stops spending. When you are done for the session, sign out of your vault:

npx @dexterai/opendexter@latest dextercard logout --yes

Honest gaps

These are commands a non-developer reasonably reaches for that the CLI does not have today. Here is what to use instead:

You wantWhat to do today
A --cap flag on tab connectSet the cap in the passkey approval step. It is not a command-line flag; it appears afterward as capUsdc in tab list.
An itemized receipt of every call (opendexter receipts)No receipts command exists. Use tab list for per-tab spentUsdc / crystallizedUsdc and settings for spend.last24hUsdc.
A revoke verbThere is no revoke. Revoking a tab is tab close; revoking your vault session is dextercard logout.

Full command list

npx @dexterai/opendexter@latest dextercard login --email <[email protected]m>
npx @dexterai/opendexter@latest dextercard status
npx @dexterai/opendexter@latest dextercard logout --yes
npx @dexterai/opendexter@latest wallet
npx @dexterai/opendexter@latest check <url>
npx @dexterai/opendexter@latest tab connect <seller-url>   # --no-wait, --timeout <min>, --rekey
npx @dexterai/opendexter@latest tab list
npx @dexterai/opendexter@latest fetch <url>                # --no-tab, --max-amount <usdc>
npx @dexterai/opendexter@latest settings --max-amount <usdc> --daily-budget <usdc>
npx @dexterai/opendexter@latest tab close <seller-url | counterparty-pubkey>

On this page