SKILL.md 文件,Claude 就会将其添加到其工具包中。Claude 在相关时使用技能,或者你可以使用 /skill-name 直接调用一个技能。
对于内置命令(如
/help 和 /compact),请参阅交互模式。自定义斜杠命令已合并到技能中。 .claude/commands/review.md 中的文件和 .claude/skills/review/SKILL.md 中的技能都会创建 /review 并以相同方式工作。你现有的 .claude/commands/ 文件继续工作。技能添加了可选功能:支持文件的目录、控制你或 Claude 是否调用它们的前置元数据,以及 Claude 在相关时自动加载它们的能力。入门
创建你的第一个技能
此示例创建一个教 Claude 使用视觉图表和类比来解释代码的技能。由于它使用默认前置元数据,Claude 可以在你询问某事如何工作时自动加载它,或者你可以使用/explain-code 直接调用它。
1
创建技能目录
在你的个人技能文件夹中为技能创建一个目录。个人技能在所有项目中都可用。
2
编写 SKILL.md
每个技能都需要一个
SKILL.md 文件,包含两部分:YAML 前置元数据(在 --- 标记之间)告诉 Claude 何时使用该技能,以及包含 Claude 在调用技能时遵循的说明的 markdown 内容。name 字段变成 /slash-command,description 帮助 Claude 决定何时自动加载它。创建 ~/.claude/skills/explain-code/SKILL.md:3
测试技能
你可以通过两种方式测试它:让 Claude 自动调用它,通过询问与描述匹配的内容:或直接使用技能名称调用它:无论哪种方式,Claude 都应该在其解释中包含类比和 ASCII 图表。
技能存放位置
你存储技能的位置决定了谁可以使用它:
项目技能覆盖具有相同名称的个人技能。如果你在
.claude/commands/ 中有文件,它们的工作方式相同,但技能优先于具有相同名称的命令。
从嵌套目录自动发现
当你在子目录中处理文件时,Claude Code 会自动从嵌套的.claude/skills/ 目录中发现技能。例如,如果你在 packages/frontend/ 中编辑文件,Claude Code 也会在 packages/frontend/.claude/skills/ 中查找技能。这支持单仓库设置,其中包有自己的技能。
每个技能都是一个以 SKILL.md 作为入口点的目录:
SKILL.md 包含主要说明并且是必需的。其他文件是可选的,让你构建更强大的技能:Claude 要填写的模板、显示预期格式的示例输出、Claude 可以执行的脚本或详细的参考文档。从你的 SKILL.md 中引用这些文件,以便 Claude 知道它们包含什么以及何时加载它们。有关更多详细信息,请参阅添加支持文件。
.claude/commands/ 中的文件仍然有效并支持相同的前置元数据。建议使用技能,因为它们支持支持文件等其他功能。配置技能
技能通过SKILL.md 顶部的 YAML 前置元数据和随后的 markdown 内容进行配置。
技能内容类型
技能文件可以包含任何说明,但思考你想如何调用它们有助于指导包含的内容: 参考内容添加 Claude 应用于你当前工作的知识。约定、模式、风格指南、领域知识。此内容内联运行,以便 Claude 可以将其与你的对话上下文一起使用。/skill-name 直接调用的操作,而不是让 Claude 决定何时运行它们。添加 disable-model-invocation: true 以防止 Claude 自动触发它。
SKILL.md 可以包含任何内容,但思考你想如何调用技能(由你、由 Claude 或两者)以及你想在哪里运行它(内联或在子代理中)有助于指导包含的内容。对于复杂的技能,你也可以添加支持文件以保持主技能专注。
前置元数据参考
除了 markdown 内容外,你可以使用SKILL.md 文件顶部 --- 标记之间的 YAML 前置元数据字段来配置技能行为:
description,以便 Claude 知道何时使用该技能。
可用的字符串替换
技能支持技能内容中动态值的字符串替换:
使用替换的示例:
添加支持文件
技能可以在其目录中包含多个文件。这使SKILL.md 专注于要点,同时让 Claude 仅在需要时访问详细的参考材料。大型参考文档、API 规范或示例集合不需要在每次技能运行时加载到上下文中。
SKILL.md 中引用支持文件,以便 Claude 知道每个文件包含什么以及何时加载它:
控制谁调用技能
默认情况下,你和 Claude 都可以调用任何没有设置disable-model-invocation: true 的技能。你可以键入 /skill-name 直接调用它,Claude 可以在与你的对话相关时自动加载它。两个前置元数据字段让你限制这一点:
-
disable-model-invocation: true:只有你可以调用该技能。用于有副作用或你想控制时间的工作流,如/commit、/deploy或/send-slack-message。你不希望 Claude 因为你的代码看起来准备好了就决定部署。 -
user-invocable: false:只有 Claude 可以调用该技能。用于不可作为命令操作的背景知识。legacy-system-context技能解释了旧系统的工作原理。Claude 在相关时应该知道这一点,但/legacy-system-context对用户来说不是一个有意义的操作。
disable-model-invocation: true 字段防止 Claude 自动运行它:
在常规会话中,技能描述被加载到上下文中,以便 Claude 知道什么可用,但完整的技能内容仅在调用时加载。预加载技能的子代理的工作方式不同:完整的技能内容在启动时注入。
限制工具访问
使用allowed-tools 字段来限制技能处于活动状态时 Claude 可以使用哪些工具。此技能创建一个只读模式,其中 Claude 可以浏览文件但不能修改它们:
将参数传递给技能
你和 Claude 都可以在调用技能时传递参数。参数可通过$ARGUMENTS 占位符获得。
此技能通过编号修复 GitHub 问题。$ARGUMENTS 占位符被替换为技能名称后面的任何内容:
/fix-issue 123 时,Claude 收到”按照我们的编码标准修复 GitHub 问题 123…”
如果你使用参数调用技能但技能不包含 $ARGUMENTS,Claude Code 会将 ARGUMENTS: <your input> 追加到技能内容的末尾,以便 Claude 仍然看到你键入的内容。
高级模式
注入动态上下文
!`command “ 语法在技能内容发送给 Claude 之前运行 shell 命令。命令输出替换占位符,所以 Claude 接收实际数据,而不是命令本身。
此技能通过使用 GitHub CLI 获取实时 PR 数据来总结拉取请求。 !`gh pr diff “ 和其他命令首先运行,它们的输出被插入到提示中:
- 每个
!`command“ 立即执行(在 Claude 看到任何内容之前) - 输出替换技能内容中的占位符
- Claude 接收具有实际 PR 数据的完全呈现的提示
在子代理中运行技能
当你想让技能在隔离中运行时,在前置元数据中添加context: fork。技能内容成为驱动子代理的提示。它将无法访问你的对话历史。
技能和子代理在两个方向上协同工作:
使用
context: fork,你在技能中编写任务并选择代理类型来执行它。对于反向操作(定义使用技能作为参考材料的自定义子代理),请参阅子代理。
示例:使用 Explore 代理的研究技能
此技能在分叉的 Explore 代理中运行研究。技能内容成为任务,代理提供针对代码库探索优化的只读工具:- 创建一个新的隔离上下文
- 子代理接收技能内容作为其提示(“彻底研究 $ARGUMENTS…”)
agent字段确定执行环境(模型、工具和权限)- 结果被总结并返回到你的主对话
agent 字段指定要使用的子代理配置。选项包括内置代理(Explore、Plan、general-purpose)或来自 .claude/agents/ 的任何自定义子代理。如果省略,使用 general-purpose。
限制 Claude 的技能访问
默认情况下,Claude 可以调用任何没有设置disable-model-invocation: true 的技能。内置命令如 /compact 和 /init 不能通过技能工具获得。
控制 Claude 可以调用哪些技能的三种方法:
通过在 /permissions 中拒绝技能工具来禁用所有技能:
Skill(name) 用于精确匹配,Skill(name:*) 用于带有任何参数的前缀匹配。
通过在其前置元数据中添加 disable-model-invocation: true 来隐藏单个技能。这会从 Claude 的上下文中完全删除该技能。
user-invocable 字段仅控制菜单可见性,不控制技能工具访问。使用 disable-model-invocation: true 来阻止程序化调用。共享技能
技能可以根据你的受众在不同范围内分发:生成视觉输出
技能可以捆绑并运行任何语言的脚本,给 Claude 超越单个提示中可能的功能。一个强大的模式是生成视觉输出:在浏览器中打开的交互式 HTML 文件,用于探索数据、调试或创建报告。 此示例创建一个代码库浏览器:一个交互式树视图,你可以在其中展开和折叠目录、一目了然地查看文件大小,并按颜色识别文件类型。 创建技能目录:~/.claude/skills/codebase-visualizer/SKILL.md。描述告诉 Claude 何时激活此技能,说明告诉 Claude 运行捆绑的脚本:
~/.claude/skills/codebase-visualizer/scripts/visualize.py。此脚本扫描目录树并生成一个自包含的 HTML 文件,具有:
- 一个摘要侧边栏,显示文件计数、目录计数、总大小和文件类型数量
- 一个条形图,按文件类型(按大小排名前 8)分解代码库
- 一个可折叠树,你可以在其中展开和折叠目录,带有颜色编码的文件类型指示器
codebase-map.html,并在浏览器中打开它。
此模式适用于任何视觉输出:依赖关系图、测试覆盖率报告、API 文档或数据库架构可视化。捆绑的脚本完成繁重工作,而 Claude 处理编排。
故障排除
技能未触发
如果 Claude 在预期时不使用你的技能:- 检查描述是否包含用户会自然说的关键字
- 验证技能是否出现在”有哪些技能可用?“中
- 尝试重新表述你的请求以更接近描述
- 如果技能是用户可调用的,使用
/skill-name直接调用它
技能触发过于频繁
如果 Claude 在你不想要的时候使用你的技能:- 使描述更具体
- 如果你只想手动调用,添加
disable-model-invocation: true
Claude 看不到我的所有技能
技能描述被加载到上下文中,以便 Claude 知道什么可用。如果你有很多技能,它们可能会超过字符预算(默认 15,000 个字符)。运行/context 以检查有关排除的技能的警告。
要增加限制,设置 SLASH_COMMAND_TOOL_CHAR_BUDGET 环境变量。