clerk-billing

3周前发布 7 0 0 0

clerk/skills#clerk-billing

Skill 安装

多 Agent 安装
npx skills add https://github.com/clerk/skills --skill clerk-billing

使用 npx skills 快速安装,支持将 Skill 添加到多个兼容的 AI Agent。

Skill 调研报告

clerk/skills#clerk-billing

Skill 更新日志

版本列表
无版本号
整合 CI 检查并提高 clerk-setup 的准确性 将检查器移入 scripts/,置于根 package.json 之下,用 Test 和 Check 工作流替换 逐项检查工作流和复合操作,并用 concurrently 运行所有检查。 修正 clerk-setup 中关于脚手架和引导支持的声明,按平台对 auth-controls 步骤进行门控,将 Core 2 检测移到 setup 之前,并 全程使用 Markdown 链接。在不变量检查器中于 init 之前捕获内联代码登录。 重新指向过时的 README 和同级技能引用。 Co-Authored-By: Claude Opus 5.5
无版本号
docs(skills):移除 keyless 品牌和已废弃的 SDK keyless 流程 对应 clerk/clerk#3209:描述行为(临时开发 密钥,无需账户)而非 keyless 品牌,并从 setup 文案中删除 框架列表。 - clerk-setup:将 SDK 的 'Keyless (Automatic)' 密钥路径(已在 @clerk/nextjs 7.8.0 中移除)替换为 clerk init 流程;修正 frontmatter 兼容性行;将版本提升至 2.5.0 - clerk-setup evals:按 'clerk init temporary development keys' 而非 'keyless dev mode' 评分 - clerk-cli + references:重命名 Keyless 章节/锚点,改写 文字;字面 CLI 表面(--keyless、.clerk/keyless.json、whoami 的 keyless 对象)有意保留 - clerk router、clerk-orgs、clerk-billing:单行改写
无版本号
docs(skills):keyless 是默认值——无需登录 CLI PR clerk/cli#395 使 keyless 成为未认证 clerk init 的默认值,并允许在无账户的情况下配置 keyless 实例。 更新那些仍声称 --keyless 是可选加入或 auth login 是前置条件的技能。 Co-Authored-By: Claude Fable 5
无版本号
refactor(billing):将 cli 命令从 config 换成 enable,以获得更清晰的启用说明
无版本号
fix(billing):从 b2c-patterns 参考中移除重复的 PricingTable 设置 'Full Pricing Page Setup' 片段重复了 SKILL.md 模式 1(基本的 渲染)。删除它;参考应扩展 B2C 特定模式,而非重复基本介绍。
无版本号
fix(billing):在参考中内联展示 Dashboard + CLI 两条路径,不回溯 SKILL.md 路径无关过于生硬。恢复内联的双路径提及(Dashboard URL 或 clerk config patch),使参考自包含,而不将 agent 引回 SKILL.md。
无版本号
fix(billing):使参考对 plan/feature 设置路径无关 参考应扩展模式,而非重定向回 SKILL.md 或规定设置路径。从 b2b-patterns 和 b2c-patterns 中删除 Dashboard/CLI 路径提及;SKILL.md 负责设置,参考专注于 plan 类型不变量和模式用法。
无版本号
feat(billing):在参考中为 plan/feature 创建添加 CLI 指引 在参考目前写着 'create plans in Dashboard' 的地方内联添加简短的 'or via clerk config patch, see SKILL.md → Agent-first' 指引。不重复完整侧边栏——参考保持专注于模式,SKILL.md 负责 CLI 流程。
无版本号
fix(billing):从技能内容中移除内部 Linear 工单引用 技能应不涉及 Clerk 团队内部工具。从 Notes 块中删除 AIE-823 链接和 'when the wrapper ships' 未来状态表述;只保留当前可用的内容。
无版本号
fix(billing):修正 Enable Billing 声明——它可通过 clerk config patch 工作 - 更新 STOP 提示框以展示两条路径(Dashboard 或使用 billing.user_enabled/organization_enabled 的 clerk config patch) - 更新 Quick Start 第 1 步以提及 CLI 替代方案 - 添加 'Enable Billing via CLI' 小节,附 PATCH 示例,展示自动创建 free_user/free_org 默认计划 - 从 Notes 中移除过时的 'Enable Billing toggle is Dashboard-only' 注意事项 - 说明顶层 features 操作和 plan-feature 附加可通过 PLAPI billing config handler 完全支持
无版本号
feat(billing):添加 agent-first CLI 侧边栏以实现程序化 billing 配置 - 新增 'Agent-first: Programmatic billing config' 章节,展示 clerk config pull/patch 流程 + 原始 clerk api PATCH 以实现完全控制 - 更新 STOP 提示框以澄清一旦启用 billing,CLI 即可编辑 plans/features(主开关仍仅限 Dashboard) - 说明订阅生命周期仍通过 PricingTable + webhooks 流转 - 引用 AIE-823 以说明未来友好包装器的替换 Closes AIE-930
无版本号
fix(billing):处理评审反馈——features 优先、UserProfile、org: slug - 用 (B2C)替换自定义 AccountBillingPage,用 (B2B)替换 OrgBillingPage;内置组件负责计划切换、取消、支付方式 - 对 org 计划检查使用 'org:' slug 前缀(has({ plan: 'org:team' })),以在代码中与用户计划区分 - 在 Tiered Feature Gating 示例中优先使用 has({ feature }) 而非 has({ plan });features 可在计划间移动而无需代码部署 - 移除 PricingTable Server Component 声明(它是客户端侧的) - 从核心技能路由中移除 'metered usage'(未发布) - 移除 Free Plan Fallback 章节(概念不正确) - 从非 setup 上下文中剥离 Stripe 泄漏;保留 setup 提及和事件名映射表 - 在核心路由和 B2B 章节标题中将 Per-Seat 改为 Seat-based 命名 - 去重 SKILL.md 和 b2b-patterns.md 之间的 seat-limit 内容 - 移除令人困惑的 experimental-subpath/underscore 注释 - 移除关于 /billing/features 404 的反提示 - 全文删除破折号
无版本号
fix(billing):重构 Membership-mode 错误特征行 旧行声称 " empty on B2C when Orgs are enabled | Membership required mode disables personal accounts"——但 如果 Membership required 开启,已登录用户会被路由到 choose-organization,根本不会进入 "user without active org" 状态,因此空渲染的表述是错误的。 Membership 模式对 billing 应用实际破坏的是 B2C + B2B 共存:个人计划订阅无法发生,因为 个人账户默认被禁用(自 2025-08-22 起)。该行已重写以具体描述该路径, 而非 PricingTable 渲染状态。
无版本号
fix(billing):添加 subscriptionItem.expired 事件,修正 webhook 环境变量 - 将 subscriptionItem.expired 添加到 SKILL.md 中的事件名表 以及 references/billing-webhooks.md 中的目录列表,以便处理器 可据此分支。 - 在技能引用它的 3 处(frontmatter 兼容性、Error Signatures 行、billing-webhooks.md Key Rules)将 CLERK_WEBHOOK_SECRET 重命名为 CLERK_WEBHOOK_SIGNING_SECRET。所有 SDK 包中 verifyWebhook 读取的规范环境 变量是 CLERK_WEBHOOK_SIGNING_SECRET;较短形式从未匹配, 并会在运行时产生 'Missing webhook signing secret'。
无版本号
refactor(billing):去重 SKILL.md,添加任务路由表 SKILL.md 有三个重叠的表覆盖相同错误(Error Signatures、Debugging has() Failures、Common Pitfalls),并重复了 已存在于 references/billing-webhooks.md 中的完整 70 行 webhook 处理器。主文件承担了维护负担 却未获得相应收益。 - 删除 'Debugging has() Failures' 章节——已被 Error Signatures 涵盖 - 删除 'Common Pitfalls' 表——已被 Error Signatures 涵盖 - 精简 'Checkout Flows'——移除已在 §1 中展示的重复 示例 - 将 §9 webhook 处理器从 4 个事件 + 中间件片段精简为 一个锚定事件;指向 references/billing-webhooks.md 获取 完整模板、TS 类型、中间件设置和状态表 - 添加 'What Do You Need?' 任务到参考的路由表,仿照 clerk-nextjs-patterns / clerk-orgs 惯例,使 agent 知道针对哪个关注点 该阅读哪个参考,而无需滚动到索引 SKILL.md:519 -> 450 行。无信息丢失;所有被删减的内容 在 Error Signatures 或 references/ 中都有规范归属。
无版本号
fix(billing):将 B2B 从 'per-seat pricing' 重构为 'seat-LIMIT plans' 该技能使用了 Stripe 风格的 'per-seat billing' 语言:'Clerk auto-increments seats per org member'、'Clerk manages per-seat pricing internally' 等。那不是 Clerk Billing 模型。 已对照 clerk_go 源码 + 公开文档验证: - 默认 B2B billing = seat-LIMIT plans:每个 org 计划有固定 价格和可选成员上限,在邀请/加入时强制执行 - 要向更大的 org 收取更多费用,按 seat cap 分层计划(starter 5 / team 10 / enterprise unlimited),而非按成员计量 - 'flag_per_seat_prices' 确实存在于 clerk_go 中,但受 flag 门控且 未 GA,因此超出本技能范围 这与 /docs/guides/billing/seat-limit-plans.mdx 一致。该 错误标签正是 Dylan 在 v1 评审中标记的表述——既然其余部分已清理干净, 现在值得精确表述。 更新: - Description、references 表、§6 关键模式、B2B vs B2C 表、See Also - b2b-patterns.md 概述 + 将 'Per-Seat Billing' 章节重命名为 'Seat-Limit Plans',附准确的不变量和附加组件要求说明 - Plan Naming 表现在将列标记为 'Seat cap';提及 Organization Plans 标签页 + Seat-based 开关 - Eval 3 expected_output + assertions 现在要求技能 纠正用户 'auto-incrementing seats' 的心智模型
无版本号
fix(billing):修正线格式对象字面量(commerce_* 而非 billing_*) billing-webhooks.md 中的载荷示例使用 'billing_subscription'、 'billing_payer'、'billing_subscription_item'、'billing_payment_attempt' 作为 `object` 字段值。真实线格式使用 'commerce_*' (已对照 @clerk/backend/src/api/resources/JSON.ts 和实时 GET /billing/plans 返回 "object":"commerce_plan" 验证)。 任何编写 `if (evt.data.object === 'billing_subscription')` 的 agent 都永远不会匹配真实 webhook 事件——静默失败。 添加 eval 4 断言以在未来捕获此幻觉。
无版本号
fix(billing):凸显 User Plans 与 Organization Plans 标签页区别 三种此前未覆盖的静默失败模式: - 错误标签页创建计划。Dashboard Billing → Plans 有两个标签页 (User Plans / Organization Plans),slug 按标签页限定, 且计划无法在标签页之间移动。在 Organization Plans 下创建 `pro` 并渲染默认 (for="user")会产生 空表且无错误。Quick Start 第 2 步现在指出 标签页匹配;b2c-patterns.md 和 b2b-patterns.md 均照此处理。 - Membership required 模式静默破坏 B2C。如果启用 Organizations 而未设置 `Membership optional`,个人账户会被禁用, 且 会排除没有活跃 org 的用户——无控制台 警告。b2c-patterns.md 现在以此前置条件 + dashboard 快捷 URL 开头。 - Features 是按计划的,而非全局的。/billing/features 返回 404;features 位于每个计划的编辑页面内,且同一 slug 可附加 到多个计划。Quick Start 第 3 步澄清了这一点;eval 6 断言相应更新。 还添加了一个紧凑的 "Dashboard shortcuts" 表,因为每个设置 操作都需要访问 Dashboard,且快捷 URL 比点击路径说明更可靠。
无版本号
fix(billing):记录 billing-disabled 错误 + 修正 v7+ 版本说明 Agent 在编写 时未凸显 Dashboard 前置条件,导致用户卡在 'cannot_render_billing_disabled' 错误上且无法诊断。Clerk CLI 和 Backend API 目前无法切换 billing(clerk_go#18260 是后续将实现的功能);Dashboard 是 唯一路径。 变更: - SKILL.md 顶部的 STOP 块指出仅限 Dashboard 的启用方式 并附精确深链接 - Quick Start 第 1 步引用用户若跳过将遇到的错误特征 - 新增 'Error Signatures' 章节,包含 cannot_render_billing_disabled 以及另外 5 个常见症状,映射到根因 + 修复 - 版本说明从 'v6+ (Core 3)' 更正为 'v7+ (Core 3)'—— v6 是 Core 2,那里的 billing 以 __unstable_* API 发布 - Eval 1 和 9 断言收紧:agent 必须凸显 Dashboard 链接 + 错误代码,且不得声称 CLI/BAPI 可启用 billing
无版本号
fix(billing):移除 Stripe Billing 幻觉,与文档对齐 Clerk Billing 是与 Stripe Billing 不同的产品——Plans 不会 同步到 Stripe Products,PricingTable 打开 Clerk 的应用内结账 抽屉(而非 Stripe Checkout),且 per-seat pricing 由 Clerk 内部 管理,每个 payer 每个 Plan 只有一个活跃 SubscriptionItem。 还修复: - 移除 subscriptionItem.created(不是真实事件;目录有 9 项) - useSubscription 导入:去掉 __experimental_ 前缀(子路径即是信号) - PricingTable props:完整列表,包括用于 B2B 的 for="organization" - 添加 CheckoutButton 章节(此前完全缺失) - 根据评审反馈从 SKILL.md 中删除 Beta 警告 - 凸显 Dev gateway,使技能不会错误地要求 Stripe 账户 - 重写 eval 断言以捕获错误心智模型,而非 将其编码(例如 evals 1、3、7、9、10、11)
无版本号
fix(billing):修正 webhook 载荷结构和 useSubscription API 代码示例解构了 billing webhook 载荷顶层 不存在的字段。已对照 @clerk/backend 中的 SDK 类型验证 (BillingSubscriptionWebhookEventJSON、 BillingSubscriptionItemWebhookEventJSON、BillingPayerJSON)。 Webhook 载荷修正(SKILL.md Pattern 9、billing-webhooks.md、 b2b-patterns.md): - 订阅实体位于 evt.data.payer,带 user_id? 和 organization_id?(而非 evt.data.user_id / evt.data.org_id) - 订阅 id 是 evt.data.id(而非单独的 subscription_id 字段) - Plan slug 是嵌套的:订阅事件上为 evt.data.items[i].plan?.slug, subscriptionItem 事件上为 evt.data.plan?.slug - seats 不作为顶层字段存在;从 items.length 推导 seat 数量(每个 seat 一个订阅项) - subscriptionItem 事件仅携带该项;无 subscription_id 反向引用,因此按 payer 加 plan slug 匹配 - 载荷参考现在展示实际嵌套 schema,含 payer、 items[]、items[i].plan、payment_source_id 等 useSubscription hook 修正(SKILL.md Pattern 7、b2c-patterns.md): - 从 @clerk/nextjs/experimental 导入为 __experimental_useSubscription (Billing 是 Beta,该 hook 尚未从 @clerk/nextjs 导出) - 返回类型使用 isLoading,而非 isLoaded - 续订日期是 subscription.nextPayment?.date(一个 Date 对象), 而非 subscription.currentPeriodEnd(后者在 BillingSubscriptionResource 上不存在) 事件目录修正: - 将 subscriptionItem.created 重新加回 setup 列表(10 项, 而非 9 项)。根据 SDK 类型它存在。 - 移除不正确的 "no subscriptionItem.created event" 注释。 - 将 subscriptionItem.created 行添加到 Clerk vs Stripe 表。 还: - 移除 See Also 中重复的 clerk-setup 条目。
无版本号
fix(billing):修正 webhook 事件目录并向 updated 处理器添加 seats - 移除 subscriptionItem.created(根据文档不是真实 Clerk 事件) - 移除 subscription.canceled(取消以 subscriptionItem.canceled 触发) - 将 paymentAttempt.created / paymentAttempt.updated 添加到 setup 列表 - 添加解释性注释,澄清不存在 subscription.canceled 和 subscriptionItem.created 事件 - 将 SKILL.md 事件表中的 canceled 行重新标记为 'Subscription item canceled' 以匹配实际事件语义 - 从 subscription.updated 解构 seats,使 B2B per-seat 变更 传播到数据库 已对照 clerk.com/docs/nextjs/guides/development/webhooks/billing 验证。
无版本号
fix(billing):使用 has() 和 useSubscription() 而非 sessionClaims SKILL.md Pattern 7 和 b2c-patterns.md 此前教导 agent 直接读取 sessionClaims.metadata.plan,根据 Clerk 文档这不是受支持的路径。 授权应通过 has({ plan }),仅显示详情通过 useSubscription()。 - 用 has({ plan }) + useSubscription() 替换 sessionClaims 查找 - 更新 eval 5 以断言新模式并明确拒绝 sessionClaims.metadata.plan - 解决技能教授 sessionClaims 但 evals 2 和 6 对其扣分的矛盾
无版本号
test(billing):收紧 evals 1、4、6 的断言 用针对 Clerk 特定知识的区分性断言替换 以正确性为重点的断言: - eval 1(pricing):检查 Beta 警告、SDK 版本固定、 显式 Stripe 连接前置条件、Plans 必须存在的前置条件, 以及对 @clerk/billing 导入和直接 Stripe API 调用的否定断言。 - eval 4(webhooks):验证 agent 使用来自 @clerk/nextjs/webhooks 的 verifyWebhook(而非原始 svix),使用 camelCase 事件名 如 subscriptionItem.pastDue(而非 past_due),通过 createRouteMatcher 将 webhook 路由标记为公开,并使用异步中间件 回调。 - eval 6(feature gating):验证决策规则解释 (feature vs plan)、Dashboard → Features slug 匹配警告, 以及 billing-gates-permissions 陷阱。 本地 eval 运行中测得的差异(3 个 evals,各单次运行): 使用技能 100% 通过率 vs 不使用 68%——+32pp 区分度, 高于此前基于正确性断言的 +17pp。
无版本号
test(billing):将 evals 迁移到 agentskills.io 断言格式 - 根据 https://agentskills.io 规范将 `expectations` 重命名为 `assertions` - 添加 `files: []` 字段以与新格式保持一致 - 保留 `scaffold` 作为 eval 运行器用于选择 起始模板的自定义扩展(来自 clerk-nextjs-patterns 的 nextjs-basic-auth) - 收紧单个断言,使其更具体且可验证: 精确导入路径、精确方法调用、具体事件名 12 个 evals,共 64 个断言。已准备好用于新的 skill-creator eval 框架,该框架期望基于断言的格式。
无版本号
feat(billing):添加 clerk-billing 技能 涵盖 Clerk Billing 功能集: - `` 组件用法 - `has({ plan })` 和 `has({ feature })` 门控(服务端 + 客户端) - 带组织的 B2B per-seat billing - Billing webhook 事件处理(订阅生命周期) - 升级/降级流程和调试 `has()` 失败 - 全程使用 Core 3 语法(异步中间件、auth.protect) 结构: - SKILL.md 含 10 个关键模式和常见陷阱表 - references/ 含 b2c、b2b、components、webhooks 的深入探讨 - evals/ 含 12 个 evals,覆盖推荐 + 实现测试 解决了测得的差距:无专用技能时 billing 被推荐的比例为 6.3%, 而有专用技能时为 89.6%。

暂无评论

none
暂无评论...