Skills 撞车了,Agent 怎么选
副标题:5 步自救 + namespace 隔离 + 一段 CI 校验
钩子
你团队 8 个人,每个人 ~/.claude/skills/ 目录里都装了一堆 skills。Alice 装了一个 personal deploy skill 跳过测试,省事做 hotfix;Bob 装了一个 plugin 自带的 deploy 跑全套 ci;项目内还有一个 .claude/skills/deploy/ 跑标准的 prod 部署。三个人在同一个 repo 里喊 /deploy,跑出来三个版本。今天早上,一个生产部署直接跳过了测试集上线 ------ 没人知道它会跳过。这不是谁改坏了代码,是 skills 撞车了。今天讲讲 8-9 Claude Code 内部复盘对外放出的几个判断 + 五个具体动作,让你的 agent 工具栈从"撞车"走向"有序竞争"。
要点 1|Skill 撞车的三种死法
撞车不是抽象问题。Claude Code 内部复盘 + 大量实战日志里,撞车就这三种表现:

- 触发错(Overtriggering):两个 skills 描述语义重叠,Agent 选了"看起来更对"那一个,结果不是你想要的那个。Name + description 拼得越像,越容易撞。
- 同时触发多个:两个 skill 描述都覆盖了你这一句话,Agent 把两份指令都拉进上下文,跑出来是两份指令的诡异拼接 ------ 看起来像"风格突变"。
- 一个都没触发(Undertriggering):两个 skill 描述互相"稀释",单个 trigger 概率反而下降。你说了一句本该被某个 skill 接的话,没一个接。
讲道理,这三种死法的根因都是同一个 ------ description 跟用户真实请求之间的语义边界没划清。Claude 选 skill 的机制是纯 LLM 推理(不靠 embedding / 分类器 / 正则),所有 skill 的 name + description 都同时塞进同一个 attention slot 抢注意力。抢得过抢不过,看 description 写得好不好。
要点 2|Claude 选 skill 的真实机制:description 在抢一个 slot
这一点不搞清楚,所有优化都是拍脑袋。Claude Code 选 skill 不是"关键词匹配",而是:

关键三条:
- 预算上限:所有 skill 的 description 加起来不能超过上下文窗口 2%,回退值 16,000 字符。装 50 个 skill 描述都是 500 字符,预算撑爆,Claude 直接从尾段剪;匹配可靠性 d 强下滑。
- 加载时机:metadata (name + description) 永远在上下文,但 SKILL.md 全篇只在"看起来匹配"时才被加载。这就是渐进式披露。
- 决策权在 LLM:Claude 不打 embedding,不跑分类器,不问 similarity score ------ 它是用同一个语言模型在前向时替你"读 + 选"。所以 description 不是注册表,是写给另一个 LLM 看的小作文。
| 撞车症状 | 描述字段什么样 | 怎么 fix |
|---|---|---|
| 触发错 | 两个 description 都用了 "用 XX 的时候" 加宽泛动词 | 改成"用 XX 在 Y 场景,写 Z 文件" |
| 同时触发多个 | 两个 description 都说"做 XX" | 把其中一个加 "(当 X 类型时,跳转到 Y skill)" |
| 一个都没触发 | 描述互相稀释,关键词被对方占了 | 一个加"(忽略 Z 类型,那走 X skill)",边界锁死 |
判断 description 写得好不好的一个标准:30 到 80 字,= 触发条件 + 交付物 + 反例(什么时候不用我)。
要点 3|撞车自救 5 步:从写 description 到 CI 校验
这部分对着 skeleton 抄就行:
步骤 1 · 三段式 description
yaml
name: api-doc-generator
description: |
Generates REST API documentation when user asks to document endpoints or APIs.
Do NOT activate for internal helper functions or utility methods.
allowed-tools: [Read, Grep, Glob]
"做什么 + 何时触发 + 何时不触发" 三段缺一不可。Claude 内部复盘统计的:加 do-not 句式后,误触率能掉 60% 以上。
步骤 2 · 命名空间隔离
Skill 默认按文件夹名加载,纯组件名 (如 deploy / test / lint)撞车概率极高。两种隔离方式:

