支出ポリシーのコントロールプレーン・鍵も資金も預からない・サイドカーはお客様の環境で動く

AI エージェントの​ための、​法人カードと​経費規程。

spendctl は AI エージェントの支出ポリシーを一元管理するコントロールプレーンです。どのウォレット・どの HTTP 402 プロトコルにも同じ予算・承認・領収書・連鎖追跡を効かせます。実行はお客様が動かすサイドカーの中で、鍵も資金も私たちは預かりません。

5分で試せます。鍵もチェーンも不要で、モックのファシリテータが同梱されています。

デモ — 4回の支払い、1回は保留→承認、領収書を書き出し
$ # The agent may spend $0.03/day on weather. Over that, a human decides.
$ spendctl budget
researcher  enforce · max $0.05/request · approval ≥ $0.50
  daily       $0.00 of $0.03      $0.03 left
  monthly     $0.00 of $20.00    $20.00 left
$ node ../agent.mjs &   # an agent with no keys, asking for 4 paid calls
[1] 66461
agent ✔ Tokyo: paid $0.01 — sunny, 18°C
agent ✔ Kyoto: paid $0.01 — cloudy, 19°C
agent ✔ Sapporo: paid $0.01 — light rain, 20°C
agent ‖ Osaka: spendctl is holding this request until a human decides

$ spendctl pending
ID                  AGENT       ENDPOINT                AMOUNT  EXPIRES  WHY
apr_mvmp68jvjnsmy6  researcher  localhost:4021/weather  $0.01   595s     $0.01 would exceed the daily budget of $0.03
$ spendctl approve --latest
✔ approved apr_mvmp68jvjnsmy6
agent ✔ Osaka: paid $0.01 (approved by a human) — clear, 21°C

[1]+  Done                    node ../agent.mjs
$ spendctl ledger
TIME (UTC)      ID                  AGENT       ENDPOINT                    USD    STATUS   TX / REASON
10-24 17:53:19  pay_mvmp68ju3jze4c  researcher  GET localhost:4021/weather  $0.01  settled  0x0d2aa1e97a887…
10-24 17:53:19  pay_mvmp68jbbn6exg  researcher  GET localhost:4021/weather  $0.01  settled  0x6c0acb888dc4d…
10-24 17:53:19  pay_mvmp68in2q3dka  researcher  GET localhost:4021/weather  $0.01  settled  0x8265dc5b3ae92…
10-24 17:53:19  pay_mvmp68g8nvwcj3  researcher  GET localhost:4021/weather  $0.01  settled  0xe68f3a8554452…
$ spendctl export --format csv --out receipts.csv   # for the expense report
✔ wrote 4 row(s) to receipts.csv
$
デモ — 4回の支払い、1回は保留→承認、領収書を書き出し
  1. $ spendctl budget → researcher: daily $0.00 of $0.03 · max $0.05/request · approval ≥ $0.50
  2. $ node ../agent.mjs & # an agent with no keys, asking for 4 paid calls
  3. agent ✔ Tokyo: paid $0.01 — sunny, 18°C
  4. agent ✔ Kyoto: paid $0.01 — cloudy, 19°C
  5. agent ✔ Sapporo: paid $0.01 — light rain, 20°C
  6. agent ‖ Osaka: spendctl is holding this request until a human decides
  7. $ spendctl pending → apr_mvmp68jvjnsmy6 · $0.01 · 595s · $0.01 would exceed the daily budget of $0.03
  8. $ spendctl approve --latest → ✔ approved apr_mvmp68jvjnsmy6
  9. agent ✔ Osaka: paid $0.01 (approved by a human) — clear, 21°C
  10. $ spendctl ledger → 4 rows, all settled, each with a tx hash
  11. $ spendctl export --format csv --out receipts.csv → ✔ wrote 4 row(s) to receipts.csv

プロンプトは支出管理になりません

