我来详细解释一下 Claude Code 的 Agent 系统:

Agent 是什么?

Agent 是 Claude Code 中的专门化子进程,用来自主处理复杂的多步骤任务。可以理解为:

  • 我(主对话):负责与你交流、决策、协调
  • Agent(子代理):像”专家助手”,接到任务后独立完成,完成后向我汇报

为什么需要子代理?

效率和专业性

  • Explore Agent - 快速搜索代码库,找文件/关键词(我直接搜可能会浪费上下文)
  • Plan Agent - 设计实现方案,专注架构思考
  • 日报生成助手 - 你的自定义 Agent,专门扫描笔记生成日报
  • general-purpose - 处理需要多轮尝试的复杂研究任务

举例
你问”CFlow 错误处理在哪?”

  • 不高效:我直接用 Grep/Glob 搜索,占用对话上下文
  • 高效:我启动 Explore Agent,它独立搜索,只把结果告诉我

并行研究是什么意思?

并行 = 同时运行多个 Agent

你的请求:研究A功能 + 研究B功能 + 修复C bug

我的操作:
┌─────────────────┐
│  一条消息中     │
│  同时启动3个    │  ← 一次性发出
│  Task 调用      │
└─────────────────┘
       ↓
  ┌────┴────┐
  ↓    ↓    ↓
Agent1 Agent2 Agent3  ← 同时工作
  ↓    ↓    ↓
结果1 结果2 结果3  ← 几乎同时返回

是在同一个对话里完成的! 不是打开新窗口,而是:

  1. 我在当前对话中调用 Task 工具
  2. Agent 在后台运行(可能几秒到几分钟)
  3. Agent 完成后,结果返回给我
  4. 我基于结果继续与你对话

实际例子

你:"帮我找出所有 TODO 注释,并分析代码结构"

我的工作流:
├─ 发送一条消息,包含2个并行 Task 调用
│  ├─ Task 1: Explore Agent 搜索 TODO 注释
│  └─ Task 2: Explore Agent 分析代码结构
├─ 等待两个 Agent 都完成(它们同时运行)
└─ 整合结果告诉你

全程都在这个对话窗口!

与你自定义 Agent 的关系

你的 .claude/agents/日报生成助手.md 就是一个预定义的专家 Agent

  • 触发:你说”生成今天的日报”
  • 我调用它:使用 Task tool 加载这个配置
  • 它独立工作:扫描文件、分析内容、生成日报
  • 返回结果:我把日报结果展示给你

核心优势:你不用每次都重复说明需求,Agent 记住了所有规则!

有什么具体场景想试试 Agent 吗?


好问题!你的理解完全正确,我来澄清一下:

等待机制 - 你说对了!

正常情况:
你 → 发消息要求任务
我 → 启动 Agent
    [你这时候发不了新消息,界面被锁定]
    [Agent 工作中...]
Agent → 完成,返回结果
我 → 告诉你结果
    [你现在才能发下一条消息]

我之前说的”并行”造成误解了!

真正的意思是:

  • 我可以并行启动多个 Agent(一次发出3个 Task 调用)
  • 但你还是要等它们都完成(界面依然锁定)

真后台运行

我启动 Agent 时加上 run_in_background: true
 Agent 在后台慢慢跑
 我立刻返回给你,不等它完成
 你可以继续发新消息
 稍后我用 Read/TaskOutput 查看 Agent 的输出文件

但这是特殊用法,不常用。


“子代理”的真实含义

看完智慧库管家的配置,我来解释为什么叫”子代理”:

架构关系:

┌─────────────────────────────┐
│   主对话(你和我聊天)       │ ← 我是 Claude Code 主进程
│                             │
│  我可以启动 →               │
│    ├─ Explore Agent        │ ← 内置子代理
│    ├─ Plan Agent           │ ← 内置子代理
│    ├─ 日报生成助手          │ ← 你自定义的子代理
│    └─ 智慧库管家            │ ← 你自定义的子代理
└─────────────────────────────┘