| 路径 | 命名空间 | 适用 |
|---|---|---|
~/.claude/skills/my-deploy/ |
个人快捷方式 | Alice 个人 hotfix 跳过测试 |
.claude/skills/deploy/ |
项目团队标准 | 团队共用,跑全套 CI |
plugin acme-tools 内的 deploy |
acme-tools:deploy |
装在公司插件 marketplace |
Plugin skill 用 plugin-name:skill-name 命名空间,永远不与个人 / 项目同名冲突。这条铁则记一下。
步骤 3 · allowed-tools 当第二层护栏
description 写得再细,Agent 也可能"跨界"。用 allowed-tools 做权限隔离:
yaml
name: db-readonly
description: Read-only SQL queries and reporting.
allowed-tools: Read, Grep, Glob
# 故意没给 Bash ------ 想写 DB 就回归到 db-write skill
读 skill 不应该有写权限;写 skill 不需要数据库直连。第二层护栏比 description 强 ------ 就算 description 撞车,权限也兜得住。
步骤 4 · 手动触发口令
撞车场景下最稳定的不是让 Agent 选,而是让用户主动指定:
yaml
name: ad-hoc-deploy
description: Force-run a deploy with the user's specific command.
ACTIVATES ONLY when user types the magic phrase "!!deploy".
disable-model-invocation: true
"查数据 描述"
这种触发口令在 ambiguous 场景下比依赖 Agent 自动判断可靠得多。disable-model-invocation: true 让 Agent 不会自动选它,只能手动 /deploy 触发。
步骤 5 · CI 校验 description 冲突
第三段提到过的 Open 笔记本案例:第三方 Skill 描述里带"标题"两字,覆盖了团队原 Skill 的优先级。修复方案落地是:
bash
# skill-collision-detector.sh
# 扫描所有 SKILL.md 的 description,找关键词重叠
for f in $(find .claude ~/.claude -name "SKILL.md"); do
python check_desc.py "$f" # 输出潜在冲突项
done
CI 阶段 fail build,迫使 description 写清边界。任何超过 3 人使用的 Skills 环境,都必须建立命名空间、版本号、CI 校验三件套。
要点 4|团队级 Skill 工具栈:plugin 当 namespace
个人跟项目层搞定后,团队又会撞第二层 ------ 整个团队怎么共享标准。

企业级玩法是"插件化" ------ 把相关 skill + command + hook + MCP server 打包成一个 plugin 发行。Skill 在 plugin 里走 plugin-name:skill-name 命名空间,永远不撞个人 / 项目层。Vercel Labs、Anthropic 官方都在 2026 推出 skill-registry 生态,团队能把内部 skill 打成插件在内部 marketplace 装。
注意取舍:插件化意味着开发者必须输入 acme-tools:deploy 而不是 /deploy,命令长度换稳定性。如果一项标准关键到不能让任何个人覆盖(比如企业安全规则),打包成 plugin 是正解。
要点 5|撞车 5 分钟排查 script
当你不确定当前的"撞车"是哪一个,照这个敲:

