本系列前期做过一次装机全量统计:这台机器上装了 430 余个 Skill,按类别画过生态结构图。本篇换一把刀,不看类别,看重影——同一个能力、同一个(或近似的)名字,在一份装机里同时存在两份以上拷贝的现象。审计对象就是本机正在运行的真实装机:skill-creator 在磁盘上可定位 5 处,pptx 一个工位上有 6 个并列条目,obsidian 三件套同时以裸名和插件前缀两副面孔加载。本文拆清重影的成因(装载层的四个来源互不去重)、四种代价(触发歧义、更新落空、常驻 token、审计债),并给出一套读者可以直接在自己机器上跑的重影自查命令。
以下全部条目来自两处可复核的证据:本会话 Claude Code 加载的可用技能清单,以及对 ~/.claude/plugins 目录的文件系统快照(2026-09-12)。
| 重影家族 | 装机内条目 | 重影形态 | 严重度 |
|---|---|---|---|
| skill-creator | 裸名 skill-creator ×2、obsidian:skill-creator、example-skills:skill-creator;磁盘另有 plugins/skill-creator、plugins/skill-creator-simple 两个散装插件目录 | 同名多源,磁盘 5 处 | ★★★★★ |
| pptx 工位 | pptx、pptx-official、pptx-generator、pptx-manipulation、pptx-test、example-skills:pptx | 1 个真同名 + 4 个同工位变体 | ★★★★☆ |
| obsidian 三件套 | 裸名 json-canvas / obsidian-bases / obsidian-markdown,与 obsidian: 前缀的同一批名字 | 3 个名字 × 2 个来源 | ★★★★☆ |
| frontend-design | frontend-design:frontend-design 与 example-skills:frontend-design | 两个插件市场各养一份 | ★★★☆☆ |
| canvas-design | 裸名 canvas-design 与 example-skills:canvas-design | 跨源同名 | ★★★☆☆ |
| course-video-maker | 本体、-link、-zh、-zh-link | 命名后缀矩阵,4 个变体 | ★★☆☆☆ |
| chart-craft | chart-craft 与 chart-craft-plus | 「升级版」并存 | ★★☆☆☆ |
| openstoryline | openstoryline-install 与 openstoryline-use | 按动词拆件,属健康拆分 | ★☆☆☆☆ |
两点说明。第一,这不是脏装机——这台机器的维护频率不低,4 月和 8 月各有一次归档备份(磁盘上可见 skills_backup_20260417、backup-20260828)。重影恰恰是活跃装机的慢性病:每换一种安装姿势,就留下一层沉积。第二,最后两行放在表里是为了对照:按动词拆件(install/use)是健康的分工,而 -plus、-zh 这类后缀变体则是灰区——名字不同、工位相同,触发时照样分票。
Claude Code 的 Skill 装载层不是一个目录,而是四个来源的并集。本机磁盘快照可以完整看到这个地层结构:
~/.claude/
├── skills/ # 来源①:个人目录,裸名加载
├── plugins/
│ ├── skill-creator/ # 来源②:散装插件(单独安装)
│ ├── skill-creator-simple/ # 来源②:又一次散装安装
│ └── marketplaces/
│ ├── claude-plugins-official/ # 来源③:官方插件市场
│ │ ├── plugins/plugin-dev/skills/…(7 件开发教学件)
│ │ ├── plugins/frontend-design/skills/…
│ │ └── external_plugins/stripe/skills/…
│ ├── anthropic-agent-skills/ # 来源④:官方示例技能市场
│ └── obsidian-skills/ # 来源④:第三方市场
└── skills_backup_20260417/ # 化石层:整卷备份,不加载
关键机制有三个,都可以从本机证据直接读出:
其一,跨来源不去重。 会话清单里 pptx(裸名)与 example-skills:pptx(插件名)同时在列,canvas-design 同理。装载层把四个来源的 SKILL.md 全部登记,不做同名合并。
其二,插件件带命名空间前缀,个人件裸奔。 市场装的件在清单里显示为 example-skills:pptx、obsidian:json-canvas、frontend-design:frontend-design——前缀就是插件名;个人目录的件则只有裸名。这解释了 obsidian 三件套为什么以两副面孔共存:名字相同,但 json-canvas 和 obsidian:json-canvas 在装载层是两个条目。磁盘上 marketplaces/obsidian-skills/skills/ 与个人目录各存一份,互不知晓。
其三,散装插件目录是重影的主产地。 plugins/skill-creator 与 plugins/skill-creator-simple 两个目录几乎肯定来自两次不同的安装尝试(一个完整版、一个精简版),谁也没有替换谁。这不是假设——会话清单里裸名 skill-creator 出现了两次,与磁盘上两个散装目录正好对应。
下面的图把最严重的 skill-creator 家族画了出来:
flowchart TD
N["同一个名字:skill-creator"]
S1["个人目录,裸名"]
S2["散装插件 skill-creator"]
S3["散装插件 skill-creator-simple"]
S4["obsidian-skills 市场"]
S5["anthropic-agent-skills 市场"]
L["会话可用清单"]
Q["触发时选哪一份?"]
N --> S1
N --> S2
N --> S3
N --> S4
N --> S5
S1 --> L
S2 --> L
S3 --> L
S4 -->|加前缀成 obsidian:skill-creator| L
S5 -->|加前缀成 example-skills:skill-creator| L
L --> Q
顺带一提,化石层也有信息量:skills_backup_20260417/skills/skills/.curated/ 这种双层嵌套,说明备份保存的是某次仓库整卷克隆的中间态;pcap-generator/references/SKILL.md 则是资源子目录里再放一份 SKILL.md 的布局样本。备份不加载、无害,但它会骗过你的审计脚本——后面自查命令里会处理这一点。
代价一:触发分票。 用户说「帮我做个 PPT」,六个 pptx 工位条目都在候补。哪个 descriptions 命中得更具体,哪个就更常被选中——这是经验观察,官方文档并未公开给出同工位多条目之间的仲裁顺序。可以确认的是:真同名对(pptx 与 example-skills:pptx)的存在本身,就意味着行为不再由单一文件决定。你改了 A 份的提示词,B 份还在按旧逻辑触发,于是出现「明明改过怎么没生效」的灵异现象。
代价二:更新落空。 上游仓库发了新版,npx skills add 把新件装进了其中一个来源,其余副本原样不动。obsidian 三件套是典型:如果 obsidian-skills 市场更新了 obsidian-markdown,你个人目录里那份裸名件不会跟着走,而它仍可能被触发。更新只落到一条影子上,是重影装机里最隐蔽的坑。
代价三:常驻 token 开销。 每个已安装 Skill 的名字和描述都会进入每一段会话的系统提示词。430 余件、每件一行描述,这笔开销按千 token 量级计;重影让同一段描述文字付两遍。社区最近正在为这笔账吵架——今天 HN 首页那条「RTK 宣称省 token,但我们的成本基准测不出来」(142 分)就是佐证:连专门做 token 优化的工具,收益都难以在基准里复现,这时装机里每一份冗余条目都更没有借口。
代价四:审计债。 重影让「这台机器上 pptx 到底是什么版本」变成一个需要考古的问题。散装目录、市场目录、个人目录、备份目录四层叠上去,没有一张清单能回答。安全类技能尤其危险:本机 4 月备份里躺着 security-best-practices、security-threat-model 的旧拷贝——一旦某天有工具或人「顺手恢复」,旧安全建议就会借尸还魂。
以下命令在 macOS / Linux 的 Claude Code 默认目录结构下可直接运行。
第一步,全盘定位所有 SKILL.md,排除备份与缓存:
find ~/.claude -name "SKILL.md" \
! -path "*backup*" ! -path "*cache*" | sort
第二步,按技能名聚合,重影家族立刻现形:
find ~/.claude -name "SKILL.md" ! -path "*backup*" \
| awk -F/ '{print $(NF-1)}' | sort | uniq -c | sort -rn | head -15
第三步,对疑似的同名对做指纹比对——比 frontmatter 的 name/description,再比正文差异:
diff ~/.claude/plugins/skill-creator/skills/skill-creator/SKILL.md \
~/.claude/plugins/marketplaces/anthropic-agent-skills/skills/skill-creator/SKILL.md
grep -H -m1 "^name:\|^description:" \
~/.claude/plugins/*/skills/skill-creator/SKILL.md \
~/.claude/plugins/marketplaces/*/skills/skill-creator/SKILL.md
第四步,处理。原则按顺序判断:真同名且内容一致 → 删散装副本,留有命名空间、有更新渠道的那份;真同名但内容分叉 → 先确认哪份是你实际在用的(看最近 mtime),另一份移出加载路径再归档;同工位变体 → 逐个读 description,删掉触发词重叠度最高的弱者,或把它改造成真正的分工(像 openstoryline 那样按动词拆,而不是按后缀堆)。
三条注意事项:改之前先整卷备份;example-skills: 这类官方示例件删除时走插件卸载(/plugin 管理)而不是手删目录;删完重开会话验证清单,重影清算是少数「立刻能在系统提示词里看到减肥效果」的操作。
重影不全是用户的错,一半是作者埋的。写自己的 Skill 时:
一,别挤占已存在的名字。 发布前先在目标市场搜一遍:你叫 pptx,就意味着和官方示例件、和其他所有 pptx 同台。pptx-official 这种「我才是正版」式的命名恰是重影生态的病症——正版不需要在名字里自证。起名带上自己的领地(功能细分词或专有名词),让后缀只表达分工。
二,用命名空间分发,别劝用户裸装。 走插件/市场渠道,你的件获得 插件名:技能名 前缀,天然避开裸名碰撞区;劝用户直接拷进个人目录,等于把它扔进最容易撞车的平原。
三,变体要么合并,要么改成分工。 -plus、-v2、-zh 式后缀是在给触发层出难题。真有中英双版需求,学 openstoryline 把动词写进名字(install/use),让 description 各管各的场景;没有真分工,就只留一份。
重影最重家族 Top 3:skill-creator(磁盘 5 处、清单 4 条目);pptx 工位(6 条目并列);obsidian 三件套(3 名 × 2 源)。
最干净工位 Top 3:algorithmic-art、brand-guidelines、webapp-testing——三者仅以 example-skills: 单一命名空间存在,单源、有更新渠道、零歧义,是市场渠道分发的正面样本。
清理收益 Top 3:skill-creator 家族(一次清掉 3–4 个条目);pptx 工位变体(决定唯一主力后可清 3 个);course-video-maker 后缀矩阵(合并 zh/link 变体可减半)。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
