首页/技能与插件

技能与插件

Skill 加载、内置技能与 MCP 技能构建

技能系统让用户可以通过 /command 形式触发预定义的提示词模板。支持内置技能、用户自定义技能和从 MCP 服务器动态生成的技能。

核心要点

19 个内置技能(commit, review, simplify 等)
动态加载 — 从目录和 MCP 服务器发现
Skill = 提示词模板 + 触发规则
支持参数传递
可通过 settings.json 配置

设计亮点

条件技能像潜伏特工

就像卧底只在接到暗号时才暴露身份——平时隐藏在普通人中间

有些技能只在特定条件下才出现在用户可用列表中。比如一个 Docker 相关技能,只有当项目中存在 Dockerfile 时才会被加载和显示。这通过文件路径匹配实现——技能定义中包含'我需要哪些文件存在才激活'的条件。这样用户看到的 /command 列表始终是和当前项目相关的,不会被无关技能淹没。

符号链接去重防止分身

就像公司通讯录里不会因为一个人有两个工位就把他列两次

如果用户在全局技能目录(~/.claude/skills/)创建了指向项目技能目录(.claude/skills/)的符号链接,系统会用 realpath 解析出真实路径。发现两个路径指向同一个文件?只加载一次。这个看似小的优化避免了实际使用中一个恼人的问题:同一个技能出现两次,用户不知道该选哪个。

// loadSkillsDir.ts - 符号链接去重
const realPath = fs.realpathSync(skillPath)
if (loadedPaths.has(realPath)) {
  continue  // 已经加载过了,跳过
}
loadedPaths.add(realPath)

模块架构图

加载架构图...
核心文件
skills/loadSkillsDir.ts1,000 LOC

技能发现和加载(34K)

skills/bundled/800 LOC

内置技能定义

skills/mcpSkillBuilders.ts400 LOC

MCP 技能构建器

skills/bundledSkills.ts300 LOC

技能加载器

tools/SkillTool/400 LOC

Skill 执行工具

数据流程
1
触发技能
用户输入 /skill-name
2
解析技能
查找匹配的技能定义
3
展开模板
注入参数到提示词
4
执行
将提示词发送给模型

关键代码

加载代码...
加载代码...

深入解析

技能是 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。