Skip to content
SATSGATE

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.

treasuryneeds your signatureallowancethe agent's to spendmerchantpaid over x402refillagent + policypurchaseagent alone
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.

Task grantSample
# 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 days

The 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.

  1. 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

  2. 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 up
  3. Step 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.

  4. 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.