03 · AGENTS/角色总览

六个 Agent 角色

系统由六个无状态 Agent 组成。每个 Agent 都符合「文档输入 → 思考 → 文档输出」的纯函数式约定。Agent 之间不直接通信,仅通过 DocStore / UnitRegistry 握手。

职责矩阵

Agent所属 Loop触发条件主要产物专属页
PML3人类新需求prd.html (rev+1)→ 详情
ArchitectL3 + L2PRD 改变 / L2 失败sdd.html + units.json→ 详情
CoderL1Unit 进 coding 态units/{id}/code/ + contract.json→ 详情
TesterL1Coder 提交后tests/ + runs/result.json→ 详情
IntegratorL2L2 闸门打开integration/runs/{id}/result.json→ 详情
BugTriagerL2Integrator 失败triage.json→ 详情

调用拓扑(谁调用谁)

白色箭头是直接调用,虚线箭头是通过文档触发。LoopController 是唯一编排者,所有 Agent 之间永远不直接调用。

LoopController PM AgentL3 ArchitectL3 + L2 CoderL1 TesterL1 IntegratorL2 BugTriagerL2 DocStore · UnitRegistry · 文件系统

实线 = 直接 callAgent · 虚线 = 通过文档系统握手

Agent 元数据模板

所有六个 Agent 都在 system/agents/_registry.json 注册。模板结构对齐 LemonBoss 现有 {id, name, type, ...} 约定,新增 devloop 字段标识它属于本系统。

{
  "id": "devloop-coder",
  "name": "Coder Agent",
  "type": "executor",
  "devloop": {
    "loop": "L1",
    "role": "code",
    "upstream": ["architect"],
    "downstream": ["tester"]
  },
  "cli": {
    "model": "claude-sonnet-4-6",
    "toolPolicy": ["Read", "Edit", "Write", "Bash"],
    "systemPromptFile": "system/agents/devloop-coder/prompt.md"
  },
  "sandbox": {
    "cwd": "data/companies/{cid}/projects/{pid}/units/{unitId}/",
    "writeAllowList": ["code/**", "contract.json", "coder.log"]
  }
}

模型分级

不同 Agent 对模型能力的需求差异很大。默认配置如下,可在每个项目的 project.json 覆盖。

Agent默认模型原因
PMSonnet 4.6对话场景多,Opus 不划算
ArchitectOpus 4.7需要架构判断 + 契约设计
CoderSonnet 4.6代码生成主力,性价比最高
TesterSonnet 4.6跑命令 Haiku 够用,但写好的 negative case 需要中等推理;Tester 调用次数有限,Sonnet 性价比可接受
IntegratorSonnet 4.6需要读多个 Unit 代码 + 跑命令
BugTriagerOpus 4.7归因质量直接决定 L2 收敛性