第三章 角色体系:谁做什么¶
3.1 角色定义的三种方式¶
方式一:Prompt定义(agency-agents-zh / Tmux-Orchestrator)¶
每个角色是一个Markdown文件,用自然语言描述身份、使命、规则、交付物、沟通风格。
agency-agents-zh的智能体文件结构:
---
name: Frontend Developer
description: Proficient in modern Web technologies...
color: cyan
---
# Frontend Developer Agent Persona
## Your Identity & Memory ← 角色定义、性格
## Your Core Mission ← 核心职责
## Key Rules You Must Follow ← 行为约束
## Your Technical Deliverables ← 代码/报告模板
## Your Communication Style ← 交互风格
Tmux-Orchestrator的CLAUDE.md: 一个716行的行为知识库,包含完整的角色层级、Git纪律、通信协议、反模式列表。
优点:灵活、可读性强、LLM天然理解 缺点:无强制执行力——Agent可以"偷懒"不遵守规则
方式二:代码强制边界(Tmux-Orchestrator / Overstory)¶
通过代码机制强制执行角色边界。
核心规则机制:
# prompt模板中的铁律标记
!!! IRON_LAW_START
1. Never write/modify/run project code yourself
2. Never delete files (only mv to legacy/)
3. Only dispatch tasks via task_dispatch.sh
!!! IRON_LAW_END
# 编排器每300秒检查标记是否被删除
# 删除则从git恢复 + 警告Agent
Overstory的constraints字段:
// Agent定义中的机器可读限制
{
file: "agents/builder.md",
capabilities: ["builder"],
canSpawn: false,
constraints: {
filePatterns: ["src/**/*.ts"], // 只能改这些文件
readOnlyPatterns: ["docs/**"], // 这些文件只读
maxFileSize: 500, // 单文件最大行数
requireTests: true // 必须写测试
}
}
优点:有强制执行力、可机器验证 缺点:灵活性差、约束粒度有限
方式三:能力标签(Overstory)¶
通过capability标签定义角色类型,系统根据标签分配任务和管理生命周期。
const SUPPORTED_CAPABILITIES = [
"coordinator", // 持久协调者,可派生子Agent
"supervisor", // 持久监督者
"lead", // 团队领队,Phase流程
"scout", // 只读侦察
"builder", // 编码实现
"reviewer", // 只读审查
"merger", // 分支合并
"monitor", // 持续巡逻
"orchestrator" // 顶层编排
];
能力标签决定了: - Agent能否派生子Agent (canSpawn) - Agent是否有独立worktree(scout/reviewer不需要) - Agent是否跨批次持久存在(coordinator/supervisor/monitor是持久的) - Agent如何被看门狗监控(持久Agent不基于lastActivity判定stale)
优点:系统可自动推断行为、分组管理、调度优化 缺点:标签体系需要精心设计,不易扩展
3.2 角色数量的选择¶
从2个到50+,角色数量是第一个架构决策:
两角色:架构师+执行者(Hermes)¶
适用场景:个人/小团队项目,技术栈单一 核心优势:简单到不可能出错 核心风险:架构师成为单点,没有质量把关人
三角色:编排者+PM+工程师(Tmux-Orchestrator)¶
适用场景:多项目并行,需要质量保障 核心优势:PM层分担了编排者的质量责任 核心风险:PM可能成为瓶颈
五角色:Scout+Builder+Reviewer+Merger+Lead(Overstory)¶
适用场景:大型代码库,需要深度分工 核心优势:每个角色权限最小化(Scout不能改文件,Reviewer不能改文件) 核心风险:Lead协调成本高,Phase切换有延迟
50+角色:9部门体系(agency-agents-zh)¶
Engineering(33) / Design(8) / Marketing(35) / Product(5) / Project Management(6)
Testing(9) / Ops Support(8) / Spatial Computing(6) / Specialized(45+)
适用场景:完整产品生命周期(不只是编码) 核心优势:覆盖了从市场研究到运营的全链路 核心风险:上下文管理极其复杂,大部分角色不会同时在线
关键洞察:角色数量的选择应该从少开始。2-3个角色已经能覆盖80%的场景。增加角色的主要驱动力不是"功能更多",而是"上下文隔离"和"权限最小化"。
3.3 角色约束:如何防止Agent越界¶
Agent越界是编排器面临的现实问题——Agent可能: - 修改不该改的文件 - 删除自己的约束规则 - 跳过质量检查 - 越权执行操作
防线一:Prompt规则(最弱)¶
在提示词中写"你不应该做X"。这是最基础也最不可靠的防线——LLM可能无视、遗忘或"创造性解读"规则。
防线二:规则守护 (Rule Guard)(Tmux-Orchestrator)¶
这是一个创新机制——承认Agent可能会修改自己的约束,然后用外部守护进程强制恢复。代价是增加了编排器的复杂度。
防线三:文件权限约束(Overstory)¶
constraints: {
filePatterns: ["src/**/*.ts"], // 白名单:只能改这些
readOnlyPatterns: ["docs/**"], // 黑名单:这些只读
maxFileSize: 500,
requireTests: true
}
通过代码级约束,Agent想越界也没能力——它的工作目录和工具权限已经被限制了。
防线四:只读角色(Overstory Scout/Reviewer)¶
Scout和Reviewer的capability标记为不可写——它们在worktree中以只读模式运行,物理上不可能修改代码。
防线强度排序:
关键洞察:对于关键约束,不要信任LLM的自律。用代码机制强制执行,至少要在Prompt规则之上叠加规则守护或文件权限约束。
3.4 持久角色 vs 临时角色¶
| 项目 | 持久角色 | 临时角色 | 持久角色特殊待遇 |
|---|---|---|---|
| Overstory | coordinator/supervisor/monitor | scout/builder/reviewer/merger | 不计入"所有完成"判断,不基于lastActivity判stale,仅用tmux/pid检查 |
| Tmux-Orchestrator | Orchestrator/PM | Engineer(可按需创建/销毁) | 临时Agent退出前必须保存日志 |
| Composio | Orchestrator是持久的 | Worker可按需增减 | Orchestrator崩溃=整个系统停滞 |
| agency-agents-zh | 编排者 | 其他所有智能体 | 编排者管理完整工作流 |
持久角色的设计考量: 1. 必须有独立于工作内容的监控方式(否则无法区分"在工作中"和"卡住了") 2. 必须有跨会话状态恢复机制(checkpoint/handoff) 3. 不应参与具体任务的"完成"判定(否则永远不会结束)
3.5 角色与工具的映射¶
不同角色应该使用不同的AI工具——这取决于任务特点:
Architect → 需要强推理能力 → 用Claude Sonnet/Opus
Executor → 需要快+便宜 → 用Codex/Claude Haiku
Scout → 只读探索,轻量即可 → 用轻量模型
Reviewer → 需要细节注意力 → 用强推理模型
Overstory把这个映射做成了可配置的:
models:
coordinator: claude-opus-4 # 需要全局视野
lead: claude-sonnet-4 # 需要任务分解能力
scout: claude-haiku # 只读探索,轻量即可
builder: codex # 编码专用
reviewer: claude-sonnet-4 # 需要审查细节
merger: claude-sonnet-4 # 需要冲突理解
关键洞察:角色≠工具,但角色应该推荐/约束工具选择。这既节省成本,又提高质量。