支出策略控制平面 · 不托管密钥与资金 · 边车(sidecar)由你运行

给 AI 智能体的​公司卡和报销制度。

spendctl 是面向 AI 智能体的支出策略控制平面:在每一个钱包和每一种 HTTP 402 协议上统一执行预算、审批、收据和链路追踪——由你自己运行的边车(sidecar)强制执行,绝不托管你的密钥或资金。

5 分钟上手,无需密钥、不上链——自带模拟 facilitator。

演示 — 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

只付一次并记账

原子化预留预算,钱包只签一次,收据和交易哈希写入账本。

绝不打破的规则

每条都是端到端场景,每次 CI 运行两遍。

  • 会超出预算的付款绝不签名
  • 白名单之外的主机绝不付款
  • 收款地址被替换或价格暴涨 10 倍需要人工确认
  • 并发请求也不会超出预算,哪怕一笔
  • 智能体无法自行附加、重放或批准付款
  • 结算失败的付款绝不悄悄重试

查看安全模型 →

支持

任何语言都可用的网关 URL、零依赖的 fetch 封装和 MCP 服务器。

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

价格

Free 包含边车(sidecar)的全部执行功能,无需信用卡。Pro 和 Team 加上 spendctl 控制平面——Slack 审批、托管账本、定时导出、SSO、共享预算。控制平面仍在开发中,Pro 和 Team 在上线前为创始预购。

Free

$0

无需信用卡,包含全部执行功能。

  • 2 个智能体 · 1 条策略 · 1 个席位
  • 每月 1,000 笔受管付款
  • 本地账本 + CSV / JSON 导出,托管副本保留 7 天,本地沙盒
  • CLI / Webhook 审批
  • 到达上限即停止,不产生超额费用
开始使用

Team

$149/月创始价常规价 $249/月

创始预购——控制平面开发中。

  • 不限智能体数量
  • 每月 500,000 事件
  • 1 年不可篡改账本
  • SSO / RBAC,共享预算
  • 跨边车链路追踪、策略即代码 CI、区域固定
锁定创始价

Enterprise

联系我们

按需洽谈。

  • SIEM 导出、SCIM
  • 自定义保留期(最长 7 年)
  • 专属控制平面
  • 双人审批、SLA
联系我们

创始价仅限前 100 名成员,自 GA 起锁定 12 个月。Pro 和 Team 超额按每 10 万事件 $5 计。Team 提供 14 天试用,无需信用卡。永不按支出比例收费。

锁定创始价

选择套餐和许可证将携带的组织 id,然后在 Stripe 付款。密钥会在一分钟内发到邮箱。

2 到 40 个字符:小写字母、数字和连字符。它会显示在 spendctl license 中,用于联系支持时核对,之后不能更改。

付款由 Stripe 处理。创始价自控制平面 GA 起锁定 12 个月;可随时从 Stripe 收据取消。

抢先体验控制平面

spendctl 控制平面上线时只发一封邮件,不发订阅邮件。

我们只保存邮箱和语言,仅用于通知控制平面上线。 隐私

常见问题

私钥放在哪里?

永远不在智能体里。默认用 Coinbase CDP 服务器钱包签名,私钥不离开 CDP,你的机器只发出 EIP-712 签名请求。环境变量里的原始私钥仅在显式选择时使用。

被提示词注入的智能体能让它付款吗?

能让智能体“提出”付款,但改变不了结果。预算、白名单、收款地址锁定和审批阈值都在模型无法编辑的策略文件里,由独立进程判定。

伪造的 402 或被替换的收款地址怎么办?

策略针对你实际请求的主机判定,而不是 402 自称的 URL。可以按主机锁定收款地址、限制首次付款金额,并在价格突变时要求人工确认。

会重复付款吗?

每个决定最多签名一次;失败后绝不重发已签名的付款;按 Idempotency-Key 去重;卖方支持时使用 x402 的 payment-identifier 扩展。无法确定结果的付款标记为 unknown,并在核对前计入预算。

x402 没有退款,怎么自保?

在付款前缩小风险范围:白名单、锁定收款地址、降低单次上限、新收款方和涨价需审批,并保持钱包余额较低。账本保留交易哈希和签名收据,可作为争议证据。

你们托管资金吗?

不托管。签名在你自己运行的边车(sidecar)里完成,针对的是你自己的钱包——Coinbase CDP 服务器钱包或你自己的密钥。spendctl 绝不持有密钥或资金;资金从你的钱包直接链上转给卖方。控制平面(开发中)只保存策略、审批和账本,不保存密钥或资金,也绝不转发签名。非法律意见。

账本能用于记账吗?

每行都有 UTC 时间、智能体、端点、金额、资产、网络、收款方和交易哈希,可导出 CSV/JSON。USD 金额按稳定币 1:1 估算,税务处理请咨询会计师。

为什么不直接用 Stripe、钱包策略或 SDK 的限额?

可以一起用——spendctl 位于它们之前。SDK 限额运行在智能体内部且只限单笔;钱包策略只覆盖自家密钥(而且常常不覆盖 x402 的 typed-data 签名);托管平台只能管理它们托管的那个钱包。限额本身在 Coinbase 和 AWS 的自家工具里已经免费——缺的是跨越所有这些的一套策略、一条审批流程和一本账本。spendctl 管理你已有的钱包,在你自己运行的边车里执行。

x402 和 MPP 一直在变,会不会坏?

协议格式封装在复用官方 SDK 编解码的小适配器里,已同时支持 x402 v1 和 v2;上游规范变化时,每周的 CI 任务会自动开 Issue。