第 16 章 · 实战一:搭建个人开发舰队
本章目标:从零搭建并跑通第一条完整的 FirstMate 舰队链路——安装前置、启动第一副手、完成一次 scout 调研任务和一次 ship 交付任务,亲手体验「只对一个 agent 说话,却带着一支船员交付」的工作方式。
16.1 实战蓝图与验收标准
本章是一条端到端的最小闭环:你(captain)只与 firstmate 对话,由它派生船员(crewmate)在隔离的 git worktree 中干活,最终把 PR 或调研报告交回给你。
你下达请求
│
▼
firstmate(唯一联络人)
│ 检查工具链 → 克隆项目到 projects/ → 派生 crewmate
▼
crewmate(tmux 窗口中的自主 agent)
│ 在 treehouse worktree 中工作
├── scout:产出 data/<id>/report.md 调研报告
└── ship :推送分支 → 开 PR → 等待你授权合并完成本章后,你应该能够勾掉这份验收清单:
- [ ] firstmate 在受支持的 harness 中加载了
AGENTS.md并以 captain 称呼你; - [ ] 一个 scout 任务产出了落盘的调研报告;
- [ ] 一个 ship 任务产出了真实 PR;
- [ ] 合并只在你明确说出口之后发生。
16.2 安装前置:四件套检查
按官方 Quick Start,运行 firstmate 需要三类前置。逐项在终端确认:
# 1) Git 与 GitHub CLI,并完成 GitHub 认证
git --version
gh --version
gh auth status # 未认证则执行 gh auth login 按向导走完
# 2) 会话后端:tmux 是参考默认后端
tmux -V # 报错则安装:brew install tmux 或 sudo apt install tmux
# 3) 任一 co-primary harness(三选一即可)
claude --version # Claude Code
pi --version # Pi
grok --version # Grok CLI三点官方说明需要记住:
- co-primary 三选一:Claude Code、Grok、Pi 是并列推荐的 primary harness;Codex 与 OpenCode 也已验证可用,但监督机制各有更多 harness 相关的取舍。
--trust只需每克隆一次:Grok 需要--trust才会加载项目 hooks 与 turn-end guard(也可以在会话内用/hooks-trust授权);Pi 首次启动时批准项目信任提示,让.pi/extensions/*.ts自动加载。- 缺什么先问再装:firstmate 启动后会自检工具链,缺工具时会征得你的同意才安装——它不会自作主张动你的机器。
16.3 克隆仓库并启航
FirstMate 没有 App 可装:克隆下来的仓库本身就是 distro。进入目录后启动任一 co-primary harness,AGENTS.md 就会接管:
gh auth login # 若上一步还没做
git clone https://github.com/kunchenguid/firstmate
cd firstmate
claude # 或 pi,或 grok --trust启动后的第一条消息建议就用官方示例的问候语,顺便验证身份是否加载成功:
> ahoy! are you the first mate?你应该看到什么:回复中出现对 captain 的称呼(这是 AGENTS.md 的强制要求),语气带一点航海调味但技术内容清晰。如果它自称别的角色或没有称呼 captain,说明项目指令没有被加载——最常见原因是你在错误的目录启动了 harness。
16.4 准备一个练手项目
ship/scout 任务都需要一个真实的 GitHub 项目作为靶子。准备一个你自己拥有的小仓库(或 fork 一个开源小工具),要求很低:
- 至少有一个可复现的小 bug 或一个明确的待办 issue;
- 是你拥有的仓库(这样 PR 流程可以完整走通)。
不需要提前克隆到本地——firstmate 会把项目克隆到自己的 projects/ 目录下并保持对该目录只读,真正的修改全部发生在船员的隔离 worktree 里。这条边界来自硬规则 1(Never write to a project):firstmate 自己不写你的项目,改动由船员完成。
16.5 第一个 scout 任务:只读调研
scout 任务不产生任何代码变更、绝不 push,产出是一份落盘的独立调研报告。用自然语言下达:
> 派一个 scout 去调研 myname/tiny-api 这个仓库:
> 列出目录结构、入口文件、测试组织方式,
> 并指出哪里的错误处理最薄弱。只要报告,不要改任何东西。你应该看到什么:
- firstmate 复述任务要点并派生一个船员(新 tmux 窗口出现);
- 船员完成后,报告落在
data/<task-id>/report.md,同时给出一份 decision inventory(供你决策的事项清单); - firstmate 向你转述结论摘要,而不是让你自己去读原始输出。
你可以直接验证产物确实落盘:
ls data/*/report.md | tail -3 # 最近的任务报告16.6 第一个 ship 任务:从 issue 到 PR
现在下达第一个 ship 任务。继续用官方 Quick Start 的对话风格:
> look at my github project myname/tiny-api,
> then fix the flaky login test.firstmate 的动作序列与官方描述一致:检查工具链(缺工具先征求同意)→ 把项目克隆到 projects/ → 在活跃后端中派生一个隔离船员 → 船员在干净的 treehouse worktree 中修复 → 监督至完成。几分钟后你会收到类似这样的汇报:
PR ready for review, captain: https://github.com/you/tiny-api/pull/42
(fix flaky login test - risk: low - CI green)注意汇报的结构:链接 + 一句话变更说明 + risk 标注 + CI 状态。这就是第 11 章 watcher 监督机制的出口形态——过程不用你盯,结果以决策友好的格式送达。
16.7 合并与复盘:体验 hard rule 2 与 /bearings
PR 到手后,先亲自 review,再决定是否合并:
> alright, merge it.只有你说出这句明确授权,firstmate 才会让合并发生——这是硬规则 2(Never merge a PR without the captain's explicit word)。反过来试一下也很有教育意义:不置可否地问「这个 PR 怎么样?」,firstmate 只会给分析意见而不会动手合并。
随后用 /bearings 做一次舰队状态盘点:
> /bearings它会基于本地舰队状态生成一份四段式聊天摘要;加上参数还有两个变体:/bearings file 会同时把今天的日期版报告写入 data/,/bearings include PRs 则附加实时 PR 信息。三个变体可以组合使用。
16.8 收尾:teardown 与常见故障排查
任务结束后 firstmate 会执行 teardown 清理船员会话与 worktree。teardown 有安全闸:未落地(unlanded)的工作绝不会被拆除——有未提交改动的 worktree 会拒绝清理,除非你明确授权丢弃。所以放心让它自动收尾即可。
新手最常见的三类故障:
| 现象 | 原因 | 处理 |
|---|---|---|
| 项目 hooks/guard 没加载 | Grok 未加 --trust,或 Pi 首次信任提示被拒 | 在该克隆里重新授权 |
| 船员窗口没出现 | tmux 未安装或版本过旧 | 安装 tmux 后重试 |
| 无法感知 GitHub 状态 | gh 未认证或 token 过期 | 重跑 gh auth login |
16.9 本章小结
- FirstMate 的最小闭环 = 你下达自然语言请求 → firstmate 路由 → 船员在隔离 worktree 干活 → PR/报告回传 → 你做决策;
- scout 任务零副作用:只出
data/<id>/report.md报告,绝不 push;ship 任务才触碰代码; - 合并权在你手里:没有 captain 的明确指令就没有 merge(hard rule 2);
/bearings是低成本的状态仪表盘,file/include PRs参数按需叠加;- teardown 自带 unlanded-work 保护,正常收尾无需人工干预。
🧪 随堂测验
点击你认为正确的选项。答错时会展示正确答案与原因解析。
1. 首次启动 firstmate 时,下列哪组是官方并列推荐(co-primary)的 primary harness?
2. 关于 scout 任务,下列说法正确的是?
3. firstmate 回报「PR ready for review, captain: ...(risk: low - CI green)」之后,合并何时会发生?
4. teardown 时发现某个 worktree 还有未提交(unlanded)的改动,firstmate 会怎么做?
🛠️ 动手实践
- 完成 16.2–16.3 的环境搭建,在你的练手仓库所在目录之外启动 firstmate,并用「are you the first mate?」验证 captain 称呼与航海语气出现;若失败,按 16.8 的排查表定位原因。
- 给同一个练手仓库先后下达一个 scout 任务和一个 ship 任务,分别记录两次任务的 tmux 窗口数量变化,并在
data/下找到 scout 报告文件的完整路径。 - 在收到 ship 任务 PR 后,故意先不授权合并,而是追问「这个 PR 的风险点在哪?」,观察 firstmate 是否只给分析不动手;然后再用
/bearings file include PRs生成一份带 PR 信息的日报并核对data/status-report-*.md文件确实生成。