Skip to content

第 2 章 · 环境搭建与首次启航

本章目标:从零准备运行 FirstMate 所需的全部工具链,完成克隆与首次启动,并跑通第一条「下达请求 → 船员干活 → PR 回传」的最小闭环。

2.1 平台与前置要求

FirstMate 是一个纯 Shell 组织的 agent distro(智能体发行版),官方支持的平台是:

text
macOS / Linux(不支持原生 Windows,可在 WSL2 中尝试但无官方保证)

启动前需要备齐三类工具,缺一不可:

类别工具用途
认证GitHub CLI (gh)克隆仓库、创建 PR、读取 CI 状态
版本控制git项目克隆、worktree 隔离
会话后端tmux参考后端,承载每个船员的可见会话
主 harnessClaude Code / Grok / Pi 等运行第一副手本人的智能体运行时

其中 tmux 是参考后端(reference backend):文档中的所有监督行为都以它为基准验证过;herdr、zellij、Orca、cmux 属于实验性后端(第 7 章详述)。初学请先用 tmux。

2.2 选择主 harness

主 harness(primary harness)就是承载第一副手会话的那个终端编码智能体。FirstMate 官方验证过的 harness 有:

text
Claude Code   grok   pi   pi-signed   Codex   OpenCode   Cursor Agent CLI

其中 Claude Code、Grok、Pi 是平级的三个联合主推(co-primary),任选其一即可,差别只在监督接入机制:

Harness监督接入方式
Claude Codetracked Stop hook,tokenless 地重新武装 watcher 并在需要时唤醒
Grokbackground-notify 唤醒循环
Pitracked primary watcher extension

三者都有经过验证的 turn-end guard 路径(第 11 章详解)。Codex 和 OpenCode 也受支持,但分别依赖有界前台检查点与 TUI 插件,监督取舍更多。Cursor Agent CLI 使用项目级 .cursor/hooks.json 的 stop hook,形态上最接近 Claude Code。

选型建议:跟着你的订阅走——手头有哪家的订阅就用哪家,FirstMate 对三者一视同仁。

2.3 安装与克隆

先完成 GitHub CLI 认证,再克隆发行版本体:

bash
# 1. 登录 GitHub(按提示走浏览器授权流程)
gh auth login

# 2. 确认认证状态
gh auth status

# 3. 克隆 firstmate 发行版并进入目录
git clone https://github.com/kunchenguid/firstmate
cd firstmate

没有 app 要安装、没有全局命令要注册——克隆下来的仓库本身就是发行版AGENTS.md 是运营契约,.agents/skills/ 是内置技能,bin/ 是脚本工具带。

2.4 首次启动

firstmate 目录内直接启动你选定的 harness,AGENTS.md 会自动接管成为第一副手的岗位职责:

bash
# Claude Code
claude

# Grok(--trust 每个克隆只需一次,让项目 hooks 与 turn-end guard 加载)
grok --trust

# Pi(首次启动批准一次项目信任提示,让 .pi/extensions/*.ts 自动加载)
pi
# 或使用签名包装器
FM_PI_HARNESS=pi-signed pi-signed

Pi 还提供 /calm 开关:隐藏部分转写界面噪音(包括被规范分类的 Firstmate 操作行),活动运行期间用 Calm 动画小船替代普通输出,且不改变任何模型上下文与会话数据;再执行一次 /calm 即可恢复普通渲染。

2.5 启动时发生了什么:会话启动摘要

每次会话开始,第一副手都会运行一次 bin/fm-session-start.sh,产出一份启动摘要(digest)。它的固定顺序是:

text
1. Lock              先获取本 home 的会话锁,锁失败则全程只读
2. Bootstrap         只读探测工具/版本问题;安装必须经你当场同意
3. Wake queue        呈现持久唤醒队列(上次遗留的工作通知)
4. Supervision       输出与你当前 harness 匹配的监督操作指令块
5. Fleet-state       快速盘点每个任务的存活状态(只查"在不在",不深读)
6. Network checks    GitHub 认证、secondmate 存活等网络检查的并发结果
7. Context digest    projects/secondmates/captain/learnings 各档案全文

