外部工具生态

这是研究性参考文档。记录 2025-2026 年主流 Agentic Factory 工具的架构、对比,以及与 retaintive 现有系统的关系映射。

最后更新:2026-03


生态全景:五层结构

Layer 5  产品化 SaaS          Devin AI($500/月)

Layer 4  开源工厂框架         Gas Town + Beads(本地)
                              ComposioHQ agent-orchestrator

Layer 3  Agentic IDE          Claude Code ← retaintive 在这层
                              Cursor / Cline / Goose / OpenHands

Layer 2  LLM 模型             Claude(Anthropic)/ GPT / Gemini

Layer 1  基础协议             MCP(Model Context Protocol,Anthropic → Linux Foundation)

retaintive 目前在 Layer 3,正在向 Layer 4 演进。


Gas Town + Beads 深度解析

项目基本信息

Gas TownBeads
GitHubsteveyegge/gastownsteveyegge/beads
Stars12.6K19.4K
语言GoGo + TypeScript
最新版本活跃维护v0.62.0(2026-03-16)
许可证开源MIT
作者Steve Yegge(前 Google/Amazon 工程师)同上

运行方式(本地,不是云端)

完全本地运行,不是 SaaS:

你的机器(Mac / Linux 服务器)
├── Mayor(持续运行的 Claude Code 实例,全局上下文)
├── Polecat-1(tmux 窗口 1,独立 Claude Code)
├── Polecat-2(tmux 窗口 2,独立 Claude Code)
├── Polecat-3(tmux 窗口 3,独立 Claude Code)
└── .beads/(Dolt 数据库,任务状态持久化)

「隔夜自动跑」需要机器保持开机(Mac 不睡眠,或部署在 $5/月的 VPS 上)。Mayor 是一个持续运行的进程,机器关机就停了。

所用 LLM

Mayor 和 Polecats 都是 Claude Code 实例(默认使用 Claude Sonnet 或 Opus)。Gas Town 也支持 Codex CLI(OpenAI)作为可选 agent runtime,但 Claude Code 是默认和推荐的。

角色体系:Steve Yegge 的西部小镇比喻

Steve Yegge 用「加油站小镇」(Gas Town)作为系统主题,每个角色都有对应的西部公路小镇概念:

英文角色名中文直译实际意思为什么这么叫
Gas Town加油站小镇整个多 agent 工作台框架补给站,让 agent 加满油继续跑
Mayor市长AI 协调员,持续运行,有全局上下文,负责分配任务管理整个小镇,是最高权威
Polecats臭鼬Worker agent,在不同 worktree 间穿梭执行任务臭鼬会在墙壁和栅栏之间钻洞——Polecats 在 repo 和 worktree 之间穿梭
Rigs钻井平台每个代码 repo 的容器/上下文油井钻台,生产原料的地方
Hooks钩子Git worktree-based 持久化存储,任务状态记录在这里把东西挂起来不让掉
Convoys货运队一批任务的追踪单元(相当于 Sprint)运输队伍,把一批货(任务)从 A 送到 B
Crew Members船员人类工作者(你)船上的人,在关键节点做决策
Formulas配方可重复任务的模板(相当于 Recipes)下次还能用的方法论

Polecat 的深层含义:Polecats(臭鼬)之所以是这个名字,是因为它们不固定在某一个地方,而是在不同的 git worktree 之间穿梭,就像臭鼬在房屋之间钻洞一样。每个 Polecat 都是无状态的 worker,可以拿起任何任务,在对应的 worktree 里做完,然后移动到下一个。

依赖栈类比解释

Gas Town 的依赖栈看起来很重,但每一个都有明确原因:

工具版本要求一句话是什么为什么 Gas Town 需要它
Go1.23+编译型编程语言Gas Town 本体用 Go 写的,但安装后是预编译二进制,你不需要懂 Go
Dolt1.82.4+「Git for databases」:SQL 数据库,支持 branch / merge / diffBeads 的数据库后端。多个 Polecat 并发写任务状态时,像 git merge 一样自动合并冲突,不互相覆盖
Beads0.55.4+任务数据库 CLI(在 Dolt 上运行)存 Polecat 的任务认领状态、依赖关系,Mayor 从这里知道「谁在做什么」
tmux3.0+终端复用器(一个 terminal 里开多个会话)每个 Polecat 是一个 Claude Code 进程,Gas Town 用 tmux 管理 N 个进程同时跑,不需要开 N 个 terminal 窗口
Claude Code CLI最新Agentic IDEMayor 和 Polecats 的大脑,实际执行 AI 推理和代码操作的部分
sqlite3轻量关系数据库辅助存储,Gas Town 内部用的

