入门 📋 6 个步骤 第 582 / 584 篇

用 JetBrains ThinkRail 让每个 Agent 任务各占一个工作区:worktree 隔离、规格图与并行会话实操

并行跑几个编码 Agent 最容易出事的不是 Agent 本身,而是它们同时改你正在用的那份检出。ThinkRail 是 JetBrains 开源的智能体 IDE:每个任务切出一个 git worktree 工作区,配一份会随代码一起生长的 SPEC.md 规格图,改完再看 diff 决定合并还是丢弃。本教程六步落地。

2026-10-31· 10 分钟上手· 约 3101 字· 🚉 ThinkRail / 🌿 git worktree

让多个编码 Agent 同时干活,最先出问题的通常不是模型,而是它们落脚的地方——几个会话改的都是你正在用的那份检出,diff 混在一起,等你想留下 A 的改动、丢掉 B 的改动时,已经分不开了。ThinkRail 的思路很直接:它是 JetBrains 开源的一个智能体 IDE,把每个任务切成一个独立的 git worktree 工作区,各自带自己的分支与工作目录,Agent 的改动先落在那个分支上,你看过 diff 之后再决定合并还是删掉。它本身不造 Agent,而是在进程内跑 pi 这个开源编码智能体:模型、技能、上下文压缩、成本与会话状态都归 pi,ThinkRail 负责工作区、编辑器、终端与拉取请求的收口。本教程六步落地:装好并接上模型、开项目与工作区、让规格先落下来、并行起多个会话、把 Agent 的改动审完再合、最后把边界与遥测开关说清。

🚉 本教程适合:已经在用 pi 编码智能体、想同时推进多个任务,并且希望改动可审阅、可丢弃的开发者。前置条件是本机已装好 Git 并在 PATH 里可用,以及一个模型提供方(JetBrains AI,或者通过 pi 配好的 Anthropic、OpenAI、本地模型)。ThinkRail 采用 Apache-2.0 许可,软件本身免费,成本来自你接的那个模型。它是独立应用,不是 IntelliJ 或其他 JetBrains IDE 的插件。

Step 1:装:一条脚本装 CLI,或直接下桌面包

1 两种载体共用同一套引擎宿主

两条路:命令行与桌面应用,两者用的是同一套引擎宿主,区别只在载体。命令行路线从仓库拉安装脚本,脚本会校验二进制校验和并把 thinkrail 加进 PATH;装完在终端敲 thinkrail,它以浏览器作为前端打开同一套界面。桌面应用提供 macOS 14 及以上(Apple Silicon)、Windows x64、Linux x64 与 ARM64 的包,Linux 桌面包还依赖 glibc 2.38 及以上、GTK 3、WebKitGTK 4.1、Ayatana AppIndicator 3 与 librsvg 2。发布页同时提供 SHA256SUMS,手工下载时用它校验。

# macOS / Linux / WSL
curl -fsSL https://raw.githubusercontent.com/JetBrains/thinkrail/main/install.sh | bash

# Windows(PowerShell)
powershell -c "irm https://raw.githubusercontent.com/JetBrains/thinkrail/main/install.ps1 | iex"

# 装完启动(浏览器前端)
thinkrail

# 应用状态与工作区落点
~/.thinkrail/

装完先确认一件事:Git 必须已经在 PATH 里。它的一切隔离都建立在 git worktree 之上,没有 Git 就只剩一个编辑器。另外它是 JetBrains InnovationHub 的孵化项目,版本还处在 0.x、夜间构建每隔几天就有一次,所以「今天装的版本」和「文档里的截图」对不上是常态。

签名与公证还没补齐:Linux 产物未签名,macOS 的命令行版本已签名但未公证;较旧的桌面包与本地自行打包的 DMG 可能触发 Gatekeeper 限制。企业机器上有严格门禁的话,先在一个隔离环境里试装一次,再决定要不要铺开。

Step 2:接模型:没有自己的账号,直接复用 pi 的配置

2 迁移成本低到几乎为零

