GET STARTED

Three steps. Your bot asks before it spends.

Write a rule, point your bot at the gate, approve what needs you. The fastest way to feel it is the demo — no setup.

Try the demo first →
1
Write your rule in plain English

One sentence. The compiler turns it into allow / ask / deny.

under $50 auto; over $50 ask me; daily budget $200; never pay blacklisted-merchant
Auto-allow small spend
under $50 · up to $50 · less than $50
Ask over a line
over $50 · above $50 · more than $50
Daily budget
daily budget $200 · $200 per day
Deny / allowlist
never pay X · blacklist X · only allow X
2
Your bot asks — one call before it spends

Wherever your bot is about to pay, it POSTs the request first and reads the verdict.

curl -X POST https://<your-deploy>/api/approvals \
  -H "Content-Type: application/json" \
  -d '{ "summary":"Pay OpenAI invoice", "amountUsd":80,
        "requester":"atlas", "target":"openai",
        "policyText":"under $50 auto; over $50 ask me", "logResolved":true }'

# → { "verdict": { "verdict": "ask" },
#     "approval": { "id": "appr_9c1f…", "status": "pending" } }

allow → spend now. ask → wait for you. deny → don’t. On Grok, the grokbotwallet skill makes this call for you — no code.

3
You approve — it logs a receipt

Every ask lands in your console — one tap. Every action (allowed, approved, or denied) leaves a signed receipt: which bot, what, which rule, who approved.

Open the console →
Optional · make “deny” binding
The on-chain engine (BoundlessVault)

Steps 1–3 are opt-in — a well-behaved bot asks first. To make overspend impossible, the funds live in the vault and each bot is a member with a hard cap — it never holds the key:

  • Owner sets each bot’s caps: setMemberPolicy(bot, perTxUsd6, dailyBudgetUsd6).
  • Owner allowlists what it can touch: setAllowedAsset / setAllowedProtocol.
  • The bot spends via executeTransfer(...) — which reverts if it’s over the per-tx cap, over the daily budget, or off the allowlist. That’s the block, enforced at sign-time.
Honest scope: this contract layer isn’t wired into the hosted product yet — it’s a self-host / advanced step (Solidity in contracts/). And it enforces the declared USD amount + allowlists on-chain; a plain credit card the bot holds still can’t be blocked. On-chain is the only rail we truly gate.

See it in 30 seconds.

Try the demo →Source ↗