Claude Code 的 Agent 代理系统是其最强大的高级特性之一。它突破了传统单线程对话助手的限制,允许用户创建多个独立运行的子代理来同时处理不同的任务。每个子代理拥有独立的上下文窗口、专属的工具集和隔离的工作环境,能够专注于特定任务而不会干扰主对话线程的上下文状态。
Agent 系统的核心价值在于并行处理能力。在传统的对话式 AI 工具中,用户必须等待一个任务完成才能开始下一个任务,这在面对大型项目时会导致大量时间浪费。而通过 Agent 系统,用户可以同时启动多个子代理:一个负责搜索代码中的 Bug,另一个负责编写单元测试,第三个负责更新文档——所有任务并行推进,大幅提升整体开发效率。
除了并行能力,Agent 系统还提供了完善的隔离和编排机制。子代理之间可以通过 SendMessage 工具进行通信,主代理可以通过 TaskList 来协调各子代理的工作进度。对于需要文件系统隔离的场景,Worktree 模式可以在独立的 git worktree 中运行子代理,确保对主工作区的零干扰。这使得 Agent 系统不仅适用于简单的任务分发,更能够支撑复杂的大型项目协作。
Claude Code 提供了多种预定义的 Agent 类型,每种类型针对不同的使用场景进行了优化。不同类型的子代理拥有不同的工具权限和能力边界,用户可以根据任务性质选择合适的 Agent 类型来启动。下表列出了四种核心 Agent 类型及其详细对比:
| Agent 类型 | 可用工具 | 适用场景 | 特点 |
|---|---|---|---|
| general-purpose | 所有工具(读写、搜索、执行命令等) | 通用开发任务、代码编写、调试、重构 | 权限最全面,适合大多数场景 |
| Explore | 只读工具(Grep、Glob、Read、WebSearch、WebFetch) | 代码搜索、文件浏览、信息调研 | 只读模式,安全可靠,不会修改任何文件 |
| Plan | 只读工具 + TodoWrite 任务规划 | 架构设计、方案制定、任务分解 | 专注于分析、规划和设计方案输出 |
| claude-code-guide | 只读工具 + 文档查找 | 查询 Claude Code 使用方法和最佳实践 | 专为解答 Claude Code 相关问题设计 |
当需要执行文件修改或代码生成时,应使用 general-purpose 类型。如果任务仅涉及信息搜索和代码阅读,推荐使用 Explore 类型以降低误修改的风险。对于架构设计类的分析型任务,Plan 类型最为合适,它可以在不修改代码的前提下进行完整的规划和任务分解。
Explore 和 Plan 虽然都是只读模式,但侧重点不同。Explore 专注于"查找信息"——它擅长大范围搜索代码库、查找文件、阅读文档,适合回答"这个功能在哪里实现"或"这段代码的作用是什么"这类问题。而 Plan 专注于"分析信息"——它不仅阅读代码,还会对系统架构进行分析、提出重构建议、设计实现方案,并利用 TodoWrite 工具创建结构化的任务列表。
创建和启动子代理是 Agent 系统的核心操作。用户可以通过 Agent 工具(Skill 工具)来创建子代理,并配置其行为参数。每个子代理在创建时需要明确其名称、任务描述、执行指令以及运行模式等关键信息。
子代理的启动参数决定了其行为方式。name 参数用于标识代理,方便在任务列表中区分不同代理。description 参数简要描述代理的任务目标。prompt 参数是最关键的部分,需要提供详细、清晰的指令,告诉子代理需要做什么、怎么做以及输出什么结果。run_in_background 参数决定子代理是前台阻塞运行还是后台异步运行,前者适用于需要立即获取结果的场景,后者适用于可以并行推进的独立任务。
isolation 参数用于启用工作树隔离模式。当设置为 true 时,子代理会在一个独立的 git worktree 中工作,拥有完全隔离的文件系统视图。这对于需要修改文件但又不想污染主工作区的任务非常有用。如果工作树存在未提交的改动,主代理会收到路径和分支名通知,否则自动清理。
并行执行是 Agent 系统的核心优势。通过合理编排多个子代理的执行顺序和方式,可以最大化利用 Claude Code 的并行处理能力,显著缩短大型任务的完成时间。并行执行策略的制定需要根据任务之间的依赖关系进行灵活调整。
当多个任务之间不存在数据或逻辑依赖关系时,可以同时启动所有子代理。例如,在对一个大型代码库进行质量评估时,可以同时启动一个 Explore 代理搜索潜在 Bug、一个 Plan 代理分析架构问题、一个 general-purpose 代理检查测试覆盖率。这些任务互不依赖,并行执行可以节省大量时间。
当任务之间存在明确的依赖关系时,需要按照依赖顺序依次启动子代理。例如,先启动一个 Plan 代理完成架构设计方案,然后根据方案启动多个 general-purpose 代理分别实现各个模块。主代理在其中扮演协调者的角色,等待前序任务完成后,将结果传递给后续任务。
使用 run_in_background="true" 参数可以将子代理置于后台异步运行模式。在这种模式下,子代理启动后立即返回,主对话线程可以继续处理其他事务。后台任务的状态可以通过 /tasks 命令随时查看,任务完成后可以通过 TaskOutput 工具获取结果。
当所有并行子代理完成任务后,主代理需要将各子代理的输出结果进行汇总、整理和整合。这一过程通常包括:收集各子代理的输出文件或消息、去除重复信息、协调冲突的修改、生成综合报告。主代理可以启动一个专用的汇总子代理来执行这些整合工作。
建议将大型任务拆分为多个粒度适中、边界清晰的子任务。每个子任务过于庞大时,子代理的执行时间会很长,反而降低并行效率。同时启动的子代理数量也不宜过多,建议控制在 3-5 个以内,以避免资源竞争和上下文切换开销。
在复杂的多代理协作场景中,子代理之间往往需要相互通信来交换信息、协调进度或传递中间结果。Claude Code 提供了 SendMessage 工具来实现代理间的消息传递机制,使得子代理之间可以像微服务一样进行协作。
SendMessage 工具允许一个子代理向另一个指定的子代理发送结构化消息。消息内容可以是任务指令、查询请求、数据片段或状态通知。接收方子代理可以在自己的上下文中处理这些消息,并可以选择回复。这种双向通信机制为构建复杂的多代理协作流程提供了基础。
除了直接的代理间消息传递,TaskList(任务列表)也是代理间协调工作的重要工具。子代理可以通过更新 TaskList 中的任务状态来向其他代理通报进度。主代理可以监控整个 TaskList 来掌握所有子代理的执行情况,并在适当时机触发后续任务或进行干预。
代理间的消息采用自动投递机制。当发送方子代理使用 SendMessage 发送消息后,消息会被放入接收方代理的消息队列中。接收方代理在处理完当前任务步骤后,会自动检查消息队列并处理新消息。这种异步消息机制避免了代理间需要同步等待的问题,使得多代理协作更加灵活高效。
当启动多个后台子代理后,有效的任务管理变得至关重要。Claude Code 提供了一套完整的后台任务管理工具,帮助用户监控、控制和获取后台任务的执行状态与结果。
/tasks 命令是查看所有后台任务的主要入口。执行该命令后,系统会列出所有正在运行和已经完成的后台任务列表,包括每个任务的 ID、名称、状态(运行中/已完成/失败)、启动时间和运行时长。用户可以通过这个命令快速了解整体任务进度。
当某个后台任务出现问题(如执行方向错误、陷入死循环或不再需要其输出结果)时,可以使用 TaskStop 工具终止该任务。TaskStop 需要传入任务 ID 来指定要停止的目标任务。任务被停止后,其已执行的中间结果可能仍然可用,具体取决于任务的执行阶段。
后台任务完成后,其输出结果需要通过 TaskOutput 工具来获取。该工具可以读取已完成任务的全部输出内容,包括任务生成的文本、文件路径、错误信息等。建议在任务完成后及时获取输出,避免因任务列表清理导致结果丢失。
每个子代理在执行时都有默认的超时时间限制。对于耗时较长的任务,可以在启动时设置合理的超时参数。超时时间应依据任务复杂度合理设定:简单的代码搜索任务通常设置 2-5 分钟即可,而涉及大量文件修改或复杂分析的任务可能需要 10-30 分钟甚至更长时间。任务超时后会被自动终止,并返回截至超时时的执行结果。
| 管理工具 | 用途 | 使用方式 |
|---|---|---|
| /tasks | 查看所有后台任务的状态和进度 | 在对话中直接输入命令 |
| TaskStop | 强制终止指定后台任务 | 传入任务 ID 调用工具 |
| TaskOutput | 获取已完成任务的输出结果 | 传入任务 ID 调用工具 |
| 超时参数 | 限制任务最长执行时间 | 启动子代理时设置 timeout 参数 |
后台任务在后台运行时仍然会消耗系统资源和 API 额度。建议定期使用 /tasks 命令检查任务状态,对于已经产生预期结果或不再需要的任务及时使用 TaskStop 停止,避免不必要的资源浪费。同时,对于需要长期运行的任务,注意预留足够的 API 调用配额。
Worktree(工作树)隔离模式是 Claude Code Agent 系统中一个重要的安全特性。当启动子代理时设置了 isolation="true" 参数,系统会自动为子代理创建一个独立的 git worktree。这个 worktree 是从当前仓库的 HEAD 分离出来的独立工作目录,子代理在其中进行的所有文件操作都被限制在这个隔离环境中。
Worktree 隔离的核心价值在于安全性。在传统的单工作区模式下,子代理如果修改了文件,这些修改会直接反映在主工作区中。如果某个子代理的操作出现错误,可能会污染主工作区的文件状态。而在 Worktree 隔离模式下,即使子代理的操作出现严重问题,主工作区仍然保持干净、稳定。这对于涉及文件修改的并行任务尤其重要——多个子代理可以同时修改不同的文件而不会产生冲突。
Worktree 还具备智能的自动清理机制。当子代理完成任务后,系统会自动检查 worktree 中是否有文件改动:如果没有任何改动,worktree 会被自动删除,无需用户干预;如果存在未提交的改动,系统会保留 worktree 并向主代理返回其路径和分支名称,用户可以选择手动检查、提交或放弃这些改动。这种机制既保证了工作效率,又避免了工作目录被遗忘占用的问题。
工作树隔离的完整流程如下:① 主代理接收带有 isolation=true 的任务请求;② 系统在 .claude/worktrees/ 目录下创建一个新的 git worktree,并创建独立分支;③ 子代理在隔离的 worktree 中执行任务,所有文件操作被限定在此目录中;④ 任务完成后,系统检查 worktree 状态:有改动则保留并通知用户,无改动则自动清理;⑤ 用户可以通过 ExitWorktree 工具的 keep/remove 参数决定如何处理保留的 worktree。
run_in_background="true" 可以将子代理置于后台运行,主对话线程可继续处理其他事务,通过 /tasks 命令监控进度。Agent 代理系统虽然已经提供了丰富的功能,但在实际使用中仍有许多值得进一步探索的方向。如何设计最优的任务拆分粒度,使得子代理的并行效率最大化,是一个需要不断实践和总结的问题。过于细致的拆分会导致管理开销过大,而粒度太粗又无法充分利用并行能力。
另一个值得思考的方向是代理间的安全边界。当多个子代理同时执行任务时,如何确保它们不会相互干扰,特别是当它们操作共享资源(如数据库、配置文件、外部服务)时。除了 Worktree 提供的文件级隔离,还需要建立逻辑层面的隔离机制,如使用不同的环境变量、配置独立的临时目录等。
最后,对于长期运行的大型项目,考虑建立标准化的多代理工作流模板可以有效提升团队的协作效率。这些模板可以包含预定义的 Agent 类型组合、标准化的任务拆分模式、统一的通信协议以及规范的结果汇聚流程。将常用的多代理协作模式沉淀为模板,是提升团队整体效能的重要途径。