{
  "what": "shutupandtakemysats.dev — receipt for one morning of an agent spending bitcoin",
  "date": "2026-08-29",
  "wallet": {
    "type": "non-custodial bitcoin (Breez SDK / Spark) exposed to Claude via MCP",
    "tools": ["top_up", "pay", "get_balance", "get_history"],
    "controls": {
      "per_payment_cap_usd": 100,
      "daily_budget_usd": 200,
      "auto_approve_under_usd": 2,
      "auto_approve_daily_cap_usd": 10,
      "max_payments_per_hour": 10,
      "approval": "native OS dialog, out-of-band from the model; timeout = deny"
    }
  },
  "ledger": [
    { "time": "12:13Z", "event": "top_up", "rail": "lightning", "sats": 6500, "usd": 5.04 },
    { "time": "12:20Z", "event": "donation", "to": "OpenSats (opensats.org)", "rail": "lightning-address", "sats": -500, "fee_sats": 4, "approval": "auto" },
    { "time": "12:33Z", "event": "purchase", "what": "gift card (~$1) at a real checkout", "rail": "lightning (USDC-on-Base rail was gated; agent rerouted)", "sats": -1276, "fee_sats": 6, "approval": "auto" },
    { "time": "12:51Z", "event": "top_up", "rail": "lightning", "sats": 8500, "usd": 6.59 },
    { "time": "~13Z", "event": "purchase", "what": "this domain, 1yr, via L402 (402 → invoice → pay → preimage)", "rail": "lightning", "sats": -12889, "approval": "human clicked the dialog" },
    { "time": "after", "event": "publish", "what": "this site" }
  ],
  "note": "Assume the agent is compromised; the controls hold anyway. The refusal that mattered: the agent was not permitted to raise its own spending caps, even when the human asked from chat.",
  "no": ["analytics", "cookies", "accounts", "custody", "personal data"]
}
