Digital Strategy Review | 2026
Claude Code 十大亮点解读 01|Agent 即 Task:为什么这是整套系统最关键的一步
文 / 果叔 · 阅读时间 / 8 Min

写在前面
我把这个亮点放在第一篇,不是因为它最花哨,而是因为它决定了后面所有多 Agent 能力能不能站住。先把这一步看明白,后面的 teammate、remote、verification 才不会只剩一些分散 feature。
01
Agent 即 Task:为什么这是整套系统最关键的一步
在很多 AI Coding Agent 系统里,“子 Agent”本质上只是一次额外模型调用。
常见实现大概是这样:
01 主 Agent 发现自己需要委派。
02 系统复制一部分上下文。
03 发一次新的模型请求。
04 把返回文本再塞回主会话。
这个做法短期看没问题,甚至很容易做 demo。但只要系统开始变复杂,它的缺点就会迅速暴露:
• 子 Agent 没有稳定身份
• 没有统一生命周期
• 很难后台运行
• 很难恢复
• 很难被 UI 当成一等对象展示
• 很难和其他异步执行单元共存
Claude Code 在这个问题上的处理非常彻底:它直接把 Agent 设计成 Task。
这不是一个实现细节,而是整套系统能成立的基础。
02
一、先看 Claude Code 是怎么定义 Task 的
在 src/Task.ts 里,任务并不是一个模糊概念,而是非常明确的一类运行时实体。
它有统一的:
• id
• type
• status
• description
• toolUseId
• startTime / endTime
• outputFile
• outputOffset
• notified
并且系统直接定义了多种任务类型:
• local_bash
• local_agent
• remote_agent
• in_process_teammate
• local_workflow
• monitor_mcp
• dream
这意味着 Claude Code 从一开始就不把 Agent 视为“聊天系统的附属物”,而是把它放进了统一的任务运行时里。

Claude Code 的关键不只是能委派,而是把委派对象做成了可管理的任务实体。
03
二、为什么“Agent 是 Task”比“Agent 是子对话”强很多
1. 它天然有生命周期
一旦 Agent 是 Task,它就天然有:
• pending
• running
• completed
• failed
• killed
这样的生命周期状态。
这和“子对话”有本质区别。 子对话通常只有两种状态:正在请求,或者已经返回。 但真实的 coding agent 场景远比这复杂:
• 可能长时间运行
• 可能需要被中止
• 可能需要切后台
• 可能需要恢复
• 可能会失败后等待用户查看结果
Task 抽象正好能承载这些需求。
2. 它天然能进入 UI 控制面
Claude Code 里 tasks 直接进入了 AppState。 这使得 REPL 可以自然展示:
• 当前有哪些后台 Agent
• 哪个 Agent 正在前台查看
• 哪个任务刚刚完成
• 哪个 teammate 正在运行
如果 Agent 只是一次子对话请求,UI 层就很难拥有这种“对象级”视图。
3. 它天然能承接通知系统
LocalAgentTask.tsx 会在任务完成、失败、终止时,通过 <task-notification> 一类系统消息把结果重新送回主系统。
这意味着主 Agent 不需要一直阻塞等待子 Agent。 系统可以让 Agent 在后台跑,等它有结果时再用通知回流。
这一步非常像操作系统里的后台作业通知,而不是聊天应用里的插楼回复。
04
三、Claude Code 具体是怎么把 Agent 放进 Task 体系的
1. 本地后台 Agent:LocalAgentTask
LocalAgentTask 负责的不是“执行模型请求”,而是围绕 Agent 任务建立完整的运行时包裹:
• 状态注册
• 进度跟踪
• transcript / output 文件
• foreground / retain 语义
• 通知
• kill / cleanup
也就是说,真正的 Agent 推理循环固然由 runAgent(...) 驱动,但只要它想成为“后台 Agent”,就必须进入 LocalAgentTask 这个壳。
2. 远程 Agent:RemoteAgentTask
远程 Agent 并没有重新发明一套完全不同的对象模型。 它仍然是 Task,只是执行后端换成了 remote session polling。
这意味着:
• 用户看见的是一样的任务对象
• AppState 管理的是一样的 tasks
• REPL 处理的是一样的任务通知与任务列表
这就是统一抽象的威力。
3. 同进程 Teammate:InProcessTeammateTask
Teammate 也不是一个特殊例外,而是另一种 Task。
这点很重要,因为它说明 Claude Code 的设计并不是:
• 普通 Agent 一套机制
• teammate 另一套机制
• remote agent 再一套机制
而是:
不同执行形态,共享一套任务抽象。
05
四、这一步为后续系统解锁了什么能力
一旦 Agent 被做成 Task,后面很多高级能力就顺理成章了。
1. 后台执行
因为 Task 有独立状态和输出位置,所以 Agent 不必绑定在主消息流的同步返回上。
2. 恢复与持久化
因为 Task 有 ID、有输出文件、有 metadata,所以系统能在 resume 时恢复这类执行对象。
3. 多 Agent 共存
因为所有 Agent 都进入 tasks 集合,系统就能同时承载多个执行单元,而不是“这轮对话只能有一个隐形子调用”。
4. 统一 kill / cleanup / archive 语义
无论是本地 agent、远程 agent 还是 teammate,最终都能纳入统一的生命周期管理。
06
五、为什么这一步比它看起来更难
很多人第一次看到这个亮点,会觉得只是“加了一个 task wrapper”。 其实远不止如此。
把 Agent 变成 Task,意味着要同步解决这些问题:
• Task 与消息流怎么交互
• Task 结果怎么通知主会话
• Task 被用户查看时如何 bootstrap transcript
• Task 在 UI 中如何切前台/保留
• Task 如何写 outputFile
• Task 在异常和 kill 时如何收尾
也就是说,这不是一个数据结构问题,而是一个系统协同问题。
Claude Code 之所以厉害,不只是因为它定义了 Task,而是因为它让 query loop、AgentTool、REPL、AppState、通知系统都真正围绕这个 Task 模型协同工作。
07
六、和很多其他 Agent 系统相比,差别到底在哪
如果把 Claude Code 和很多“支持 subagent”的系统对比,最大的不同不是它也有 subagent,而是它在工程上认真对待了 subagent 的存在。
常见系统的子 Agent 更像:
• 一次函数调用
• 一次 side request
• 一段附属 transcript
Claude Code 的子 Agent 更像:
• 一个可以启动、观察、切后台、恢复、终止、通知的任务对象
这使得它更像操作系统里的 job / process,而不是聊天系统里的 helper。
08
七、一张图看懂这个亮点

09
八、结论
“Agent 即 Task”是 Claude Code 十个亮点里我排第一的原因,不是因为它最花哨,而是因为它最根本。
这一步决定了 Claude Code 的多 Agent 能力是“工程对象”,而不是“提示词技巧”。 没有这一步,后面的后台执行、远程执行、teammate、统一 UI、任务通知、恢复机制,都会变成拼补丁。
简单说:
Claude Code 不是给聊天系统加了几个子 Agent,而是给任务系统加了模型驱动的执行体。