One More Skill Installed: How Co-Installed Skills in Coding Agents Conflict
One Skill Too Many: How Co-Installed Skills Conflict in Coding Agents
312对、三模型上,相似skill使已安装skill使用率降19.9个百分点,任务完成不降。
- Coding agent的skill来自独立来源,同职责skill会在同一会话共同安装。模型只看名称和描述选择,已安装skill的核心功能可能丢失,任务却仍完成,只查通过与否的基准会漏掉。
- 从20,947个仓库快照重建会加载的skill,LLM判定同职责后抽出可检查的核心功能。312对上比较仅A、仅B、A加B与无关skill,并改列举顺序和作用域;第一次读取处用pre-tool hook拒绝B。
- 相似skill使A的使用率降19.9个百分点,任务完成不降,独有核心功能保真度降5.6个百分点。安装位置决定谁运行;B替代A时,最终回复点名所用skill仅0.9%。第一次读取前拒绝B后,179次中96%改用A。
- 作者在效度威胁中写运行非确定且主分析每种组合一次、完整设计只在Claude Code、跨项目配对为构造样本,并报告Codex上193对效应接近、列表内配对同样下降。完整设计覆盖三个Claude模型与312对。
- Evaluated models
- claude-sonnet-4-6claude-haiku-4-5-20251001claude-opus-5gpt-5.5gpt-5.6-lunagpt-5.6-sol
- Benchmarks
- 312 experimental pairsCodex check on 193 pairspublic SKILL.md corpus (20,947 repositories)
- Metrics
- fidelitytask completionskill usedisclosure
The paper studies how, when a coding agent installs skills with similar purposes at the same time, the constraints of the original skill are replaced or bypassed. The authors filtered similar skill combinations from open-source repositories and ran experiments on three models; the results show that even when the task completion rate does not decline, co-installed skills can still cause the loss of core functions unique to the original skill, such as the constraint of not allowing Git operations. The authors also found that conflicts are usually decided at the first skill read, and report that adding a check hook before tool calls at that step can improve adherence to these unique functions. The paper therefore recommends that evaluations should check both task completion and skill core constraints, and that platforms should protect the first skill read and clearly display the skills used.
Why it was selected论文以 312 对技能和 6,368 次运行量化同类技能共存时已安装技能核心功能的流失,并给出在技能读取处拦截的做法。
Paper analysis
What problem does this paper attempt to solve?
相似skill会夺走已安装skill的核心功能,只查任务通过发现不了。
共同安装的相似 skill 会替代或改写已安装 skill 的核心功能,只查任务是否通过发现不了。
- 场景:作者称 coding agent 用含 SKILL.md 的 skill 扩展:名称和描述决定何时调用,正文才是指令,可选附带脚本。开发者用它写入模型自己不会做的约定或安全规则,如 pull-request 格式或禁止改动 git。
- 冲突如何出现:skill 来自团队仓库、个人目录、插件和整包复制的集合,同职责 skill 可在无人配对时共同安装。模型多只看每个 skill 数百字符的名称和描述。Figure 1(Haiku 4.5)中,相似 skill 使模型提交了项目 skill 禁止的 git 变更,回复未点名 skill,两次都完成任务。
- 现有评测:作者称多数基准只查任务是否通过,或正确 skill 是否被检索。SWE-Skills-Bench 中 49 个 skill 有 39 个通过率提升为零,丢掉它们也不会拉低通过率。工具选择研究报的是选了哪个工具,不是用户失去什么。
- 要回答的问题:共同安装后任务完成与核心功能是否下降、损失来自替代还是干扰;列举顺序、作用域和模型如何决定用谁、是否告知用户;冲突在哪一步决定,该步守卫能否保住核心功能。
- 本文做法:在 Claude Code 上对已安装 skill A 与相似 skill B 做受控实验,用事先抽出、可在输出中核对的核心功能及保真度衡量损失。作者称据其所知,这是对此类冲突的首次实证研究。
What related research exists?
作者称此前工作未系统衡量同职责良性skill对核心功能的损失。
技能实证与基准
- 逐个考察 skill:Liu 等(2026)分析 31,132 个市场 skill 的安全漏洞;Zhang 等(2026)在 138,133 个 SKILL.md 中研究妨碍复用的缺陷。作者称此前技能实证是逐个看 skill。
- 选择失败与通过率:Liu 等(2026)报告智能体必须自行搜索时常常加载不到所需 skill;Song 与 Wei(2026)发现库扩到 202 个后通过率平均降 21 个百分点,主因是选错或未选。作者称这些研究按任务是否通过或检索是否正确打分。
- 最接近的设置:作者称检查 skill 内流程、禁止操作或逻辑关系的近期基准,没有一个安装两个同职责 skill。SkillCoach 认为验证器成功可能掩盖选了重叠干扰 skill 的运行;Saha 等(2026)发现智能体偏好对抗性描述的 skill 副本;Wang 等(2026)研究共同安装 skill 的安全风险。作者称本文改为从公共项目已安装的 skill 出发,配上真实、良性、同职责的 skill,并衡量核心功能与是否告知用户。
工具与 skill 选择
- MetaTool(Huang 等,2024):评估模型是否决定使用工具,以及在包括相似选项时能否选对。
- 位置与描述偏差:BiasBusters(Blankenstein 等,2026)构造功能等价的工具组,发现模型固着于某一提供方或偏好更早出现的工具;Faghih 等(2025)显示改写描述可使某工具使用量超过十倍。作者称这些工作报告的是选了哪个工具,而 skill 会注入改变整件任务做法的指令。
共同安装组件的冲突
- 包与特征:特征交互研究组合后行为出乎意料的特征;包分布研究包之间以及依赖版本之间的冲突。作者称这类冲突通常由版本约束等规则,在运行前从包元数据检查。
- Decca(Wang 等,2018):按所加载版本是否覆盖项目用到的功能来给依赖冲突分级。作者称这与 skill 的独有核心功能类似;skill 新增的交互是模型依据自然语言描述决定哪个组件运行。
基线方法与数据
- 配置对照:同一请求、同一起始仓库下的仅 A、仅 B,以及用无关 skill C 替换 B 的 A+C。用例是自建的 312 对,不是在 SWE-Skills-Bench 或 SkillsBench 上复跑。引言用后者说明能力型 skill 可以改变通过率:经挑选的 skill 把平均通过率从 33.9% 提到 50.5%。
作者称据其所知,此前没有工作系统研究这类冲突对已安装 skill 核心功能做了什么、平台与模型如何消解、用户是否被告知,以及冲突在哪一步决定、能否在该步拦住。
How does the paper address this problem?
抽出可检查的核心功能,受控比较A与相似B,并在第一次读取处设守卫。
作者把问题收成受控比较:已安装 skill A 与同职责 skill B 共同安装后,相对只装 A,用户从 A 得到的行为是否改变。损失用事先固定的核心功能保真度衡量,选择从工具调用记录里读出。
冲突与平台规则
- 对象:A 是项目或用户为某目的安装的 skill;B 做同一件事。二者在同一会话中可见即为共同安装。视角是期望 A 之行为的用户,每个请求都在要 A 的工作。
- 核心功能:有能力的模型没有该 skill 时通常不会满足、从文本逐字引用、且能在该任务输出中检查的要求。主核心功能是按排序适用于请求的前三个;保真度是一次运行中它们被满足的比例。条件性条目只在条件出现的运行中计分。
- 两种机制:冲突指相对只装 A,任务完成或保真度发生变化。替代是平台或模型改用 B,因而未用 A;干扰是用了 A 但结果仍变;两者都未用单独报告。
- Claude Code 的选择:先把名称和描述列入上下文,合并的 description 与 when_to_use 在 1,536 字符处截断;请求匹配描述后才加载正文。同名时个人 skill 覆盖项目 skill;插件 skill 与项目 skill 都加载,名称带插件前缀(Table 1)。作者注明 Gemini CLI 与 Copilot CLI 优先项目 skill,Codex 两者都列出。
安装重建与配对
- 重建:语料为 2026 年 7 月 18 日的公共 SKILL.md,20,947 个仓库、55,698 个不同 skill。按 Claude Code 加载规则得到 5,106 个安装列表。GPT-6 Astra 给仓库分型:真实项目与 dotfiles 贡献安装列表,供他人挑选的集合与单 skill 仓库提供相似 skill。
- 过滤:能被读取且可调用的文件保留 207,863 个(94.6%)。近重复用词 5-gram 的 MinHash、Jaccard 阈值 0.8 并成家族,同家族不配对。
- 两种配对:列表内配对是已经共同安装的;跨项目配对把 A 与另一作者、B 池中的 skill 组合,表示用户从别处添加、仓库扫描看不到的个人或插件 skill。Qwen3-Embedding-0.6B 嵌入选择时可见的名称与描述,按余弦相似度取前 10,得 439,860 对跨项目与 382,249 对列表内候选。
- 确认:GPT-6 Astra 先只看名称和描述,判断给 A 的请求能否路由到 B;再读正文,判为同职责、近重复、相关但不同或无关。确认为同职责或近重复。相似度下限在 615 对上校准:跨项目 0.72(召回 0.96),列表内 0.52。分层样本 3,754 对,确认 1,639 对。类型用反事实问题标为规范型或能力型;目录含脚本且 SKILL.md 引用则为带脚本。
核心功能与用例
- 抽取:GPT-6 Astra 每次只看一个 skill,不见配对方、也不见运行。示例、样例输出、参考表和工具本来会加的默认值不计。最多 10 条,按措辞强度(MUST 或 NEVER 高于 SHOULD 高于普通指令)、与所述目的的接近程度、效果落在交付物还是涉及安全、以及出现顺序排序。3,115 个 skill 抽出 26,198 条,平均 8.4 条。
- 独有:再把 A 的每条与 B 的全文及核心功能比较。B 不要求同一具体行为则标为 A 独有。实验对中适用于任务的 2,518 条里,73% 为独有。
- 入选:配对已确认;A 能在离线容器中完整运行,且至少三条核心功能、至少一条适用于请求;目录能在快照提交取回。312 对分六格(Table 2),每个 A 只出现一次;跨项目对中 81 对同名。离线可运行性对确认对中 1,604 个已安装 skill 的 768 个成立(48%)。
- 用例:每个对一个共用用例。请求只写目标和开发者会提到的事实,不写 skill 名、其约定或描述中的短语;起始仓库至多 15 个文件,且无面向智能体的指令。检查或为脚本(满足、不满足或无法判定),或为给输出评审的是否题。任务完成按实质判断,任何合格做法都算完成。
配置、运行与守卫
- 一次一因素:RQ1 比较仅 A、仅 B、A+B。A+C 在全部 312 对上用无关 skill C 代替 B:C 来自其他用例的 167 个 skill,与 A、B 的描述相似度至多 0.435。RQ2 反转列举顺序;对 81 对同名 skill 另设个人作用域(B 覆盖 A)和插件作用域(两者都列出)。
- 运行:Claude Code 2.1.283,非交互,最多 80 轮、25 分钟。模型为 claude-sonnet-4-6、claude-haiku-4-5-20251001、claude-opus-5,每种模型、配置、配对一次。作者测得原列举上限对前两个模型为 8,000 字符、对 Opus 5 为 6,000;其下给 Opus 5 的 A+B 列举有 95.8% 会丢掉两条描述之一,因此全部提到 20,000 字符,并记录模型实际看到的列举。
- 第一次读取与守卫:共同安装时,第一次通过 Skill 工具调用或读写其目录中文件,记为该 skill 的第一次读取。守卫是 pre-tool hook:A 尚未被读时拒绝第一次读取 B,并让模型改用 A,但不点名任何核心功能;A 已在使用后再拒绝 B。只重跑主实验中先打开 B 的 187 个配对–模型组合(119 对)。
- 判定:skill 使用含直接读文件,不只 Skill 工具调用。披露指最终回复说出存在多个合适 skill、点名所用 skill,或请用户选择。921 条主核心功能中 327 条由脚本判定;其余 594 条、脚本无法判定的检查,以及除 11 条以外的任务完成,由 GPT-6 Astra 判定。评审看到最终仓库、屏蔽了 skill 名称与路径的工具记录和最终回复,看不到配置,也不知道哪个是 A。
What experiments did the paper conduct?
三模型、312对上A使用率降19.9个百分点,独有功能降5.6,任务完成不降。
实验设置
- 平台与模型:完整设计在 Claude Code 2.1.283 上,模型为 claude-sonnet-4-6、claude-haiku-4-5-20251001、claude-opus-5。Codex 核对用 gpt-5.5、gpt-5.6-luna、gpt-5.6-sol,193 对。配对判定、分型、抽取、用例起草和输出评审均为 GPT-6 Astra;候选检索用 Qwen3-Embedding-0.6B。
- 规模:分层样本 3,754 对,确认 1,639 对;实验 312 对(Table 2:跨项目规范型 98、能力型 41、带脚本 89,列表内 34、14、36)。分析配置运行 5,162 / 5,166,超时 113 次按原样计分;加守卫与重复运行共 6,368 次、169,294 次工具调用、542 小时(Table 3)。
- 指标:保真度是适用于请求的前三个主核心功能被满足的比例;另报全部适用条目,以及独有与共享。任务完成按实质判定。共同安装时记录披露。
- 评审与人工:脚本判定 327 / 921 条主核心功能。两名评分者在随机样本上校验,作者给出的 firm / tentative 阈值为 Krippendorff α 0.8 / 0.667。输出评审在核心功能上为 0.83 与 0.78,任务完成为 0.80 与 0.75,披露为 0.88 与 0.84(评分者之间,以及共识与 LLM)。配对判定重判 200 对,Cohen κ 为 0.93;人类校验该步为 0.76 与 0.72。
- 重复与统计:主分析用每种组合第一次完成的运行。512 个组合跑了两到三次:A 是否被使用的成对一致率为 88.9%(组内相关 0.78),脚本判定的核心功能组内相关 0.84。差值为配对内风险差,合并值先在配对内对三模型平均;95% 置信区间在配对上计算。RQ1 对六格和保真度、任务完成做 Holm 校正。
主结果
据 §4.2 与 Figure 4,312 对、三模型合并的点估计如下。A+C 的任务完成变化、使用 A 的绝对占比,论文未在正文给出。
Swipe horizontally to read the table
指标 仅A 仅B A+B相对仅A A+C相对仅A 主核心功能满足率 57.3% 46.3% −2.6个百分点 −0.2个百分点 任务完成率 57.2% 58.1% +1.9个百分点 未报告 使用A的占比变化 未报告 未报告 −19.9个百分点 −5.9个百分点 独有核心功能保真度变化 未报告 未报告 −5.6个百分点 未报告 共享核心功能保真度变化 未报告 未报告 +0.1个百分点 未报告 - 作者的解读:作者称冲突藏在成功后面。任务完成的差值区间为 [−1.0, +4.9],作者称任务完成没有下降;独有核心功能的下降作者称每个模型上都显著,共享核心功能的区间跨过 0。
- 损失从哪来:A+B 中只用 B 的运行占 12.1%,两者都不用占 38.0%;仅 A 中不用 A 的占 30.3%。替代运行相对仅 A 少 8.0 个百分点保真度。作者称保真度损失中替代占 36%,两者都不用占 45%,用了 A、因而可能是干扰的运行只占 20%。
- 不是多装一个 skill:无关 skill 被用在 3.0% 的运行中,替代 A 仅 0.1%。使用率下降在每种类型和两种配对中都出现;列表内配对降 18.3 个百分点。相似 skill 在无关 skill 之外再使使用率降 14.0 个百分点、保真度降 2.6 个百分点。
流行度
- 同列表与跨作者:作者估计 23.5%(95% CI [21.2%, 25.7%])的已安装 skill,约 10,100 个家族,其同一安装列表中最相似的 skill 做同一件事;63.7%([61.3%, 66.0%]),约 26,100 个家族,另一作者的最相似 skill 做同一件事。作者称估计偏保守,因为判定只看最相似候选。
- 复制来的集合:复制整包集合的 489 个项目(最多 1,382 个 skill)中,被判定 skill 有 37% 在同一列表里已有同职责 skill,其他列表为 19%。加权后,确认的跨项目对中已安装 skill 为规范型的占 60%、列表内对占 56%,能力型为 31% 与 35%,带脚本约 9%。
- 来源:确认的列表内对中,69% 至少有一个 skill 也存在于项目之外;其余 31% 两个都只在该项目中。引言另称公共仓库很少显示个人 skill 和插件,因此重建估计偏保守。
选择与披露
- 列举顺序:反转顺序使 A 的使用变化 +0.6 个百分点(95% CI [−2.0, +3.3]);给 B 加一个字符前缀的改名效应为 +4.4 个百分点。作者称这与功能等价工具上报告的位置偏差不同(§4.3、Figure 5)。
- 作用域:81 对同名 skill 中,B 在个人目录时 243 次列举都不出现 A,使用率降 35.0 个百分点([−43.0, −26.9]),46.5% 的运行用 B,仍有 29.2% 读取项目里 A 的文件,保真度比仅 A 低 3.9 个百分点([−7.5, −0.3])。B 在插件中时 A 被用在 58.0%、B 只在 2.9%,使用率降 6.2 个百分点;同一批对把 B 放在项目中则降 16.9。
- 告知与模型差:B 替代 A 的 113 次运行中,回复说存在多个合适 skill 的为 0%,点名所用 skill 的为 0.9%,请用户选择的为 0%。全部 A+B 运行中,点名为 7.7%,说存在多个为 3.2%,集中在 Opus 5(21.0% 与 9.4%),从未请用户选择。A+B 中 Opus 5 有 36.8% 两个都用、15.5% 都不用,Haiku 4.5 有 56.4% 都不用;个人作用域中 Opus 5 在 53.1% 的运行里仍读 A 的文件。
决策点与守卫
- 何时决定:79 个配对–模型组合(63 对)在 A+B 与交换配置中先打开的 skill 不同,到该次读取前的工具调用中位数都是 6。先打开 B 使独有核心功能少 9.4 个百分点([−15.0, −4.0],Holm 校正后 p=0.004),适用核心功能少 7.5 个百分点。Haiku 4.5 为 22.1,Sonnet 4.6 为 12.1 且作者称校正后不显著,Opus 5 无差(Figure 6)。
- 丢掉的是什么:作者称先打开 B 的运行中 97% 在打开前没有改任何文件。只装 A 时被满足的核心功能里,先打开 B 会失去 37% 的独有功能和 8% 的共享功能;每多一条独有核心功能,损失多 1.9 个百分点([0.9, 2.9])。
- 钩子:重跑先打开 B 的 187 个组合(119 对),共 670 次运行。钩子拒绝第一次伸向 B 后,179 次中 96% 改用 A(Sonnet 4.6 94%,Haiku 4.5 96%,Opus 5 99%)。独有核心功能保真度升 9.1 个百分点([+6.0, +12.1]);两配置都先伸向 B 时增益 17.8。先伸向 B 的运行里,三模型增益为 17.4、20.7、12.8 个百分点,作者称每个模型都显著。被重定向的运行与无钩子、先打开 A 的运行相差 0.0 个百分点([−10.2, +10.3])。作者称钩子收回了无钩子时先打开 B 所损失的 16.5 个百分点。任务完成变化 +4.1 个百分点([−1.3, +9.6])。
其他消融与分析
- 核心功能条数:只计第一条时损失 1.7 个百分点,三条为 2.6,全部适用为 4.1([−5.5, −2.6])(§4.2)。
- 去掉起始仓库上脚本已通过的条目后仍为 2.3 个百分点([−4.1, −0.4]);两种配置都由脚本判定的为 4.2([−7.6, −0.9]),输出评审判定的为 1.2(§4.2)。
- 控制:仅 B 比仅 A 少满足 16.1 个百分点的独有核心功能、5.5 个百分点的共享核心功能;任务完成为 57.2% 与 58.1%(§4.2)。
- Codex、193 对、三个 OpenAI 模型:使用率降 18.2 个百分点,前三个独有核心功能降 3.4;同批对在 Claude Code 上为 20.1 与 4.6,任务完成未降(§3.1)。
- 描述相似度低于 0.9 时,跨项目各带的确认率只有 10% 到 37%,作者称相似措辞不能代替配对判定(§3.4)。
- A+C 中两者都不用占 36.0%,只用 C 占 0.1%;作者称超出“多一个 skill”之后,B 主要增加的是替代(§4.2)。
What are some points that can be further explored?
作者在效度威胁中写了单次运行、完整设计的平台和跨项目配对的构造方式。
作者指出的局限与后续方向
- 单次运行(§6):作者写运行是非确定的,每种模型、配置、配对只跑一次。他们报告 512 个重复组合在使用 A 上的一致率为 88.9%,组内相关为 0.78 与 0.84,并写三次运行会给出几乎相同的结果、成本约三倍。
- 先打开哪个 skill 并非指派(§6):作者写哪一个 skill 被先打开是观察到的,不是被分配的;并称守卫实验在第一次读取处随机化钩子,且改变这次读取会改变结果。
- 完整设计的平台(§6):作者写完整设计只在 Claude Code 上跑,因为一个平台约 5,550 美元。他们同时报告 Codex 上三个 OpenAI 模型、193 对的效应大小接近,并称主效应并非只属于一个平台。
- 跨项目配对是构造的(§6):作者写跨项目配对是构造的,并称项目实际共同安装的列表内配对显示出同样的使用率下降(18.3 个百分点)。
论文的 Discussion 与 Conclusion 写的是对评测、平台和作者的含义,没有另列后续实验清单。
实验覆盖范围
- 完整设计在 Claude Code 2.1.283 上,被测模型为 claude-sonnet-4-6、claude-haiku-4-5-20251001、claude-opus-5(§3.8)。
- 实验对为 312 对、六格(Table 2);配置运行分析 5,162 次;守卫实验为 187 个配对–模型组合、119 对、670 次运行(§3.9、Table 3)。
- Codex 核对使用 gpt-5.5、gpt-5.6-luna、gpt-5.6-sol,193 对,判定方式与主实验相同(§3.1)。
- 流行度来自 20,947 个仓库快照、5,106 个安装列表,以及 3,754 对的分层判定(§3.2、§4.1)。
- 输出评审为 GPT-6 Astra。§3.10 写出人类校验样本量:仓库类型、配对判定、skill 类型和输出判定为 100,离线可运行性、适用性和核心功能为 30。主分析每种组合用第一次完成的运行,并报告 512 个组合的重复一致率。
Summarize the main content of the paper
冲突藏在任务成功后面;安装位置决定谁运行,第一次读取处的钩子能保住独有核心功能。
作者对共同安装、做同一件事的良性 skill 做实证研究,用核心功能是否还在,而不是任务过不过,来看冲突。
- 问题:Claude Code 一类 coding agent 从名称和描述里选择 skill。团队仓库、个人目录、插件和整包复制会把同职责 skill 放进同一会话。被替代或被改写后,约定和安全规则可以消失,任务仍可能完成,只查通过率的基准会漏掉。
- 做法:从 20,947 个仓库快照重建会加载的 skill,经嵌入检索和 GPT-6 Astra 判定得到同职责对,事先抽出可检查的核心功能。在三个 Claude 模型、312 对上比较只装 A、只装 B、两者同装,以及换成无关 skill;再改列举顺序和作用域。冲突点定为第一次读取 skill,并用 pre-tool hook 在该处拒绝 B。
- 影响:A 与 B 同装相对只装 A,A 的使用率降 19.9 个百分点,保真度降 2.6 个百分点,独有核心功能降 5.6 个百分点;任务完成的差值区间包含 0。无关 skill 只使使用率降 5.9 个百分点。作者称损失主要来自没用 A 的运行。
- 谁被选中:同名时个人 skill 覆盖项目 skill,插件里的 B 只在 2.9% 的运行中被使用,反转列举顺序只使 A 的使用变化 +0.6 个百分点。B 替代 A 的 113 次运行里,最终回复点名所用 skill 的比例为 0.9%。
- 拦住的位置:同一对、同一模型先打开 B,独有核心功能保真度低 9.4 个百分点;这些运行中 97% 在打开前没有改文件。钩子拒绝第一次读取 B 后,179 次中 96% 改用 A,独有核心功能回到先打开 A 的水平,作者称每个模型都有增益,任务完成的区间仍跨过 0。
- 作者的结论:作者称基准应给独有核心功能打分,平台应守住第一次读取并显示哪个 skill 在运行。作者称据其所知,这是对此类冲突的首次实证研究。