承認フロー
requireApprovalAbove を超えたとき、onBudgetExceeded: approve で予算を超えたとき、新しい受取先への高額な初回支払い、価格の急変のいずれかで、人間の確認が必要になります。
保留モード(既定):誰かが判断するか approvals.timeout を過ぎる(その場合は拒否)まで、エージェントのリクエストを開いたまま待ちます。CLI やスクリプトに向いています。
再送モード(hold: false):spendctl はすぐに 402 を返し、本文に "error": "spendctl_approval_required" と approval ID を入れます。承認後、エージェントは X-Spendctl-Approval: <id> を付けて再送します。1つの承認で払えるのは1回の再送だけです。
判断のしかた
Section titled “判断のしかた”spendctl pendingspendctl approve apr_… # --latest / --all も使えるspendctl deny apr_… --note "キャッシュの結果を使って"- ダッシュボード:
spendctl dashboard --open - Webhook:
format: json | slack | discord。理由、CLI コマンド、確認リンクが入ります。secretEnvを設定すると本文に署名します(X-Spendctl-Signature: sha256=…)。 - 確認リンク:管理トークンで HMAC 束縛されています。開く(GET)だけでは内容を表示するだけで、承認・拒否のボタンは POST で動きます(チャットアプリはリンクを先読みするため)。
エージェントは承認できません。どの判断にも .spendctl/admin.token(パーミッション 0600)の管理トークンが必要です。