跳到主要内容

Stripe Link Cli

通过 Stripe Link 进行代理支付 — 支持卡片、SPT(共享支付令牌)和审批。

技能元数据

来源可选 — 使用 hermes skills install official/payments/stripe-link-cli 安装
路径optional-skills/payments/stripe-link-cli
版本0.1.0
作者Teknium (teknium1), Hermes Agent
许可证MIT
平台linux, macos
标签Payments, Stripe, Link, Checkout, MPP
相关技能mpp-agent, stripe-projects

参考:完整 SKILL.md

信息

以下是 Hermes 在触发此技能时加载的完整技能定义。这是技能激活时代理看到的指令。

Stripe Link CLI 技能

封装了 @stripe/link-cli,使 Hermes 能够代表用户使用一次性虚拟卡片或共享支付令牌(SPT)完成购买。每一笔支出都需要在 Link 移动/Web 应用中进行应用内审批 — Hermes 无法自行批准。

目前仅限美国用户(需要 Link 账户)。上游 CLI 不支持 Windows — 此技能限制为 [linux, macos]

何时使用

触发短语:

  • “buy X”(购买 X)、“pay for X”(支付 X 费用)、“make a purchase”(进行购买)、“complete checkout”(完成结账)
  • “get me a card”(给我一张卡)、“I need a payment method”(我需要一种支付方式)
  • “log in to Link”(登录 Link)、“connect my Link wallet”(连接我的 Link 钱包)
  • 商家 API 返回 HTTP 402 响应,且包含 www-authenticate: ... method="stripe"

如果用户希望进行付费 API 调用(HTTP 402,无结账表单),则 card 路径是错误的 — 应通过此技能使用 SPT,或移交给 mpp-agent 技能。

先决条件

  • PATH 中可用 Node.js 20+(node --version
  • 位于美国(Link 账户要求)

Hermes 尝试支付之前,无需预先设置 Link 账户、支付方式和支出审批应用 — CLI 会在首次运行时引导用户完成设置:

  • Link 账户,位于 https://app.link.com — 在首次 link-cli 认证期间创建/链接
  • 至少一种支付方式 — 在首次运行时于 https://app.link.com/wallet 添加
  • Link 移动/Web 应用 — 在发出首次支出请求时打开以进行审批

无需环境变量 — 认证状态由 CLI 存储在其自己的配置目录下的本地文件中。

安装

一次性全局安装:

npm install -g @stripe/link-cli

或者通过 npx @stripe/link-cli 临时调用。下面的技能使用已安装的 link-cli 形式。

如何运行

所有命令均通过 terminal 工具运行。CLI 会自动检测非 TTY 调用者,并默认发出紧凑的 toon 输出 — 适合模型使用。如果某一步骤需要结构化字段,请传递 --format json

发现命令:link-cli --llms-full。 在调用前获取命令的模式:link-cli <command> --schema

流程

1. 检查/建立认证

link-cli auth status

如果未认证,请使用清晰的客户端名称登录(此标签会显示在用户的 Link 应用中):

link-cli auth login --client-name "Hermes" --interval 5 --timeout 300

--interval/--timeout 形式会进行内联轮询,因此代理无需管理 _next 步骤。向用户打印验证 URL 和短语,并等待 CLI 返回。

auth status 确认登录之前,不要继续执行此步骤之后的操作。

2. 在创建支出请求之前评估商家

确定凭证类型:

商家界面--credential-type
标准 Web 结账表单 / Stripe Elementscard(默认)
返回 HTTP 402,且 www-authenticate 中包含 method="stripe"shared_payment_token
返回 HTTP 402,但不包含 method="stripe"不支持 — 停止

对于 402 响应,不要手动解码挑战。传递原始标头:

link-cli mpp decode --challenge '<full WWW-Authenticate header>'

这将验证挑战并提取网络 ID + 解码后的请求体。

3. 列出支付方式 + 收货地址

link-cli payment-methods list
link-cli shipping-address list

除非用户另有指定,否则使用第一个条目。payment-methods list 中的 id 是下一步中的 --payment-method-id

4. 创建支出请求

在执行此命令之前,与用户确认最终总额。金额单位为分。

link-cli spend-request create \
--payment-method-id <pm_id> \
--merchant-name "<name>" \
--merchant-url "<url>" \
--context "<one sentence: what is being purchased and why>" \
--amount <cents> \
--line-item "name:<item>,unit_amount:<cents>,quantity:1" \
--total "type:total,display_text:Total,amount:<cents>" \
--request-approval

对于 MPP 商家,添加 --credential-type shared_payment_token

--request-approval 会向用户的 Link 应用发送通知并轮询,直到用户批准或拒绝。如果被拒绝或超时,CLI 将以非零状态退出。

5. 检索凭证 — 安全地

不要将卡片详细信息打印到 stdout。 使用 --output-file,以便 PAN(主账号)永远不会进入代理的转录记录或日志中:

link-cli spend-request retrieve <lsrq_id> \
--include card \
--output-file /tmp/link-card.json \
--format json

文件写入权限为 0600;stdout 仅显示脱敏字段(品牌、后四位、有效期)以及 card_output_file 路径。

6. 使用凭证

  • 对于 Web 结账:将文件路径交给用户,或者将其传递给直接从磁盘填充表单的浏览器驱动工具。切勿将卡片文件 read_filecat 到代理的推理上下文中。

  • 对于 MPP 商家:

    link-cli mpp pay <merchant-url> \
    --spend-request-id <lsrq_id> \
    --method POST \
    --data '<json body>'

7. 清理

购买完成后立即删除卡文件:

rm -f /tmp/link-card.json

可选:作为 MCP 服务器运行

@stripe/link-cli --mcp 通过 stdio 暴露与 MCP 工具相同的命令。要将其注册到 Hermes 的原生 MCP:

hermes mcp add stripe-link --command "npx" --args "@stripe/link-cli --mcp"

然后 hermes mcp list 应显示 stripe-link。相同的审批规则适用——MCP 不会绕过 Link 应用的审批步骤。

常见陷阱

  • 仅限美国。 在美国境外,auth login 将失败。告知用户,不要持续重试。
  • 卡 PAN 绝不能进入代理上下文。 每次都要使用 --output-file。如果你已经检索过且未使用该选项,仅执行 link-cli auth logout 是不够的——虽然卡是一次性使用的,但轮换卫生措施很重要。
  • --request-approval 会阻塞直到用户操作。 如果用户处于休眠状态,CLI 将达到超时时间。请设定好预期。
  • 多步 _next 命令。 某些命令返回必须执行的 _next.command 以继续流程。如有疑问,优先使用内联轮询标志(--interval/--timeout)。
  • 在非 TTY 模式下,输出格式默认为 toon 这对于文本描述没问题,但如果下游步骤需要解析特定字段,请传递 --format json
  • 不要默认使用 card 商家评估步骤(第 2 节)的存在是因为选择错误的凭证类型会导致购买静默失败或泄露比所需更多的数据。

验证

link-cli --version && link-cli auth status

退出代码 0 表示已安装并登录。