技能与插件
Skill 加载、内置技能与 MCP 技能构建
技能系统让用户可以通过 /command 形式触发预定义的提示词模板。支持内置技能、用户自定义技能和从 MCP 服务器动态生成的技能。
核心要点
设计亮点
条件技能像潜伏特工
有些技能只在特定条件下才出现在用户可用列表中。比如一个 Docker 相关技能,只有当项目中存在 Dockerfile 时才会被加载和显示。这通过文件路径匹配实现——技能定义中包含'我需要哪些文件存在才激活'的条件。这样用户看到的 /command 列表始终是和当前项目相关的,不会被无关技能淹没。
符号链接去重防止分身
如果用户在全局技能目录(~/.claude/skills/)创建了指向项目技能目录(.claude/skills/)的符号链接,系统会用 realpath 解析出真实路径。发现两个路径指向同一个文件?只加载一次。这个看似小的优化避免了实际使用中一个恼人的问题:同一个技能出现两次,用户不知道该选哪个。
模块架构图
skills/loadSkillsDir.ts1,000 LOC技能发现和加载(34K)
skills/bundled/800 LOC内置技能定义
skills/mcpSkillBuilders.ts400 LOCMCP 技能构建器
skills/bundledSkills.ts300 LOC技能加载器
tools/SkillTool/400 LOCSkill 执行工具
关键代码
深入解析
技能是 Claude Code 的用户友好扩展机制——比 Hook 更简单,直接通过 /command 触发,无需编写 shell 脚本。
内置技能包括 commit(智能提交)、review(代码审查)、simplify(代码简化)等 19 个常用开发工作流。每个技能本质上是一个精心设计的提示词模板。
MCP 技能构建器可以将 MCP 服务器的工具自动包装为可调用的技能——MCP 提供原始工具能力,技能构建器把它包装成用户友好的 /command。
技能加载系统(loadSkillsDir.ts, 34K)会扫描多个目录发现技能:内置目录、用户全局目录(~/.claude/skills/)、项目目录(.claude/skills/)。
条件技能只在特定条件下出现——比如某个技能只有当项目中存在 Dockerfile 时才会被加载。这通过文件路径匹配实现,避免无关技能污染用户的命令列表。
符号链接去重是一个微妙但重要的优化:如果 ~/.claude/skills/ 中有指向项目 .claude/skills/ 的符号链接,系统通过 realpath 解析真实路径,避免同一个技能被加载两次。
技能支持参数传递——/commit -m 'fix bug' 中的参数会被注入到提示词模板中,让技能更灵活。
自动触发(autoTrigger)让某些技能在匹配特定意图时自动激活,用户甚至不需要显式输入 /command。