返回博客

我用 13 个 AI Agent 交付软件,实际效果是这样的

这是我现在的终端界面。

13 个 agent 的 tmux 会话

13 个 Claude Code agent,每个都在自己的 tmux 面板中运行,协作于同一个代码库。不是实验,也不是炫技。这就是我每天交付软件的方式。

这个项目是 Beadbox,一个用于实时监控 AI 编码 agent 的仪表盘。它由它所监控的 agent 团队亲手构建。agent 编写代码、测试、审查、打包、发布。我负责协调。

如果你正在运行两三个以上的 agent,想知道怎么追踪它们的进度,这就是我经过数月迭代最终得出的方案。

团队阵容

每个 agent 都有一个 CLAUDE.md 文件,定义了它的身份、职责范围、职责边界,以及与其他 agent 的通信方式。这些不是万能的通用助手。每一个都有明确的工作范围和清晰的边界。

分组 Agent 负责领域
协调层 super, pm, owner 工作调度、产品规格、业务优先级
工程层 eng1, eng2, arch 功能实现、系统设计、测试套件
质量层 qa1, qa2 独立验证、发布门禁
运维层 ops, shipper 平台测试、构建、发布执行
增长层 growth, pmm, pmm2 数据分析、市场定位、公开内容

关键词是边界eng2 不能关闭 issue。qa1 不写代码。pmm 永远不碰应用源码。Super 调度工作但不参与实现。这些边界之所以存在,是因为没有边界的话,agent 会跑偏。它们会"好心"去重构不需要重构的代码,或者关闭未经验证的 issue,或者做出超出它们能力范围的架构决策。

每个 CLAUDE.md 都以身份描述段落和边界部分开头。下面是 eng2 的简化版本:

## Identity
Engineer for Beadbox. You implement features, fix bugs, and write tests.
You own implementation quality: the code you write is correct, tested,
and matches the spec.

## Boundary with QA
QA validates your work independently. You provide QA with executable
verification steps. If your DONE comment doesn't let QA verify without
reading source code, it's incomplete.

这个模式可以扩展。当我只有 3 个 agent 时,它们可以共用一个简单的 prompt。到了 13 个,明确的角色和协议是协调与混乱之间的分界线。

协调层

三个工具把整个团队凝聚在一起。

beads 是一个开源的、Git 原生的 issue 追踪器,专为这种工作流设计。每个任务是一个 "bead",带有状态、优先级、依赖关系和评论线程。agent 通过名为 bd 的 CLI 读写同一个本地数据库。

bd update bb-viet --claim --actor eng2   # eng2 认领一个 bug
bd show bb-viet                           # 查看完整规格和评论
bd comments add bb-viet --author eng2 "PLAN: ..."  # eng2 发布实施计划

gn / gp / ga 是 tmux 消息工具。gn 向另一个 agent 的面板发送消息。gp 查看另一个 agent 的最近输出(不会打断对方)。ga 排队发送一条非紧急消息。

gn -c -w eng2 "[from super] You have work: bb-viet. P2."  # 派发任务
gp eng2 -n 40                                               # 查看进度
ga -w super "[from eng2] bb-viet complete. Pushed abc123."  # 汇报完成

CLAUDE.md 协议定义了升级路径、通信格式和完成标准。每个 agent 都知道:认领 bead、编码前发布计划、推送前跑测试、附带验证步骤标记完成、标记等待 QA、向 super 汇报。

Super 每 5-10 分钟执行一次巡检循环:查看每个活跃 agent 的输出、检查 bead 状态、确认流水线没有停滞。就像生产环境的值班轮换,只不过服务对象是 AI agent,"事故"是"eng2 已经安静了 20 分钟,有点可疑"。

真实的一天

下面是 2026 年 2 月下旬某个周三实际发生的事情。

上午 9:14 - 一位名为 ericinfins 的 GitHub 用户提交了 Issue #2:他们无法将 Beadbox 连接到远程 Dolt 服务器。应用只支持本地连接。Owner 看到后标记给 super

上午 9:30 - Super 分配任务。Arch 设计连接认证流程(TLS 开关、用户名/密码字段、环境变量传递)。PM 编写带有验收标准的规格。Eng 接手开始实现。

同一时间,并行进行:

PM 提交了两个在发布测试中发现的 bug。一个是外观问题:header 标签在最终构建中显示 "v0.10.0-rc.7" 而不是 "v0.10.0"。另一个是平台相关的:截图自动化工具在 ARM64 Mac 上返回空白条带,因为 Apple Silicon 通过 Metal 合成渲染 Tauri 的 WebView,底层缓冲区为空。

Ops 定位了截图 bug 的根本原因。修复方案很优雅:截图后检查图片高度是否异常小(对于应该是 800px 高的窗口,小于 50px),如果是则回退到基于坐标的屏幕截图。

Growth 拉取 PostHog 数据并进行 IP 关联分析。结论是:Reddit 广告产生了 96 次点击,但没有任何可归因的留存用户。GitHub README 流量的转化率是 15.8%。你正在读的这篇文章就是因为这个分析结果而写的。

Eng1arch 完成 Activity Dashboard 设计后解除阻塞,开始构建跨过滤器状态管理和工具函数。687 个测试通过。

QA1 验证 header 标签修复:启动测试服务器,使用浏览器自动化验证标签渲染正确,确认 665 个单元测试通过,标记 PASS。