ThinkRail 不设账号体系。你可以用 JetBrains AI 登录,也可以用任何已经通过 pi 配好的提供方,覆盖 Anthropic、OpenAI 与本地模型。关键在于它是复用而不是重建:如果你已经在用 pi,API 密钥、模型配置、权限规则、技能与 MCP 服务都会被自动识别沿用。MCP 服务来自 pi 的 mcp.json,跨客户端通用的 Agent Skills 就地读取,不需要为了换个界面把配置重新填一遍。初次启动会引导你连接提供方。

它会沿用 pi 的这些配置
- 模型提供方与 API 密钥
- 权限规则
- Agent Skills(跨客户端通用格式,就地读取)
- MCP 服务(来自 pi 的 mcp.json)

非只读的 MCP 调用:在对话里先问你,再执行

这里有个分工值得记住:pi 拥有模型、技能、上下文压缩、成本与会话状态,ThinkRail 拥有工作区、编辑器与连线,它从不在你背后拼提示词。也就是说,你在界面上看到的配置就是真实生效的配置,没有一层隐藏的包装。

💡 迁移成本几乎为零的前提是你已经在用 pi。如果还没有,先把 pi 配上并跑通一个小改动,再进 ThinkRail——这样你能分清「问题出在模型配置」还是「问题出在 IDE」。

Step 3:建项目与工作区:一个任务一个 worktree

3 项目是仓库,工作区是从仓库切出来的分支

一个项目就是本机任意一个 git 仓库:可以打开已有仓库,也可以「新建项目」让它帮你建一个空仓库。项目之下是工作区,一个工作区就是一个从仓库切出来的 git worktree,带自己的分支与工作目录,一次点击就能建,列在侧栏里,不需要了就丢掉。已经存在的 worktree 也可以挂进来。你也可以直接在项目目录里工作,但那就等于放弃了隔离——这一步是整套方法的核心,不建议省。

~/code/my-repo                 ← 项目(一个 git 仓库)
└─ ~/.thinkrail/worktrees/
   ├─ feature/auth             ← 工作区 1,Agent A 在改
   ├─ fix/flaky-test           ← 工作区 2,Agent B 在修
   └─ spike/ideas              ← 工作区 3,你自己探索

每个工作区自带:分支 + 工作目录
文件、diff、终端与会话都限定在它内部
完成或闲置的工作区可以收进项目级的 shelf

工作区之间的切换是瞬时的,不重载、不串味。合并满意的那个,删掉其余的,你的主检出从头到尾没有被碰过——这就是它那句「Agent 该有自己的 worktree,而不是你的工作树」的意思。

💡 命名直接按工单或特性来:一个工单一个工作区,分支名就用工单号。几周后回看侧栏,你能立刻知道每个工作区当初是为了什么,而不是面对一串 agent-1、agent-2 发呆。

Step 4:让规格先落下来:SPEC.md 是给 Agent 的长期上下文

4 意图不该只活在聊天记录里

很多 Agent 项目跑偏的根源是「意图只存在于会话里」:人讲过一次,模型记住了,会话一关就什么都没了。ThinkRail 在代码旁边维护一组互相连接的 SPEC.md 文件,构成一张规格图:Agent 通过专门的规格工具读取、搜索与更新它,界面上是只读的树状视图。规格是带元数据的 Markdown,用来定义软件应当有什么行为;规格引用会内置进系统提示,所以意图能跨会话活下来。

规格驱动的三件事
1) 规格图:代码旁一组互连的 SPEC.md
2) Agent 侧:用 spec_* 工具读、搜、更新
3) 人侧:只读的 Specs 视图以树形呈现

意图随会话存活,不随会话消失

它还提供了几个内置工作流:项目搭建、设计头脑风暴、发拉取请求。这些工作流本质上就是把「先写规格再写代码」这件事固化下来,省掉你每次重新组织提示词。

规格图不会自我维护:Agent 改了实现却没更新规格,过一段时间规格就开始说谎,而 Agent 会照着说谎的规格继续干活。建议把「更新对应的 SPEC.md」写进你给 Agent 的收尾要求里,审阅时把规格文件和代码一起看。

Step 5:起会话:一个工作区里可以并行好几个,各自选模型

5 每个会话单独选模型、单独读数

