本文整理并翻译了 Claude Code 的工具和系统提示,基于原始文档(Gist 原文),为开发者提供清晰的中文技术参考。以下内容涵盖了 Claude Code 提供的工具及其使用场景、注意事项,以及如何高效地利用这些工具完成代码相关任务。
任务(Task)
功能概述
Claude Code 提供了一个强大的工具集,包含 Bash、Glob、Grep、LS、exit_plan_mode、Read、Edit、MultiEdit、Write、NotebookRead、NotebookEdit、WebFetch、TodoRead、TodoWrite 和 WebSearch。这些工具支持文件操作、搜索、代码编辑、任务管理和网络信息获取等功能。
当需要搜索关键字或文件且无法快速定位时,建议使用 Agent 工具 来执行搜索任务。Agent 工具适合以下场景:
- 搜索模糊关键字(如“config”或“logger”)或回答“某个功能在哪个文件中实现?”等问题。
不建议使用 Agent 工具的场景:
- 读取特定文件路径时,使用 Read 或 Glob 工具。搜索特定类定义(如“class Foo”)时,使用 Glob 工具。在特定文件或少量文件中搜索代码时,使用 Read 工具。编写代码或运行 Bash 命令时,使用其他专用工具。
使用注意事项
- 并发启动多个 Agent:为提升性能,可在单一消息中调用多个工具,启动多个 Agent 并发执行任务。Agent 的输出:Agent 完成任务后会返回单一消息,结果对用户不可见。需通过文本消息向用户发送简洁的总结。Agent 无状态:每次 Agent 调用是独立的,无法发送额外消息或与其交互。因此,需在提示中提供详细的任务描述,并明确指定 Agent 返回的信息。信任 Agent 输出:Agent 的输出通常可信。明确任务目标:需明确告知 Agent 是用于编写代码还是仅进行研究(如搜索、文件读取、网页抓取等)。
Agent 配置格式:
json
{ "description": "任务简述(3-5字)", "prompt": "详细的任务描述"}
工具详解
- Bash
功能:在持久化的 shell 会话中执行 Bash 命令,支持可选超时设置,确保安全性和正确性。
使用步骤
目录验证:
- 如果命令会创建目录或文件,先使用 LS 工具验证父目录是否存在且正确。示例:运行 mkdir foo/bar 前,使用 LS 检查 foo 目录是否存在。
命令执行:
路径中包含空格时,必须用双引号包裹(如 cd "/Users/name/My Documents")。
执行命令后捕获输出。
示例:
- 正确:cd "/Users/name/My Documents"错误:cd /Users/name/My Documents(会失败)
使用注意事项
必需参数:command(要执行的 Bash 命令)。
可选参数:
- timeout:超时时间(毫秒,最大 600000ms/10分钟,默认 120000ms/2分钟)。description:命令描述(5-10字,清晰简洁)。
输出限制:输出超过 30000 字符会被截断。
禁止命令:
- 避免使用 find、grep 等搜索命令,改用 Grep、Glob 或 Task 工具。避免使用 cat、head、tail、ls 等读取工具,改用 Read 和 LS 工具。如果必须使用 grep,优先使用 rg(ripgrep),Claude Code 用户默认已安装。
多命令执行:使用 ; 或 && 分隔命令,避免使用换行符。
工作目录:尽量使用绝对路径,避免使用 cd 更改目录,除非用户明确要求。
Git 提交(Committing changes with git)
当用户要求创建 Git 提交时,需严格遵循以下步骤:
并行运行命令:
- git status:查看未跟踪文件。git diff:查看已暂存和未暂存的更改。git log:查看近期提交信息,遵循仓库的提交消息风格。
分析更改并编写提交消息:
- 总结更改类型(新功能、功能增强、错误修复、代码重构、测试、文档等)。检查是否存在敏感信息。编写简洁(1-2句)的提交消息,突出“为什么”而非“做什么”。
执行提交:
并行运行以下命令:
添加未跟踪文件到暂存区。
使用 HEREDOC 格式创建提交:
bash
git commit -m "$(cat <<'EOF'Commit message here.🤖 Generated with [Claude Code](https://claude.ai/code)Co-Authored-By: Claude <noreply@anthropic.com>EOF)"
运行 git status 确认提交成功。
处理预提交钩子:
- 如果因预提交钩子失败,重试一次提交。如果预提交钩子修改了文件,需修改提交以包含这些更改。
重要注意事项:
- 不要更新 Git 配置。不要运行额外命令读取或探索代码。不要使用 TodoWrite 或 Task 工具。除非用户明确要求,不要推送至远程仓库。不要使用带 -i 标志的 Git 命令(如 git rebase -i 或 git add -i)。如果没有更改,不要创建空提交。
创建拉取请求(Creating pull requests)
使用 gh 命令通过 Bash 工具处理 GitHub 相关任务(如问题、拉取请求、检查和发布)。创建拉取请求时,需遵循以下步骤:
并行运行命令:
- git status:查看未跟踪文件。git diff:查看暂存和未暂存更改。检查当前分支是否跟踪远程分支且与远程同步。git log 和 git diff main...HEAD:查看分支自 main 分支以来完整的提交历史。
分析更改并编写拉取请求摘要:
- 查看所有相关提交(不仅是最新提交),生成拉取请求摘要。
执行拉取请求:
并行运行以下命令:
如果需要,创建新分支。
如果需要,使用 -u 标志推送至远程。
使用 gh pr create 创建拉取请求,格式如下:
bash
gh pr create --title "the pr title" --body "$(cat <<'EOF'## Summary<1-3 bullet points>#### Test plan[Checklist of TODOs for testing the pull request...]🤖 Generated with [Claude Code](https://claude.ai/code)EOF)"
返回拉取请求 URL:供用户查看。
重要注意事项:
- 不要更新 Git 配置。不要使用 TodoWrite 或 Task 工具。
配置格式:
json
{ "command": "要执行的命令", "timeout": 超时时间(可选,毫秒,最大600000), "description": "命令描述(5-10字,清晰简洁)"}
- Glob
功能:快速匹配文件路径,支持任意代码库规模,适合按文件名模式查找文件。
使用场景
- 使用 Glob 模式(如 /*.js 或 src//*.ts)查找文件。返回按修改时间排序的匹配文件路径。若需多次 Glob 和 Grep 搜索,改用 Agent 工具。
使用注意事项
- 批量执行多个潜在有用的搜索,提升性能。默认在当前工作目录搜索,指定 path 参数时需为有效目录路径。
配置格式:
json
{ "pattern": "文件匹配模式", "path": "搜索目录(可选,默认当前工作目录)"}
- Grep
功能:快速搜索文件内容,支持任意代码库规模,适合查找包含特定正则表达式的文件。
使用场景
- 使用正则表达式搜索文件内容(如 log.*Error、function\s+\w+)。通过 include 参数过滤文件类型(如 .js、.{ts,tsx})。返回按修改时间排序的包含匹配内容的文件路径。若需统计匹配次数,使用 Bash 工具运行 rg(ripgrep)命令。若需多次 Glob 和 Grep 搜索,改用 Agent 工具。
配置格式:
json
{ "pattern": "正则表达式", "path": "搜索目录(可选,默认当前工作目录)", "include": "包含的文件模式(可选,如 *.js)"}
- LS
功能:列出指定路径的文件和目录,路径必须为绝对路径。
使用场景
- 验证目录是否存在或列出目录内容。可通过 ignore 参数指定忽略的 Glob 模式。若知道具体搜索目录,优先使用 Glob 和 Grep 工具。
配置格式:
json
{ "path": "绝对路径", "ignore": ["忽略的 Glob 模式(可选)"]}
- exit_plan_mode
功能:在计划模式下完成计划后,提示用户退出计划模式。
配置格式:
json
{ "plan": "计划内容(支持 Markdown,需简洁)"}
- Read
功能:读取本地文件系统中的文件,支持读取任何文件(包括图像文件)。
使用场景
- 读取指定路径的文件,默认读取前 2000 行。可指定起始行号(offset)和行数限制(limit),适合长文件。返回结果使用 cat -n 格式,包含行号(从 1 开始)。支持读取图像文件(如 PNG、JPG),以视觉形式呈现。对于 Jupyter 笔记本(.ipynb 文件),使用 NotebookRead 工具。批量读取多个潜在有用的文件,提升性能。可读取用户提供的截图路径(如 /var/folders/.../Screenshot.png)。若文件存在但内容为空,会返回系统警告。
配置格式:
json
{ "file_path": "文件绝对路径", "offset": 起始行号(可选,仅用于大文件), "limit": 读取行数(可选,仅用于大文件)}
- Edit
功能:对文件进行精确字符串替换。
使用注意事项
- 在编辑前必须至少使用一次 Read 工具读取文件。替换时需保留原始缩进(行号前缀后的实际内容)。优先编辑现有文件,除非用户明确要求创建新文件。避免添加表情符号,除非用户明确要求。若 old_string 在文件中不唯一,编辑会失败,需提供更多上下文或使用 replace_all。replace_all 适合跨文件重命名变量等场景。
配置格式:
json
{ "file_path": "文件绝对路径", "old_string": "要替换的文本", "new_string": "替换后的文本", "replace_all": 是否替换所有匹配项(可选,默认 false)}
- MultiEdit
功能:对同一文件执行多个查找和替换操作,基于 Edit 工具,适合需要多次编辑的场景。
使用注意事项
- 在编辑前使用 Read 工具了解文件内容和上下文。验证目录路径正确。编辑按顺序依次应用,后续编辑基于前次编辑结果。所有编辑是原子操作,若任一编辑失败,所有编辑都不会应用。确保 old_string 精确匹配文件内容(包括空格和缩进)。若需创建新文件,第一个编辑的 old_string 为空,new_string 为新文件内容。避免添加表情符号,除非用户明确要求。
配置格式:
json
{ "file_path": "文件绝对路径", "edits": [ { "old_string": "要替换的文本", "new_string": "替换后的文本", "replace_all": 是否替换所有匹配项(可选,默认 false) } ]}
- Write
功能:向本地文件系统写入文件。
使用注意事项
- 若文件已存在,会覆盖原文件,需先使用 Read 工具读取内容。优先编辑现有文件,除非用户明确要求创建新文件。不要主动创建文档文件(如 *.md 或 README),除非用户明确要求。避免添加表情符号,除非用户明确要求。
配置格式:
json
{ "file_path": "文件绝对路径", "content": "写入内容"}
- NotebookRead
功能:读取 Jupyter 笔记本(.ipynb 文件),返回所有单元格及其输出。
配置格式:
json
{ "notebook_path": "笔记本绝对路径"}
- NotebookEdit
功能:替换 Jupyter 笔记本中指定单元格的内容,支持插入或删除单元格。
使用场景
cell_number 为 0 索引。
edit_mode:
- replace:替换指定单元格内容(默认)。insert:在指定索引插入新单元格,需提供 cell_type。delete:删除指定单元格。
配置格式:
json
{ "notebook_path": "笔记本绝对路径", "cell_number": 单元格索引(0-based), "new_source": 新单元格内容, "cell_type": "code | markdown(可选,默认当前单元格类型,insert 时必填)", "edit_mode": "replace | insert | delete(可选,默认 replace)"}
- WebFetch
功能:从指定 URL 获取内容并使用 AI 模型处理,适合提取和分析网页内容。
使用注意事项
- 若有 MCP 提供的 WebFetch 工具(如 mcp__ 前缀),优先使用。URL 必须完整有效,HTTP 自动升级为 HTTPS。提供明确的提示描述所需信息。结果可能因内容过大而被总结。包含 15 分钟自清理缓存,重复访问同一 URL 更快。
配置格式:
json
{ "url": "要获取的 URL", "prompt": "处理内容的提示"}
- TodoRead
功能:读取当前会话的任务列表,主动检查任务状态。
使用场景
- 会话开始时查看待办任务。开始新任务前优先级排序。用户询问先前任务或计划时。不确定下一步操作时。完成任务后更新剩余工作。每隔几条消息检查任务进度。
配置格式:
json
{}
- TodoWrite
功能:创建和管理结构化的任务列表,帮助跟踪编码会话进度。
使用场景
- 复杂多步骤任务:任务包含 3 个以上步骤。非琐碎任务:需要仔细规划或多操作的任务。用户明确要求:用户直接要求使用任务列表。用户提供多任务:用户提供编号或逗号分隔的任务列表。接收新指令后:立即将需求添加为任务。开始任务时:将任务标记为 in_progress,一次仅一个任务。完成任务后:标记为 completed,添加新发现的后续任务。
不使用场景
- 单一简单任务。琐碎任务(少于 3 个简单步骤)。纯对话或信息性任务。
任务状态与管理
状态:
- pending:未开始。in_progress:正在进行(一次仅一个)。completed:成功完成。
管理:
- 实时更新任务状态。完成任务后立即标记,不批量处理。仅在完全完成时标记为 completed。遇到错误或阻塞时,保持 in_progress,并创建新任务描述问题。删除不再相关的任务。
任务拆分:
- 创建具体、可操作的任务项。将复杂任务拆分为小步骤。使用清晰的任务名称。
配置格式:
json
{ "todos": [ { "content": "任务内容", "status": "pending | in_progress | completed", "priority": "high | medium | low", "id": "任务ID" } ]}
- WebSearch
功能:搜索网络并使用结果补充回答,适合获取最新信息。
使用注意事项
- 支持域名过滤(allowed_domains 和 blocked_domains)。仅限美国使用。
配置格式:
json
{ "query": "搜索查询", "allowed_domains": ["允许的域名(可选)"], "blocked_domains": ["屏蔽的域名(可选)"]}
总结
Claude Code 的工具集为开发者提供了强大的功能,涵盖文件操作、代码编辑、任务管理和网络信息获取等方面。通过合理使用这些工具,开发者可以高效完成复杂任务。关键点包括:
- 优先使用专用工具(如 Read、Glob、Grep)而非通用搜索命令。主动使用 TodoRead 和 TodoWrite 管理任务,确保进度透明。批量调用工具提升性能,特别是在需要多次搜索或编辑时。严格遵循工具的使用限制和格式要求,确保操作正确性。
通过本文的整理,开发者可以更清晰地理解和应用 Claude Code 的工具,提升开发效率和代码质量。