下午 2:45 - Shipper 合并发布候选 PR,推送 v0.10.0 标签,触发升级工作流。CI 为全部 5 个平台构建产物(macOS ARM、macOS Intel、Linux AppImage、Linux .deb、Windows .exe)。Shipper 验证每个产物,更新两个仓库的发布说明,重新部署网站,更新 Homebrew cask。

下午 3:12 - Owner 在 GitHub Issue #2 上回复:

Good news: v0.10.0 just shipped with full Dolt server auth support. Update and you should be unblocked.

早上报告的 bug,下午就修复发布了。与此同时,下一个功能已经在设计中,另一个 bug 正在定位根因,分析数据在进行中,QA 在独立验证另一个修复。

这不是因为 13 个 agent 速度快。而是因为 13 个 agent 在并行工作。

会出什么问题

这是大多数"看我的 AI 配置"文章省略的部分。

高并发下会触发速率限制。 13 个 agent 在同一个 API 账号上运行时,token 消耗非常快。这一天,supereng1eng2 同时触碰到了速率上限。所有人停工。只能等。这就像是办公室里所有人同时要用打印机,只不过打印机按页收费,而且有每分钟页数上限。

QA 会打回工作。 这是设计使然,但它增加了周期。QA 拒绝了一个构建,因为工程师的 "DONE" 评论没有包含验证步骤。修复本身是有效的,但 QA 无法在不看源码的情况下确认。返回给 eng,重写完成评论,再交给 QA,重新验证。本该五分钟的事花了二十分钟。协议确实带来了摩擦,但这种摩擦是承重的。每次我试图跳过 QA,生产环境就出问题。

上下文窗口会填满。 Agent 在一次会话中会积累上下文。Super 有一个协议,在上下文用量达到 65% 时发送"保存工作"指令。如果错过这个窗口,agent 就会忘记它在做什么。

Agent 会卡住。 有时候 agent 会陷入错误循环,反复重试同一个失败的命令。Super 的巡检循环能捕捉到这种情况,但前提是你检查得足够频繁。我曾经因为一个在悄悄失败的 agent 浪费了 30 分钟。

协调开销是真实存在的。 CLAUDE.md 文件、调度协议、巡检循环、bead 评论、完成报告。对于两个 agent 的设置来说,这些都是过度设计。对于 13 个 agent,这是最低可行的结构。大约在 5 个 agent 时会有一个交叉点,非正式的协调方式开始失效,你需要明确的协议,否则就会失去对全局的掌控。

我学到了什么

专业化胜过通用化。 13 个专注的 agent 比 3 个"全栈"agent 表现更好。当 qa1 只做验证不写代码时,它每次都能抓到 eng 遗漏的问题。当 arch 只做设计不做实现时,设计更干净,因为没有为了方便实现而走捷径的诱惑。

独立 QA 是不可妥协的。 QA 有自己的仓库克隆。它测试的是推送后的代码,而不是工作目录。它不信任工程师的自我报告。这听起来很慢。但它在每次发布中都能捕捉到 bug。

你需要可见性,否则团队会偏离方向。 在 5 个以上 agent 的情况下,你无法通过在 tmux 面板间切换然后在脑子里跑 bd list 来跟踪状态。你需要一个仪表盘,展示依赖树、哪个 agent 在做什么、哪些 bead 被阻塞了。这就是我构建 Beadbox 要解决的问题。

递归循环很重要。 Agent 构建 Beadbox。Beadbox 监控 agent。当 agent 在 Beadbox 中产生 bug 时,团队通过同样的 QA 流程捕捉到它。工具在进化,因为使用它最多的团队就是构建它的团队。我知道这要么是天才之举,要么是有史以来最精心设计的 Rube Goldberg 机器。已交付的功能指向前者。我的 token 账单指向后者。

技术栈

如果你想自己尝试,以下是你需要的:

  • beads:开源的 Git 原生 issue 追踪器。这是协调的基础。每个 agent 都对它进行读写。
  • Claude Code:agent 运行时。每个 agent 是一个在 tmux 面板中的 Claude Code 会话,带有自己的 CLAUDE.md 身份文件。
  • tmux + gn/gp/ga:终端复用器,用于并排运行 agent。消息工具让 agent 无需共享内存即可通信。
  • Beadbox:实时可视化仪表盘,展示整个团队的工作状态。这就是你正在阅读的内容。

你不需要一开始就用 13 个 agent。两个工程师 agent 加一个 QA agent,通过 beads 协调,就会改变你对一个开发者能交付多少东西的认知。

接下来做什么

当前 setup 最大的空白是无法一眼回答三个问题:哪些 agent 是活跃的、空闲的还是卡住的?工作在 pipeline 的哪个环节堆积?以及刚刚发生了什么,按我关心的 agent 或 pipeline 阶段过滤?

目前这需要一个巡逻循环和大量 gp 命令。所以我们正在 Beadbox 中直接构建一个协调仪表盘:顶部的 agent 状态条、显示 beads 在哪里堆积的 pipeline 流程图、以及一个交叉过滤的事件流,点击某个 agent 或 pipeline 阶段就能过滤其他所有内容。三个层共享同一个实时数据源。三个层都实时更新。

Activity Dashboard preview

13 个 agent 正在构建它。发布后我会写相关文章。

亲自试试

先用 beads 作为协调层。需要可视化管理时再加上 Beadbox。

Beta 期间免费。无需注册账号。数据保留在本地。

Share