一个工作区里可以同时开多个 pi 会话,每个会话独立选模型,并实时显示 token 与成本读数。跑起来的会话可以中途引导、排队下一条指令、把活派给子 Agent,也可以直接编辑它们共享的那份计划。界面这一侧配的是 Monaco 编辑器标签页、带 git 改动标记的文件树、实时 diff、真实 PTY 终端(限定在该 worktree 内),以及可以锚定到文件和 diff 上的审阅评论。

一个工作区内的多个会话
- 每个会话独立选模型
- 每个会话有实时 token 与成本读数
- 可中途引导、排队后续指令、派子 Agent
- 共享一份可编辑的计划

内置工作流:项目搭建 / 设计头脑风暴 / 发拉取请求

界面语言内置英语与简体中文,也支持自定义语言文件。想一边看 Agent 写代码、一边自己在终端里跑测试,这个组合是它相对纯终端 Agent 最直接的增益。

💡 模型搭配是能省钱的:写测试、整理改动用便宜的模型,重构与跨文件改动用强的模型。因为每个会话单独读数,你能直接看出哪一步花了多少,而不是月底看账单猜。

Step 6:审完再合:diff、评论、发分支、开 PR

6 隔离的价值在审阅时才兑现

Agent 干完之后,在审阅视图里看这个工作区的 diff,需要改的地方留锚定评论,评论会被送回对话里让 Agent 接着改。满意了就从顶部栏发分支并开拉取请求;不满意就删掉这个工作区。ThinkRail 把工作区状态接到 GitHub 上:分支与拉取请求状态、CI 检查、评审结论、就绪状态、合并动作,以及 Agent 生成的 PR 描述(用你自己的 gh)。

收口路径
1) 看 diff,留锚定评论 → 送回会话让 Agent 改
2) 发分支、开 PR(用你自己的 gh)
3) 看 CI 检查与评审结论,合并
4) 不满意:删掉工作区,主检出未受影响

遥测这一段要单独处理:使用统计默认开启,错误报告始终发送。想少共享就在 Settings → Privacy 里关掉附加共享,或用无分析参数的启动方式。团队统一装机前,把这一项写进装机说明。

💡 顶部栏会显示当前分支相对 origin 的位置与对应的 PR,下一步动作基本是一键可达。把这个栏当成你的收口清单,比在浏览器里来回切标签省事很多。

两条边界要提前知道:一是完整扩展支持还在规划中,设置里只能关掉当前提供给 Agent 的扩展,还不能通过承诺中的扩展系统造新工具;二是它下面没有 IntelliJ 平台或 JetBrains 语言服务,拿不到 Java、Kotlin 那类深度代码智能。把它当「围绕 pi 的工作区与审阅外壳」,别当完整的 JetBrains IDE 用。

常见问题速查

现象原因与处理
敲 thinkrail 没反应安装脚本负责加 PATH,重开一个终端;仍不行就走发布页手工下载配 SHA256SUMS
提示缺少 Git工作区全靠 git worktree,先把 Git 装好并放进 PATH
要我重填密钥它没有账号体系:用 JetBrains AI 登录,或先把 pi 的提供方配好
想换模型每个会话独立选,一个工作区内可以并存多个会话
规格图看不到只读的 Specs 视图以树形呈现,文件就是代码旁的 SPEC.md
几个 Agent 的改动混在一起说明你在项目目录里直接工作;改成每个任务一个工作区
想自己跑测试用工作区内的 PTY 终端,它限定在该 worktree 内
能装成 IntelliJ 插件吗不能,它是独立应用,也不是其它 JetBrains IDE 的插件
Java / Kotlin 提示很弱已知边界:没有 JetBrains 语言服务
macOS 打不开命令行版未公证,本地打包的 DMG 会触发 Gatekeeper
Linux 装不上检查 glibc 2.38+、GTK 3、WebKitGTK 4.1、Ayatana AppIndicator 3、librsvg 2
它会自己合并吗不会,合并由你在界面里点
想少共享数据Settings → Privacy 关掉附加共享,或用无分析参数启动
扩展系统能用吗仍在规划中,当前只能开关已提供的扩展
← 返回教程中心