Five steps. Small things run, big things ask, everything receipts — and anyone can check a receipt without asking us. Or use the guided setup →
On your Grok host, install the plugin from GitHub:
grok plugin install richard7463/askgrokwallet --trust
The skill appears in /skills — enable it in Settings → Plugins.
payments under $50 run automatically; over $50 ask me; daily budget $200; never pay blacklisted merchants
Trading bots get extra risk stops:
trades under $10 run automatically; over $10 ask me; max drawdown $50; daily loss limit $20; never trade pump-dump tokens
Account changes and deletes are gated by action type:
Ask me before cancel, downgrade, delete, or send. Never cancel without asking.
Send the action's intentKind (cancel, downgrade, delete, send, trade, purchase, …) with the request — consequential actions default to ask unless your policy allows them.
Before your bot pays, swaps, or transfers, it sends the request. The engine answers in one of three ways:
curl -s https://askgrokwallet.io/api/approvals \
-H 'Content-Type: application/json' \
-d '{"source":"demo","requester":"my-bot","summary":"swap 5 USDC for ETH",
"amountUsd":5,"target":"uniswap",
"policyText":"trades under $10 run automatically; over $10 ask me; max drawdown $50",
"drawdownUsd":3,"lossTodayUsd":1}'source:"demo" is keyless. Other sources need a bearer token.
An ask lands in your approval inbox. Approve or deny there (or via POST /api/approvals/{id}).
Approving or denying writes an Ed25519-signed receipt and appends it to a public log. One request produces one entry per signing moment — created, decided, settled — so "it was pending, this person approved it, this tx executed it" is all locked, not just the final state.
One file, no dependencies, short enough to read before you run it:
BASE=https://github.com/askgrokwallet/askgrokwallet/releases/download/verify-receipt-v1.0.1 curl -sLO $BASE/verify-receipt.mjs && curl -sLO $BASE/SHA256SUMS shasum -a 256 -c SHA256SUMS # check the bytes BEFORE running them node verify-receipt.mjs receipt.json
signature ✓ 22 fields signed (v3) · key 39626850145403d3 (pinned in this file) chain ✓ entry 11 of 50 (imported) · links unbroken back to 1 onchain ✓ head 11 written in 0x… block … · chain 11155111 verdict ✓ genuine, and fixed onchain
What each line means, and who you have to trust for it:
--key= and this check runs fully offline: it never touches this server.The tool prints ~ rather than a tick when a check was skipped or is not yet possible — a receipt issued minutes ago is not anchored yet, and it says so. A verifier that cries wolf is one you would learn to ignore.
And a ✓ is a statement about the record, not about a payment. An approval, a denial, and a receipt with no transaction all authenticate exactly as well as a payment does. ~ means unverified — never read it as a pass. If you need "did the money move", read the transaction the receipt names.