在 Skill 中调用工具
High Contrast
Dark Mode
Light Mode
Sepia
Forest
3 min read655 words

在 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 的结果,生成综合安全报告

本节记录清单


下一节顺序步骤与条件分支设计——如何让 Skill 根据中间结果做出不同的决策?如何处理"如果条件 A 就走路径 X,否则走路径 Y"?