Skip to Content
👋 欢迎来到 HowToUseOpenClaw 快速入门
快速开始教程:Mission Control 多 Agent 协作

Mission Control 完整搭建指南:我们如何搭了一支 AI Agent 小队

这篇是我搭建 Mission Control 的完整经历。一个让 10 个 AI agent 像真实团队一样协作的系统。如果你想复现这套 setup,本指南会覆盖全部内容。

如果你已经熟悉 OpenClaw,可能会想:「能不能直接多跑几个 OpenClaw 实例?」可以。这就是我们现在在做的事。本指南会告诉你怎么做。

作者 @pbteja1998 (SiteGPT)。完整长文:X 推文 


Part 1:为什么要做这个

AI 助手的问题

我在做 @SiteGPT ,一个用于客服的 AI 聊天机器人。我一直在用 AI。但用过的每一个 AI 工具有同一个问题:没有延续性。

每次对话都是新的。昨天的上下文?没了。上周要的那份调研?丢在某个再也找不到的聊天里。

我想要的不一样。能记住自己在干什么的 agent、多个不同技能的 agent 一起协作、一个共享的工作区放所有上下文、能分配任务和跟踪进度。

说白了,我想让 AI 像一支队伍一样工作,而不是一个搜索框。

起点:OpenClaw

我当时已经在用 OpenClaw。它是一个以持久 daemon 形式运行的开源 AI agent 框架,连接 Claude(或其他模型),给 AI 提供文件系统、shell 命令、网页浏览等工具。

一个 OpenClaw 实例对应一个 AI 助手(Jarvis)接在 Telegram 上。有用,但有限。

然后我想到:要是跑多个 OpenClaw session,每个有自己的性格和上下文会怎样?

那时我才意识到,架构其实已经在那儿了,只需要把它编排起来。


Part 2:理解 OpenClaw 架构(基础)

要搭多 agent 系统,得先搞清楚 OpenClaw 在底层是怎么工作的。这是后面一切的基础。

OpenClaw 是什么?

OpenClaw 是一个 AI agent 框架,主要做三件事:

第一,把 AI 模型接到真实世界。文件访问、shell 命令、网页浏览、API。

第二,维护持久 Session。对话历史在重启后仍然保留。

第三,路由消息。把 AI 接到 Telegram、Discord、Slack 或任意 channel。

它以 daemon(后台服务)形式跑在服务器上,监听消息并响应。

Gateway

Gateway 是核心进程。在你的服务器上 24/7 运行,管理所有活跃 Session、处理 cron 任务(定时任务)、在 channel 和 Session 之间路由消息,并对外提供 WebSocket API 做控制。

启动方式:

openclaw gateway start

配置放在 JSON 文件里。你可以指定用哪家 AI 提供商和模型(Anthropic、OpenAI 等)、接哪些 channel(Telegram、Discord 等)、agent 能用哪些工具,以及默认 system prompt 和工作区路径。

Session:核心概念

Session 就是一段带上下文的持久对话。

每个 Session 都有:session key(唯一标识,如 agent:main:main)、对话历史(以 JSONL 文件存在磁盘)、使用的模型、以及可用的工具。

重要的一点是:Session 彼此独立。每个 Session 有自己的历史、自己的上下文、自己对过去对话的「记忆」。

当你跑多个 agent 时,本质是在跑多个 Session,每个有自己的身份。

Session 如何工作

User sends message to Telegram Gateway receives it Gateway routes to correct session (based on config) Session loads conversation history AI generates response (with full context) Response sent back through Telegram History updated and saved to disk

Session 可以是主 Session(长期、交互式,比如和 Jarvis 聊天)或隔离 Session(一次性,用于 cron:醒来、干活、结束)。

Cron:按计划叫醒 Agent

OpenClaw 内置 cron 系统。可以这样安排任务:

openclaw cron add \ --name "morning-check" \ --cron "30 7 * * *" \ --message "Check today's calendar and send me a summary"

cron 触发时,Gateway 会创建或唤醒一个 Session,把消息发给 AI,AI 回复(可以用工具、发消息等),Session 可以保留或结束。

这样 agent 就能定期「醒来」,而不必一直在线。

