Skills的安装、管理与配置方法

掌握Skills的配置与管理

一、Skill的配置位置

在 Claude Code 中,Skill 可以通过两种级别的配置文件进行定义和注册,理解这两种配置位置的作用范围和优先级规则,是正确管理 Skill 的基础。

1.1 项目级 CLAUDE.md

项目级 CLAUDE.md 位于项目根目录(即 CLAUDE.md 所在的仓库根目录),其 Skill 定义仅在该项目的会话中生效。这是最常用的配置层级,适合将与特定项目相关的自动化和辅助工具注册为 Skill,例如项目专属的代码审查规范、构建脚本、测试命令等。

1.2 用户级 CLAUDE.md

用户级 CLAUDE.md 位于用户家目录下的 ~/.claude/CLAUDE.md,其 Skill 定义在所有项目的会话中全局生效。这是配置通用 Skill 的最佳位置,例如文本处理、格式化工具、通用代码审查模板等跨项目复用的功能。

1.3 作用范围与优先级规则

当同一项目同时存在项目级和用户级 Skill 时,项目级 Skill 会覆盖(override)同名的用户级 Skill。命名不冲突的 Skill 则会合并生效。优先级规则如下:

最佳实践: 将与团队协作相关、与项目代码紧密结合的 Skill 放在项目级 CLAUDE.md 中,将个人效率工具、通用文本处理等与项目无关的 Skill 放在用户级 CLAUDE.md 中,从而实现职责分离。

二、Skill的YAML语法结构

Skill 在 CLAUDE.md 中使用 YAML 格式的代码块进行定义,每个 Skill 由名称(name)、触发命令(command)和执行提示词(prompt)三个核心部分组成。下面是一个完整的 Skill 定义示例:

# CLAUDE.md中的Skill定义示例 ## skills - name: 代码审查 command: review prompt: | 请审查以下代码变更,关注: 1. 代码质量和可维护性 2. 潜在bug和安全问题 3. 性能优化建议 {{INPUT}}

2.1 name — 技能名称

name 字段定义了 Skill 的显示名称,用于在帮助列表和对话中标识该 Skill。名称应当简洁明了,能够准确描述 Skill 的功能。名称可以使用中文或英文,但建议在团队协作场景下使用英文以避免编码问题。

2.2 command — 触发命令

command 字段定义了触发该 Skill 的斜杠命令,用户在对话中输入 /<command> 即可调用对应的 Skill。命令名称应当简短且具有辨识度,避免与其他 Skill 的命令冲突。命令规则如下:

2.3 prompt — 提示词模板

prompt 字段是 Skill 的核心,定义了当用户调用 Skill 时,Claude 将执行的具体指令。prompt 支持模板语法,可以包含参数占位符,从而实现动态内容注入。prompt 的编写质量直接决定了 Skill 的执行效果,建议遵循以下原则:

注意: prompt 中的缩进至关重要。YAML 使用缩进来表示层级关系,prompt 字段后的 | 表示保留换行的块标量(block scalar),其后的内容必须缩进至少两个空格。缩进错误会导致 Skill 解析失败。

三、参数传递机制

Skill 支持多种参数传递方式,使得 Skill 可以灵活地接收用户输入并注入到 prompt 模板中,从而实现动态和可复用的 Skill 定义。

3.1 位置参数

在 prompt 模板中使用 {{arg1}}{{arg2}} 等占位符来引用用户通过位置传递的参数。用户调用时在命令后附加空格分隔的参数值,系统会自动按顺序填充。适用于参数数量固定且顺序明确的场景。

3.2 命名参数

使用 {{name}} 形式定义命名参数,用户通过 /command name=value 的语法传递。命名参数不受顺序限制,用户可以选择性地传递部分参数,未传递的命名参数将保持占位符形式。适用于需要多个可选参数的复杂 Skill。

3.3 特殊参数 — INPUT

{{INPUT}} 是一个特殊的通配参数,它会捕获用户命令后的所有输入文本,包括多行内容。这是最灵活的传参方式,适用于代码审查、文本分析等需要处理大量输入的场景。当使用 {{INPUT}} 时,不需要在 prompt 中定义其他命名参数。

3.4 环境变量引用

Skill 的 prompt 中可以引用环境变量,语法为 {{env:VARIABLE_NAME}}。这使得 Skill 可以访问系统环境信息、API 密钥等配置数据,而无需硬编码在 CLAUDE.md 中。环境变量引用在用户级 CLAUDE.md 中尤其有用,可以安全地传递跨项目的敏感配置。

3.5 多行输入的处理

当用户需要传递多行文本时,可以在调用 /command 后直接粘贴多行内容,Skill 的 {{INPUT}} 参数会自动捕获包含换行的完整文本。在 prompt 模板中应当使用 white-space: pre-wrap 样式来确保多行输入的正确显示。

提示: 对于需要接收文件内容的 Skill,推荐的做法是让用户在调用 Skill 后粘贴文件内容,而不是依赖文件路径。因为 Claude Code 本身具备文件读取能力,Skill 的 prompt 中可以指导用户使用 Read 工具先读取文件再调用 Skill。

四、Skills的测试与调试

正确配置 Skill 后,需要进行测试验证以确保其按预期工作。以下是一套完整的测试与调试流程。

4.1 修改生效机制

CLAUDE.md 的修改会在下次会话中生效。在编辑 CLAUDE.md 文件后,需要重新加载配置才能使用新增或修改的 Skill。如果需要在不重启会话的情况下使修改生效,可以使用 /reload-plugins 命令重新加载配置。

4.2 使用 /command 测试 Skill

定义 Skill 后,在对话中输入 /<command> 即可触发测试。执行后观察 Claude 是否按预期响应,检查 prompt 中的指令是否被正确执行。如果 Skill 定义正确,Claude 会立即执行 prompt 中描述的任务。

4.3 通过输出结果验证 prompt 模板

测试 Skill 时,重点关注以下方面:

4.4 常见配置错误排查

以下是 Skill 配置中最常见的错误及其解决方案:

错误现象可能原因解决方案
Skill 未出现在 / 列表中YAML 语法错误检查缩进和冒号格式
命令执行时无响应command 名称包含非法字符只使用小写字母、数字和连字符
参数显示为原始占位符参数名拼写错误确保 prompt 中的参数名与用户传递的名称一致
多行格式丢失缺少 pre-wrap 样式在 CSS 中添加 white-space: pre-wrap
Skill 被其他配置覆盖同名 Skill 冲突检查项目级和用户级是否存在同名 Skill
调试要点: 当 Skill 配置不生效时,首先检查 CLAUDE.md 文件的 YAML 语法是否正确(可以使用在线 YAML 验证工具),其次检查 command 命名是否与已有的内建命令或其他 Skill 冲突,最后检查 prompt 模板中的参数占位符是否与被调用时的传参方式匹配。

五、多项目Skills复用

随着项目中 Skill 数量的增长,如何高效管理和复用 Skill 成为一个重要问题。以下介绍几种 Skill 复用策略。

5.1 用户级 CLAUDE.md 共享通用 Skill

将不依赖特定项目上下文的通用 Skill 放在用户级 CLAUDE.md(~/.claude/CLAUDE.md)中,这些 Skill 将在所有项目中自动可用。适用于以下类型的 Skill:

5.2 CLAUDE.md 引用机制

Claude Code 支持通过 @ 引用语法在 CLAUDE.md 中引入其他文件的内容。利用这一机制,可以将公共 Skill 定义维护在独立的文件中,然后在多个项目的 CLAUDE.md 中引用,实现真正的"一处定义,多处使用"。例如:

# 在项目级 CLAUDE.md 中引用公共 Skill 文件 请参考 @.claude/shared-skills.md 中的技能定义。 同时,以下为该项目专属的 Skill: ## skills - name: 项目构建 command: build prompt: | 请执行项目构建流程: 1. 安装依赖 2. 运行测试 3. 构建生产版本 {{INPUT}}

5.3 团队 Skill 的标准化管理

在团队协作场景下,建议建立一套标准化的 Skill 管理流程:

推荐实践: 创建一个独立的 Git 仓库专门用于维护团队公共 Skill,各项目通过子模块(submodule)或符号链接(symlink)的方式引用该仓库中的 Skill 定义文件。这样可以集中管理、统一更新、版本追溯,同时保持各项目配置的独立性。