<picture>
  <source media="(prefers-color-scheme: dark)" srcset="../../resources/logos/claude-howto-logo-dark.svg">
  <img alt="Claude How To" src="../../resources/logos/claude-howto-logo.svg">
</picture>

# Agent Skills 指南

## 概览

Skills 是可以复用、可自动触发的能力包。一个 skill 通常包含 `SKILL.md`、参考文件、脚本和模板。Claude 在合适的场景下会自动加载它。

### 主要好处

- 可复用
- 可渐进加载
- 可以把脚本、模板、说明放在一起
- 适合标准化流程

## Skills 的工作方式：渐进式披露

Skills 不会一次性把所有内容都塞进上下文，而是按需加载。

### 三层加载

1. **只看描述**：先判断这个 skill 是否相关
2. **加载 `SKILL.md`**：读取核心说明
3. **按需加载支持文件**：脚本、模板、参考资料

## Skill 加载流程

1. Claude 扫描技能目录
2. 根据描述判断是否匹配当前任务
3. 读取 `SKILL.md`
4. 如有需要，再加载脚本和辅助文件

## Skill 类型与位置

Skills 可以放在：

- 项目目录下的 `.claude/skills/`
- 用户目录下的 `~/.claude/skills/`

### 自动发现

只要目录结构正确，Claude 就会自动发现这些 Skills。

## 创建自定义 Skills

### 基本目录结构

```text
my-skill/
└── SKILL.md
```

### `SKILL.md` 格式

```yaml
---
name: my-skill
description: 这个 skill 的用途，以及什么时候触发
---

# Your Skill Name

## Instructions

## Examples
```

### 必填字段

- `name`
- `description`

### 可选 frontmatter 字段

- `argument-hint`
- `allowed-tools`
- `model`
- `disable-model-invocation`
- `user-invocable`
- `context`
- `agent`
- `hooks`

## Skill 内容类型

### 参考内容

适合放规则、标准、文档片段和示例。

### 任务内容

适合放具体步骤、执行流程和结果格式要求。

## 控制 Skill 的调用

你可以通过 `disable-model-invocation`、`user-invocable` 和工具白名单来控制 Claude 是否能自动调用这个 skill。

## 字符串替换

Skills 支持 `$ARGUMENTS`、`$0`、`$1` 等参数替换。

### 动态上下文注入

你可以在 prompt 里插入 shell 命令结果：

```md
- 当前 git 状态：!`git status`
- 当前 diff：!`git diff HEAD`
- 当前分支：!`git branch --show-current`
```

## 在 subagent 中运行 Skills

某些 skill 适合在隔离上下文中运行，这样可以降低对主会话的影响。

## 实战示例

### 示例 1：代码审查 Skill

一个典型的审查 skill 会包含：

- 审查模板
- 风险等级
- 输出格式
- 需要关注的维度

### 示例 2：代码库可视化 Skill

可以把代码库结构、依赖关系和模块边界总结给 Claude，便于快速理解。

### 示例 3：部署 Skill（只允许用户触发）

适合带副作用的操作，比如生产环境部署。通常会配合 `disable-model-invocation: true`。

### 示例 4：品牌语气 Skill

用于检查输出是否符合品牌语气、语调和表达风格。

### 示例 5：`CLAUDE.md` 生成 Skill

可以从项目文档中生成或补充 `CLAUDE.md`。

### 示例 6：带脚本的重构 Skill

常见组合是：

- `SKILL.md`
- `scripts/`
- `templates/`
- `references/`

## 管理 Skills

### 查看可用 Skills

```bash
/skills
```

### 测试一个 Skill

把它放到测试目录或者临时项目里，然后通过相应命令触发。

### 更新 Skill

修改 `SKILL.md` 或支持文件后，重新打开会话或重新加载即可。

### 限制 Claude 对 Skill 的访问

你可以通过权限配置，只允许 Claude 访问某些 skill。

## 最佳实践

### 1. 描述要具体

让 `description` 明确说明这个 skill 在什么时候触发。

### 2. 保持聚焦

一个 skill 解决一个问题，不要什么都塞进去。

### 3. 包含触发词

在描述里加入相关关键词，帮助 Claude 更准确地选择它。

### 4. `SKILL.md` 不要太长

尽量控制在 500 行以内，超过就拆分支持文件。

### 5. 引用支持文件

把重复内容移到脚本或参考文件中，主文件只保留核心说明。

## 故障排查

### 快速参考

- 检查目录结构是否正确
- 检查 `SKILL.md` frontmatter 是否有效
- 检查 skill 名称是否和调用名一致

### Skill 没有触发

- 检查描述是否足够具体
- 检查目录是否在 Claude 可见范围内
- 检查是否被更高优先级的 skill 覆盖

### Skill 触发太频繁

- 收紧描述
- 增加约束条件
- 用更具体的触发词

### Claude 看不到全部 Skills

- 检查路径
- 检查权限
- 重新加载会话

## 安全注意事项

- 不要在 skill 中硬编码密钥
- 对副作用操作保持用户触发
- 给自动触发的 skill 设置清晰边界

## Skills vs 其他功能

| 功能 | 触发方式 | 适合场景 |
|------|----------|----------|
| Skills | 自动/半自动 | 复用能力、流程标准化 |
| Slash Commands | 手动 | 快捷命令 |
| Subagents | 自动委派 | 隔离任务 |
| Hooks | 事件触发 | 自动化和验证 |

## 内置 Skills

Claude Code 自带一些 Skills，例如批处理、调试、简化和 Claude API 相关内容。

## 共享 Skills

### 项目 Skills（团队共享）

把 skill 放在项目目录里，团队成员都能用。

### 个人 Skills

```bash
# 复制到个人目录
mkdir -p ~/.claude/skills

# 让脚本可执行
chmod +x ~/.claude/skills/*/scripts/*
```

### Plugin 分发

你也可以把 Skills 作为插件的一部分发布出去。

## 继续深入

如果你要管理一整套 Skills，可以再做一个 skill collection 或 skill manager，用来统一发现、更新和分发。

## 更多资源

- [根目录中文指南](../README.md)
- [Slash Commands 中文参考](../01-slash-commands/README.md)
- [Memory 中文指南](../02-memory/README.md)
- [Subagents 中文参考](../04-subagents/README.md)
