> For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.

# Factory 演进路线图

> 这是 retaintive 自己的工厂演进计划。三个阶段，按需推进——每个阶段都能独立交付价值，不需要等下一阶段才能跑通。
>
> 最后更新：2026-03

***

## 三阶段总览

```
Phase 现在（已有）          Phase 中期（1-2 个月）      Phase 成熟期（触发条件满足后）
────────────────────        ──────────────────────        ──────────────────────────────
Claude Code native          + Beads 单独引入              + Gas Town 全套
git worktree 手动管理        共享任务数据库                 Mayor 自动调度
Meegle MCP 已有              依赖图 + 防碰撞               Meegle → Beads bridge
你是调度员                   你还是调度员                   AI 是调度员
```

**核心原则**：不要为了"工厂"而工厂。每一步都以"这个阶段是否明显减少你的手动操作"为标准。

***

## Phase 现在：Claude Code native（已有，能用）

### 你已经有的

```
基础设施：
  CLAUDE.md（每个 repo）              ← agent 读取规则的入口
  .claude/rules/execution-policy.md  ← 预写决策，agent 遇到分叉不需要问你
  ~/.claude/skills/（23 个 skills）   ← 专业化操作能力
  Meegle MCP（7 个 tools）            ← 任务管理集成

工作流：
  Phase 0-2：你 + AI 交互式设计，产出 Task Spec
  Phase 3：手动启动 Claude Code → git worktree × N → 并行 PR
```

> 注意：这里的「Phase 0-2 / Phase 3」指**任务工作流阶段**（见 [操作手册](/ai/factory/agentic-software-factory-playbook.md)）。本文「Phase 现在 / 中期 / 成熟期」指 factory 工具演进阶段——是两套不同的命名体系，不要混淆。

### 当前瓶颈

| 问题                 | 现象                    |
| ------------------ | --------------------- |
| 每次 Phase 3 需要你手动启动 | 睡前还要记得"run agent"     |
| 多个 agent 靠你口头分配任务  | 容易踩到同一个文件             |
| 没有任务依赖图            | "GAP 7 要等 GAP 3" 靠口头说 |
| Session 结束记忆消失     | 下次 agent 要重建上下文       |

### 现在就能做的增量优化（0 额外工具）

- 补全 `.claude/working-memory/_template.md`（防 context 丢失）
- 补全 `.claude/templates/plans/`（impl.md 模板）
- 确保每次 Phase 3 前 Task Spec 里有明确的"受影响文件边界"（防碰撞）

***

## Phase 中期：引入 Beads（单独用，不装 Gas Town）

### 触发条件（满足任意一个就可以考虑）

- 一周内出现过 2 次"两个 agent 改了同一文件"
- 开始并行 > 3 个任务，手动分配开始出错
- 需要表达任务依赖："GAP 7 必须等 GAP 3 完成才能开始"

### 安装（5 分钟）

```bash
brew install beads
# 或
npm install -g @beads/bd

# 在 repo 根目录初始化
cd callytics-infrastructure
bd init
# 如果不想把 .beads/ 提交进 git：
bd init --stealth
```

### 怎么用

**每次 Phase 2 拆完子任务后，用 Beads 管理执行层**：

```bash
# Phase 2 产出子任务后，写进 Beads
bd create "实现 contacts 表 phone 索引" --priority high
bd create "更新 AI 分析 prompt" --priority normal
bd dep add <task-2-id> --depends-on <task-1-id>  # task-2 依赖 task-1

# Agent 启动时认领任务（防止两个 agent 做同一件事）
bd update --claim <task-id>

# 查看当前状态
bd show

# 查看哪些任务现在可以开始（依赖已满足）
bd ready
```

**和 Meegle 的分工**：

```
Meegle = 业务/产品层（Phase 0-2，你看的）
             "这个 sprint 做 Feature X"
Beads  = 执行层（Phase 3，agent 看的）
             "Feature X 的 task-1 Agent A 正在做，task-2 等待中"
```

### 这个阶段不需要装

- ❌ Dolt（Beads 单独用有内置的轻量后端）
- ❌ Go（brew/npm 安装的 Beads 是预编译二进制）
- ❌ tmux（不装 Gas Town 就不需要）
- ❌ Gas Town 本体

***

## Phase 成熟期：Gas Town 全套（Mayor 自动调度）

> ⚠️ 前提条件：Phase 中期已稳定运行 4+ 周，Beads 已融入日常工作流。

### 触发条件（**必须全部满足**）

