LEARN CLAUDE CODE

S11: Autonomous Agents — 自组织

问题:被动等待指令

到 S10 为止,Teammate 虽然是持久化的,但仍然是被动的——它只在收到消息时才行动。如果 Lead 忘了分配任务,或者 Lead 自己也在忙,Teammate 就一直 idle 着,白白浪费算力。

被动模式(S09-S10): Teammate-A: [idle] .... [idle] .... [idle] .... 收到消息 [working] .... [idle] .... [idle] Teammate-B: [idle] .... [idle] .... [idle] .... [idle] .... [idle] .... 收到消息 [working] Lead: [分配A] .............. [忙别的] .............. [分配B] ................ 问题:大量 idle 时间被浪费 Lead 成为瓶颈——所有任务都要经过 Lead 分配

解法:Idle Poll 循环

给每个 Teammate 加一个 idle poll 循环:当 Teammate 进入 idle 状态后,不是傻等消息,而是每隔 5 秒主动扫描任务看板(.tasks/ 目录),查找满足以下条件的任务:

如果找到这样的任务,Teammate 直接把 owner 字段写上自己的 ID,将 status 改为 in_progress,然后开始执行。无需等 Lead 分配。

自主模式(S11): Teammate-A: [idle] → 扫描任务板 → 发现 task-003 → 认领 → [working on task-003] → [完成] → [idle] → 扫描 → ... Teammate-B: [idle] → 扫描任务板 → 发现 task-004 → 认领 → [working on task-004] → ... ┌─────────────────────────────────┐ │ .tasks/ 任务看板 │ │ │ │ task-001: completed ✓ │ │ task-002: in_progress (agent-C) │ │ task-003: pending, no owner ←── A 认领 │ │ task-004: pending, no owner ←── B 认领 │ │ task-005: pending, blockedBy:[002] (等待) │ └─────────────────────────────────┘ Lead 不再是瓶颈——队友自己找活干

Idle Poll 的参数

参数含义
轮询间隔5 秒每 5 秒扫描一次任务看板
超时60 秒连续 60 秒没找到新任务,Teammate 自动进入 shutdown
认领方式原子写文件通过写 JSON 文件的 owner 字段来认领,利用文件系统的原子性避免冲突

Identity Re-injection:压缩后的身份恢复

自主代理面临一个独特的挑战:它们长时间运行,上下文会被反复压缩。压缩后,代理可能忘记自己是谁、自己的角色是什么。解决方案是 Identity Re-injection——每次压缩后,自动把代理的身份信息(名称、角色、能力描述)重新注入到上下文开头。

上下文满了
触发压缩
摘要替换旧消息
注入身份信息
代理继续工作
// 压缩后重新注入的身份信息
{
  "role": "system",
  "content": "你是 agent-frontend,专注于前端开发。\n你的能力:React、TypeScript、CSS。\n你的当前任务:task-003(实现登录页面)。\n你的团队:lead、agent-backend、agent-test。"
}

对比:被动 vs 自主

维度被动 Teammate(S09-S10)自主 Agent(S11)
任务分配Lead 手动分配自己从看板认领
idle 行为等待消息主动扫描任务
Lead 角色任务分配器(瓶颈)计划制定者(只管创建任务)
扩展性受限于 Lead 的分配速度队友越多,并行度越高
压缩处理丢失身份Identity Re-injection 恢复身份

对应官方工具

Agent Swarms 的自主任务认领机制

Claude Code 官方的 Agent Swarms 功能直接实现了 S11 描述的自组织模式。多个代理实例并行运行,通过共享的任务系统自动认领和执行任务。Lead 只需要创建任务计划,不需要手动分配每个任务给具体的代理。

关键洞察:S11 的核心转变是从"推模型"(Lead 推送任务给队友)到"拉模型"(队友主动拉取任务)。这和现实世界的敏捷开发一样——好的团队不需要经理分配每个任务,团队成员自己从看板上拿任务。Lead 的角色从"调度器"变成了"规划者"。