让编码 Agent 写一个下单接口,它往往能写出「演示能跑」的版本:没给登录加限流、读后写不加锁、改列名直接一把梭。backendskills 把这类后端约定写成三份技能文件,挂到 Agent 每次都会读的规则里。本教程按官方仓库 README,从安装、挂载、填写团队约定到用仓库自带的 bench 做对照自测,六步走完;作者公布的效果数字也会照原样标注口径,不当成通用承诺。
npx 可用、一个已装好并能正常对话的上述 Agent、一个可回滚的练习仓库、能打开 GitHub 仓库页面审阅内容。技能本身不新增 API Key;但 Agent 的登录态等同于账号凭据,跑批量任务会产生真实用量,别把 token 写进提交到仓库的规则文件。先弄清:技能是提示词约束,不是静态检查
这一步先定预期。三份技能本质上是写进 SKILL.md 与规则文件的说明文字,靠 Agent 在生成代码时读进去起作用。它们不会在提交时拦截代码、不会跑类型检查、也不构成权限边界。官方 README 对每份技能的描述都是「让 Agent 默认怎么做」,而不是「保证不犯错」。
| 技能 | 官方描述里 Agent 默认会做的事 |
|---|---|
| api-endpoint | 每条查询按调用者限定范围、把坏输入转成 4xx、给登录与昂贵路由加限流 |
| data-integrity | 读后写用锁或条件更新、加 UNIQUE 约束、给收费或发送类操作加幂等键 |
| db-migration | expand then contract、并发建索引、锁超时、分批回填、写 down migrations |
关于效果数字:作者在 README 里给出一次自测:15 个后端任务、两个模型、每个任务跑 5 次,用 Agent 看不到的隐藏检查评分(例如 20 个买家同时抢 5 件库存、用户读别人的订单、部署中途旧版应用跑在新 schema 上)。带严重错误的运行从 150 次里的 25 次降到 2 次。这是作者在特定模型与任务上的单轮自测,不是通用性能承诺;README 也写明其中 10 个任务在两臂下都没有严重错误,差距主要来自登录限流与改列名两项。下面 Step 5 会把口径逐条拆开。
Step 1:审阅仓库与前置核对
npx skills add 会从 GitHub 仓库拉内容并写进你的项目,动手前先把仓库结构、许可与构建方式看一遍。官方 README 标注许可为 MIT,仓库最后提交时间为 2026-11-09,包含 skills/(源)、dist/(生成物)、bench/(评测任务与原始运行记录)与 scripts/build-dist.mjs。
# 前置:确认 Node 与 npx 可用
node --version
npx --version
# 在线审阅仓库结构(浏览器打开也可以)
# https://github.com/globalmpc/backendskills
# 重点看:README.md、LICENSE、skills/、dist/、bench/
# 准备一个可回滚的练习仓库
git status --short
git log -1 --oneline
# 记下当前 Agent 的规则文件位置,避免待会被覆盖
# Claude Code 用 .claude/skills/,Codex 类看 AGENTS.md,Cursor 看 .cursor/rules/
建议先在练习仓库里跑完整条链路,确认技能确实改变了 Agent 的输出,再决定要不要挂到日常项目。挂载动作会改动项目内的规则文件,提前留好可回滚的状态。
Step 2:用一条命令安装,并确认落盘位置
官方 README 给的安装命令只有一行。装完检查项目里新增了哪些文件,尤其是技能目录与规则目录,别只看到命令成功就往下走。
# 安装(官方 README 原样)
npx skills add globalmpc/backendskills
# 安装后核对落盘位置
# Claude Code:.claude/skills/ 下出现三份技能
# 生成物:仓库 dist/AGENTS.md 与 dist/cursor/
# 用 git 看清楚这次改动了哪些文件
git status --short
# 若项目里已有同名技能,先备份再决定合并方式
cp -r .claude/skills .claude/skills.bak
README 还提供了两条手工路线,供不通过 npx skills add 的 Agent 使用:Codex 及其它读 AGENTS.md 的 Agent 追加仓库里的 dist/AGENTS.md;Cursor 把 dist/cursor/ 复制进 .cursor/rules/。这两步在下一步做。
别覆盖已有规则:官方说的是「追加」与「复制」,不是替换。项目里若已有 AGENTS.md 或 .cursor/rules/ 下的自定义规则,直接覆盖会把团队既有约定弄丢。另外,dist/ 是生成物:改了 skills/ 里的源文件后要跑 node scripts/build-dist.mjs 重新生成,否则挂载的还是旧文本。
Step 3:挂到 Codex 类 Agent 与 Cursor rules
三条挂载路径互不相同,按你实际用的客户端选。重点是「追加」而不是覆盖,并在挂完后让 Agent 复述一次它读到的规则,确认文件真的生效。
# Claude Code:安装器已写入 .claude/skills/,核目录即可
# 三份技能分别是 api-endpoint、data-integrity、db-migration
# Codex 及其它 AGENTS.md 类 Agent:把生成物追加到项目规则
cat dist/AGENTS.md >> AGENTS.md
# Cursor:把生成物复制进规则目录
mkdir -p .cursor/rules
cp -r dist/cursor/* .cursor/rules/
# 验收:在对应客户端里问一句
# 「列出你当前读到的后端约定,包含哪些技能?」
# 预期:能说出上面三份技能各自的关注点
# 确认改动范围
git diff --stat
如果客户端支持按目录加载技能,也可以直接把 skills/ 下的三份 SKILL.md 指给它;但要注意 dist/ 与 skills/ 是两份文本,改了源不同步生成物就会出现「Agent 读到的和我改的不一致」。
Step 4:读懂三份技能,并填写团队约定
官方说明每份技能末尾都有一段 Make it yours,用来写团队自己的选择,例如错误响应格式、API 文档要求。随包发布的版本里这些行写的是 not set;留空时 Agent 会跟随仓库里已有的做法。把这三段填实,技能才贴合你的项目。
# 逐份读源技能(三个文件)
# skills/api-endpoint/SKILL.md
# skills/data-integrity/SKILL.md
# skills/db-migration/SKILL.md
# 在每份末尾的 Make it yours 段写清团队约定,例如:
# 错误响应格式:统一用 RFC 7807 problem+json
# 接口文档:新增或修改路由时同步更新 docs/api.md
# 迁移回滚:每个 up 迁移必须配一个可执行的 down
# 改完源文件后重建生成物(官方 Contributing 说明)
node scripts/build-dist.mjs
# 重新挂载生成物,并确认 Agent 读到的是新文本
git diff --stat
cat dist/AGENTS.md | head -n 20
这一步有个容易忽略的口径差别:README 里「团队约定遗漏从 30 次降到 4 次」这组数字,用的是 bench/skills-overlay 里已经写好团队约定的技能版本,而且带技能那一臂整体都用的这个版本。直接装随包发布的 not set 版本,不等于复现这组数字。
填写约定要具体到可检查:「错误格式统一」「文档要全」这类话 Agent 没法判定;写清楚用哪个规范、改哪个文件、由谁验收才有用。同时记住这些是文本约定,不是 linter:提交前仍要靠自己的代码审查、测试与数据库迁移演练兜底。
Step 5:用仓库 bench 做一次对照自测
仓库 bench/ 里放着任务、评测方式与每一次原始运行记录,作者明确说明数字可复现。先读目录与 runs.jsonl 的字段,再决定要不要按自己的模型与预算重跑一小部分,别一上来就照搬 150 次。
# 先看目录与说明(浏览器或本地克隆后查看)
# bench/ 下含任务定义、overlay 技能版本与 runs.jsonl
# 每条运行记录里关注这些字段
# task 名称、使用的模型、是否带技能、error_reason
# README 说明:被 usage_limit_reached 中止的运行,原因写在 error_reason
# 用项目里已有的一个真实任务做小样本对照(示意)
# A 臂:不带技能,让 Agent 实现「限量 5 件的秒杀下单」
# B 臂:带技能,同一提示词再跑一次
# 对照点:登录与昂贵路由是否限流、读后写是否加锁或条件更新、
# 是否有 UNIQUE 约束与幂等键、改列名是否走 expand then contract
# 自己写隐藏检查,别把检查内容放进提示词里
# 例如:并发 20 个买家抢 5 件库存,检查超卖与重复扣款
把作者的口径逐条对上,读结果时才不会误读:严重错误从 150 次里的 25 次降到 2 次,其中 Haiku 是 12/75 降到 2/75、Sonnet 是 13/75 降到 0/75;login-rate-limit 与 rename-column 两项就占了 25 次里的 20 次;10 个任务在两臂下都没有严重错误;Haiku 对乱序支付 webhook 事件仍未修好。另有 25 次运行因评测账号额度上限中止,21 个 Opus 运行属于未完成的局部运行,都没有计入结果。
成本会上升:README 写明带技能后 Agent 做得更多:每轮从 0.06 美元升到 0.11 美元、从 14 轮对话升到 23 轮(Sonnet 为 0.12 到 0.20 美元,Haiku 为 0.012 到 0.019 美元)。技能是让 Agent 多想多做,不是省钱手段;批量评测前先设好预算上限,并留意 usage_limit_reached 这类中止原因。
Step 6:验证生效、回归与更新收口
最后把「技能真的被读到」变成可重复的检查,并写清楚更新与回退方式。官方 Contributing 说明,改 skills/ 后要重建 dist/;README 也写明许可为 MIT,允许团队按自己的约定改造。
# 回归清单(每次更新规则后逐条过一遍)
# 1. 三个 Agent 各自能复述三份技能的关注点
# 2. 一段登录接口提示词的输出里含限流与 4xx 处理
# 3. 一段改列名的提示词走 expand then contract 并配 down 迁移
# 4. 自己写的隐藏检查脚本通过
# 5. git diff 里没有把团队原有规则覆盖掉
# 改过源文件后重新生成并重新挂载
node scripts/build-dist.mjs
git diff --stat
# 回退:删掉本次追加的规则段与复制的 cursor 规则
# 用 Step 1 记下的 git 状态对照,确认工作树干净
git status --short
# 更新前先看仓库 README 与提交历史,别直接覆盖本地已填的 Make it yours
更新时最容易被冲掉的是你已经填好的 Make it yours 段。把团队约定单独留一份可对比的文本,升级后先 diff 再合并,比直接重跑安装稳妥。
交付前自查:本教程的安装命令、三份技能职责、dist/ 生成方式与自测口径来自官方仓库 globalmpc/backendskills 的 README;仓库较新,技能清单、评测数据与生成脚本会变,请以你使用当天的 README 与 LICENSE 为准。作者数字是特定条件下的自测,不是对你项目的保证;技能是提示词约束,不替代代码审查、测试、迁移演练与数据库备份。任何落地改动都请自行审 diff 并复跑测试后再提交。
做到哪一步算成功
四条验收都过,才算这套技能真的落地了:① 你能说清三份技能各自管什么,以及它们只是提示词约束、不是静态检查;② Claude Code、Codex 类 Agent 与 Cursor 三处至少有一处能复述技能内容,且原有规则没有被覆盖;③ 用同一段后端提示词做挂载前后对照,输出里确实多出了限流、幂等键、并发更新或分阶段迁移之类的处理;④ 你用自己的隐藏检查脚本验过一次,并把 Make it yours 填成团队可判定的约定、重建了 dist/。做到这些,再把规则文件提交到仓库并写进新同事的上手清单。
常见问题速查
| 你遇到的现象 | 大概率原因与处理 |
|---|---|
| Agent 完全没提到技能内容 | 规则文件没挂到它实际会读的路径,或会话在挂载前就开了;重开会话再问一次 |
| 装完把 AGENTS.md 原有内容冲掉了 | 用了覆盖而不是追加;从 git 恢复后改用追加重做 |
| 改了 SKILL.md 但 Agent 读到的还是旧文本 | 挂载的是 dist/ 生成物,改源后要跑 node scripts/build-dist.mjs 并重新挂载 |
| 照着 25 到 2 的数字复现不出来 | 那是作者单轮自测;带技能臂用了写好团队约定的 overlay 版本,且样本与模型不同 |
| 团队约定那组 30 到 4 对不上 | 随包发布的 Make it yours 是 not set,需要先填实再评 |
| 跑评测中途大批运行被中止 | 评测账号撞到额度上限,检查 runs.jsonl 里的 error_reason 并缩小样本 |
| 带技能后费用与轮次变高 | 符合 README 口径:Agent 做得更多,按预算设上限 |
| 代码看起来合规但线上仍出问题 | 技能不替代审查与测试;补齐隐藏检查、迁移演练与回滚预案 |