Dolt 类比:想象你的 SQL 数据库有 git branchgit mergegit diff 命令。Dolt 就是这个。当 Polecat-1 和 Polecat-2 同时更新同一条任务记录时,Dolt 在字段级别做 merge,不是简单覆盖谁最后写的那个值。

tmux 类比:你在一个 terminal 里,但看起来像有 5 个 terminal 在并行跑。每个 Polecat 占一个 tmux 窗口,Mayor 可以在不同窗口之间传消息、观察状态。关掉 laptop 盖子 → tmux session 里的 Polecats 继续跑(如果在远端服务器上)。

Beads 技术架构

Beads 是独立于 Gas Town 的工具,Gas Town 依赖它,但你也可以单独用 Beads:

.beads/              ← 项目本地目录,可以提交进 git
├── (Dolt 数据库)    ← 当前后端(v0.51.0 起,替换了之前的 SQLite)
└── config.yaml

CLI 命令:
  bd create          ← 创建任务
  bd ready           ← 列出依赖已满足、可以开始的任务
  bd update --claim  ← 原子认领(防止两个 Polecat 抢同一个任务)
  bd dep add         ← 设置任务依赖
  bd show            ← 查看当前状态
  bd compact         ← 压缩 DB(定期维护,防止膨胀)

MCP Server:可以被 Claude Code 直接调用(agent 可以读写任务状态)

并发写入机制:多个 Polecat 同时写同一个 task 记录时,Beads 使用 Dolt 的 cell-level merge 自动合并(按字段级别合并,不互相覆盖)。这是 Beads 选择 Dolt 作为后端的核心原因。

