A Bitcoin wallet built for your agent.
Your agent can pay for a compute job or another paid resource in the middle of a task, on-chain through x402. You set what it may spend and where. It decides when a purchase helps the task. Routine purchases come out of a small allowance the agent signs for alone, and the rest of your funds stay in a treasury that also needs your signature.
Keys needed to spend
Pay from the allowance
Within the budgets you set
- agent key required
- policy key not required
- recovery key not required
Refill, or pay from the treasury
Each one signed by you
- agent key required
- policy key required
- recovery key not required
Sweep the treasury
You, without the agent
- agent key not required
- policy key required
- recovery key required
Recover
Once a coin's timelock passes
- agent key not required
- policy key not required
- recovery key required
The agent and recovery keys together cannot spend the treasury.
How your agent pays
The agent works through a command-line tool, and a skill tells it how to pay and when to wait for you. When a merchant answers with a 402, the wallet checks the price against the task’s grant. It pays from the allowance, or asks you first if the purchase is over a limit, then sends the proof with the original request.
What the agent gets back
- Resource available
- Paid, accepted and delivered.
- Payment pending
- Broadcast, and waiting for the confirmations the merchant asked for.
- Approval needed
- Waiting for you. The purchase spends nothing more until you answer.
- Paid, delivery unresolved
- The merchant accepted the payment and the resource has not arrived. The agent resumes the same purchase.
- Failed before payment
- Nothing was signed or sent.
The wallet saves each transaction before broadcasting it, so after a crash or a lost reply the agent resumes the same purchase with its local handle. A fresh 402 after payment is never permission to pay again. The merchant’s payment identifier never reaches the agent.
Allowance and treasury
Two balances let the agent keep buying while your phone is asleep. Only the allowance can be spent by a signer that is always online, so its size is the most a compromised agent can take.
- Allowance
- Coins the wallet can spend with the agent key alone. Purchases within a task's budget go through with no prompt. The budgets are rules the wallet enforces, because Bitcoin itself checks only the signature.
- Treasury
- The rest of your funds. Spending from the treasury needs the agent key and your policy key together. Your policy and recovery keys can also sweep it without the agent.
- Refills you sign
- When the allowance runs low, the wallet asks you for a refill of a set amount. Each refill is one transaction you review and sign. Nothing leaves the treasury on a schedule or by itself.
- Large purchases from the treasury
- A purchase too large for the allowance can be paid straight from the treasury once you sign it. You never have to park a large amount where the agent can spend it alone.
Budgets and task grants
You give each task a grant: a budget in satoshis that includes mining fees, the merchants it may pay, fee limits and an expiry. The agent cannot widen a grant. Inventing a task name, restarting or starting a child agent never creates another budget.
# A task grant. You issue it from your phone or the owner CLI.
task interview-transcripts
budget 50000 sat # mining fees included
merchants https://api.example.com
fee_ratio 2% # of each payment
fee_max 600 sat # per payment
valid_for 7 daysThe wallet also caps each transaction, each purchase including its top-ups and fee bumps, and each rolling 24 hours. Fees are checked as an amount, as a rate and as a share of the payment. When a fee breaks a limit, the wallet stops. It never takes the difference from what the merchant is owed.
What an approval is
You approve four kinds of request: a purchase over an allowance limit, a treasury refill, a treasury purchase and a change to your standing rules. A one-off approval never changes the rules for later. Approving late cannot revive an expired quote.
- A purchase over a limit
- A one-time permission for that purchase. It names the limit it overrides, and every other limit stays in force. The allowance needs no second signature, so the wallet enforces this permission in software.
- A treasury transaction
- Your policy signer reads the actual transaction before it signs: the coins spent, the recipient, the change back to your wallet and the real mining fee. If any of that changes afterwards, it needs a fresh signature. Approving on your phone shows the review screen.
- What the screen can vouch for
- Amounts, addresses and fees come from the transaction itself. A description of what is being bought comes from the agent, and the screen labels it as the agent's unless the wallet could check it against the saved quote.
- Notifications carry no details
- A push says only that an approval is waiting. The request arrives over an encrypted channel when you open the signer, and no link approves anything. With push turned off, pending requests wait in an inbox.
Same-user and locked modes
How much those budgets protect you depends on whether the agent can reach its own key. The wallet shows its mode when you set it up and in every status report.
- Same-user, the default
- One command installs it under your own account, with no administrator step. Budgets catch mistakes and repeated spending. An attacker with full control of the agent's account can read the agent key and spend the whole allowance, whatever the caps say. It still cannot spend from the treasury.
- Locked, when you want it
- An installer you approve as administrator gives the wallet its own service account. The agent can ask for purchases. It cannot read the key, change the signer or reset a budget. Someone with administrator access to the machine can still spend the allowance.
- Moving to locked mode
- File permissions cannot revoke a key that may already have been copied. Moving creates a fresh agent key inside the locked service and transfers the funds to it. Pending purchases and budgets carry over.
- No silent fallback
- If a locked install fails its isolation checks, the wallet stops and tells you. It never runs in same-user mode under a locked label.
The policy signer
The policy key is created on the device that holds it and stays there. You choose the device, and either one can sign every treasury request.
- Your phone's browser
- The phone signer is a web app Satsgate hosts, added to your Home Screen with no app store involved. It signs on the phone, so no owner computer has to stay switched on. While the phone is away, treasury requests wait and allowance purchases carry on within their budgets.
- What the phone path trusts
- The page Satsgate serves each time it loads. A malicious update could steal an unlocked key or misdescribe a transaction. Encryption, passkeys and published source reduce that risk without removing it, and the wallet says so before you fund it. The signer’s mechanism page describes how a release is built and checked.
- An owner CLI you run
- Runs on a computer you control, outside the agent's account. You choose the release and when to update. It works without the Satsgate website or relay, and can exchange signing requests as files.
- The relay
- An optional relay carries encrypted requests between the wallet and your signer. You can replace it or host your own. It holds no keys, though it can delay messages and see when they travel.
Recovery
Back up each seed, the wallet configuration and the purchase journal. A seed alone cannot rebuild a wallet that needs several keys, and the chain cannot tell you whether a merchant already delivered.
- The recovery key
- Created and kept offline, away from your phone and the agent. With the policy key it can sweep the treasury at any time. On its own it can spend a treasury coin once that coin's timelock has passed.
- The timelock runs per coin
- Each coin's delay starts when it confirms, so change created later starts its own clock. Recovery also needs the wallet configuration, a mining fee and access to the chain.
- Restoring without Satsgate
- The owner CLI restores the policy key and signs without the Satsgate website or relay. Restoring a key elsewhere does not revoke the old copy, so replacing a key that may be stolen means moving funds to a new treasury. If you lose your phone has the steps.
- A stale journal
- If a restored journal may be out of date, automatic purchases pause until it is reconciled. Budgets are not reset, and a purchase whose outcome is unclear is never treated as unpaid.
Install and run
Start with an allowance under your own account. Add the treasury and a policy signer once you hold more than you would leave with the agent.
Step 1
Install the wallet
One command installs the wallet under your own account on macOS, and Linux has packages. It creates the agent key and the purchase journal on that machine, then connects the CLI and skill to your agent. You need no Satsgate account and no administrator step. For locked mode, run the locked installer instead.
Install command: INSTALL COMMAND
Supported agent hosts: LIST OF SUPPORTED AGENT HOSTS
Step 2
Fund a small allowance
The wallet shows its mode before you fund it. In same-user mode the allowance is what a compromised agent account could spend, so send an amount you would accept losing.
Wallet statusSample mode same-user # the agent's account can reach this key receive bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4 allowance 0 sat # waiting for a deposit reserved 0 sat treasury not set upStep 3
Give a task its grant
Issue a grant for each task, like the sample above. The agent pays within it and waits for you beyond it.
Step 4
Pair a policy signer and set up the treasury
Open the phone signer and add it to your Home Screen, or install the owner CLI on a computer the agent cannot reach. Both sides confirm the pairing with a QR code or an equivalent check. Pairing exchanges public wallet details and the keys for an encrypted channel, and no seed crosses it. Then create the recovery key offline and store it apart from both.
The phone signer will be served from sign.satsgate.io, which is not live yet.
The wallet is free and open source, and the agent needs no Satsgate account. The scheme covers what it speaks on the wire.