两个对新手最重要的规则:

  • Bootstrap 只检测不安装:发现缺工具时会列出清单征求你的同意,你说可以它才装;
  • 锁被拒即只读:如果另一个活跃会话持有锁,本次会话不会派生、合并或修改任何舰队状态,只报告诊断信息。

摘要里出现 ABSENT 标记是正常的——例如 data/captain.md 不存在表示「使用内置默认偏好」,而不是出错。

2.6 第一次对话:跑通最小闭环

启动完成后,直接用自然语言下达任务。官方示例:

text
> ahoy! look at my github project xyz, then fix the flaky login test and add dark mode

这条消息包含两个任务,第一副手会自动拆解路由:

text
任务1(ship): 修复 flaky login test      → 船员 A 在独立 worktree 中工作
任务2(ship): 新增 dark mode             → 船员 B 在另一个独立 worktree 中工作

几分钟后你会收到类似这样的汇报:

text
PR ready for review, captain: https://github.com/you/xyz/pull/42
(fix flaky login test - risk: low - CI green)

> alright merge it

注意这次对话里的三个要点:

  1. 你只跟第一副手说话,从不直接指挥任何船员;
  2. 合并需要你明确点头——「alright merge it」就是那句 captain 的 explicit word(第 4 章 hard rule 2);
  3. 汇报以结果开头(PR 就绪、风险低、CI 绿),而不是中间过程细节。

2.7 常见故障排查

现象原因与处理
启动后没有任何 hooks 加载Grok 忘了 --trust;或在会话内执行 /hooks-trust 补授权
Pi 没有加载 watcher extension首次信任提示被拒绝过;重新批准项目信任即可
提示 tmux 未安装brew install tmux(macOS)或 apt install tmux(Debian/Ubuntu)
提示 GitHub 认证失败重跑 gh auth login,确认 gh auth status 通过
会话启动摘要显示锁被拒已有另一会话在管理舰队;关闭旧会话或等它释放锁

2.8 本章小结

  • FirstMate 支持 macOS/Linux,依赖 gh + git + tmux 参考后端 + 一个已验证的主 harness;
  • Claude Code / Grok / Pi 是三个平级 co-primary,差异只在监督接入机制;
  • 克隆即安装:仓库本身就是 agent distro,无需额外 app;
  • 会话启动摘要按 Lock → Bootstrap → Wake queue → Supervision → Fleet-state → Network checks → Context digest 固定顺序产出;
  • Bootstrap 只探测不安装,一切安装需你当场同意;最小闭环 = 自然语言下单 → 双 worktree 并行 → PR 回传 → 你口头授权合并。

🧪 随堂测验

点击你认为正确的选项。答错时会展示正确答案与原因解析。

1. FirstMate 官方支持的参考会话后端是哪个?

2. 关于三个 co-primary harness(Claude Code、Grok、Pi),下列说法正确的是?

3. 会话启动摘要中 Bootstrap 区块的安装策略是?

4. 首次对话「fix the flaky login test and add dark mode」中,第一副手会如何处理这两个改动?

🛠️ 动手实践

  1. 在自己的机器上完整走一遍 2.3–2.4 节流程:认证 gh、克隆 firstmate、启动一个你有订阅的 co-primary harness,并把启动摘要的七个区块逐一抄录下来对照本文核对。
  2. 故意在未安装 tmux 的环境(或临时改名 tmux 二进制)中启动第一副手,观察 Bootstrap 如何报告缺失工具以及它给出的安装建议流程,记录「同意前」与「同意后」的差异。
  3. 找一个自己的练手仓库,用 2.6 节的双任务句式下达一条包含两个改动的自然语言请求,观察第一副手如何拆分任务、开出几个 tmux 窗口,以及最终汇报里是否包含 PR 完整 URL、risk 标注与 CI 状态三要素。