x402 の仕様はクライアント側の予算管理を対象外とし、SDK のガードレールはエージェント自身のプロセスの中で動き、公式クライアントはサーバーが求めた額をそのまま払います(x402#3866)。開発者の声:

“The trust unit is the policy, not the payment.”

信頼の単位は支払いではなく、ポリシーだ。

— novachen, Hacker News, 2026-03-15
“Asking the assistant to follow instructions more carefully does not provide a dependable spending control.”

アシスタントに「もっと慎重に指示に従って」と頼んでも、当てにできる支出管理にはならない。

— mschilingno, GitHub openai/codex#45536, 2026-09-14
“I gave openclaw a bitcoin wallet and $100 to spend. ... With in minutes it had spent all the budget buying fake follows on an X account that was similar to mine.”

ビットコインのウォレットと 100 ドルを渡したら、数分で全額を、自分に似た X アカウントの偽フォロワー購入に使われた。

— dangerface, Hacker News, 2026-10-20

仕組み

Agent to sidecar to seller; the control plane sits off the payment pathエージェント鍵を持たないリクエストspendctl サイドカーお客様の環境で、エージェントの隣で動くポリシー判定ローカルで署名402 · 支払い販売者x402 / MPPコントロールプレーンポリシー・承認・台帳支払い経路の外Agent to sidecar to seller; the control plane sits off the payment pathエージェント鍵を持たないリクエストspendctl サイドカーお客様の環境で、エージェントの隣で動くポリシー判定ローカルで署名402 · 支払い販売者x402 / MPPコントロールプレーンポリシー・承認・台帳支払い経路の外
1

エージェントが頼む

エージェントは spendctl 経由で API を呼びます。鍵は持ちません。

2

販売側が 402 を返す

spendctl が x402(v1/v2)や MPP の価格を読み、そのエージェントのポリシーと照らします。

3

ポリシーが決める

許可、モデルが読める理由つきの拒否、または CLI・Slack・確認リンクで人間の判断待ち。

4

1回だけ払って記録

予算を原子的に予約し、ウォレットが1回だけ署名。領収書と tx ハッシュは台帳へ。

破らないルール

どれも端から端まで確かめるシナリオで、CI のたびに2回ずつ実行しています。

  • 予算を超える支払いには署名しない
  • 許可リスト外のホストには支払わない
  • 受取先のすり替えや10倍の値上げは人間の確認が必要
  • 同時に来たリクエストでも、1回分たりとも予算を超えない
  • エージェントは支払いの添付・使い回し・自己承認ができない
  • 決済に失敗した支払いを黙って再送しない

セキュリティモデルを見る →

連携先

どの言語からも使えるゲートウェイ URL、依存ゼロの fetch ラッパー、MCP サーバーを用意しています。

  • x402 v1 / v2
  • Stripe MPP
  • MCP
  • Claude Agent SDK
  • OpenAI Agents SDK
  • LangGraph
  • Coinbase CDP wallets
  • Base

料金

Free はサイドカーの全機能が使えて、カード登録は不要です。Pro と Team は spendctl コントロールプレーン(Slack 承認、ホスト側の台帳、定期的な書き出し、SSO、共有予算)を加えます。コントロールプレーンは開発中で、Pro と Team は提供開始までの Founding 先行予約です。

Free

$0

カード不要。ポリシーを強制する機能はすべて入っています。

  • エージェント2・ポリシー1・シート1
  • 月 1,000 件の管理対象支払い
  • ローカル台帳と CSV / JSON 書き出し、ホスト側コピー7日、ローカルサンドボックス
  • CLI / Webhook での承認
  • 上限に達したら停止(超過課金なし)
はじめる

Team

$149/月Founding 価格通常価格 $249/月

Founding 先行予約。コントロールプレーンは開発中です。

  • エージェント無制限
  • 月 500,000 イベント
  • 1年間の改ざんできない台帳
  • SSO / RBAC、共有予算
  • サイドカー横断の連鎖追跡、ポリシーの CI 検証、リージョン固定
Founding 価格で予約

Enterprise

要相談

個別にご相談ください。

  • SIEM 連携、SCIM
  • 保存期間のカスタマイズ(最長7年)
  • 専用のコントロールプレーン
  • 二者承認、SLA
相談する

Founding 価格は最初の100社が対象で、GA から12か月間固定。Pro と Team の超過分は 10万イベントごとに $5。Team は14日間の無料トライアル(カード不要)。支払額に対する手数料は一切ありません。

Founding 価格で予約する

プランと、ライセンスに刻まれる組織 id を決めてから Stripe で支払います。キーは 1 分以内にメールで届きます。

2〜40 文字、英小文字・数字・ハイフン。spendctl license に表示され、お問い合わせ時の照合にも使います。後から変更できません。

決済は Stripe が処理します。Founding 価格はコントロールプレーンの GA から 12 か月固定。解約は Stripe の領収書からいつでも。

コントロールプレーンの早期アクセス

spendctl コントロールプレーンの提供開始時に一度だけメールします。ニュースレターは送りません。

保存するのはメールアドレスと言語だけで、コントロールプレーンの提供開始のお知らせにのみ使います。 プライバシー

よくある質問

鍵はどこに置かれますか?

エージェントには置きません。既定では Coinbase CDP のサーバーウォレットで署名するため、秘密鍵は CDP の外に出ず、手元から出ていくのは EIP-712 の署名依頼だけです。環境変数の秘密鍵を使うこともできますが、明示的に選んだときだけです。エージェントはエージェントごとの ID でサイドカーとやり取りし、管理トークンには触れません。

プロンプトインジェクションされたエージェントに払わされませんか?

「払いたい」と言わせることはできても、答えは変えられません。予算・許可リスト・受取先の固定・承認しきい値は、モデルが編集できないポリシーファイルにあり、別プロセスで判定されます。拒否の理由は平文で返るので、モデルは同じ要求を繰り返さずに理由を説明できます。

偽の 402 や受取先のすり替えには?

ポリシーは、402 が名乗る URL ではなく、実際に呼んだホストに対して判定します。ホストごとに受取先を固定でき、初めての受取先への支払い額に上限を設けたり、価格が急に上がったとき(たとえば同じエンドポイントの前回の3倍超)に人間の確認を必須にしたりできます。

二重に払うことはありませんか?

1つの判定につき署名は最大1回で、失敗後に署名済みの支払いを再送することはありません。再送は Idempotency-Key で重複を排除し、販売側が対応していれば x402 の payment-identifier 拡張も使います。結果が分からないもの(支払いを送った後のタイムアウトなど)は「不明」として記録し、突き合わせるまで予算に計上します。

x402 には返金がありません。どう身を守ればいいですか?

支払う前に被害の範囲を絞ります。ホストを許可リストで限定し、受取先を固定し、1回あたりの上限を低くし、新しい受取先や値上げには承認を必須にし、ウォレットの残高は少なめに保ちます。台帳には tx ハッシュと署名つきレシート(あれば)が残るので、紛争時の証拠になります。

お金を預かるのですか?

預かりません。署名はお客様が動かすサイドカーの中で、お客様自身のウォレット(Coinbase CDP のサーバーウォレットか、ご自身の鍵)に対して行われます。spendctl が鍵や資金を持つことはなく、資金はあなたのウォレットから販売者へ直接オンチェーンで移動します。コントロールプレーン(開発中)が保存するのはポリシー・承認・台帳だけで、鍵や資金は預からず、署名を中継することもありません。法的助言ではありません。

台帳は経費精算や会計に使えますか?

各行に UTC の時刻、エージェント、エンドポイント、金額、資産、ネットワーク、受取先、tx ハッシュがあり、CSV や JSON で書き出せます。USD 換算はステーブルコインを 1:1 と見なした値です。USDC での支払いの税務上の扱いは国によって異なるため、税理士にご確認ください。

Stripe やウォレットのポリシー機能、SDK の spend controls ではだめですか?

それらも併用してください。spendctl はその前段に立ちます。SDK の制御はエージェントの中で動き、1回あたりの上限しか持ちません。ウォレットのポリシーエンジンは自社の鍵しか見えず、x402 の typed-data 署名を対象にできないことも多いです。ホスト型の基盤が管理できるのは、自社が預かるウォレットだけです。上限そのものは Coinbase や AWS の純正ツールで無料で手に入ります。足りないのは、それら全部をまたぐひとつのポリシー・承認フロー・台帳です。spendctl は、すでにお持ちのウォレットを、お客様が動かすサイドカーの中で管理します。

x402 や MPP は仕様が変わり続けます。壊れませんか?

通信形式は公式 SDK のエンコーダを使う小さなアダプタに閉じ込めていて、x402 は v1 と v2 の両方を今すでに読めます。上流の仕様が変わると、毎週の CI ジョブが Issue を立てます。