Skip to main content

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

Conto supports two wallet modes:
  • 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.
Both modes evaluate the same rule set.

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.
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.
Do not run npm install @conto_finance/sdk. The OpenClaw skill uses conto-check.sh (installed by ClawHub) to call the Conto REST API directly. The @conto_finance/sdk npm package is a separate TypeScript SDK and is not needed here.

Quick setup

After installing, run setup with your agent name and wallet address:
This opens your browser for Conto login. After you approve, the agent is automatically provisioned with:
  • An agent record linked to your organization
  • Your wallet registered as EXTERNAL custody
  • Default spend limits (100/tx,100/tx, 500/day)
  • An SDK key written to the framework’s config file (see below)
Verify it works:
For Hermes installs, use 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/openclaw.json:
This must be valid JSON. Trailing commas or missing braces will make every OpenClaw command fail. Validate with cat ~/.openclaw/openclaw.json | jq ..

Manual setup

If browser-based setup doesn’t work, configure manually:
  1. Connect your agent in Conto. Sign in to the Conto dashboard and create the agent record.
  2. Link your wallet. Go to Agents > your agent > Wallets > Link Wallet. Enter the address and chain. Set initial spending limits.
  3. 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.
  4. 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 > choose MANAGED > 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.
EXTERNAL custody keeps full key control in your wallet stack. Conto can approve, deny, record, and alert on payments routed through Conto, but it cannot cryptographically block a direct transfer signed outside Conto.

Usage

CLI (OpenClaw example):

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

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.
You need enough 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 (or MANAGED if you created one in Conto)
  • Per Transaction: 200 pathUSD
  • Daily: 1,000 pathUSD
  • Weekly: 5,000 pathUSD
  • Allowed days: all days by default
Wallet-level limits act as a safety net on top of any policy you assign.

Step 4. Create a policy

The helper calls POST /api/policies with your admin SDK key and returns the policy ID. Verify:

Step 5. Request a payment

Behind the scenes the skill calls:
If approved immediately, the response includes 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:
The helper uses 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 transfers pathUSD itself using its own keys. The skill handles this for you.

Step 7. Confirm back to Conto

After the onchain transfer succeeds:
Conto records the payment, updates spend counters, and the transaction appears in the dashboard. The confirmation receipt includes the requestId, transactionId, normalized status, network, explorer URL, and transaction statusUrl so the payment can be reconciled and monitored.

Step 8. Verify

Or check Transactions in the dashboard for the explorer link.

What happens when a policy blocks the payment?

The skill returns a customer-facing denial reason. No onchain transfer occurs. The denied attempt appears under Alerts in the dashboard.
The reason identifies the customer action or control category without exposing policy configuration.

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

Verify CONTO_API_URL is correct. For the hosted platform, use https://conto.finance. Test:
A valid JSON response means the URL is reachable.
SDK keys are scoped to a single agent. Check that:
  • The key starts with conto_agent_ (not conto_)
  • The key has not been revoked in Agents > SDK Integration
  • You’re using the correct key for the correct agent
Generate a new key under Agents > your agent > SDK Integration > Generate SDK Key.
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_COUNTERPARTIES policy, the recipient must be listed.
  • Outside time window. TIME_WINDOW and DAY_OF_WEEK policy rules use the server’s local time; wallet-level time windows support explicit IANA timezones.
  • Category mismatch. If ALLOWED_CATEGORIES is set and no category is provided, the allow rule denies because the category cannot be verified. BLOCKED_CATEGORIES skips when no category is present.
Dry-run check without attempting a real payment:
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 pathUSD in its wallet.
  • Check the agent logs for transfer errors.
  • Ensure the wallet address in Conto matches the agent’s actual wallet.
If the transfer succeeded but Conto doesn’t show it, the /confirm call may have failed. Retry:
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 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.
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: