SKILL.md 文件,其中包含说明,Claude 会将其添加到其工具包中。Claude 在相关时使用 skills,或者你可以使用 /skill-name 直接调用一个。
当你不断将相同的说明、检查清单或多步骤程序粘贴到聊天中时,或者当 CLAUDE.md 的一部分已经演变成程序而不是事实时,创建一个 skill。与 CLAUDE.md 内容不同,skill 的正文仅在使用时加载,因此长参考资料在你需要它之前几乎不花费任何成本。
对于内置命令(如
/help 和 /compact)以及捆绑 skills(如 /debug 和 /code-review),请参阅命令参考。自定义命令已合并到 skills 中。 .claude/commands/deploy.md 中的文件和 .claude/skills/deploy/SKILL.md 中的 skill 都会创建 /deploy 并以相同的方式工作。你现有的 .claude/commands/ 文件继续工作。Skills 添加了可选功能:支持文件的目录、控制你或 Claude 是否调用它们的 frontmatter,以及 Claude 在相关时自动加载它们的能力。捆绑 skills
Claude Code 包括一组捆绑 skills,在每个会话中都可用,除非通过disableBundledSkills 设置禁用,包括 /doctor、/code-review、/batch、/debug、/loop 和 /claude-api。与大多数内置命令不同,内置命令直接执行固定逻辑,捆绑 skills 是基于提示的:它们为 Claude 提供详细的说明,让它使用其工具来编排工作。你调用捆绑 skills 的方式与调用任何其他 skill 相同,输入 / 后跟 skill 名称。
/doctor 设置检查是 Claude Code v2.1.205 及更高版本中 disableBundledSkills 的一个例外:当设置打开时,它仍然可以输入。要隐藏它,请设置 DISABLE_DOCTOR_COMMAND 环境变量或 skillOverrides 条目 "doctor": "off"。在 v2.1.205 之前,/doctor 是一个内置命令而不是捆绑 skill。
捆绑 skills 在命令参考中与内置命令一起列出,在”目的”列中标记为 Skill。
运行并验证你的应用
三个捆绑 skills 协同工作来启动你的应用,并根据运行中的应用而不仅仅是测试来确认更改:
所有三个 skills 都需要 Claude Code v2.1.145 或更高版本。
/run 和 /verify 无需设置即可工作。它们根据你的项目类型(CLI、服务器、TUI、浏览器驱动)以及 README、package.json 或 Makefile 中的内容推断启动方式。对于需要标准启动之外的任何东西的项目,该推断变得不可靠:数据库、env 文件、图形会话、多步骤构建。
/run-skill-generator 记录配方。它从干净的环境中让你的应用运行,捕获有效的内容(安装命令、env 变量、启动脚本),并将其作为每个项目的 skill 提交到 .claude/skills/run-<name>/。之后,/run、/verify 和仓库中的任何其他代理都遵循记录的配方,而不是重新发现它。每个项目运行一次 /run-skill-generator,如果构建或启动过程更改,则再次运行。
入门
创建你的第一个 skill
此示例创建一个 skill,用于总结你的 git 仓库中未提交的更改,并标记任何风险的内容。它在 Claude 读取之前将实时 diff 拉入提示中,因此响应基于你的实际工作树,而不是 Claude 从打开的文件中猜测的内容。当你询问你的更改时,Claude 会自动加载该 skill,或者你可以使用/summarize-changes 直接调用它。
1
创建 skill 目录
在你的个人 skills 文件夹中为 skill 创建一个目录。个人 skills 在你的所有项目中都可用。
2
编写 SKILL.md
每个 skill 都需要一个
SKILL.md 文件,包含两部分:YAML frontmatter(在 --- 标记之间)告诉 Claude 何时使用该 skill,以及包含 Claude 在调用该 skill 时遵循的说明的 markdown 内容。目录名称变成你输入的命令,description 帮助 Claude 决定何时自动加载该 skill。将此保存到 ~/.claude/skills/summarize-changes/SKILL.md:!`git diff HEAD` 这一行使用动态上下文注入:Claude Code 运行该命令,并在 Claude 看到 skill 内容之前将该行替换为其输出,因此说明会随着当前 diff 已内联而到达。3
测试 skill
打开一个 git 项目,对任何文件进行小的编辑,并通过运行 或直接使用 skill 名称调用它:无论哪种方式,Claude 都应该用你的编辑的简短摘要和风险列表来响应。
claude 启动 Claude Code。你可以通过两种方式测试该 skill。让 Claude 自动调用它,通过询问与描述匹配的内容:Skills 的位置
你存储 skill 的位置决定了谁可以使用它:
当 skills 在各个级别共享相同的名称时,企业覆盖个人,个人覆盖项目。一个任何级别的 skill 也会覆盖具有相同名称的捆绑 skill。例如,你的项目的
.claude/skills/ 中的 code-review skill 会替换捆绑的 /code-review。插件 skills 使用 plugin-name:skill-name 命名空间,因此它们不能与其他级别冲突。如果你在 .claude/commands/ 中有文件,它们的工作方式相同,但如果 skill 和命令共享相同的名称,skill 优先。
Skills 也从你的工作目录下方的嵌套 .claude/skills/ 目录加载。当 Claude 读取或编辑子目录中的文件时,该子目录的 .claude/skills/ 中的 skills 变得可用。这让 monorepo 包提供自己的 skills,这些 skills 在处理该包时适用,即使会话从仓库根目录开始。
如果嵌套 skill 与另一个 skill 共享名称,两者都保持可用。例如,在项目根目录和 apps/web/.claude/skills/ 中都有一个 deploy skill:
- 嵌套的一个出现在目录限定的名称下,
apps/web:deploy。 - 其描述说明它适用于哪个目录。
- Claude 选择与它正在处理的文件匹配的变体。
/deploy 运行项目根目录 skill。输入限定名称 /apps/web:deploy 来显式运行嵌套变体。
当你或 Claude 调用非限定名称时,项目根目录 skill 加载,Claude Code 将目录限定变体列表附加到其内容中,并指示也调用任何目录包含 Claude 正在处理的文件的变体。因此,嵌套 skill 在仅调用非限定名称时仍然适用于其目录中的工作。需要 Claude Code v2.1.203 或更高版本。
一个 <skill-name> 条目在企业、个人或项目位置可以是指向磁盘上其他位置的目录的符号链接。Claude Code 跟随符号链接并从目标目录读取 SKILL.md,如果同一目标可从多个位置访问,Claude Code 只加载一次该 skill。插件 skills 以不同的方式处理符号链接;请参阅使用符号链接在市场中共享文件。
将
.claude-plugin/plugin.json 添加到 skill 文件夹中,它会作为插件加载,名称为 <name>@skills-dir,因此它可以捆绑 agents、hooks 和 MCP servers。在项目的 .claude/skills/ 中,这需要首先接受工作区信任对话框。实时变更检测
Claude Code 监视 skill 目录的文件变更。在~/.claude/skills/、项目 .claude/skills/ 或 --add-dir 目录内的 .claude/skills/ 中添加、编辑或删除 skill 会在当前会话中生效,无需重新启动。创建在会话启动时不存在的顶级 skills 目录需要重新启动 Claude Code,以便可以监视新目录。
实时变更检测仅涵盖
SKILL.md 文本。对于也是插件的 skill 文件夹,对 hooks/、.mcp.json、agents/ 和 output-styles/ 的更改需要 /reload-plugins 才能生效。从父目录和嵌套目录自动发现
项目 skills 从你的起始目录中的.claude/skills/ 以及从起始目录到仓库根目录的每个父目录中加载,因此在子目录中启动 Claude 仍然会拾取在根目录定义的 skills。当你在起始目录下方的子目录中处理文件时,Claude Code 也会按需从嵌套的 .claude/skills/ 目录中发现 skills。例如,如果你正在编辑 packages/frontend/ 中的文件,Claude Code 也会在 packages/frontend/.claude/skills/ 中查找 skills。这支持 monorepo 设置,其中包有自己的 skills。
每个 skill 都是一个以 SKILL.md 作为入口点的目录:
SKILL.md 包含主要说明,是必需的。其他文件是可选的,让你构建更强大的 skills:Claude 要填写的模板、显示预期格式的示例输出、Claude 可以执行的脚本或详细的参考文档。从你的 SKILL.md 中引用这些文件,以便 Claude 知道它们包含什么以及何时加载它们。有关更多详细信息,请参阅添加支持文件。
.claude/commands/ 中的文件仍然有效,并支持相同的 frontmatter。建议使用 Skills,因为它们支持额外的功能,如支持文件。来自其他目录的 skills
--add-dir 标志和 /add-dir 命令授予文件访问权限而不是配置发现,但 skills 是一个例外:添加目录中的 .claude/skills/ 会自动加载。此例外仅适用于 --add-dir 和 /add-dir。settings.json 中的 permissions.additionalDirectories 设置仅授予文件访问权限,不加载 skills。请参阅实时变更检测了解编辑如何在会话期间被拾取。
其他 .claude/ 配置(如命令和输出样式)不会从其他目录加载。有关加载和不加载的完整列表以及跨项目共享配置的推荐方式,请参阅例外表。
来自
--add-dir 目录的 CLAUDE.md 文件默认不加载。要加载它们,请设置 CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1。请参阅从其他目录加载。配置 skills
Skills 通过SKILL.md 顶部的 YAML frontmatter 和随后的 markdown 内容进行配置。
Skill 内容的类型
Skill 文件可以包含任何说明,但思考你想如何调用它们有助于指导要包含的内容: 参考内容添加 Claude 应用于你当前工作的知识。约定、模式、风格指南、领域知识。此内容内联运行,以便 Claude 可以将其与你的对话上下文一起使用。/skill-name 直接调用的操作,而不是让 Claude 决定何时运行它们。添加 disable-model-invocation: true 以防止 Claude 自动触发它。
SKILL.md 可以包含任何内容,但思考你想如何调用该 skill(由你、由 Claude 或两者)以及你想在哪里运行它(内联或在 subagent 中)有助于指导要包含的内容。对于复杂的 skills,你也可以添加支持文件以保持主 skill 的专注。
保持主体本身简洁。一旦 skill 加载,其内容在整个会话中保持在上下文中,因此每一行都是一个重复的令牌成本。说明要做什么而不是叙述如何或为什么,并应用与 CLAUDE.md 内容相同的简洁性测试。
Frontmatter 参考
除了 markdown 内容外,你可以使用SKILL.md 文件顶部 --- 标记之间的 YAML frontmatter 字段来配置 skill 行为:
description,以便 Claude 知道何时使用该 skill。
Skill 如何获得其命令名称
你输入的命令来自 skill 文件所在的位置。frontmattername 字段设置在 skill 列表中显示的显示标签,除了插件根 SKILL.md 外,不会改变你在 / 后输入的内容。
下表显示了每种布局的命令名称来自何处:
插件根情况是
name 设置命令名称的唯一地方,因为没有 skill 目录可以从中获取。如果 frontmatter 中未设置 name,则使用插件的目录名称。
可用的字符串替换
Skills 支持 skill 内容中动态值的字符串替换:${CLAUDE_PROJECT_DIR} 替换需要 Claude Code v2.1.196 或更高版本。它适用于 skill 主体和 allowed-tools frontmatter,因此权限规则如 Bash(${CLAUDE_PROJECT_DIR}/scripts/lint.sh *) 解析为 skill 主体使用的相同路径。
索引参数使用 shell 风格的引用,因此用引号包装多词值以将其作为单个参数传递。例如,/my-skill "hello world" second 使 $0 扩展为 hello world,$1 扩展为 second。$ARGUMENTS 占位符始终扩展为完整的参数字符串,如输入的那样。
要包含文字 $ 在数字、ARGUMENTS 或声明的参数名称之前,例如散文中的 $1.00,用反斜杠转义它:\$1.00。反斜杠在任何其他 $ 之前保持不变。只有直接在令牌之前的单个反斜杠才能转义它。双反斜杠(如 \\$1)保留两个反斜杠,$1 仍然扩展为参数值。
使用替换的示例:
添加支持文件
Skills 可以在其目录中包含多个文件。这使SKILL.md 专注于要点,同时让 Claude 仅在需要时访问详细的参考资料。大型参考文档、API 规范或示例集合不需要在每次 skill 运行时加载到上下文中。
SKILL.md 中引用支持文件,以便 Claude 知道每个文件包含什么以及何时加载它:
控制谁调用 skill
默认情况下,你和 Claude 都可以调用任何 skill。你可以输入/skill-name 直接调用它,Claude 可以在与你的对话相关时自动加载它。两个 frontmatter 字段让你限制这一点:
-
disable-model-invocation: true:只有你可以调用该 skill。用于有副作用的工作流或你想控制时间的工作流,如/commit、/deploy或/send-slack-message。你不希望 Claude 因为你的代码看起来准备好了就决定部署。 -
user-invocable: false:只有 Claude 可以调用该 skill。用于不可作为命令操作的背景知识。legacy-system-contextskill 解释了旧系统的工作原理。Claude 在相关时应该知道这一点,但/legacy-system-context对用户来说不是一个有意义的操作。
disable-model-invocation: true,Claude 无法自动运行该 skill:
在常规会话中,skill 描述被加载到上下文中,以便 Claude 知道什么可用,但完整 skill 内容仅在调用时加载。预加载 skills 的 Subagents 的工作方式不同:完整 skill 内容在启动时注入。
Skill 内容生命周期
当你或 Claude 调用一个 skill 时,呈现的SKILL.md 内容作为单个消息进入对话,并在会话的其余部分保持在那里。Claude Code 不会在后续轮次重新读取 skill 文件,因此将应该在整个任务中应用的指导写成常设说明,而不是一次性步骤。
当 Claude 重新调用一个 skill 且其呈现的内容与已在上下文中的副本相同时,Claude Code 添加一个简短的说明,表示该 skill 已加载,而不是内容的第二份副本。当呈现的内容不同时,因为参数改变或动态上下文命令产生了新输出,Claude Code 会再次附加完整内容。在 v2.1.202 之前,每次重新调用都会附加 skill 说明的另一份完整副本。
自动压缩在令牌预算内转发调用的 skills。当对话被总结以释放上下文时,Claude Code 在总结后重新附加每个 skill 的最新调用,保留前 5,000 个令牌。重新附加的 skills 共享 25,000 个令牌的组合预算。Claude Code 从最近调用的 skill 开始填充此预算,因此如果你在一个会话中调用了许多 skills,较旧的 skills 可能会在压缩后完全删除。
如果一个 skill 似乎在第一个响应后停止影响行为,内容通常仍然存在,模型正在选择其他工具或方法。加强 skill 的 description 和说明,以便模型继续偏好它,或使用 hooks 来确定性地强制行为。如果 skill 很大或你在它之后调用了其他几个,在压缩后重新调用它以恢复完整内容。
为 skill 预先批准工具
allowed-tools 字段在 skill 处于活动状态时授予对列出的工具的权限,因此 Claude 可以使用它们而无需提示你获得批准。它不限制哪些工具可用:每个工具仍然可调用,你的权限设置仍然管理不在列表中的工具。
对于检入项目的 .claude/skills/ 目录的 skills,allowed-tools 在你接受该文件夹的工作区信任对话后生效,与 .claude/settings.json 中的权限规则相同。在信任存储库之前查看项目 skills,因为 skill 可以授予自己广泛的工具访问权限。
此 skill 让 Claude 在你调用它时运行 git 命令而无需每次使用批准:
disallowed-tools 中列出它们。当你发送下一条消息时,限制会清除。要在所有 skills 和提示中阻止工具,请在你的权限设置中添加拒绝规则。
将参数传递给 skills
你和 Claude 都可以在调用 skill 时传递参数。参数可通过$ARGUMENTS 占位符获得。
此 skill 按编号修复 GitHub 问题。$ARGUMENTS 占位符被替换为 skill 名称后面的任何内容:
/fix-issue 123 时,Claude 收到”Fix GitHub issue 123 following our coding standards…”
如果你使用参数调用 skill 但 skill 不包含 $ARGUMENTS,Claude Code 会将 ARGUMENTS: <your input> 追加到 skill 内容的末尾,以便 Claude 仍然看到你输入的内容。
你也可以在一条消息的开头堆叠多个 skills。从 v2.1.199 开始,输入 /code-review /fix-issue 123 会加载两个 skills 并将尾部文本 123 作为 $ARGUMENTS 传递给每个 skills。在早期版本中,只有第一个 skill 加载并接收 /fix-issue 123 作为文字参数文本。
Claude Code 扩展第一个 skill 加上最多五个堆叠在其后的 skills。扩展在第一个不是内联用户可调用 skill 的令牌处停止,因此作为分叉 subagent 运行的 skill 或其参数本身可能以斜杠命令开头的 skill(如 /loop)也会在那里结束;该令牌及其后的所有内容成为每个扩展 skill 的参数文本。
要按位置访问单个参数,使用 $ARGUMENTS[N] 或较短的 $N:
/migrate-component SearchBar React Vue 会将 $ARGUMENTS[0] 替换为 SearchBar,$ARGUMENTS[1] 替换为 React,$ARGUMENTS[2] 替换为 Vue。使用 $N 简写的相同 skill:
高级模式
注入动态上下文
!`<command>` 语法在将 skill 内容发送给 Claude 之前运行 shell 命令。命令输出替换占位符,因此 Claude 接收实际数据,而不是命令本身。
此 skill 通过使用 GitHub CLI 获取实时 PR 数据来总结拉取请求。!`gh pr diff` 和其他命令首先运行,其输出被插入到提示中:
- 每个
!`<command>`立即执行(在 Claude 看到任何内容之前) - 输出替换 skill 内容中的占位符
- Claude 接收带有实际 PR 数据的完全呈现的提示
!`<command>` 占位符,因此命令不能发出占位符供后续传递展开。
内联形式仅在 ! 出现在行首或紧跟在空白之后时被识别。如果 ! 跟在另一个字符之后,如 KEY=!`cmd`,占位符将保留为字面文本,命令不会运行。
对于多行命令,使用以 ```! 开头的围栏代码块而不是内联形式:
"disableSkillShellExecution": true。每个命令都被替换为 [shell command execution disabled by policy] 而不是被运行。捆绑和托管 skills 不受影响。此设置在托管设置中最有用,用户无法覆盖它。
在 subagent 中运行 skills
当你想让 skill 在隔离中运行时,在你的 frontmatter 中添加context: fork。skill 内容变成驱动 subagent 的提示。它将无法访问你的对话历史。
Skills 和 subagents 以两个方向协同工作:
使用
context: fork,你在你的 skill 中编写任务并选择一个代理类型来执行它。内置的 Explore 和 Plan 代理跳过 CLAUDE.md 和 git 状态以保持其上下文较小,因此使用 agent: Explore 的分叉 skill 仅看到 SKILL.md 内容和代理自己的系统提示。对于反向情况,其中你定义使用 skills 作为参考资料的自定义 subagent,请参阅 Subagents。
示例:使用 Explore 代理的研究 skill
此 skill 在分叉的 Explore 代理中运行研究。skill 内容变成任务,代理提供针对代码库探索优化的只读工具:- 创建一个新的隔离上下文
- Subagent 接收 skill 内容作为其提示(“Research $ARGUMENTS thoroughly…”)
agent字段确定执行环境(模型、工具和权限)- 结果被总结并返回到你的主对话
agent 字段指定要使用的 subagent 配置。选项包括内置代理(Explore、Plan、general-purpose)或来自 .claude/agents/ 的任何自定义 subagent。如果省略,使用 general-purpose。
限制 Claude 的 skill 访问
默认情况下,Claude 可以调用任何没有设置disable-model-invocation: true 的 skill。定义 allowed-tools 的 Skills 在 skill 处于活动状态时向 Claude 授予对这些工具的访问权限,无需每次使用批准。你的权限设置仍然管理所有其他工具的基线批准行为。一些内置命令也可通过 Skill 工具获得,包括 /init、/review 和 /security-review。其他内置命令如 /compact 则不能。
控制 Claude 可以调用哪些 skills 的三种方式:
通过在 /permissions 中拒绝 Skill 工具来禁用所有 skills:
Skill(name) 用于精确匹配,Skill(name *) 用于带有任何参数的前缀匹配。
通过在其 frontmatter 中添加 disable-model-invocation: true 来隐藏单个 skills。这会从 Claude 的上下文中完全删除该 skill。
user-invocable 字段仅控制菜单可见性,不控制 Skill 工具访问。使用 disable-model-invocation: true 来阻止程序调用。从设置覆盖 skill 可见性
skillOverrides 设置从你的设置控制 skill 可见性,而不是从 skill 自己的 frontmatter。将其用于你不想编辑 SKILL.md 的 skills,例如检入共享项目仓库或由 MCP 服务器提供的 skills。/skills 菜单为你编写它:突出显示一个 skill 并按 Space 循环切换状态,然后按 Enter 保存到 .claude/settings.local.json。
每个键是一个 skill 名称,每个值是以下四种状态之一:
从 v2.1.199 开始,
"off" 也会从广告给 Remote Control 客户端和 Agent SDK 调用者的命令列表中隐藏该 skill,而不仅仅是终端 / 菜单。按其全名调用隐藏的 skill 仍然返回 skillOverrides 错误而不是运行它。
skillOverrides 中不存在的 skill 被视为 "on"。下面的示例将一个 skill 折叠为其名称,并完全关闭另一个:
skillOverrides 影响。通过 /plugin 管理这些。
评估和迭代 skill
看到 skill 触发告诉你 Claude 找到了它,而不是它做了你想要的。要知道 skill 是否有效,分别测量两件事:Claude 是否在它应该的提示上调用它,以及当它确实调用时输出是否与你期望的相匹配。 两者的检查都是基线比较。收集一些现实的提示,在一个新会话中运行每个提示,skill 可用,然后再次运行它禁用,并比较结果。新会话很重要,因为编写 skill 的剩余上下文会掩盖书面说明中的差距。使用 skill-creator 运行 evals
skill-creator 插件在 Claude Code 内自动化比较循环。从官方市场安装它:
/plugin marketplace update claude-plugins-official 来刷新它,或 /plugin marketplace add anthropics/claude-plugins-official(如果你之前没有添加过)。然后重试安装。
安装后,运行 /reload-plugins 以在当前会话中使插件的 skills 可用。然后要求 Claude 评估现有 skill,例如 evaluate my summarize-changes skill with skill-creator。该插件引导你编写测试用例并运行循环:
- 测试用例:在 skill 目录内的
evals/evals.json中存储提示、输入文件和预期行为 - 隔离运行:为每个测试用例生成一个 subagent,以便每次运行都从干净的上下文开始,并记录令牌计数和持续时间
- 评分:检查每个断言与输出,并将通过或失败与证据写入
grading.json - 基准:将通过率、时间和令牌聚合为有 skill 与无 skill 的情况,放入
benchmark.json,以便你可以将通过率改进与令牌和时间开销进行比较 - 版本比较:在两个版本的 skill 之间运行盲 A/B,以便你可以在提交之前确认编辑是一个改进
- 描述调整:生成应该触发和不应该触发的提示,测量命中率,并在 skill 在错误的请求上激活时提议描述编辑
- 审查查看器:打开一个 HTML 报告,你可以在其中检查每个输出并记录定性反馈,下一次迭代会读取
共享 skills
Skills 可以根据你的受众在不同范围内分发:生成视觉输出
Skills 可以捆绑并运行任何语言的脚本,为 Claude 提供单个提示中不可能的功能。一个强大的模式是生成视觉输出:在浏览器中打开的交互式 HTML 文件,用于探索数据、调试或创建报告。 此示例创建一个代码库浏览器:一个交互式树视图,你可以在其中展开和折叠目录、一目了然地查看文件大小,并按颜色识别文件类型。 创建 Skill 目录:~/.claude/skills/codebase-visualizer/SKILL.md。描述告诉 Claude 何时激活此 Skill,说明告诉 Claude 运行捆绑的脚本。脚本路径使用 ${CLAUDE_SKILL_DIR},因此无论 skill 是在个人、项目还是插件级别安装,它都能正确解析:
~/.claude/skills/codebase-visualizer/scripts/visualize.py。此脚本扫描目录树并生成一个自包含的 HTML 文件,包含:
- 一个摘要侧边栏,显示文件计数、目录计数、总大小和文件类型数量
- 一个条形图,按文件类型(按大小排名前 8)分解代码库
- 一个可折叠树,你可以在其中展开和折叠目录,带有颜色编码的文件类型指示器
codebase-map.html,并在浏览器中打开它。
此模式适用于任何视觉输出:依赖关系图、测试覆盖率报告、API 文档或数据库架构可视化。捆绑的脚本完成繁重工作,而 Claude 处理编排。
故障排除
Skill 未触发
如果 Claude 在预期时不使用你的 skill:- 检查描述是否包含用户会自然说的关键字
- 验证 skill 是否出现在
What skills are available?中 - 尝试重新表述你的请求以更接近描述
- 如果 skill 是用户可调用的,使用
/skill-name直接调用它
/skill-name 仍然有效,但 Claude 没有 description 来匹配。使用 --debug 运行以查看解析错误。
Skill 触发过于频繁
如果 Claude 在你不想要时使用你的 skill:- 使描述更具体
- 如果你只想手动调用,添加
disable-model-invocation: true
Skill 描述被截断
Claude Code 将 skill 名称和描述的列表加载到上下文中,以便 Claude 知道什么可用。列表始终包含每个 skill 名称,但如果你有许多 skills,Claude Code 会缩短描述以适应列表的字符预算,这可能会删除 Claude 需要匹配你的请求的关键字。预算按模型上下文窗口的 1% 进行扩展。当列表超出预算时,Claude Code 会从你调用最少的 skills 开始删除描述,因此你使用最多的 skills 会保留其完整文本。 运行/doctor 以估计列表的上下文成本及其最大贡献者。当列表超出预算时,Claude Code 也会向调试日志写入警告,可通过 --debug 查看。
/context 中的 Skills 行报告应用预算后的列表大小,因此它与模型接收的内容相匹配。在 v2.1.196 之前,该行计算每个描述的完整文本,可能显示的值比配置的预算大几倍。
要提高预算,设置 skillListingBudgetFraction 设置(例如 0.02 = 2%)或 SLASH_COMMAND_TOOL_CHAR_BUDGET 环境变量为固定字符数。要为其他 skills 释放预算,在 skillOverrides 中将低优先级条目设置为 "name-only",以便它们列出而不显示描述。你也可以在源处修剪 description 和 when_to_use 文本:前置关键用例,因为每个条目的组合文本被限制为 1,536 个字符,无论预算如何。该限制可通过 skillListingMaxDescChars 进行配置。
相关资源
- 调试你的配置:诊断为什么 skill 没有出现或触发
- 在 agentskills.io 上评估 skill 输出质量:eval 文件格式和迭代工作流
- Skill 创作最佳实践:适用于 Claude 产品的写作指导
- Subagents:将任务委派给专门的代理
- Plugins:打包和分发 skills 与其他扩展
- Hooks:围绕工具事件自动化工作流
- Memory:管理 CLAUDE.md 文件以获得持久上下文
- Commands:内置命令和捆绑 skills 的参考
- Permissions:控制工具和 skill 访问
- Claude Tag skills:提交到仓库的项目 skills 在该仓库在 Claude Tag 频道中使用时也会加载