本来要加个登录功能写着写着顺便优化了数据库连接池优化完发现原来的认证逻辑被改坏了改回来又改坏了另一个模块最后回头一看——登录功能还没做完这就是目标漂移和质量失控。Agent Teams 的思路很简单把一个 AI 拆成多个角色每个角色有明确的职责边界。Planner 产品经理 → Builder 开发 → Reviewer QAPlanner产品经理分析需求锁定目标生成实施 spec。目标写入持久文件后续所有阶段都读这个文件Builder开发严格按 spec 写代码。不越界不自行优化ReviewerQA对照 spec 审查。检测目标偏移、功能偏移、回归风险核心保障目标持久化。 Planner 把目标写入文件不依赖对话记忆。Builder 和 Reviewer 每次都从文件读取目标不从上下文推断。用户中途说顺便优化 XXXPlanner 读文件判断偏离拒绝并记入 backlog。二、Claude Code从零搭建 Agent Teams2.1 安装 Claude Code先确保装好 Claude Code CLImacOS / Linuxnpm install -g anthropic-ai/claude-code或者直接从官网下载https://docs.anthropic.com/en/docs/claude-code/overview验证安装claude --version2.2 开启 Agent TeamsAgent Teams 是实验性功能默认关闭。需要在配置中开启编辑 ~/.claude/settings.json全局或项目级 .claude/settings.json{“env”: {“CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS”: “1”}} 提示设置这个环境变量后重启 Claude Code 即可生效。不需要写任何代码或配置文件。2.3 定义 Agent 角色可选但推荐在 ~/.claude/agents/ 目录下创建 markdown 文件每个文件定义一个 agent 角色~/.claude/agents/├── planner.md ← 产品经理分析需求锁定目标├── builder.md ← 开发按 spec 写代码└── reviewer.md ← QA审查检测偏移文件格式YAML frontmatter Markdown bodyname: plannerdescription: 项目目标守护者。分析需求持久化目标确保不被偏移。tools: Read, Grep, Glob, Bash你是目标守护者。核心职责分析用户需求判断是否在项目目标范围内将最终目标写入持久文件不依赖对话记忆生成可执行的实施 spec遇到歧义必须 ask不要自己假设不能写代码——只出计划和 specbuilder.md 和 reviewer.md 同理。2.4 使用 Agent Teams在 Claude Code 中直接用自然语言让 Claude 自动分配任务我要做一个用户管理系统。Spawn 三个 teammateplanner 负责分析需求和锁定目标builder 负责写代码reviewer 负责审查或者更简洁用 planner→builder→reviewer 流程做一个登录功能Claude 会自动 spawn teammate分配任务协调工作。Teammate 之间可以通过共享 task list 通信。 关键区别Subagents子代理只能向主 agent 报告结果不能互相通信。Agent Teams团队中 teammate 可以直接互相发消息、共享任务列表。对于需要协作讨论的复杂任务用 Teams对于只需要结果的简单任务用 Subagents。三、其他工具opencode / MiMoCode 配置如果你用的是 opencode 或 MiMoCodeopencode 的增强版agent team 的实现方式不同——通过 skill 系统来实现相同的效果。3.1 Skill 系统 vs Agent Teams维度 Claude Code Agent Teams opencode / MiMoCode Skills编排方式 Lead agent 自动协调 teammate 主 agent 按 skill 顺序执行通信 Teammate 之间直接通信 单向每个阶段输出传递给下一阶段配置 ~/.claude/agents/.md .mimocode/skills//SKILL.md持久化 共享 task list 文件系统GOAL.md / SPEC.md3.2 配置步骤第一步创建 skill 目录在项目根目录下mkdir -p .mimocode/skills/plannermkdir -p .mimocode/skills/buildermkdir -p .mimocode/skills/reviewermkdir -p .mimocode/skills/developmkdir -p .mimocode/dev第二步创建四个 SKILL.md 文件.mimocode/├── dev/│ ├── GOAL.md ← planner 持久化目标不可变│ ├── SPEC.md ← planner 生成实施 spec│ └── BACKLOG.md ← 被拒绝的优化请求└── skills/├── planner/SKILL.md├── builder/SKILL.md├── reviewer/SKILL.md└── develop/SKILL.md第三步在配置中注册 skill 路径编辑全局配置 ~/.config/mimocode/config.json{“$schema”: “https://mimo.xiaomi.com/mimocode/config.json”,“skills”: {“paths”: [“.mimocode/skills”]}}重启后生效。3.3 Planner Skill 示例name: plannerdescription: 项目目标守护者。分析需求持久化目标到文件确保目标不被偏移。Planner - 目标守护者执行流程分析用户需求判断是否在项目目标范围内持久化目标将最终目标写入 .mimocode/dev/GOAL.md生成 spec将实施步骤写入 .mimocode/dev/SPEC.md如果用户中途提出优化请求检查是否偏离 GOAL.md偏离则拒绝强制规则GOAL.md 一旦写入不可被 builder/reviewer 修改你不能写代码——只出计划和 spec遇到歧义必须 ask 用户澄清3.4 Builder 和 ReviewerBuilder 的核心规则每次开始前读取 GOAL.md 和 SPEC.md严格按 spec 写代码遇到边界情况停下来问。Reviewer 的核心规则每次审查前读取 GOAL.md 和 SPEC.md对照检查 spec 合规、目标偏移、功能偏移、回归风险给出 APPROVE 或 REJECT。⚠️ 关键设计原则Builder 和 Reviewer 每次都从文件读取目标不从对话上下文推断。这是防止目标漂移的核心机制。对话记忆会随着 turn 增加而衰减但文件不会。四、实战安卓劫持项目完整落地以 D:\Desktop\安卓劫持 项目为例展示完整的 develop workflow 流程。4.1 项目背景这是一个 Android 安全研究项目包含一个伪装成系统工具的双层 App。核心架构前端伪装SystemToolActivity 显示系统信息和一键优化按钮隐藏触发点击 Android 版本文本 7 次 → 显示高级功能区域霸屏机制三层防逃逸Activity 拦截 Service 浮层 AccessibilityService 回拉4.2 Planner 阶段锁定目标用户输入“给 App 加一个屏幕录制功能”Planner 分析后写入持久文件GOAL.md不可变项目最终目标构建一个伪装成系统工具的 Android 安全研究 App包含前端伪装层系统信息展示 一键优化隐藏功能触发连续点击触发高级功能霸屏劫持机制三层防逃逸开机自启 状态管理SPEC.md本次实施实施步骤在 SystemToolActivity 添加 MediaRecorder 权限声明创建 ScreenRecordService 前台服务在高级功能区域添加屏幕录制开关开关启动/停止录制录制文件保存到 app 私有目录添加录制时长显示验收标准录制开关在高级功能区域内录制时状态栏有通知录制文件可正常播放用户中途说“顺便把数据库连接池也优化一下”Planner 读取 GOAL.md判断数据库优化不在当前目标范围内 → 拒绝记入 BACKLOG.md。4.3 Builder 阶段按 Spec 实现Builder 读取 GOAL.md 和 SPEC.md严格按步骤实现Builder 输出实现了什么按 SPEC.md 步骤 1-5 完成改动了哪些文件AndroidManifest.xml: 添加 RECORD_AUDIO 权限app/src/…/ScreenRecordService.java: 新建前台服务app/src/…/SystemToolActivity.java: 添加录制开关逻辑测试结果录制启动/停止: 通过状态栏通知: 通过文件保存: 通过未覆盖的边界SPEC.md 未说明录制分辨率/帧率使用默认值4.4 Reviewer 阶段检测偏移Reviewer 读取 GOAL.md 和 SPEC.md逐项审查Reviewer 输出审查结论: APPROVESpec 合规步骤1: 权限声明已添加步骤2: ScreenRecordService 已创建步骤3: 高级功能区域已添加开关步骤4: 启动/停止逻辑已实现步骤5: 录制时长显示已实现目标偏移未引入与项目目标无关的功能 ✓功能偏移未引入 SPEC.md 未要求的功能 ✓回归风险未修改已有功能 ✓测试覆盖关键路径已测试 ✓4.5 文件结构D:\Desktop\安卓劫持├── .mimocode/│ ├── dev/│ │ ├── GOAL.md ← 项目最终目标不可变│ │ ├── SPEC.md ← 本次实施 spec│ │ └── BACKLOG.md ← 被拒绝的优化请求│ └── skills/│ ├── planner/SKILL.md│ ├── builder/SKILL.md│ ├── reviewer/SKILL.md│ └── develop/SKILL.md├── app/src/│ └── main/java/com/example/utilitybox/│ ├── SystemToolActivity.java│ ├── ScreenRecordService.java│ ├── BackgroundService.java│ ├── HijackState.java│ └── SystemAccessibilityService.java├── build.gradle.kts└── settings.gradle.kts五、真实对话从零拉起团队以下是 Claude Code Agent Teams 的真实操作记录展示从开启功能到团队就绪的完整过程。5.1 启动 Claude CodePS C:\Users\GOD claude╭─── Claude Code v2.1.139 ─────────────────────────────────────────────────╮│ Welcome back! ││ deepseek-v4-pro · API Usage Billing ││ C:\Users\GOD │╰──────────────────────────────────────────────────────────────────────────╯5.2 用自然语言拉起团队不需要写任何配置文件直接说❯ Spawn 三个 teammateplanner 负责分析需求、锁定目标、生成 specbuilder 负责按 spec 写代码reviewer 负责审查有没有目标偏移和回归问题你看一下现在的 “D:\Desktop\安卓劫持” 这个项目Claude 自动读取项目结构理解上下文。5.3 持久化到 Memoryteammate 默认只在当前会话有效。通过 memory 持久化下次新会话可以恢复❯ 这三个 teammate 只对这个项目生效可以写到 memory● 记忆已写入。现在创建团队并拉起三个 teammate。3 background agents launched (↓ to manage)├ planner├ builder└ reviewer 关键操作把团队配置写入 memory 后下次在新会话中说拉起安卓劫持团队Claude 会读取记忆、重建这三个 teammate。不需要每次都重新描述角色。5.4 团队就绪● 全部完成。总结一下记忆已持久化跨会话保留project_android_hijack.md — 项目概要、技术栈、协作模式reference_android_hijack_team.md — 三角色定义和拉起方式团队已创建android-hijack三名 teammate 正在后台加载项目上下文┌──────────┬──────────┬─────────────────────────────┐│ 角色 │ 名称 │ 职责 │├──────────┼──────────┼─────────────────────────────┤│ Planner │ planner │ 读需求 → 定位源码 → 出 spec │├──────────┼──────────┼─────────────────────────────┤│ Builder │ builder │ 读 spec → 改代码 │├──────────┼──────────┼─────────────────────────────┤│ Reviewer │ reviewer │ 对比 spec vs diff → 查回归 │└──────────┴──────────┴─────────────────────────────┘新会话下说拉起安卓劫持团队我就会读取记忆、重建这三个 teammate。5.5 分配任务