已知问题

  • BD_BRANCH 环境变量与 gt hook / bd show 冲突(issue #1921)
  • 版本升级需要 Gas Town 同步跟进(历史上每次大版本都有兼容性 PR)
  • DB 会膨胀,需定期 bd compact

Mayor vs Meegle 适配问题(⚠️ 重要说明)

这里有一个很容易混淆的误区:Mayor 和 Meegle 不是天生适配的。

Mayor 的任务来源

Mayor 的设计假设:任务从以下地方来

Mayor 能原生读的任务来源:
  ✅ Beads 队列(bd create 写进去的任务)
  ✅ GitHub Issues(通过 gh CLI 读取)
  ✅ GitHub Projects / Milestones
  ❌ Meegle(没有原生支持)

Mayor 不会原生读取 Meegle 的工单。如果想让 Mayor 执行 Meegle 里的任务,需要自己写一个 bridge 脚本(详见 Factory 演进路线图 的 Meegle → Beads Bridge 设计)。

为什么这个容易误解

直觉上,Meegle 是任务管理系统,Mayor 是任务调度 AI,「它们应该能配合」。但:

  • Meegle 是飞书生态的产品,有自己的 API 体系
  • Gas Town 是独立开源工具,设计时没有考虑飞书集成
  • 打通需要维护一个定期 polling 的脚本

正确的分工理解

Meegle = 你和团队看的产品任务板
           Phase 0-2 在这里:讨论需求、拆分设计、记录决策

Beads  = Agent 执行时的内存
           Phase 3 在这里:agent 从这里认领任务、更新进度、记录依赖

之间的 bridge = 你(或者你写的脚本)把 Meegle 的 Phase 2 产出 → 写进 Beads

Beads vs Meegle 层级区别

这两个工具在表面上都是「任务管理」,但是给不同对象用的:

维度BeadsMeegle
主要用户Agent(机器用)你和团队(人用)
时间层级执行时(Phase 3)设计时(Phase 0-2)
任务粒度技术子任务(「更新 contacts 表索引」)业务功能(「Phase 2: Contacts 核心架构」)
状态机pending → claimed → done(机器状态)Todo → In Progress → Review → Done(人类流程)
防碰撞机制--claim 原子认领,Dolt cell-level merge手动分配,没有并发保护
依赖关系bd dep add,agent 自动等依赖完成靠人类口头沟通
关系Meegle 的产出物写进 BeadsBeads 的完成状态同步回 Meegle

比喻:Meegle 是项目管理白板,Beads 是车间里的工单架。白板给 PM 和工程师开会用,工单架给机器人取件用。它们解决不同层级的问题,缺一不可。


Gas Town 类比:它不是 k8s

Gas Town 经常被类比为「代码版 Kubernetes」,但两者的核心差异值得深入理解:

维度Kubernetes(k8s)Gas Town
调度对象无状态 container(有什么 CPU/内存就往哪里塞)有上下文的 AI agent(需要懂任务语义才能分配)
调度策略资源利用率最大化(bin packing)哪个 Polecat 懂这个代码 → 分配给它
通信方式Service → Pod(HTTP/TCP 协议)Mayor → Polecat(自然语言,通过 tmux 消息)
失败处理重启 Pod(无状态恢复)Park & Notify(escalate 给人类,状态有意义)
「工人」的知识Container 不懂业务,只跑指令Polecat 是 Claude 实例,理解代码语义、历史决策、业务背景

更准确的类比:Gas Town 更像一个 Tech Lead + 工程师团队,而不是容器调度器。

  • Mayor = Tech Lead(知道整体 roadmap,知道每个人擅长什么,做 trade-off 决策)
  • Polecats = 工程师团队(接任务、写代码、遇到问题 escalate 给 Tech Lead)
  • Beads = Sprint Board(大家共享的任务状态)
  • Rigs = 各个服务的代码库

k8s 解决的是「把无状态容器往有资源的机器上塞」;Gas Town 解决的是「把需要理解的任务交给能理解的 agent,并协调它们不互相踩踏」。


ComposioHQ agent-orchestrator

信息
GitHubComposioHQ/agent-orchestrator
Stars4.1K
语言TypeScript
定位批量一次性执行:spec → parallel worktrees → 批量 PR

工作方式

ao init --auto(自动检测 tech stack)
    ↓ 生成 agentRules(base.md + typescript.md + react.md...)
    ↓ 读 spec/issue 文件
    ↓ 拆任务 → 并行 git worktrees
    ↓ CI 失败 → 自动路由回对应 agent 修
    ↓ merge conflict → 自动处理
    ↓ 批量 PR

已知问题(用户反馈)

  • tmux session 死了界面假死(假装还在跑)
  • 消息发送了但 agent 没收到(竞争条件)
  • health check 显示绿色但检查的是旧路径

Gas Town vs ComposioHQ

维度Gas Town + BeadsComposioHQ
模式长期常驻工厂,任务持续涌入批量一次性执行
上手难度❌ 高(Dolt + Go + tmux 全套)✅ 低(npx ao init --auto
成熟度✅ Beads 19K stars,持续迭代⚠️ 较早期,有竞争条件 bug
任务持久性✅ Polecats 有持久 identity❌ 无状态,任务跑完就消失
TypeScript 支持✅ 有 typescript.md 模板
Claude Code 集成✅ 原生(Beads 有 Claude Code hooks)✅ 官方支持

Gas Town 替换 vs 叠加分析

Gas Town 引入时,不是「替换你现有的一切」,而是精确叠加在 Phase 3 执行层。弄清楚哪些被替换、哪些被增强、哪些完全不动,是引入前的关键判断。

现有配置Gas Town 之后影响
CLAUDE.md(规则文件)✅ 保留,Mayor 也会读Mayor 理解执行策略
execution-policy.md✅ 保留,Mayor 也会读Mayor 理解 Park & Notify 条件
.claude/skills/(23 个)✅ 保留,Polecats 也能调用Polecats 继承所有专业能力
Meegle MCP(7 个 tools)✅ 保留,Phase 0-2 不变业务任务管理层完全不动
git worktree(手动管理)✅ → ⚡ 自动化Gas Town 自动创建/清理 worktree
你手动分配任务✅ → ⚡ Mayor 接管你退到 review 角色
working-memory/(session 记忆)✅ → ⚡ Beads 替代Beads 的任务状态更持久、更结构化
Phase 0-2(人机协作设计)✅ 完全不变Gas Town 只参与 Phase 3
Task Spec 必须有验收标准✅ 更严格的要求Mayor 拒绝没有验收标准的任务

结论:Phase 0-2(你做的设计和决策部分)完全不动。Gas Town 只改变 Phase 3(执行层)的自动化程度,从「你手动启动 + 分配」变成「Mayor 自动调度」。


与 retaintive 现有系统的关系映射

retaintive 现有概念Gas Town 对应概念说明
Orchestrator + N WorkersMayor + Polecats同一个模式,Gas Town 是具体实现
git worktree × N(手动)HooksGas Town 自动管理 worktree
Park & NotifyEscalationMayor 上报给人类的机制
Circuit Breakermax_turns 限制Gas Town 有类似的终止条件
working-memory/Beads .beads/Beads 是更强的 working-memory
Meegle MCP 触发❌ 无原生支持需要自己写 Meegle → Beads bridge
execution-policy.mdMayor 读取的规则Mayor 也需要读 execution-policy
Task Spec(验收标准)Beads task + bd dep add等价,但 Beads 有依赖图

Gas Town 不是替代 retaintive 现有系统,而是 Phase 3 执行层的升级。Phase 0-2(人做的部分)完全不变。


引入时机:什么时候该考虑 Gas Town

现在不适合的原因

  • 依赖栈太重(Dolt + Go + tmux + Beads = 半天安装 + 1-2 周稳定期)
  • Meegle 没有原生集成,要自己写 bridge
  • 并行任务量不够大(< 5 个/天),用 Claude Code 原生 worktree 就够
  • Beads 升级频率高(v0.62.0 在几天前发布),Gas Town 跟进成本持续存在

适合引入的触发条件(满足任意 2 个):

  • 每周并行任务 > 10 个
  • 经常出现「两个 agent 改了同一个文件」的冲突
  • 你需要任务依赖图(「GAP 7 必须等 GAP 3 完成」)
  • 你有一台专用的 dev 服务器可以 24/7 运行 Mayor
  • Meegle → Beads bridge 已经写好并稳定

⚠️「隔夜自动跑」的前提条件

Gas Town 最吸引人的能力是「Mayor 在你睡觉时自动分配和执行任务」。但这个能力有一个前提

Mayor 能自动执行任务 ⟺ 任务有明确的验收标准

没有验收标准的任务 → Mayor 不知道什么叫「做完了」
                   → 要么跑偏,要么无限循环
                   → 浪费 Claude API tokens,产出垃圾

实际含义

  • Phase 0(大任务探索)和 Phase 1(架构讨论)产出的是模糊想法 → 绝不能直接进 Beads 让 Mayor 跑
  • 只有 Phase 2 完成后(Task Spec 有:目标 + 受影响文件 + 验收测试 + 约束)的子任务 → 才能安全地让 Mayor 自动执行
  • 「夜里自动跑」= Phase 2 白天完成 → 睡前 bd create 写进 Beads → Mayor 隔夜执行 → 早上看 PR

这个约束与 retaintive 的 Agentic Software Factory 操作手册 完全一致:Phase 3 是 Execution,前提是 Phase 2 已产出清晰的 Task Spec。

可以现在就引入(低成本)

brew install beads   # 单独安装 Beads,不需要 Gas Town 全套
bd init              # 初始化项目
bd create            # 创建任务
bd update --claim    # Agent 认领任务

Beads 单独用 = 有任务依赖图 + 防碰撞,但不需要 Dolt/Go/tmux。


其他工具速查

工具类型与 retaintive 的关系
Goose(Block)Agentic IDE,model-agnostic,本地运行Claude Code 替代品,已有 Claude Code 就不需要
ClineVS Code 插件版 Claude CodeClaude Code 替代品,不引入
OpenHands云端 Agentic IDEClaude Code 替代品,不引入
Devin AI商业化 issue→PR SaaS($500/月)太贵,但 Interactive Planning 流程值得参考
LangChain open-swe云端 orchestrator,内置 sandbox备选方案,云端跑

Goose 的深一层解释:Block 开源的 model-agnostic Agentic IDE,支持切换 Claude / GPT / 其他 LLM。对已深度使用 Claude Code 的团队没有额外价值——Goose 的优势在于 model 灵活性,而 retaintive 不需要这个灵活性。


Sources