コンテンツにスキップ

承認フロー

requireApprovalAbove を超えたとき、onBudgetExceeded: approve で予算を超えたとき、新しい受取先への高額な初回支払い、価格の急変のいずれかで、人間の確認が必要になります。

保留モード(既定):誰かが判断するか approvals.timeout を過ぎる(その場合は拒否)まで、エージェントのリクエストを開いたまま待ちます。CLI やスクリプトに向いています。

再送モード(hold: false):spendctl はすぐに 402 を返し、本文に "error": "spendctl_approval_required" と approval ID を入れます。承認後、エージェントは X-Spendctl-Approval: <id> を付けて再送します。1つの承認で払えるのは1回の再送だけです。

ターミナルウィンドウ
spendctl pending
spendctl 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)の管理トークンが必要です。