- [ ] 每周并行任务量稳定 > 10 个
- [ ] 有一台可以 24/7 运行的机器（Mac 不睡眠，或专用服务器）
- [ ] Phase 1 的 Task Spec 产出流程已标准化（每个 spec 都有清晰验收标准）
- [ ] Meegle → Beads bridge 已写好并经过测试

如果上面有任何一条没满足，**不要进入这个阶段**。Mayor 的价值来自于"任务持续涌入"，没有量就没有杠杆。

### Gas Town 带来什么

| 能力           | 现在（手动）                      | Gas Town 之后（自动）                   |
| ------------ | --------------------------- | --------------------------------- |
| 任务分配         | 你手动启动每个 Claude Code session | Mayor 看到 Beads 队列有任务就自动分配         |
| Polecat 管理   | 不存在                         | Mayor 知道哪些 Polecat 空闲，自动调度        |
| 跨 session 记忆 | 每次重建上下文                     | Polecats 有持久 identity，记得上次做了什么    |
| 监控           | 看 terminal 输出               | `gt feed` 实时流 + browser dashboard |

### 安装步骤（届时参考）

```bash
# 1. 安装依赖
brew install go dolt
brew install beads  # 如果 Phase 中期已装则跳过

# 2. 安装 Gas Town
go install github.com/steveyegge/gastown/cmd/gt@latest

# 3. 初始化 workspace
mkdir ~/gt && cd ~/gt
gt init

# 4. 添加 repo（Rig）
gt rig add callytics-infrastructure ~/workspace/callytics-infrastructure
gt rig add callytics-dashboard ~/workspace/callytics-dashboard

# 5. 启动 Mayor
gt mayor attach
# 然后告诉 Mayor："你的任务来自 Beads 队列，请查看并分配"
```

### Meegle → Beads Bridge 设计草图

Gas Town 不原生读 Meegle，需要一个 bridge 脚本（届时实现，现在是设计草图）：

```
逻辑流程：

1. 从 Meegle 拉取 Phase 2 已完成的子任务
   → 使用 Meegle MCP: get_node_detail(sprint_node_id)
   → 过滤条件：task.hasAcceptanceCriteria === true

2. 写入 Beads
   → bd create "<task_title>" --metadata "meegle_id=<id>"
   → 如有依赖：bd dep add <task_id> --depends-on <dep_id>

3. 完成同步（Beads 完成 → 关闭 Meegle 工单）
   → 查询 Beads status=done 的任务
   → 调用 Meegle MCP: finish_node(meegle_id)

关键约束：
  只同步 Phase 2 已完成（有验收标准）的子任务
  Phase 0-1 的模糊任务绝不进 Beads
  Mayor 不会自动执行没有验收标准的任务
```

***

## 阶段对比一览

|           | Phase 现在 | Phase 中期             | Phase 成熟期                         |
| --------- | -------- | -------------------- | --------------------------------- |
| **谁是调度员** | 你        | 你                    | Mayor（AI）                         |
| **任务防碰撞** | 靠口头分配    | Beads `--claim` 原子认领 | Beads + Mayor 自动分配                |
| **任务依赖**  | 口头说      | `bd dep add` 依赖图     | 依赖图 + Mayor 自动排队                  |
| **隔夜自动跑** | 你要手动启动   | 你要手动启动               | Mayor 自动触发                        |
| **工具复杂度** | 低        | 低（brew install 1 行）  | 高（Dolt + Go + tmux 全套）            |
| **月成本增加** | $0       | $0                   | \~$5/月（VPS）+ Claude API token × N |
| **需要的前提** | 已有       | —                    | 任务量 > 10/周 + 24/7 机器              |

***

## 不演进也是合理的选择

Gas Town 成熟期不是"终点"，是"可选项"。如果：

- 你的任务量一直维持在 3-5 个/周 → Phase 现在已经够用
- Phase 中期（Beads）已经解决了碰撞和依赖问题 → 停在这里完全合理
- Gas Town 的运维成本（版本耦合、tmux 不稳定）超过了收益 → 不引入

**正确的问题不是"我们应该用 Gas Town 吗"，而是"当前阶段的瓶颈是什么，最小成本的解法是什么"。**

***

## 参考资料

- [Gas Town + Beads 技术详解](/ai/factory/tools-ecosystem.md) — 本目录下的知识库文档
- [Agentic Software Factory — 完整参考](/ai/factory/agentic-software-factory.md) — 工厂设计原则
- [Agentic Software Factory — 操作手册](/ai/factory/agentic-software-factory-playbook.md) — Phase 0-3 工作流
