仙之Tool兮列如麻——ClaudeCode如何做Harness(工具篇2)
Claude Code 工具清单

你好,我是司沐。
从CC源码泄露到现在,已经差不多有两个月的时间了。Github上从原始代码到重写项目,再到出教程,已经积累了许多很不错的仓库。
由于我自己目前的主要工作就是Agent Harness,所以过去的两个月里也将CC的代码翻来覆去反复读。
在这个过程中,我发现目前许多对CC代码与设计的解析,看起来好像并非出自一个Agent工程师之手,而更像是一个转行到Agent,但同时保留了一些老行业思维的人,与并不是很懂Agent的AI一起协作出来的。这样当然也有许多可圈可点的地方,但总归少了点意思,并不能聚焦到CC真正的核心设计上。
所以,我计划在CC源码泄露已经过了两个月之后的当下,重新整理并发出一份我自己对CC中Harness工程设计的理解。
这个系列大概会出10篇左右,涵盖工具设计,上下文压缩策略,提示词编排策略,记忆策略,数据实体分层结构等等内容。
希望对读到文章的你有帮助。
本文列出系统中所有内置工具,按功能分类,并标注各工具在不同 Agent 上下文中的可用情况。
可用性说明:
- 主线程:主 Agent 完整工具集
- 子 Agent:普通同步子 Agent(Task 工具启动的)
- 异步 Agent:后台异步运行的子 Agent
- 协调者:协调者模式(仅管理任务,不做实际操作)
✓可用,✗不可用,条件需满足特定条件
文件操作
| 工具 | 作用 | 主线程 | 子 Agent | 异步 Agent | 协调者 |
|---|---|---|---|---|---|
Read |
读取文件内容,支持图像等多种格式 | ✓ | ✓ | ✓ | ✗ |
Write |
创建或覆盖写入文件 | ✓ | ✓ | ✓ | ✗ |
Edit |
对文件做补丁式局部编辑 | ✓ | ✓ | ✓ | ✗ |
NotebookEdit |
编辑 Jupyter Notebook 的单元格 | ✓ | ✓ | ✓ | ✗ |
EnterWorktree |
切换到指定的 git worktree 目录 | 条件① | ✓ | ✓ | ✗ |
ExitWorktree |
退出当前 worktree,回到主工作区 | 条件① | ✓ | ✓ | ✗ |
① 需要 worktree 模式功能开关启用。
搜索
| 工具 | 作用 | 主线程 | 子 Agent | 异步 Agent | 协调者 |
|---|---|---|---|---|---|
Glob |
按文件名模式列出文件 | 条件② | ✓ | ✓ | ✗ |
Grep |
在文件内容中搜索文本 | 条件② | ✓ | ✓ | ✗ |
ToolSearch |
按名称查询 MCP 工具的完整 schema(延迟加载) | 条件③ | ✓ | ✓ | ✗ |
② Ant 内部构建使用嵌入式搜索时这两个工具不挂载。
③ 工具搜索功能开关启用时可用(auto 模式下自动判断是否需要)。
代码执行
| 工具 | 作用 | 主线程 | 子 Agent | 异步 Agent | 协调者 |
|---|---|---|---|---|---|
Bash |
执行 Bash/Shell 命令 | ✓ | ✓ | ✓ | ✗ |
PowerShell |
执行 PowerShell 命令(Windows) | 条件④ | ✓ | ✓ | ✗ |
REPL |
批量虚拟机式 REPL 包装,挂载后会隐藏 Bash 等原始工具 | 条件⑤ | — | ✗ | ✗ |
④ 仅在 Windows 且环境变量明确启用时可用。
⑤ 仅 Ant 内部构建。挂载后 Bash、Read、Write、Edit 等工具从直接工具列表隐藏,统一通过 REPL 包装层访问。
网络
| 工具 | 作用 | 主线程 | 子 Agent | 异步 Agent | 协调者 |
|---|---|---|---|---|---|
WebSearch |
用搜索引擎查询网页信息 | ✓ | ✓ | ✓ | ✗ |
WebFetch |
拉取指定 URL 的页面内容 | ✓ | ✓ | ✓ | ✗ |
WebBrowser |
打开内嵌浏览器面板(可交互) | 条件⑥ | — | ✗ | ✗ |
⑥ 需要 WEB_BROWSER_TOOL feature flag 开启。
Agent 与任务编排
| 工具 | 作用 | 主线程 | 子 Agent | 异步 Agent | 协调者 |
|---|---|---|---|---|---|
Agent |
派生子 Agent,把多步任务委托出去 | ✓ | 条件⑦ | ✗ | ✓ |
TaskOutput |
读取某个后台任务的输出,可阻塞等待 | ✓ | ✗ | ✗ | ✗ |
TaskStop |
停止指定的后台任务 | ✓ | ✗ | ✗ | ✓ |
SendMessage |
向特定 Agent 或队友发消息(P2P) | ✓ | 条件⑧ | 条件⑧ | ✓ |
Skill |
加载并执行一段 Skill 指令文件 | ✓ | ✓ | ✓ | ✗ |
Workflow |
执行预定义的 Workflow 脚本 | 条件⑨ | ✗ | ✗ | ✗ |
Sleep |
可中断的休眠(用于等待外部事件) | 条件⑩ | ✓ | ✗ | ✗ |
⑦ 默认禁止(防止无限嵌套);仅 Ant 内部构建允许子 Agent 再创建子 Agent。
⑧ 仅在 in-process 队友模式(Agent swarm)的异步路径下额外放行。
⑨ 需要 WORKFLOW_SCRIPTS feature flag。
⑩ 需要 PROACTIVE 或 KAIROS 功能开启。
待办任务管理
| 工具 | 作用 | 主线程 | 子 Agent | 异步 Agent | 协调者 |
|---|---|---|---|---|---|
TodoWrite |
写入/更新内部 todo 列表(轻量版) | ✓ | ✓ | ✓ | ✗ |
TaskCreate |
创建结构化任务条目(V2 todo) | 条件⑪ | ✓ | 条件⑧ | ✗ |
TaskGet |
读取指定任务详情 | 条件⑪ | ✓ | 条件⑧ | ✗ |
TaskList |
列出所有任务 | 条件⑪ | ✓ | 条件⑧ | ✗ |
TaskUpdate |
更新任务状态或内容 | 条件⑪ | ✓ | 条件⑧ | ✗ |
⑪ 需要 Todo V2 功能开关启用。
定时与触发
| 工具 | 作用 | 主线程 | 子 Agent | 异步 Agent | 协调者 |
|---|---|---|---|---|---|
CronCreate |
创建定时触发任务 | 条件⑫ | ✓ | 条件⑧ | ✗ |
CronDelete |
删除定时任务 | 条件⑫ | ✓ | 条件⑧ | ✗ |
CronList |
列出所有定时任务 | 条件⑫ | ✓ | 条件⑧ | ✗ |
RemoteTrigger |
向远程端点发送触发事件 | 条件⑬ | ✓ | ✗ | ✗ |
⑫ 需要 AGENT_TRIGGERS feature flag。
⑬ 需要 AGENT_TRIGGERS_REMOTE feature flag。
Agent Swarm(多 Agent 协作)
| 工具 | 作用 | 主线程 | 子 Agent | 异步 Agent | 协调者 |
|---|---|---|---|---|---|
TeamCreate |
创建一个 Agent 团队(swarm) | 条件⑭ | ✓ | ✗ | ✗ |
TeamDelete |
解散 Agent 团队 | 条件⑭ | ✓ | ✗ | ✗ |
⑭ 需要 AGENT_SWARMS feature flag。
MCP 动态工具
MCP(Model Context Protocol)服务器连接后,注入的工具名格式为 mcp__服务器名__工具名。这类工具在所有子 Agent(包括异步)里默认可用,不受内置工具禁用列表的约束。
另有两个辅助工具在 MCP 服务器声明了 resources 能力时自动注入:
| 工具 | 作用 |
|---|---|
ListMcpResourcesTool |
列出 MCP 服务器提供的 resource 列表 |
ReadMcpResourceTool |
读取指定 MCP resource 的内容 |
UI 与交互流程
| 工具 | 作用 | 主线程 | 子 Agent | 异步 Agent | 协调者 |
|---|---|---|---|---|---|
AskUserQuestion |
向用户展示选择题或询问 | ✓ | ✗ | ✗ | ✗ |
EnterPlanMode |
进入计划模式(展示计划供用户审批) | ✓ | ✗ | ✗ | ✗ |
ExitPlanMode |
提交并退出计划模式 | ✓ | 条件⑮ | ✗ | ✗ |
Config |
交互式修改 settings 配置 | 条件⑯ | ✓ | ✗ | ✗ |
SendUserMessage |
向用户发送一条简短消息(Brief 模式) | ✓ | ✗ | ✗ | ✗ |
⑮ 仅当子 Agent 本身处于 plan 权限模式时允许使用。
⑯ 仅 Ant 内部构建。
内部与系统工具
这些工具不由模型主动调用,或仅在特定内部场景使用:
| 工具 | 作用 | 说明 |
|---|---|---|
StructuredOutput |
按 JSON Schema 输出结构化结果 | 从常规工具池剔除,在需要结构化输出的路径(Hook、QueryEngine 等)动态注入 |
LSP |
语言服务器协议:跳转定义、引用查找等 | 需要 ENABLE_LSP_TOOL 环境变量,子 Agent 中不可用 |
Snip |
将旧历史内容标记为可剪切 | 需要 HISTORY_SNIP feature flag,配合上下文压缩使用 |
CtxInspect |
检查当前上下文折叠状态 | 需要 CONTEXT_COLLAPSE feature flag,内部调试用 |
ListPeers |
枚举同一机器上通过 UDS 连接的 Agent | 需要 UDS_INBOX feature flag |
TestingPermission |
始终触发权限提示(用于测试权限流程) | 仅 NODE_ENV === 'test' 时挂载 |
简单模式(CLAUDE_CODE_SIMPLE)
设置 CLAUDE_CODE_SIMPLE=1 时,工具集大幅缩减:
- 普通模式:仅保留
Bash、Read、Edit - 协调者模式下额外保留:
Agent、TaskStop、SendMessage - REPL 模式下用
REPL替代Bash
子 Agent 禁用总结
以下工具在默认子 Agent 中不可用(无论同步还是异步),因为它们需要面向用户的界面或主会话特权:
TaskOutput、ExitPlanMode(计划模式例外)、EnterPlanMode、AskUserQuestion、TaskStop、Agent(Ant 构建除外)
异步子 Agent 额外受限——只有以下内置工具可用:Read、Write、Edit、NotebookEdit、Bash、PowerShell、Glob、Grep、WebSearch、WebFetch、TodoWrite、Skill、ToolSearch、StructuredOutput、EnterWorktree、ExitWorktree,加上所有 mcp__ 前缀工具。
协调者只有 4 个工具:Agent、TaskStop、SendMessage、StructuredOutput(加特定 MCP PR 订阅工具)。
如果您认为内容不错,还可以订阅本合集,更快获取后续更新。
还可以加入矢量起源Agent交流群,与大家一起讨论~

更多推荐



所有评论(0)