工具参考
Claude Code 内置工具清单、各工具是否需要权限,以及 Bash、Edit、Read、WebFetch、WebSearch、LSP 等工具的行为细节。
Claude Code 可以使用一组内置工具来理解和修改你的代码库。工具名就是你在权限规则、子智能体工具列表和 Hook matcher 里使用的确切字符串。要控制 Claude 能用哪些工具以及何时先询问,在设置里配置权限规则、Hook,或子智能体的工具列表。想添加自定义工具,连接一个 MCP 服务器;想用可复用的基于提示词的工作流扩展 Claude,写一个 Skill(它通过已有的 Skill 工具运行,而不新增工具条目)。
在 auto 模式下,由分类器而不是你来决定多数权限提示。「是否需要权限」一列显示该工具在 Manual 模式下对工作目录内的路径是否提示。
工具一览
| 工具 | 说明 | 是否需要权限 |
|---|---|---|
Agent | 派生一个有自己上下文窗口的子智能体来处理任务 | 否 |
AskUserQuestion | 提出多选题来收集需求或澄清含糊之处,问题默认保持打开直到你回答 | 否 |
Bash | 在你的环境里执行 shell 命令 | 是 |
CronCreate / CronDelete / CronList | 在当前会话内安排、取消、列出周期性或一次性的提示;任务限定于会话,未过期时在 --resume 或 --continue 时恢复 | 否 |
Edit | 对特定文件做定向编辑 | 是 |
EnterPlanMode / ExitPlanMode | 切换到计划模式来在编码前设计方案 / 呈现计划供批准并退出计划模式 | 否 / 是 |
EnterWorktree / ExitWorktree | 创建隔离的 git worktree 并切换进去 / 退出 worktree 会话并回到原目录 | 否 |
Glob | 基于模式匹配查找文件(在 macOS、Linux 和 WSL 上默认不提供) | 否 |
Grep | 在文件内容里搜索模式(在 macOS、Linux 和 WSL 上默认不提供) | 否 |
LSP | 通过语言服务器获得代码智能:跳转到定义、查找引用、报告类型错误和警告 | 否 |
Monitor | 在后台运行命令并把每行输出反馈给 Claude,让它在对话中途对日志条目、文件变化或轮询状态作出反应;也可以打开 WebSocket,把每条收到的消息当作事件 | 否 |
NotebookEdit | 修改 Jupyter 笔记本的单元格 | 是 |
PowerShell | 原生执行 PowerShell 命令 | 是 |
Read | 读取文件内容 | 否 |
ReadMcpResourceTool / ListMcpResourcesTool | 读取特定 MCP 资源 / 列出已连接 MCP 服务器暴露的资源 | 否 |
SendMessage | 向另一个智能体发消息:智能体团队成员、按智能体 ID 或名字恢复的子智能体,或你的其他 Claude Code 会话 | 视情况 |
Skill | 在主对话里执行一个 Skill | 是 |
TaskCreate / TaskGet / TaskList / TaskUpdate | 管理任务清单(只在列出的模型上默认提供) | 否 |
TaskStop | 按 ID 停止正在运行的后台任务 | 否 |
ToolSearch | 启用工具搜索时搜索并加载延迟加载的工具 | 否 |
WebFetch | 抓取指定 URL 的内容 | 是 |
WebSearch | 执行网络搜索 | 是 |
Workflow | 运行动态工作流:在后台编排许多子智能体并返回一个汇总结果的脚本 | 是 |
Write | 创建或覆盖文件 | 是 |
此外还有 Artifact(把 HTML 或 Markdown 文件发布为 claude.ai 上的私有交互页面)、PushNotification、RemoteTrigger、ScheduleWakeup、SendFeedback、SendUserFile 等工具,完整列表见官方原文。
Bash 工具行为
Bash 工具在单独的进程里运行每条命令。
命令之间保留什么:
- Claude 在主会话里运行
cd时,只要新的工作目录仍在项目目录或你用--add-dir添加的额外工作目录内,它就会延续到之后的 Bash 命令;子智能体会话从不延续工作目录的变化。如果cd落在这些目录之外,Claude Code 会重置到项目目录,并在工具结果后追加Shell cwd was reset to <dir>。想禁用这种延续,让每个 Bash 命令都从项目目录开始,设置CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR=1 - 环境变量不会持久:一条命令里的
export在下一条里用不了 - 你的 shell 启动文件里定义的别名和 shell 函数可用:会话开始时,Claude Code 根据你的 shell 加载
~/.zshrc、~/.bashrc或~/.profile,捕获得到的别名、函数和 shell 选项并应用
在启动 Claude Code 之前激活你的 virtualenv 或 conda 环境。想让环境变量在 Bash 命令之间持久,在启动 Claude Code 前把 CLAUDE_ENV_FILE 设为一个 shell 脚本,或使用 SessionStart Hook。
超时与输出限制:每条命令都在超时下运行,由 Claude 管理:它想要比默认更长时,会在该次调用里传 timeout 参数,你永远不用设置每条命令的超时。两个环境变量控制前台命令:BASH_DEFAULT_TIMEOUT_MS(Claude 没传超时时的默认值,开箱是两分钟)和 BASH_MAX_TIMEOUT_MS(设置限制 Claude 所请求值的上限,开箱是十分钟)。
输出方面,Claude Code 在命令运行时把输出流式写入工作文件;输出超过 5 GB 的命令会被终止。有效结果默认内联最多约 30,000 个字符,超过后给出保存到会话目录的文件路径加最多前 2000 个字符的预览;失败结果内联最多约 10,000 个字符。BASH_MAX_OUTPUT_LENGTH 设置 Claude Code 从工作文件读回命令结果的字符数:默认 30,000,硬上限 150,000。
后台命令:对开发服务器或监视构建这类长时间运行的进程,Claude 可以设置 run_in_background: true 把命令作为后台任务启动并在它运行时继续工作,用 /tasks 列出和停止后台任务。后台 Bash 和 PowerShell 命令有时间限制,从进入后台起算:Claude 在后台启动的命令是 30 分钟,或 Claude 随 run_in_background 传的 timeout,最长 2 小时;前台启动后再转入后台的命令(如用 Ctrl+B 或在超时时)从转入时起算 30 分钟。前台命令到达超时仍未完成时,Claude Code 会把它转入后台而不是停止(以 sleep 开头的命令除外)。设置 CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1 禁用自动转后台和其余所有后台任务功能。
Edit 工具行为
Edit 工具做精确的字符串替换:接收 old_string 和 new_string,用后者替换前者,不使用正则或模糊匹配。应用一次编辑必须通过三项检查:
- 先读后改:Claude 在当前对话里读过该文件才能编辑它,被
PARTIAL view提示截断的读取不算 - 匹配:
old_string必须与文件里的内容完全一致,一个字符的空白或缩进差异就足以匹配失败 - 唯一性:
old_string必须恰好出现一次;出现多次时,Claude 要么给出包含足够上下文的更长字符串来锁定其中一处,要么设置replace_all: true全部替换
LSP 工具行为
LSP 工具让 Claude 从运行中的语言服务器获得代码智能。每次文件编辑之后,它会自动报告类型错误和警告,让 Claude 无需单独的构建步骤就能修复问题;Claude 也可以直接调用它来导航代码:跳转到符号定义、查找符号的所有引用、获取某位置的类型信息、列出文件里的符号、在整个工作区按名字搜索符号、查找接口的实现、追踪调用层级。在你为自己的语言安装代码智能插件之前,Claude Code 让这个工具保持非活动状态。
Read 工具行为
Read 工具接收文件路径并返回带行号的内容。默认从文件开头返回;整个文件的读取超出 token 限制时,Read 返回第一页并带 PARTIAL view 提示,告诉 Claude 收到了多少以及如何用 offset 和 limit 读更多。Read 还处理纯文本之外的几种文件类型:图片(PNG、JPG 等作为视觉内容返回,大图片会被缩放和重新压缩以适应模型的图片大小限制);PDF(短 .pdf 整个读取;超过 10 页的 PDF 用 pages 参数按范围读取,一次最多 20 页,需要 poppler-utils 里的 pdftoppm);Jupyter 笔记本(.ipynb 返回所有单元格及其输出)。Read 只读文件不读目录,Claude 用 ls 这样的 shell 命令列出目录内容。
WebFetch 工具行为
WebFetch 接收 URL 和一个描述要提取什么的提示词:抓取页面,服务器返回 HTML 时转换为 Markdown,并用一个小而快的模型对内容运行提示词。这使 WebFetch 在设计上有损:提取提示词决定什么到达 Claude,所以一个说页面没提到某事的结果,可能只意味着提示词没问到它。
影响响应的几个行为:WebFetch 在发出请求前拒绝 localhost 和任何不带点的主机名(Claude 应改用 Bash 里的 curl 访问本地服务器);HTTP URL 自动升级为 HTTPS;大页面在处理前被截断到固定字符数;默认缓存每个响应 15 分钟;页面在五分钟内未下载完(包括跟随的重定向)会因超时失败;URL 重定向到不同主机时,返回一条点名原 URL 和重定向目标的文本结果而不是跟随它。
在 Manual 和 acceptEdits 权限模式下,WebFetch 在抓取前提示,除非你的权限规则已经允许或拒绝该域名,以及一组内置的预批准文档域名。提示的选项:Yes(只批准这次)、Yes, and don't ask again for <domain>(批准并把 WebFetch(domain:...) allow 规则保存到该仓库的 .claude/settings.local.json)、No, and tell Claude what to do differently。想预先允许某个域名,添加 allow 规则如 WebFetch(domain:example.com);WebFetch(domain:*) 允许每个域名。
WebSearch 工具行为
WebSearch 对 Anthropic 的网络搜索后端运行查询,返回结果标题和 URL,不抓取结果页面(要读搜索结果里找到的页面,用 WebFetch)。每次调用最多发出八次后端搜索。Claude 可以用 allowed_domains 只包含某些主机,或用 blocked_domains 排除某些主机(两个列表不能组合)。WebSearch 权限规则不带 specifier,只有裸 WebSearch 条目这一种形式。