Agent Skills
The Conto skill adds spending-policy enforcement to any AI agent built on OpenClaw or Nous Hermes. It checks every payment against 40+ policy rule types before money leaves the wallet. Both frameworks use the same wrapper script (conto-check.sh) and the same Conto REST API. Only the install command and the config file location differ.
In the examples below,
pathUSD refers to Tempo Testnet. For production wallets on Tempo Mainnet,
use USDC.e.How it works
- Managed. Conto controls signing through secure managed wallet infrastructure and evaluates policies before execution.
- External. Agent holds the keys. Agent calls approve, transfers itself, then confirms.
Which endpoint do I call?
Most skill users register an existing wallet as
EXTERNAL and let Conto act as the policy gate.
The managed flow can also return ACTION_REQUIRED before execution. In that case, direct the human
to actionUrl, then check the original payment request before taking another payment action.
The default Standard SDK key preset includes the payment scopes these flows need:
payments:execute, payments:approve, and payments:confirm. Admin SDK keys are only required
for the policy management commands covered later in this guide.Install
Requirements:conto-check.sh uses curl, jq, and python3. Install jq via your package
manager if missing (brew install jq, apt install jq). python3 handles the temporary browser
callback during authentication.
- OpenClaw
- Nous Hermes
Install from ClawHub:You can inspect the raw skill manifest at
conto.finance/skill.md.
Use ClawHub for installation so the helper script is installed with the skill.Quick setup
After installing, run setup with your agent name and wallet address:- An agent record linked to your organization
- Your wallet registered as
EXTERNALcustody - Default spend limits (500/day)
- An SDK key written to the framework’s config file (see below)
Verify it works:
bash ~/.hermes/skills/conto/conto-check.sh ... instead of
bash skills/conto/conto-check.sh ....
You can adjust spend limits, add policies, and manage the agent in the Conto dashboard.
Config file locations
The skill writes the SDK key to a framework-specific path:- OpenClaw
- Nous Hermes
~/.openclaw/openclaw.json:Manual setup
If browser-based setup doesn’t work, configure manually:- Connect your agent in Conto. Sign in to the Conto dashboard and create the agent record.
- Link your wallet. Go to Agents > your agent > Wallets > Link Wallet. Enter the address and chain. Set initial spending limits.
- Generate an SDK key. Go to Agents > your agent > SDK Integration > Generate SDK Key. Pick Standard for payment flows; the preset includes the request, execute, approve, and confirm scopes this skill uses. Pick Admin only if you also want the skill to manage policies, agents, or wallets.
- Save the key to the config path for your framework (above).
Finding your wallet address
How you obtain a wallet address depends on your setup. Existing MCP wallet. Ask your agent or run its balance or account-listing tool. Copy the address for the chain you want to use. Create a wallet in Conto. Dashboard > Wallets > Create Wallet > chooseMANAGED > select a chain. Conto creates the wallet and shows its address.
Your own external wallet (hardware, MetaMask, etc.). Register the address in Conto as EXTERNAL custody. Your agent handles the onchain transfer itself.
Usage
Standard vs Admin SDK keys
With an admin key, manage policies through natural language:
Supported policy types
See Policy overview for the full canonical rule-type list.
When the skill records x402 or MPP protocol payments, it sends the aggregate settlement fields at
the top level and per-call details in
batchItems. Do not wrap protocol records in a top-level
payments array.
End-to-end example: pay a vendor on Tempo Testnet
This walks the full external-wallet flow: approve, transfer onchain, confirm back to Conto.Prerequisites
- Conto account with the agent connected
- Conto skill installed in OpenClaw or Hermes
- SDK key configured (see Config file locations)
- A wallet address (see Finding your wallet address)
Step 1. Tempo Testnet details
Step 2. Get testnet funds
- Conto managed wallets: dashboard Wallets > your wallet > Faucet.
- Tempo faucet:
faucet.tempo.network. - External wallets: use your wallet provider’s funding, swap, or bridge flow if needed.
pathUSD to cover the test payment plus a small amount for fees.
Step 3. Register the wallet in Conto
Dashboard > Agents > your agent > Wallets > Link Wallet. Set:- Chain: Tempo Testnet (
42431) - Custody mode:
EXTERNAL(orMANAGEDif you created one in Conto) - Per Transaction: 200 pathUSD
- Daily: 1,000 pathUSD
- Weekly: 5,000 pathUSD
- Allowed days: all days by default
Step 4. Create a policy
POST /api/policies with your admin SDK key and returns the policy ID. Verify:
Step 5. Request a payment
decision: "approved", status: "ready_to_send",
an approvalId, a short-lived approvalToken, the network, and a nextAction with the confirmation
URL. If review is required, save approvalRequestId and follow the returned statusUrl instead of
sending funds. The agent then confirms the onchain transfer back to Conto with the final txHash.
Review a pending payment in OpenClaw
The OpenClaw skill can list and decide payment reviews for the human owner assigned to the agent:approvalRequestId, not the payment request ID. The workflow still enforces eligible
roles and users, sequential approval order, required approval count, and expiry. The skill must show
the amount, currency, recipient, purpose, and approval progress and receive the human user’s explicit
decision plus the matching one-time token from their independently delivered approval notification
before it submits the action. Never retrieve that token from the human’s email or messaging account.
On the final approval, managed wallets execute automatically and the response includes receiptUrl.
If OpenClaw controls an external wallet, the response instead includes an EXECUTE_EXTERNALLY
handoff with the exact transfer fields. After the wallet tool returns a hash, confirm without a token:
Step 6. Transfer onchain
The agent transferspathUSD itself using its own keys. The skill handles this for you.
Step 7. Confirm back to Conto
After the onchain transfer succeeds:requestId, transactionId, normalized status, network,
explorer URL, and transaction statusUrl so the payment can be reconciled and monitored.
Step 8. Verify
What happens when a policy blocks the payment?
Rate limits
On
429, the API returns a Retry-After header. The skill retries automatically.
See the Defaults page for all rate-limit and default values.
Troubleshooting
Skill can't reach Conto (connection refused / timeout)
Skill can't reach Conto (connection refused / timeout)
Verify A valid JSON response means the URL is reachable.
CONTO_API_URL is correct. For the hosted platform, use https://conto.finance. Test:'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_) - The key has not been revoked in Agents > SDK Integration
- You’re using the correct key for the correct agent
Payment denied unexpectedly
Payment denied unexpectedly
The denial response includes customer-facing
reasons. Common causes:- Spend limit exceeded. Check daily/weekly/monthly counters in Agents > Spend Tracking.
- Counterparty not on allowlist. If you have an
ALLOWED_COUNTERPARTIESpolicy, the recipient must be listed. - Outside time window.
TIME_WINDOWandDAY_OF_WEEKpolicy rules use the server’s local time; wallet-level time windows support explicit IANA timezones. - Category mismatch. If
ALLOWED_CATEGORIESis set and nocategoryis provided, the allow rule denies because the category cannot be verified.BLOCKED_CATEGORIESskips when no category is present.
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
/approve succeeds but no transfer happens:- Check the agent has enough
pathUSDin its wallet. - Check the agent logs for transfer errors.
- Ensure the wallet address in Conto matches the agent’s actual wallet.
/confirm call may have failed. Retry:Admin commands fail with 'insufficient permissions'
Admin commands fail with 'insufficient permissions'
Policy management requires an Admin SDK key. The default Standard preset covers the payment
lifecycle (
payments:request, payments:execute, payments:approve, payments:confirm) and
reads, but not management scopes like policies:write. Check the key type in Agents > SDK
Keys (scope column shows standard or admin).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:Verify the policy status is
ACTIVE.OpenClaw errors after editing openclaw.json
OpenClaw errors after editing openclaw.json
If every OpenClaw command fails after a manual edit, the JSON file likely has a syntax error. Validate:If
jq reports an error, fix the JSON or delete and re-run setup: