# Let software spend BSV on someone's behalf: every rule

Every do and don't the guide states on the pages behind this skill. The costly ones come first; the full list follows, grouped by page. Quote them; do not paraphrase them.

59 rules: 12 that can cost money, 15 that can cost trust, 32 standard.

## Start here

- **DO** _(Costs money)_ Fund an agent by deliberate top-up, as a human action. A standing instruction to refill is the thing that turns a bounded loss into an unbounded one.
  <https://www.bitcoinsv.design/guide/rule/a96515e0c0/>
- **DON'T** _(Costs money)_ Hand an agent the user's identity key or their Passes. It can have its own identity and act as itself; it should never be able to prove it is the person.
  <https://www.bitcoinsv.design/guide/rule/a4ece91f55/>
- **DO** _(Costs money)_ Enforce limits outside the agent, in the wallet or the service holding its keys. A limit the agent checks itself is a limit an injected instruction can argue with.
  <https://www.bitcoinsv.design/guide/rule/63a9fc8258/>
- **DO** _(Costs money)_ Show the amount and the payee from the payment Scout's wallet refused, and Scout's explanation separately, labelled as Scout's. If the explanation names a different amount, show both and say they disagree.
  <https://www.bitcoinsv.design/guide/rule/fa105418c9/>
- **DON'T** _(Costs money)_ Put "Always allow" or "Add to Scout's services" on the approval screen. Widening Scout's scope from a notification is how one odd request becomes a standing permission.
  <https://www.bitcoinsv.design/guide/rule/44db19b4c1/>
- **DON'T** _(Costs money)_ Let the assistant approve its own request, or accept an approval from anywhere other than Anna's own device.
  <https://www.bitcoinsv.design/guide/rule/54786d4a9a/>
- **DO** _(Costs money)_ Refuse a payment above the price shown on the limits screen, even when it is inside the per-payment limit, and send it to Anna like any other request outside scope.
  <https://www.bitcoinsv.design/guide/rule/23eeedf9ef/>
- **DO** _(Costs money)_ Cap paid retries to one service at a fixed number per task, show that number on the limits screen, and stop using the service when it is reached. Each retry is another payment, and a loop of small failures is how an agent spends its budget on nothing.
  <https://www.bitcoinsv.design/guide/rule/5b82904b28/>
- **DO** _(Costs money)_ Make pausing take effect in Scout's wallet, not in the assistant. Spending stops even if the assistant is still running or has not noticed.
  <https://www.bitcoinsv.design/guide/rule/35dd3d1ba8/>
- **DO** _(Costs money)_ Offer only the wallet that funded Scout as the destination for what is left. A payee chosen at the end of a delegation is a payee nobody vetted.
  <https://www.bitcoinsv.design/guide/rule/1b0b0bbfed/>
- **DON'T** _(Costs money)_ Let the everyday wallet draw from savings on its own. A compromised app could then drain both.
  <https://www.bitcoinsv.design/guide/rule/e9ca132d95/>
- **DON'T** _(Costs money)_ Give an agent wallet access to savings, the owner's identity key or Passes, or the ability to reveal key linkage.
  <https://www.bitcoinsv.design/guide/rule/9e9222d5c4/>
- **DO** _(Costs trust)_ Require a human for anything outside the scope: a new payee, a larger amount, a wider permission. Send the person a notification for it, rather than adding it to a list they have to check.
  <https://www.bitcoinsv.design/guide/rule/8f8a59fa96/>
- **DO** _(Costs trust)_ Record what each payment was for at the moment it happens. Intent cannot be reconstructed afterwards.
  <https://www.bitcoinsv.design/guide/rule/e68f2cc069/>
- **DO** _(Costs trust)_ Surface the unusual rather than the complete. A payee it has never paid, or a payment larger than its usual, belongs at the top; the routine belongs in a total.
  <https://www.bitcoinsv.design/guide/rule/03963e9df4/>
- **DON'T** _(Costs trust)_ Report agent spending only in a log. A log is for after somebody already suspects something.
  <https://www.bitcoinsv.design/guide/rule/74988614f8/>
- **DO** _(Costs trust)_ Put one control that stops everything, visible wherever the agent is, with no confirmation step. Confirmations are for actions you might regret, and stopping is not one of them.
  <https://www.bitcoinsv.design/guide/rule/d715b16a24/>
- **DO** _(Costs trust)_ Name the agent and its purpose wherever its spending appears. "Example Assistant, buying search results" is a thing a person can consent to; "automated payments" is not.
  <https://www.bitcoinsv.design/guide/rule/155356ce9f/>
- **DON'T** _(Costs trust)_ Offer to connect Scout to Bitcoin SV Wallet with a spending permission as a quicker alternative. Two routes to the same task make the safer one look like the slow one.
  <https://www.bitcoinsv.design/guide/rule/0b18fa39bf/>
- **DON'T** _(Costs trust)_ Ask Anna to switch on a low-balance refill during funding. Topping up is a separate decision each time, made when she can see what the last budget bought.
  <https://www.bitcoinsv.design/guide/rule/e0a63a7226/>
- **DO** _(Costs trust)_ Say plainly when a service kept the money: "Example Data was paid 15 sats and sent nothing back." Whether money moved is the first thing the errors pattern asks every failure to answer.
  <https://www.bitcoinsv.design/guide/rule/62372051f5/>
- **DO** _(Costs trust)_ Record Scout's reason with each payment at the moment it is made, and keep it unchangeable. A reason written afterwards is a story, not a record.
  <https://www.bitcoinsv.design/guide/rule/aa39be0fe6/>
- **DON'T** _(Costs trust)_ Present Scout's note in the same style as the amount and payee. The amount and payee come from the payment; the note comes from the agent, and the screen should show the difference.
  <https://www.bitcoinsv.design/guide/rule/d9a50748d3/>
- **DON'T** _(Costs trust)_ Offer "Get a refund" or "Dispute" on an agent payment. Scout cannot reverse a payment, and a button that implies it can will be pressed and will fail.
  <https://www.bitcoinsv.design/guide/rule/eabf7ac795/>
- **DO** _(Costs trust)_ Show the exact time spending stopped, and whether a payment was already on its way at that moment: "The last payment, 20 sats to The Satoshi Vision at 14:32, went through before you paused."
  <https://www.bitcoinsv.design/guide/rule/e088a098bd/>
- **DON'T** _(Costs trust)_ Let Scout's stop message argue for resuming. "I was nearly there" turns a safety control into a negotiation with the thing being stopped.
  <https://www.bitcoinsv.design/guide/rule/f20efb8ac0/>
- **DO** _(Costs trust)_ Say on the revoke screen that the money left in Scout's wallet stays there until Anna sends it back, and show the amount.
  <https://www.bitcoinsv.design/guide/rule/c7dc404e84/>

## Every rule, by page

### Letting an agent spend

https://www.bitcoinsv.design/guide/patterns/letting-an-agent-spend/

- **DO** _(Costs money)_ Fund an agent by deliberate top-up, as a human action. A standing instruction to refill is the thing that turns a bounded loss into an unbounded one.
  <https://www.bitcoinsv.design/guide/rule/a96515e0c0/>
- **DON'T** _(Costs money)_ Hand an agent the user's identity key or their Passes. It can have its own identity and act as itself; it should never be able to prove it is the person.
  <https://www.bitcoinsv.design/guide/rule/a4ece91f55/>
- **DO** Show all four on one screen, as current values rather than settings. "412 of 5,000 sats, 18 payments today, 3 services, 22 days left" is a status, and a settings form is not.
  <https://www.bitcoinsv.design/guide/rule/ae1053b72e/>
- **DO** _(Costs money)_ Enforce limits outside the agent, in the wallet or the service holding its keys. A limit the agent checks itself is a limit an injected instruction can argue with.
  <https://www.bitcoinsv.design/guide/rule/63a9fc8258/>
- **DO** _(Costs trust)_ Require a human for anything outside the scope: a new payee, a larger amount, a wider permission. Send the person a notification for it, rather than adding it to a list they have to check.
  <https://www.bitcoinsv.design/guide/rule/8f8a59fa96/>
- **DO** Group by purpose, not by payment. "Research assistant: 6 sources, 240 sats" is reviewable; forty rows are not.
  <https://www.bitcoinsv.design/guide/rule/5199ba4b4f/>
- **DO** _(Costs trust)_ Record what each payment was for at the moment it happens. Intent cannot be reconstructed afterwards.
  <https://www.bitcoinsv.design/guide/rule/e68f2cc069/>
- **DO** _(Costs trust)_ Surface the unusual rather than the complete. A payee it has never paid, or a payment larger than its usual, belongs at the top; the routine belongs in a total.
  <https://www.bitcoinsv.design/guide/rule/03963e9df4/>
- **DON'T** _(Costs trust)_ Report agent spending only in a log. A log is for after somebody already suspects something.
  <https://www.bitcoinsv.design/guide/rule/74988614f8/>
- **DO** _(Costs trust)_ Put one control that stops everything, visible wherever the agent is, with no confirmation step. Confirmations are for actions you might regret, and stopping is not one of them.
  <https://www.bitcoinsv.design/guide/rule/d715b16a24/>
- **DO** Say what stopping means: no further payments, work in progress abandoned, funds stay where they are. A user who is not sure what the button does will not press it.
  <https://www.bitcoinsv.design/guide/rule/e430eb4b01/>
- **DO** _(Costs trust)_ Name the agent and its purpose wherever its spending appears. "Example Assistant, buying search results" is a thing a person can consent to; "automated payments" is not.
  <https://www.bitcoinsv.design/guide/rule/155356ce9f/>
- **DO** Report on a human schedule. A daily summary a person reads beats a real-time feed nobody watches.
  <https://www.bitcoinsv.design/guide/rule/4c5769140c/>

### Setting it up

https://www.bitcoinsv.design/guide/agent-with-a-budget/setting-it-up/

- **DO** Say on Scout's first screen, in one line, that the worst case is the amount Anna sends it. "Scout can't spend more than you give it" is the reassurance the whole design rests on.
  <https://www.bitcoinsv.design/guide/rule/b17d517e89/>
- **DON'T** _(Costs trust)_ Offer to connect Scout to Bitcoin SV Wallet with a spending permission as a quicker alternative. Two routes to the same task make the safer one look like the slow one.
  <https://www.bitcoinsv.design/guide/rule/0b18fa39bf/>
- **DO** Show the services row as named services with their prices, never as a field where Anna types an address or a domain.
  <https://www.bitcoinsv.design/guide/rule/600ee0cdee/>
- **DO** Translate the budget into what it buys for this task: "10,000 sats is about 2,000 data requests, or 500 articles." The number only means something beside its use.
  <https://www.bitcoinsv.design/guide/rule/b46e69a9e3/>
- **DON'T** Offer "no end date" as an option on this screen. A delegation with no end is the one nobody comes back to review.
  <https://www.bitcoinsv.design/guide/rule/aca3d05001/>
- **DO** Request exactly the budget Anna set. If she changes the amount in Bitcoin SV Wallet, show the new figure as Scout's budget on the next screen rather than holding on to the old one.
  <https://www.bitcoinsv.design/guide/rule/645df8240b/>
- **DON'T** _(Costs trust)_ Ask Anna to switch on a low-balance refill during funding. Topping up is a separate decision each time, made when she can see what the last budget bought.
  <https://www.bitcoinsv.design/guide/rule/e0a63a7226/>
- **DO** List on the review what will come to Anna for approval: "a new service", "anything over 100 sats", "going over 3,000 sats in a day". The approvals are part of the deal, not a surprise later.
  <https://www.bitcoinsv.design/guide/rule/1ef33c2502/>
- **DO** Name on the review the one device where approvals will arrive, and accept approvals only there.
  <https://www.bitcoinsv.design/guide/rule/0a318cffc3/>
- **DO** Say when and where the daily summary will arrive, and let Anna change the time on this screen.
  <https://www.bitcoinsv.design/guide/rule/850d2dd497/>
- **DO** Disable Start Scout until the top-up has arrived, and say so beside the button: "Waiting for 10,000 sats from Bitcoin SV Wallet".
  <https://www.bitcoinsv.design/guide/rule/3b3d4d7f93/>
- **DON'T** Move the status strip into a settings page once setup is done. Anna checks on Scout from where its work is, and that is where the total and the pause belong.
  <https://www.bitcoinsv.design/guide/rule/d2d9f88b88/>

### While it works

https://www.bitcoinsv.design/guide/agent-with-a-budget/while-it-works/

- **DO** Show each purchase in the task view beside the step of the task it served, so "4 articles" reads as part of the research rather than a separate bill.
  <https://www.bitcoinsv.design/guide/rule/9e1c785b81/>
- **DON'T** Notify Anna's phone for payments inside the limits. She is not watching on purpose, and a buzz per article would teach her to silence Scout entirely.
  <https://www.bitcoinsv.design/guide/rule/ec2a6e2139/>
- **DO** _(Costs money)_ Show the amount and the payee from the payment Scout's wallet refused, and Scout's explanation separately, labelled as Scout's. If the explanation names a different amount, show both and say they disagree.
  <https://www.bitcoinsv.design/guide/rule/fa105418c9/>
- **DO** Name every limit the request breaks: "New service" and "Over 100 sats a payment". Anna is deciding whether the limits were wrong or the request is.
  <https://www.bitcoinsv.design/guide/rule/1c366db638/>
- **DON'T** _(Costs money)_ Put "Always allow" or "Add to Scout's services" on the approval screen. Widening Scout's scope from a notification is how one odd request becomes a standing permission.
  <https://www.bitcoinsv.design/guide/rule/44db19b4c1/>
- **DON'T** _(Costs money)_ Let the assistant approve its own request, or accept an approval from anywhere other than Anna's own device.
  <https://www.bitcoinsv.design/guide/rule/54786d4a9a/>
- **DO** Show what the budget bought on the same screen that says it is spent. Anna decides whether to top up by judging the last budget, not by looking at a zero.
  <https://www.bitcoinsv.design/guide/rule/e1780d0bae/>
- **DO** Offer to finish the task with what Scout has already bought, as an equal choice beside topping up.
  <https://www.bitcoinsv.design/guide/rule/ce0f51aa97/>
- **DO** _(Costs money)_ Refuse a payment above the price shown on the limits screen, even when it is inside the per-payment limit, and send it to Anna like any other request outside scope.
  <https://www.bitcoinsv.design/guide/rule/23eeedf9ef/>
- **DO** _(Costs trust)_ Say plainly when a service kept the money: "Example Data was paid 15 sats and sent nothing back." Whether money moved is the first thing the errors pattern asks every failure to answer.
  <https://www.bitcoinsv.design/guide/rule/62372051f5/>
- **DO** _(Costs money)_ Cap paid retries to one service at a fixed number per task, show that number on the limits screen, and stop using the service when it is reached. Each retry is another payment, and a loop of small failures is how an agent spends its budget on nothing.
  <https://www.bitcoinsv.design/guide/rule/5b82904b28/>

### Reviewing what it did

https://www.bitcoinsv.design/guide/agent-with-a-budget/reviewing-what-it-did/

- **DO** Put refused payments, approvals Anna gave, and any service that kept money without delivering at the top of the daily summary, above the total.
  <https://www.bitcoinsv.design/guide/rule/ab3f4fb4d8/>
- **DO** Say "Nothing unusual today" when that is true. A summary that only ever lists problems leaves Anna unsure whether a quiet one means no problems or a missing section.
  <https://www.bitcoinsv.design/guide/rule/5c690eddfa/>
- **DON'T** Send a summary on a day Scout spent nothing and nothing changed. A daily message with no news is the fastest way to have the useful ones ignored.
  <https://www.bitcoinsv.design/guide/rule/e5e2608c48/>
- **DO** Mark every payment in the trail with the task it served. A payment that belongs to no task is itself something to flag.
  <https://www.bitcoinsv.design/guide/rule/8bcab9ebae/>
- **DO** Show refused payments in the trail beside the ones that went through, marked "Refused, nothing sent". What Scout tried to buy is part of what it did.
  <https://www.bitcoinsv.design/guide/rule/4615a804a2/>
- **DO** _(Costs trust)_ Record Scout's reason with each payment at the moment it is made, and keep it unchangeable. A reason written afterwards is a story, not a record.
  <https://www.bitcoinsv.design/guide/rule/aa39be0fe6/>
- **DON'T** _(Costs trust)_ Present Scout's note in the same style as the amount and payee. The amount and payee come from the payment; the note comes from the agent, and the screen should show the difference.
  <https://www.bitcoinsv.design/guide/rule/d9a50748d3/>
- **DO** Put Pause Scout on any payment Anna has flagged, so she can stop it from the place she noticed the problem.
  <https://www.bitcoinsv.design/guide/rule/1bdb8b66ac/>
- **DON'T** _(Costs trust)_ Offer "Get a refund" or "Dispute" on an agent payment. Scout cannot reverse a payment, and a button that implies it can will be pressed and will fail.
  <https://www.bitcoinsv.design/guide/rule/eabf7ac795/>

### Stopping it

https://www.bitcoinsv.design/guide/agent-with-a-budget/stopping-it/

- **DO** _(Costs trust)_ Show the exact time spending stopped, and whether a payment was already on its way at that moment: "The last payment, 20 sats to The Satoshi Vision at 14:32, went through before you paused."
  <https://www.bitcoinsv.design/guide/rule/e088a098bd/>
- **DO** _(Costs money)_ Make pausing take effect in Scout's wallet, not in the assistant. Spending stops even if the assistant is still running or has not noticed.
  <https://www.bitcoinsv.design/guide/rule/35dd3d1ba8/>
- **DON'T** Ask "Are you sure?" before pausing. Pausing costs nothing and can be undone; a question in front of it only slows down the person who is worried.
  <https://www.bitcoinsv.design/guide/rule/9a51765140/>
- **DO** Say how far the task got and what was already bought, so Anna can decide between resuming, finishing with what there is, and ending.
  <https://www.bitcoinsv.design/guide/rule/3b20dc3c25/>
- **DO** Say what happened to any approval that was waiting: still waiting while paused, cancelled when revoked.
  <https://www.bitcoinsv.design/guide/rule/724639a2fc/>
- **DON'T** _(Costs trust)_ Let Scout's stop message argue for resuming. "I was nearly there" turns a safety control into a negotiation with the thing being stopped.
  <https://www.bitcoinsv.design/guide/rule/f20efb8ac0/>
- **DO** _(Costs trust)_ Say on the revoke screen that the money left in Scout's wallet stays there until Anna sends it back, and show the amount.
  <https://www.bitcoinsv.design/guide/rule/c7dc404e84/>
- **DON'T** Bundle revoking with deleting Scout's activity. Anna may end the job precisely because she wants to look at what happened.
  <https://www.bitcoinsv.design/guide/rule/6ab983417a/>
- **DO** _(Costs money)_ Offer only the wallet that funded Scout as the destination for what is left. A payee chosen at the end of a delegation is a payee nobody vetted.
  <https://www.bitcoinsv.design/guide/rule/1b0b0bbfed/>
- **DO** Close the job with the three numbers Anna will want to reconcile: what she sent, what Scout spent, and what came back.
  <https://www.bitcoinsv.design/guide/rule/65cc5a0d71/>

### Wallet setups

https://www.bitcoinsv.design/guide/how-it-works/wallet-setups/

- **DO** After the first money arrives, suggest a maximum balance, and offer to move anything above it to savings.
  <https://www.bitcoinsv.design/guide/rule/afdd155583/>
- **DON'T** _(Costs money)_ Let the everyday wallet draw from savings on its own. A compromised app could then drain both.
  <https://www.bitcoinsv.design/guide/rule/e9ca132d95/>
- **DON'T** _(Costs money)_ Give an agent wallet access to savings, the owner's identity key or Passes, or the ability to reveal key linkage.
  <https://www.bitcoinsv.design/guide/rule/9e9222d5c4/>
- **DO** Ask "How much would you be comfortable losing if this phone were stolen?" when suggesting a limit, instead of offering a fixed amount.
  <https://www.bitcoinsv.design/guide/rule/827ff57c2f/>
