OpenClaw Skill
The Conto skill for OpenClaw adds fine-grained spending policies to any AI agent. It checks every payment against 40+ policy rule types before money leaves the wallet.How It Works
- Integrated (PRIVY/SPONGE) — Your wallet provider holds the keys (Privy or Sponge, respectively). Conto evaluates policies and orchestrates execution through the provider. One API call handles policy check + execution.
- External — Agent holds the keys. Agent calls approve, transfers itself, then confirms.
Which endpoint do I call?
| Mode A (Integrated) | Mode B (External) | |
|---|---|---|
| Custody type | PRIVY or SPONGE | EXTERNAL |
| Who holds keys | Wallet provider | Your agent |
| Endpoint | POST /api/sdk/payments/request | POST /api/sdk/payments/approve |
| Calls per payment | 1 (with autoExecute: true) | 3 (approve → transfer → confirm) |
| Approval expiry | 5 minutes | 10 minutes |
| chainId | Resolved from wallet | Required in request body |
Install
Install from ClawHub:Quick Setup (Recommended)
After installing, run the setup command with your agent name and wallet address:- An agent record linked to your organization
- Your wallet registered as EXTERNAL custody
- Default spend limits (500/day)
- An SDK key written to
~/.openclaw/openclaw.json
What is my wallet address?
Arguments:
| Argument | Default | Description |
|---|---|---|
agent_name | (required) | Name for your agent |
wallet_address | (required) | Your wallet address (0x… for EVM, base58 for Solana) |
chain_type | EVM | EVM or SOLANA |
chain_id | 42431 | Chain ID. Common: 8453 (Base), 42431 (Tempo Testnet), 1 (Ethereum) |
Manual Setup (Alternative)
If the browser setup doesn’t work, you can configure manually. This requires four steps:- Connect your agent in Conto — Sign in to the Conto dashboard and connect your agent. This is how Conto knows which OpenClaw agent to track policies, spend limits, and transaction history for.
- Link your wallet — Tell Conto which wallet your agent will be sending payments from. You can use an existing wallet like the one connected to your OpenClaw, or create a new wallet with Privy or Sponge directly in Conto. See Find Your Wallet Address below.
- Generate an SDK key — This is the credential your OpenClaw agent uses to authenticate with Conto. You’ll add it to your OpenClaw config file.
-
Add the SDK key to OpenClaw config — Save the key to
~/.openclaw/openclaw.jsonso the skill can authenticate with Conto.
Find Your Wallet Address
Conto needs to know which wallet your agent controls so it can track spend limits and verify onchain transfers. How you get your wallet address depends on your setup.Option A: You already have a wallet (Sponge, AgentCash, etc.)
If your OpenClaw agent already has a wallet through an MCP server like Sponge, you can retrieve the address directly. Sponge MCP — Ask your agent or run theget_balance tool. The response includes your wallet addresses for each chain:
list_accounts tool to see your wallet addresses across all supported networks.
Option B: Create a new wallet in Conto (Privy or Sponge)
If you don’t have an existing wallet, you can create one directly in the Conto dashboard:- Go to the Conto dashboard
- Navigate to Wallets > Create Wallet
- Set custody type to PRIVY or SPONGE
- Select the chain (e.g. Tempo Testnet for testing)
- Click Provision — Conto creates the wallet onchain and shows you the address
Option C: Use your own external wallet
If you have a wallet you manage yourself (hardware wallet, MetaMask, etc.), you can register its address in Conto as an EXTERNAL wallet. With external wallets, your agent handles the onchain transfer itself after Conto approves the payment. Which option should I pick?| Setup | Who holds keys | Payment flow |
|---|---|---|
| Existing OpenClaw wallet | Your MCP provider (e.g. Sponge) | Agent calls approve → agent transfers via MCP → agent confirms |
| Privy (created in Conto) | Privy | Agent calls approve → Conto orchestrates execution via Privy |
| Sponge (created in Conto) | Sponge | Agent calls approve → Conto orchestrates execution via Sponge |
| External | You | Agent calls approve → agent transfers itself → agent confirms |
Configure
1. Connect your agent in Conto
Sign in to the Conto dashboard and connect your agent. Give it a name and description that matches your OpenClaw agent.2. Link your wallet
Go to Agents > your agent > Wallets > Link Wallet. Enter your wallet address (see Find Your Wallet Address above) and select the chain and custody type. Set initial spending limits for per-transaction, daily, and weekly caps.3. Generate an SDK key
Go to Agents > your agent > SDK Keys > Generate New Key.- Select Standard for payment approval only
- Select Admin if you want the agent to create/manage policies
4. Add to OpenClaw config
Edit~/.openclaw/openclaw.json. If the file does not exist, create it with exactly this content (replace the key value with your actual SDK key):
Usage
Telegram / Discord / WhatsApp
CLI
Standard vs Admin SDK Keys
| Capability | Standard | Admin |
|---|---|---|
| Check payment policies | Yes | Yes |
| Confirm payments | Yes | Yes |
| Pre-authorize x402 calls | Yes | Yes |
| Read policies and transactions | Yes | Yes |
| Create/update/delete policies | No | Yes |
| Manage agents and wallets | No | Yes |
Create Policies from OpenClaw
With an admin SDK key, manage policies via natural language:Test Policies
After creating policies, verify enforcement:Supported Policy Types
| Type | What it controls |
|---|---|
MAX_AMOUNT | Per-transaction cap |
DAILY_LIMIT / WEEKLY_LIMIT / MONTHLY_LIMIT | Cumulative spend caps |
ALLOWED_CATEGORIES / BLOCKED_CATEGORIES | Category whitelist/blocklist |
ALLOWED_COUNTERPARTIES / BLOCKED_COUNTERPARTIES | Address whitelist/blocklist |
TIME_WINDOW / DAY_OF_WEEK | Business hours, allowed days |
BLACKOUT_PERIOD | Maintenance windows |
VELOCITY_LIMIT | Transaction rate limiting |
REQUIRE_APPROVAL_ABOVE | Human approval threshold |
GEOGRAPHIC_RESTRICTION | Country/OFAC restrictions |
CONTRACT_ALLOWLIST | DeFi contract restrictions |
X402_PRICE_CEILING | Max per x402 API call |
X402_ALLOWED_SERVICES / X402_BLOCKED_SERVICES | x402 service allowlist/blocklist |
X402_MAX_PER_SERVICE | Per-service daily cap |
End-to-End Example: Pay a Vendor on Tempo Testnet
This walkthrough sends a real payment through the full external-wallet flow: approve → transfer onchain → confirm back to Conto.Prerequisites
- Conto account (sign up) with your agent connected
- Conto skill installed in OpenClaw (
npx clawhub install conto) - SDK key (
conto_agent_...) configured inopenclaw.json - A wallet address (see Find Your Wallet Address)
Step 1 — Connect to Tempo Testnet
Tempo Testnet is where you’ll test payments before going to production. It uses pathUSD as its stablecoin and requires no gas token — transaction fees are paid in pathUSD itself, so you don’t need to acquire a separate token for gas.| Detail | Value |
|---|---|
| Network | Tempo Testnet |
| Chain ID | 42431 |
| Currency | pathUSD (TIP-20 stablecoin) |
| Gas | Paid in pathUSD (no separate gas token) |
| Explorer | explore.moderato.tempo.xyz |
Step 2 — Get testnet funds
You need pathUSD in your wallet to test payments. There are a few ways to get testnet tokens: From the Conto dashboard (Privy wallets): If you created a Privy wallet in Conto, go to Wallets > your wallet and click the Faucet button. This deposits complimentary testnet pathUSD directly into your wallet. From the Tempo faucet: Visit the Tempo testnet faucet and enter your wallet address to receive testnet pathUSD. From your Sponge wallet (if applicable): If your agent uses a Sponge MCP wallet on Tempo testnet, check if you already have a balance:Step 3 — Register your wallet in Conto
Now connect your wallet to the agent you connected in the Conto dashboard:- Go to Agents > your agent > Wallets
- Click Link Wallet
- Enter your wallet address and select:
- Chain: Tempo Testnet (42431)
- Custody type: EXTERNAL (if using Sponge or your own wallet) or PRIVY (if you created one in Conto)
- Set initial spending limits:
- Per Transaction: 200 pathUSD
- Daily: 1,000 pathUSD
- Weekly: 5,000 pathUSD
- Click Link
Step 4 — Create a spending policy
POST /api/sdk/policies and returns the policy ID. Verify it:
Step 5 — Request a payment (approve)
approvalId and approvalToken.
Step 6 — Transfer onchain
Because this is an external wallet, the agent transfers pathUSD itself using its own keys. The skill handles this automatically — you don’t need to do anything extra.Step 7 — Confirm back to Conto
After the onchain transfer succeeds, the skill reports the transaction hash:approvalToken is the token from the Step 5 approval response. Conto records the payment, updates spend counters, and the transaction appears in the dashboard.
Step 8 — Verify the result
What happens if a policy blocks the payment?
Try exceeding the limit:PER_TX_LIMIT, DAILY_LIMIT, WEEKLY_LIMIT, MONTHLY_LIMIT, BLOCKED_COUNTERPARTY, TIME_WINDOW, CATEGORY_RESTRICTION, VELOCITY_LIMIT. See the Advanced Policies page for the full list.
Verify in Dashboard
After running payments through the skill, check the Conto dashboard:- Transactions — confirmed payments with tx hashes and explorer links
- Alerts — denied payment attempts with violation details
- Agents — spend tracking (daily/weekly/monthly used)
Run the E2E Test
For automated testing against a local Conto instance:Rate Limits
| Endpoint type | Limit |
|---|---|
Payment endpoints (/approve, /request, /execute, /confirm) | 60 requests/min per agent |
Read endpoints (/wallets, /policies, /transactions, etc.) | 120 requests/min per agent |
429 with a Retry-After header. The skill handles retries automatically.
Troubleshooting
Skill can't reach Conto (connection refused / timeout)
Skill can't reach Conto (connection refused / timeout)
Verify If you get a valid JSON response, the URL is reachable.
CONTO_API_URL in openclaw.json is correct. For the hosted platform, use https://conto.finance. For local development, use http://localhost:3006. Test connectivity:'Invalid or expired SDK key'
'Invalid or expired SDK key'
SDK keys are scoped to a single agent. Check that:
- The key starts with
conto_agent_(notconto_org_) - The key hasn’t been revoked in the dashboard under Agents > SDK Keys
- You’re using the correct key for the correct agent
Payment denied unexpectedly
Payment denied unexpectedly
The denial response includes a
violations array listing every rule that failed. Common causes:- Spend limit exceeded — check daily/weekly/monthly counters in the dashboard under Agents > Spend Tracking
- Counterparty not on allowlist — if you have an
ALLOWED_COUNTERPARTIESpolicy, the recipient must be listed - Outside time window —
TIME_WINDOWandDAY_OF_WEEKrules use the timezone set on the policy - Category mismatch — if
ALLOWED_CATEGORIESis set and nocategoryis provided in the request, the rule is skipped (not denied). But ifBLOCKED_CATEGORIESmatches, it denies.
Payment approved but no onchain transfer (external wallet)
Payment approved but no onchain transfer (external wallet)
In external wallet mode, Conto only enforces policy — the agent must transfer funds itself. If the approve call succeeds but no transfer happens:
- Check the agent has enough pathUSD in its wallet
- Check the OpenClaw agent logs for transfer errors
- Ensure the wallet address registered in Conto matches the agent’s actual wallet
Admin commands fail with 'insufficient permissions'
Admin commands fail with 'insufficient permissions'
Policy management requires an Admin SDK key. Standard keys can only read policies and approve/confirm payments. Check the key type in the dashboard under Agents > SDK Keys — the scope column shows
standard or admin.'npm install @conto/sdk' fails with 404
'npm install @conto/sdk' fails with 404
The Then follow the Quick Setup steps above.
@conto/sdk npm package is not used by the OpenClaw skill. The skill communicates with Conto through conto-check.sh, which calls the REST API using curl. To install the skill, run:OpenClaw errors after editing openclaw.json
OpenClaw errors after editing openclaw.json
If OpenClaw throws parse errors or every command fails after you manually edited If The setup command writes a correctly formatted file automatically.
~/.openclaw/openclaw.json, the file likely has a JSON syntax error. Common mistakes:- Trailing comma after the last key-value pair
- Missing comma between key-value pairs
- Mismatched braces or brackets
- Placeholder text like
your_key_herenot replaced with an actual key
jq reports an error, fix the JSON or delete the file and re-run setup:Policies not evaluating (all payments approved)
Policies not evaluating (all payments approved)
Policies must be assigned to the agent. Creating a policy alone doesn’t activate it. Assign via the dashboard (Policies > Assign to Agent) or via the API:Also verify the policy status is
ACTIVE (not DRAFT or DISABLED).