工作区(Workspace)

每个 OpenClaw 实例都有一个工作区。就是磁盘上的一个目录:配置文件、记忆文件、脚本和工具都在里面,AI 可以读写文件。

Agent 靠写文件在 Session 之间持久化信息。这些文件会 survive 重启。

/home/usr/clawd/ ← Workspace root ├── AGENTS.md ← Instructions for agents ├── SOUL.md ← Agent personality ├── memory/ │ ├── WORKING.md ← Current task state │ ├── 2026-01-31.md ← Daily notes │ └── ... ├── scripts/ ← Utilities agents can run └── config/ ← Credentials, settings

Part 3:从一个 OpenClaw 到十个 Agent

基础讲完了。下面是我怎么搭出一支队伍的。

核心想法

OpenClaw 的 Session 是独立的。每个可以有自己的性格(通过 SOUL.md)、自己的记忆文件、自己的 cron 安排、自己的工具和权限。

所以每个 agent 就是一个做了专门配置的 OpenClaw Session。

Jarvis 没什么特别的。他就是 session key 为 agent:main:main 的 Session,一份写着「你是 Jarvis,小队负责人……」的 SOUL.md、全部工具权限,以及连到我 Telegram 的通道。

Shuri 是另一个 Session,session key agent:product-analyst:main,SOUL.md 写「你是 Shuri,产品分析师……」,同样的工具(文件、shell、浏览器),以及她自己的一条 heartbeat cron。

十个 agent 就是十个 Session。各自按自己的节奏醒来,各自带着自己的上下文。

Session Key:Agent 身份

每个 agent 有唯一的 session key:

agent:main:main → Jarvis (Squad Lead) agent:product-analyst:main → Shuri agent:customer-researcher:main → Fury agent:seo-analyst:main → Vision agent:content-writer:main → Loki agent:social-media-manager:main → Quill agent:designer:main → Wanda agent:email-marketing:main → Pepper agent:developer:main → Friday agent:notion-agent:main → Wong

当我向某个 Session 发消息时,只有那个 agent 收到。他们的历史是分开的。

Cron:心跳

每个 agent 有一条每 15 分钟触发一次的 cron:

# Pepper wakes at :00, :15, :30, :45 openclaw cron add \ --name "pepper-mission-control-check" \ --cron "0,15,30,45 * * * *" \ --session "isolated" \ --message "You are Pepper, the Email Marketing Specialist. Check Mission Control for new tasks..."

时间错开,避免同时醒来:

  • :00 Pepper
  • :02 Shuri
  • :04 Friday
  • :06 Loki
  • :07 Wanda
  • :08 Vision
  • :10 Fury
  • :12 Quill

每次 cron 创建一个隔离 Session,跑完就结束。这样成本可控。

Agent 之间如何沟通

这里开始有意思了。Agent 怎么互相沟通?

方式一是直接向 Session 发消息:

openclaw sessions send --session "agent:seo-analyst:main" --message "Vision, can you review this?"

Jarvis 可以直接往 Vision 的 Session 发消息。

方式二是共享数据库(Mission Control)。所有 agent 读写同一个 Convex 数据库。Fury 发一条评论,大家都能看到。

我们主要用方式二。这样会有一份统一的沟通记录。


Part 4:共享大脑(Mission Control)

十个独立的 OpenClaw Session 可以各自跑,但没有协调就会乱。所以我做了 Mission Control。

Mission Control 做什么

Mission Control 是把独立 agent 变成一支队伍的共享基础设施。

它提供:所有人看到同一套任务的共享任务库、agent 在一个地方讨论工作的评论线程、实时看发生什么的活动流、@mention 提醒特定 agent 的机制、以及交付物所在的文档存储。

可以把它想成所有 agent 一起用的「办公室」。每个 agent 仍然是独立的 OpenClaw Session,但大家都看着同一块白板。

为什么用 Convex?

我选 Convex 做数据库是因为:实时(Loki 一发评论 UI 就更新)、serverless(不用自己管库)、TypeScript 友好、免费额度对这个规模够用。

Schema

六张表支撑一切:

