agents-overview.md
2.68 KB
六个 Agent 角色
Shell-stripped: preserves full prompt content for Agent system templates
系统由六个无状态 Agent 组成。每个 Agent 都符合「文档输入 → 思考 → 文档输出」的纯函数式约定。Agent 之间不直接通信,仅通过 DocStore / UnitRegistry 握手。
职责矩阵
| Agent | 所属 Loop | 触发条件 | 主要产物 | 专属页 |
|---|---|---|---|---|
| PM | L3 | 人类新需求 | prd.html (rev+1) |
→ 详情 |
| Architect | L3 + L2 | PRD 改变 / L2 失败 | sdd.html + units.json |
→ 详情 |
| Coder | L1 | Unit 进 coding 态 | units/{id}/code/ + contract.json |
→ 详情 |
| Tester | L1 | Coder 提交后 | tests/ + runs/result.json |
→ 详情 |
| Integrator | L2 | L2 闸门打开 | integration/runs/{id}/result.json |
→ 详情 |
| BugTriager | L2 | Integrator 失败 | triage.json |
→ 详情 |
调用拓扑(谁调用谁)
白色箭头是直接调用,虚线箭头是通过文档触发。LoopController 是唯一编排者,所有 Agent 之间永远不直接调用。
实线 = 直接 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 | 默认模型 | 原因 |
|---|---|---|
| PM | Sonnet 4.6 | 对话场景多,Opus 不划算 |
| Architect | Opus 4.7 | 需要架构判断 + 契约设计 |
| Coder | Sonnet 4.6 | 代码生成主力,性价比最高 |
| Tester | Sonnet 4.6 | 跑命令 Haiku 够用,但写好的 negative case 需要中等推理;Tester 调用次数有限,Sonnet 性价比可接受 |
| Integrator | Sonnet 4.6 | 需要读多个 Unit 代码 + 跑命令 |
| BugTriager | Opus 4.7 | 归因质量直接决定 L2 收敛性 |