“子”不是指层级嵌套,而是指:

  • = 这个和你对话的我(主控)
  • = 被我启动的专门 Agent(执行者)

为什么叫 subagent_type 参数?
因为 Task 工具的设计中,需要指定启动哪种”子类型”的 Agent:

# 伪代码示意
Task(
    subagent_type="Explore",  # 启动 Explore 子代理
    prompt="搜索 CFlow 相关代码"
)
 
Task(
    subagent_type="智慧库管家",  # 启动你的自定义子代理
    prompt="扫描智慧库"
)

你的智慧库管家确实是子代理

从配置看:

name: 智慧库管家
tools:
  file-read: true
  file-write: true
  bash: true
model: claude-sonnet-4-5

这是一个自定义的专门 Agent

  • 它有自己的工具权限(只能用 file-read/write/bash)
  • 它有专门的职责(管理决策智慧库)
  • 它被我(主对话)调用,完成任务后向我汇报

和内置 Agent 的唯一区别

  • 内置 (Explore/Plan):Claude Code 预装的
  • 自定义 (智慧库管家/日报生成):你自己写配置文件定义的

但都是”子代理”!


总结

概念解释
主对话你和我直接聊天的这个窗口
子代理(subagent)被我启动的专门 Agent,工作后向我汇报
内置子代理Explore、Plan、general-purpose 等
自定义子代理你写的智慧库管家、日报生成助手
并行我同时启动多个 Agent,但你还是要等完成
后台运行run_in_background=true,不常用

你的理解完全正确 - 通常情况下确实要等 Agent 完成才能发新消息!

要不要试试运行智慧库管家?我可以帮你扫描一下决策智慧库的现状。


追加:关于并行运行的进一步确认

用户提问:

也就是说,你所谓的并行运行,是我可以让你同时运行多个Agent是吧?
我举个例子,比如我现在运行的Agent A,那么我只能等它处理完我才能发送新消息是吧?

如果我想并行是不是意味着,我同时让AI处理Agent A 、Agent B 、 Agent C
还是在一次对话中,但是这时候,我就没办法发送新消息了,只能等AI处理完我才可以发送新消息,是这个意思不?


完全正确! 你理解得非常准确!

让我用你的例子确认一下:

场景1:运行单个 Agent

你:"运行 Agent A"
我:[启动 Agent A]

    [你的界面被锁定,无法发新消息]
    [Agent A 工作中... 假设需要 30 秒]

我:"Agent A 完成了,结果是..."
    [你现在才能发下一条消息]

场景2:并行运行多个 Agent

你:"同时运行 Agent A、B、C"
我:[一次性启动 Agent A、B、C]

    [你的界面还是被锁定,无法发新消息]
    [Agent A、B、C 同时工作中...]
    [A 需要 30 秒,B 需要 20 秒,C 需要 25 秒]
    [总等待时间约 30 秒(取最长的)]

我:"所有 Agent 都完成了
     - Agent A 结果:...
     - Agent B 结果:...
     - Agent C 结果:..."
    [你现在才能发下一条消息]

核心区别

方式总耗时你能否发消息
依次运行 A → B → C30+20+25 = 75秒❌ 等75秒
并行运行 A ‖ B ‖ Cmax(30,20,25) = 30秒❌ 但只等30秒

对你来说:无论哪种方式,界面都是锁定的,你都要等!

并行的好处:节省时间(30秒 vs 75秒),但不能让你提前发消息


唯一例外:后台运行

你:"后台运行 Agent A"
我:[启动 Agent A,设置 run_in_background=true]
我:"Agent A 已在后台运行,我先返回了"

    [你立刻可以发新消息!]
    [Agent A 在后台慢慢跑...]

你:"做点别的事"
我:[处理你的新请求]

[过一会儿]
你:"Agent A 完成了吗?"
我:[用 TaskOutput 查看] "完成了,结果是..."

但这种用法很少见,通常用于非常耗时的任务(几分钟到几十分钟)。


总结你的理解:100% 正确!

并行 = 多个 Agent 同时干活节省时间,但你还是要等它们都完成才能继续聊天。