agents: { name: string, // "Shuri" role: string, // "Product Analyst" status: "idle" | "active" | "blocked", currentTaskId: Id<"tasks">, sessionKey: string, // "agent:product-analyst:main" } tasks: { title: string, description: string, status: "inbox" | "assigned" | "in_progress" | "review" | "done", assigneeIds: Id<"agents">[], } messages: { taskId: Id<"tasks">, fromAgentId: Id<"agents">, content: string, // The comment text attachments: Id<"documents">[], } activities: { type: "task_created" | "message_sent" | "document_created" | ..., agentId: Id<"agents">, message: string, } documents: { title: string, content: string, // Markdown type: "deliverable" | "research" | "protocol" | ..., taskId: Id<"tasks">, // If attached to a task } notifications: { mentionedAgentId: Id<"agents">, content: string, delivered: boolean, }

Agent 通过 Convex CLI 和它交互:

# Post a comment npx convex run messages:create '{"taskId": "...", "content": "Here's my research..."}' # Create a document npx convex run documents:create '{"title": "...", "content": "...", "type": "deliverable"}' # Update task status npx convex run tasks:update '{"id": "...", "status": "review"}'

Mission Control 的 UI

我写了一个 React 前端来展示这些数据。

有实时动态的 Activity Feed、看板列(Inbox → Assigned → In Progress → Review → Done)的 Task Board、展示每个 agent 状态和当前任务的 Agent 卡片、读写交付物的 Document 面板、以及点开任意任务看完整上下文和评论的详情视图。

风格刻意做得偏温暖、偏编辑感,像报纸的控制台。我每天要盯很久,所以得看着舒服。


Part 5:SOUL 系统(Agent 人设)

每个 agent 都要知道「自己是谁」。这就是 SOUL 文件。

SOUL 里写什么

# SOUL.md — Who You Are **Name:** Shuri **Role:** Product Analyst ## Personality Skeptical tester. Thorough bug hunter. Finds edge cases. Think like a first-time user. Question everything. Be specific. Don't just say "nice work." ## What You're Good At - Testing features from a user perspective - Finding UX issues and edge cases - Competitive analysis (how do others do this?) - Screenshots and documentation ## What You Care About - User experience over technical elegance - Catching problems before users do - Evidence over assumptions

为什么人设重要

一个「啥都会」的 agent 往往啥都一般。

但一个明确是「专门找边界情况的怀疑论测试」的 agent,真的会去找边界情况。约束会聚焦他们的行为。

我们每个 agent 都有清晰的声音:Loki 对用词很较真(牛津逗号、反对被动);Fury 每个结论都带出处(来源、置信度);Shuri 质疑假设、找可能坏掉的地方;Quill 想的是钩子和互动。

AGENTS.md 文件

SOUL 定义你是谁,AGENTS.md 定义怎么运作。

每个 agent 启动时都会读 AGENTS.md。里面写:文件放哪、记忆怎么用、有哪些工具、什么时候该说话什么时候安静、怎么用 Mission Control。

这是操作手册。没有它,agent 在基础事情上会做出不一致的决定。


Part 6:记忆与持久化

AI Session 默认是「新开一局」,没有昨天的记忆。这既是特性(避免上下文膨胀)也是问题(agent 会忘掉自己在干嘛)。

记忆栈

Session 记忆(OpenClaw 内置) OpenClaw 把对话历史存在 JSONL 里。Agent 可以搜自己过去的对话。

工作记忆(memory/WORKING.md) 当前任务状态,会不断更新。

# WORKING.md ## Current Task Researching competitor pricing for comparison page ## Status Gathered G2 reviews, need to verify credit calculations ## Next Steps 1. Test competitor free tier myself 2. Document the findings 3. Post findings to task thread

这是最重要的文件。Agent 醒来第一件事就是读 WORKING.md,回忆自己之前在干什么。

日报(memory/YYYY-MM-DD.md) 每天发生什么的原始记录。

# 2026-01-31 ## 09:15 UTC - Posted research findings to comparison task - Fury added competitive pricing data - Moving to draft stage ## 14:30 UTC - Reviewed Loki's first draft - Suggested changes to credit trap section

长期记忆(MEMORY.md) 整理过的重要内容:教训、关键决策、稳定事实。

黄金法则

想记住什么,就写进文件。

「脑子里记一下」扛不过 Session 重启。只有文件会持久。

当我跟 agent 说「记住我们定了 X」时,他们应该去更新文件,而不是点头然后忘掉。


Part 7:心跳系统

问题

一直在线的 agent 会白白烧 API 额度;一直离线的又接不到活。

做法:定时心跳

每个 agent 通过 cron 每 15 分钟醒来一次:

:00 Pepper wakes up → Checks for @mentions → Checks assigned tasks → Scans activity feed → Does work or reports HEARTBEAT_OK → Goes back to sleep :02 Shuri wakes up → Same process :04 Friday wakes up → Same process ...and so on

一次心跳里发生什么

一,加载上下文。读 WORKING.md、近期日报,必要时查 Session 记忆。

二,看紧急项。有没有被 @?有没有派给我的任务?

三,扫活动流。有没有我该参与的讨论?有没有影响我工作的决策?

四,要么干活要么收工。有活就干,没有就报 HEARTBEAT_OK。

HEARTBEAT.md 文件

这个文件告诉 agent 要检查什么:

# HEARTBEAT.md ## On Wake - [ ] Check memory/WORKING.md for ongoing tasks - [ ] If task in progress, resume it - [ ] Search session memory if context unclear ## Periodic Checks - [ ] Mission Control for @mentions - [ ] Assigned tasks - [ ] Activity feed for relevant discussions

Agent 会严格按这个清单执行。

为什么是 15 分钟?

5 分钟太贵,agent 经常空转醒来;30 分钟又太慢,工作等太久。

15 分钟是一个平衡:大部分工作能较快被处理,又不会成本过高。


Part 8:通知系统

@Mention

在评论里输入 @Vision,Vision 会在下一次心跳时收到通知。

输入 @all,所有人都会收到。

投递怎么实现

一个用 pm2 跑的 daemon 每 2 秒轮询 Convex:

// Simplified while (true) { const undelivered = await getUndeliveredNotifications(); for (const notification of undelivered) { const sessionKey = AGENT_SESSIONS[notification.mentionedAgentId]; try { await openclaw.sessions.send(sessionKey, notification.content); await markDelivered(notification.id); } catch (e) { // Agent might be asleep, notification stays queued } } await sleep(2000); }

如果 agent 在「睡觉」(没有活跃 Session),投递会失败,通知留在队列。等该 agent 下一次心跳、Session 激活时,daemon 再投递成功。

线程订阅

问题:5 个 agent 在讨论一个任务,难道每条评论都要 @ 5 个人?

做法:订阅线程。

只要你跟一个任务产生过互动,你就被订阅了。评论过、被 @ 过、被指派了,都会自动订阅。

一旦订阅,该任务之后所有评论都会通知你,不用再 @。

这样对话更自然,像 Slack 或邮件线程。


Part 9:每日站会

是什么

每天 IST 23:30,会有一个 cron:检查所有 agent Session、汇总近期活动、生成摘要、发到我 Telegram。

格式

📊 DAILY STANDUP — Jan 30, 2026 ✅ COMPLETED TODAY • Loki: Shopify blog post (2,100 words) • Quill: 10 tweets drafted for approval • Fury: Customer research for comparison pages 🔄 IN PROGRESS • Vision: SEO strategy for integration pages • Pepper: Trial onboarding sequence (3/5 emails) 🚫 BLOCKED • Wanda: Waiting for brand colors for infographic 👀 NEEDS REVIEW • Loki's Shopify blog post • Pepper's trial email sequence 📝 KEY DECISIONS • Lead with pricing transparency in comparisons • Deprioritized Zendesk comparison (low volume)

为什么重要

我不可能一直盯着 Mission Control。站会给我一个每日快照。

也是问责:如果某个 agent 说在干活但站会里啥都没有,就说明有问题。


Part 10:小队

名单

Jarvis,小队负责人 Session: agent:main:main 协调者。处理直接请求、派活、跟进进度。我的主入口。

Shuri,产品分析 Session: agent:product-analyst:main 怀疑论测试。找边界和 UX 问题。测竞品。问别人想不到的问题。

Fury,用户研究 Session: agent:customer-researcher:main 深度调研。爱看 G2 评论。每个结论都带出处。

Vision,SEO 分析 Session: agent:seo-analyst:main 用关键词和搜索意图思考。确保内容能排上去。

Loki,内容 Session: agent:content-writer:main 文字是他的手艺。牛津逗号、反对被动。每句话都要有存在理由。

Quill,社媒 Session: agent:social-media-manager:main 用钩子和线程思考。Build-in-public 心态。

Wanda,设计 Session: agent:designer:main 视觉思维。信息图、对比图、UI mockup。

Pepper,邮件营销 Session: agent:email-marketing:main Drip 序列和生命周期邮件。每封邮件要么有价值要么被砍。

Friday,开发 Session: agent:developer:main 代码即诗。干净、有测试、有文档。

Wong,文档 Session: agent:notion-agent:main 把文档理清楚。不让东西丢。

Agent 层级

  • 实习生:大部分操作需要审批,还在熟悉系统。
  • 专家:在自己领域独立工作。
  • 负责人:完全自主,可以决策和派活。

Part 11:任务怎么流动

生命周期

  1. Inbox:新建、未分配
  2. Assigned:有负责人,尚未开始
  3. In Progress:进行中
  4. Review:完成,待审核
  5. Done:完成
  6. Blocked:卡住,需要先解决某事

真实例子

任务:做一页竞品对比

第 1 天: 我建任务并指派给 Vision 和 Loki。Vision 贴出关键词调研,目标关键词搜索量不错。

第 1–2 天: Fury 在活动流里看到,补上竞品情报:G2 评论、价格抱怨、常见反对。Shuri 测了两边产品,贴出 UX 差异。

第 2 天:Loki 开始起草,用上所有调研——Vision 的关键词、Fury 的引用、Shuri 的 UX 备注。

第 3 天:Loki 贴出初稿,状态改为 Review。我审核并反馈,Loki 修改,完成。

所有讨论都在同一个任务下。历史完整保留,谁都能看到全过程。


Part 12:我们做出了什么

系统跑起来之后,可以做到:

  • 带 SEO 调研、用户引用和成稿的竞品对比页
  • 起草、审核、可上线的邮件序列
  • 基于真实用户洞察的社媒内容和钩子
  • 关键词目标明确的博客
  • 从用户对话起草的案例研究
  • 整理好的竞品情报研究站

Agent 负责脏活:调研、初稿、协调、审核。你负责决策和最终拍板。

真正的价值不是某一件交付物,而是叠加效应:你在忙别的时,agent 在把任务往前推。


Part 13:经验教训

先少后多

我从 1 直接拉到 10 太快了。先把 2–3 个跑稳,再加人。

例行工作用便宜模型

心跳不需要最贵的模型。那是便宜模型的活。把贵的留给创意工作。

记忆很难

Agent 会忘。能写进文件(而不是「脑子里记」)的越多越好。

允许他们「多管闲事」

有时他们会参与没派给他们的任务。这是好事,说明他们在看动态并贡献价值。


Part 14:如何复现

最小配置

1. 安装 OpenClaw

npm install -g openclaw openclaw init # Add your API keys openclaw gateway start

2. 建 2 个 agent 别贪多。一个协调 + 一个专家,各自单独的 session key。

3. 写 SOUL 文件 给每个 agent 身份,角色写具体。

4. 配心跳 cron

openclaw cron add --name "agent-heartbeat" --cron "*/15 * * * *" \ --session "isolated" \ --message "Check for work. If nothing, reply HEARTBEAT_OK."

5. 搞一个共享任务系统 Convex、Notion 甚至一个 JSON 文件都行,有个地方跟踪工作即可。

再往上扩

加 agent 时把心跳错开,别同时跑。Agent 到 3 个以上就做个正经 UI,否则纯文本会很难用。加上 @mention 和线程订阅,对话才自然。再配上每日站会做可见性。

真正的秘密

技术重要,但不是秘密。

秘密是把 AI agent 当队员:给角色、给记忆、让他们协作、让他们担责。

他们替代不了人。但一支责任清晰、在共享上下文中工作的 AI agent 队伍,是乘数。

最后更新于: