在 Skill 中调用工具
Skill 不只是提示词——它能让 Claude 在执行过程中调用各种工具:读取文件、运行命令、搜索代码、写入输出。这些工具调用串联起来,就构成了一个真正的自动化工作流。
可用工具概览
在 Skill 中,Claude 可以使用以下内置工具:
| 工具 | 功能 | 典型用途 |
|---|---|---|
| Read | 读取文件内容 | 分析源码、读取配置、读取日志 |
| Write | 创建或覆盖文件 | 生成报告文件、创建配置文件 |
| Edit | 修改文件的特定部分 | 代码修复、配置更新 |
| Bash | 执行 Shell 命令 | 运行测试、调用 CLI 工具、git 操作 |
| Grep | 在文件中搜索模式 | 找特定代码模式、搜索配置项 |
| Glob | 按模式匹配文件路径 | 找所有 .ts 文件、找特定目录下的文件 |
| WebFetch | 获取网页内容 | 获取 API 文档、检查依赖版本 |
| WebSearch | 搜索互联网 | 查找错误解决方案、确认最新版本 |
在 Skill 文件中指定工具
方式一:在 frontmatter 中声明(推荐)
---
description: 分析项目的依赖安全漏洞
allowed-tools: Bash, Read, Glob
---
优点:明确限制了 Skill 可以使用的工具,增加安全性,避免 Claude 意外执行写操作。
方式二:在步骤描述中指定
## 执行步骤
1. 使用 **Glob 工具** 找到所有 `package.json` 文件(模式:`**/package.json`,排除 `node_modules`)
2. 使用 **Read 工具** 读取每个 `package.json` 的内容
3. 使用 **Bash 工具** 运行 `npm audit --json` 获取漏洞报告
在步骤中明确指定工具,Claude 会按照指定的工具执行,减少工具选择的不确定性。
核心工具的使用模式
Bash 工具
Bash 工具执行 Shell 命令,是最强大也最需要谨慎使用的工具。
## 执行步骤
1. 使用 Bash 工具运行:
```bash
git log --oneline --since="7 days ago" --format="%h %s (%an)"
```
如果命令失败(非零退出码),跳过此步骤并记录"无最近提交记录"。
2. 使用 Bash 工具检查测试:
```bash
npm test -- --reporter=json 2>&1
```
提取测试结果中的通过/失败数量。
安全提示:
# ✅ 只读操作,安全
git log
npm test
cat /etc/hosts
# ⚠️ 有副作用,需要明确意图
git commit
npm install
rm -f file.txt
# ❌ 在 Skill 中应避免的
rm -rf /
git push --force origin main
Read 工具
## 执行步骤
1. 使用 Read 工具读取 `.env.example` 文件(路径:`.env.example`)
2. 使用 Read 工具读取实际的 `.env` 文件(路径:`.env`)
3. 对比两个文件中的变量键名,找出 `.env` 中缺失的变量
Glob 工具
## 执行步骤
1. 使用 Glob 工具找到所有迁移文件:
- 模式:`db/migrations/*.sql`
- 如果找不到文件,输出"未找到迁移文件"并停止
2. 对于每个找到的文件,使用 Read 工具读取内容
Grep 工具
## 执行步骤
1. 使用 Grep 工具在 `src/` 目录中搜索所有 `console.log` 调用:
- 模式:`console\.log`
- 目录:`src/`
- 文件类型:`.ts`、`.js`
2. 使用 Grep 工具搜索硬编码的密钥模式:
- 模式:`(api_key|apikey|secret|password)\s*=\s*['"][^'"]{8,}['"]`
- 目录:`src/`
- 忽略大小写
处理工具调用的结果
Claude 需要知道如何处理工具返回的结果。在步骤描述中明确这一点:
## 执行步骤
1. 使用 Bash 工具运行 `npm audit --json`:
- 如果命令成功(退出码 0):解析 JSON 输出,提取漏洞数量和严重性
- 如果命令失败(退出码非 0):检查是否是因为发现了漏洞(`npm audit` 在有漏洞时退出码为 1),解析错误输出中的 JSON
- 如果输出不是有效的 JSON:报告"npm audit 返回了无法解析的输出"
2. 使用 Read 工具读取 `package.json`:
- 如果文件存在:提取 `dependencies` 和 `devDependencies`
- 如果文件不存在:报告"未找到 package.json,请确认在 Node.js 项目目录中运行"并停止
工具调用的顺序与依赖
当工具调用之间有依赖关系时,明确描述执行顺序:
graph LR
A["Glob 工具\n找到所有 .ts 文件"] --> B["Read 工具\n读取每个文件内容"]
B --> C["Grep 工具\n在内容中搜索安全模式"]
C --> D["Bash 工具\n运行 ESLint 检查"]
D --> E["生成报告"]
在 Skill 文件中:
## 执行步骤(按顺序执行,每步依赖上一步的结果)
1. **[Glob]** 找到所有 TypeScript 源文件(`src/**/*.ts`,排除 `*.test.ts`)
→ 结果:文件路径列表
2. **[Read]** 读取上一步找到的每个文件(最多 20 个,如超过提示"文件数量超出限制")
→ 结果:文件内容映射表
3. **[Grep]** 在上一步的文件中搜索安全漏洞模式
→ 结果:匹配列表(文件、行号、匹配内容)
4. **[Bash]** 运行 `npx eslint src/ --format=json 2>&1` 获取 ESLint 结果
→ 结果:ESLint 错误/警告列表
5. 合并步骤 3 和步骤 4 的结果,生成综合安全报告
本节记录清单
- [ ] 了解所有可用工具及其适用场景
- [ ] 在 frontmatter 的
allowed-tools中声明你的 Skill 需要的工具 - [ ] 在执行步骤中明确指定每步使用哪个工具
- [ ] 为每个工具调用描述失败处理逻辑
下一节:顺序步骤与条件分支设计——如何让 Skill 根据中间结果做出不同的决策?如何处理"如果条件 A 就走路径 X,否则走路径 Y"?