Skills 撞车了,Agent 怎么选

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 不是"关键词匹配",而是:

关键三条:

  1. 预算上限:所有 skill 的 description 加起来不能超过上下文窗口 2%,回退值 16,000 字符。装 50 个 skill 描述都是 500 字符,预算撑爆,Claude 直接从尾段剪;匹配可靠性 d 强下滑。
  2. 加载时机:metadata (name + description) 永远在上下文,但 SKILL.md 全篇只在"看起来匹配"时才被加载。这就是渐进式披露。
  3. 决策权在 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 这种默认值做一次最小化的事故兜底。


小结 · 今晚 / 这周 / 长期

  1. 今晚 :把所有当前装着的 skill 的 description 字段过一遍,有没有三段式(做什么 + 何时 + 何时不)。差的当场加 "do not activate for X" 句。
  2. 这周:把"个人 / 项目 / 插件"三层关系理清楚 ------ 你的 personal skills 里有没有同名的"团队标准"冲突项?命名空间化下。
  3. 长期:盯三个 ------ ①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 条)

  1. 虎嗅 · Claude Code 内部复盘的 Skills 实战经验公开:好 Skill 的 5 个共性 --- 5 步写好 Skill:列坑 → 写 description → 给脚本 → 加记忆 → 加护栏(中文一手源)
  2. 掘金 · Skill 开发进阶:调试、协作与安全实战 --- 撞车 3 种表现 + 拆职责/allowed-tools/手动触发 3 步解法(中文一手源)
  3. claudskills.com · Debugging a Claude Code Skill When Claude Won't Use It --- Claude 选 skill 是 LLM 推理、description 抢 attention slot、anti-trigger section 写法(境外开源一手)
  4. SegmentFault 思否 · Skills 从 0 到 1 怎么写:AI Agent Skills 完整创建教程 2026 --- Skill 四类 + 优先级规则 + 命名空间隔离(中文一手源)
  5. claudecodesessions.com · Claude Code: which skill wins when names collide --- 固定优先级链 + 同名 deploy 撞车翻车案例(境外实战)
  6. weste.net · Skill 误触诊断:Description 写成这样,Agent 不瞎触发才有鬼 --- Description 三段式(做/触发/不触发)+ 错题剖析(中文二级转述)
  7. 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 已过线:去"首先/其次"排比、加"讲道理/老实说/我不是说"口语连接、长短句混搭。
相关推荐
羑悻1 小时前
周一早上三件事砸过来,我以为要延期,结果 AI 替我扛了一半!
后端
文艺理科生1 小时前
3 年,8 种方案,1 次重构:LangChain 记忆方案如何从混乱走向清晰
前端·后端·架构
Ai拆代码的曹操2 小时前
Agent 做错了怎么办?Self-Critique 机制拆解
后端·agent·ai编程
天性2 小时前
AgentScope Java 源码深读:一次请求如何触发工具、Middleware 和子 Agent
后端
ckjoker2 小时前
我把Java多模态链路从0跑通了,结果先被4个坑狠狠干了一顿
后端·agent
瑞码空间3 小时前
Routing & API:前后端协作的本质与实现
前端·后端·接口·路由
SomeB1oody3 小时前
【RustyML入门】2.10. 主成分分析
开发语言·后端·机器学习·rust·教程
我真是泰库辣3 小时前
用TraeWork制作应用 —— 从 0 到 1 · 手把手搭建 opencode 网页对话网关
前端·后端
亚雷3 小时前
图解分布式架构:一个 Console,一群 Sidecar
后端·面试·程序员