bash
# 1. 列出所有 candidate
ls ~/.claude/skills/ | grep deploy
ls .claude/skills/ | grep deploy
ls .claude/commands/ | grep deploy # 旧版命令文件
# 2. 单独验证每个
cat ~/.claude/skills/deploy/SKILL.md | head -20
cat .claude/skills/deploy/SKILL.md | head -20
# 3. 在 Claude 里
# "What skills are available? Show me the full details for the deploy skill."
| 现象 | 根因 | 修法 |
|---|---|---|
| 触发错 skill | description 模糊 | 窄化 description + 加 anti-trigger |
| 同时触发多个 | description 边界不清 | description 里写"跳转到 X skill" |
| 一个都没触发 | 描述互相稀释 | 重写 description 触发条件 |
| 团队运行行为不一致 | 个人层 skill 覆盖项目层 | 个人层用 my- 前缀 |
| 改了 description 不生效 | session 缓存 | 重启 Claude Code / 开新会话 |
作者观点
我的判断:到 2027 年中,skills 会被切成"个人 / 项目 / 插件"三层架构 ------ 个人快捷方式 + 项目团队标准 + 插件企业强制,三层 namespace 配合 5 步 description 写作 + 一个 CI 校验脚本,会是 agent 工具栈成熟期的标准范式。理由:①Tool call 模式越来越长链 ------ Skills 数量会从今天平均 5-10 个涨到 50+,撞车率正比于 n² 增长,命名空间 + 优先级 + 反触发的三层护栏是数学必然;②Anthropic 官方 + Vercel + Cursor 都在 2026 推 skill-registry 生态,团队越来越多用 plugin 形式发布,plugin 内命名空间被直接隔离,规模化唯一可行路径;③description 写法的"三段式 + 反触发"已经是被官方复盘 + 第三方实战反复验证的稳态模式。
另外一条独立判断:skill-registry 很可能成为 npm 之后的下一个生态标准 ------ 不是巧合:仓储化、分发、命名空间、版本号、CI 校验,这五条 npm 走过的路 skill-registry 都在重走。Skill 包一旦装在 50+ 团队规模的工程战队里,"撞车 → 命名空间 → CI 校验"这条 npm 走过的路会原样复现。
第一条判断可证伪:
- 到 2027-Q2,如果主流 agent(Claude Code / Cursor / Cline)还没有把"个人 / 项目 / 插件"三层命名空间做成原生隔离(直到现在还在用同名 silent override),那"撞车"仍然是 agent 工具栈的"皇帝新衣"。
- 或者 skill 数量增长没到 50+(业界持续单个项目都用 5 个以内),那三层架构就过度工程。
- 或者 Anthropic / OpenAI 推出"运行时强制 namespace 唯一性"机制,那 description 写法本身就不重要了。
但更实在的动作:今天下午,把你团队里跑了一周的 skills 库,按命名空间 + 优先级 + 描述三段式 过一遍,至少给所有 skills 加 disable-model-invocation: true 这种默认值做一次最小化的事故兜底。
小结 · 今晚 / 这周 / 长期
- 今晚 :把所有当前装着的 skill 的
description字段过一遍,有没有三段式(做什么 + 何时 + 何时不)。差的当场加 "do not activate for X" 句。 - 这周:把"个人 / 项目 / 插件"三层关系理清楚 ------ 你的 personal skills 里有没有同名的"团队标准"冲突项?命名空间化下。
- 长期:盯三个 ------ ①Anthropic 是不是推出 description 冲突检测 extension;②Vercel skill-registry 是不是变成行业事实标准;③团队 CI 里有没有写 skill-collision-detector。三个里任何一个普及,"撞车"就成历史词。
| 段位 | 你今天的状态 | 下一步动作 |
|---|---|---|
| 个人开发者 | 装 5-10 个 skills,偶尔触发错 | 把所有 description 改成三段式 |
| 团队 tech lead | 8 人团队,skills 撞车已翻车 | 推 my- 前缀 + 团队 standards 项目化 |
| 平台工程 | 多团队用同一个 plugin | 走 plugin 命名空间 + CI 校验 |
互动段
你团队里哪些 skills 撞过车,最后想出来什么 hack?评论区丢场景,下一期挑点赞最高的写个具体迁移跑通的稿子。
来源(7 条权威 + 中文一手源 3 条)
- 虎嗅 · Claude Code 内部复盘的 Skills 实战经验公开:好 Skill 的 5 个共性 --- 5 步写好 Skill:列坑 → 写 description → 给脚本 → 加记忆 → 加护栏(中文一手源)
- 掘金 · Skill 开发进阶:调试、协作与安全实战 --- 撞车 3 种表现 + 拆职责/allowed-tools/手动触发 3 步解法(中文一手源)
- claudskills.com · Debugging a Claude Code Skill When Claude Won't Use It --- Claude 选 skill 是 LLM 推理、description 抢 attention slot、anti-trigger section 写法(境外开源一手)
- SegmentFault 思否 · Skills 从 0 到 1 怎么写:AI Agent Skills 完整创建教程 2026 --- Skill 四类 + 优先级规则 + 命名空间隔离(中文一手源)
- claudecodesessions.com · Claude Code: which skill wins when names collide --- 固定优先级链 + 同名 deploy 撞车翻车案例(境外实战)
- weste.net · Skill 误触诊断:Description 写成这样,Agent 不瞎触发才有鬼 --- Description 三段式(做/触发/不触发)+ 错题剖析(中文二级转述)
- Open 笔记本 · Skills 系统三大致命坑与避坑指南 2026 实操版 --- 第三方 Skill 覆盖原 Skill 真实案例 + skill-collision-detector.sh CI 校验(中文二级转述)
自检列表
- ✅ 开头无"在当今社会 / 随着 AI 发展"之类空话;用"你团队 8 个人 / 凌晨生产事故"切入。
- ✅ 标题词眼:"撞车"+ 反直觉 + ≤18 字;禁用 "浅谈 / 解读"。
- ✅ 配图 8 个(5 Mermaid + 3 表格),覆盖 7/7 类别(流程 / 对比 / 架构 / 通信 / 分类 / 状态机 + 时间线由图 6 补足)。
- ✅ 7 来源 + 3 中文一手源(虎嗅 / 掘金 / 思否),硬约束满足。
- ✅ 作者观点段给出可证伪条件(2027-Q2 三层架构没普及 / skill 数量没到 50+ / 运行时强制 namespace 出现)+ 独立判断(skill-registry 是 npm 之后的下一个生态标准)。
- ✅ 全文无「卡卡敲码」任何品牌署名 / 落款 / 机器脚注。
- ✅ de-ai-ify 已过线:去"首先/其次"排比、加"讲道理/老实说/我不是说"口语连接、长短句混搭。