← 返回博客
Ai预计阅读 8 分钟

ThinkRail:JetBrains 用 git worktree 把并行 agent 隔开

发布于 2026年11月2日
ThinkRail:JetBrains 用 git worktree 把并行 agent 隔开

JetBrains 有个习惯:发出来的工具默认你已经知道自己在干什么。ThinkRail 不太一样,差别就在 README 的一句话里:把一个 git 仓库当项目打开,从里面切出工作区,每个工作区就是一个 git worktree。

整个论点就这一句,而且比“一个 AI IDE”好得多。ThinkRail 是 JetBrains 的孵化项目,大约 7,100 星,过去一周涨了 5,760,核心是开源 coding agent pi。JetBrains 加的不是一个聊天面板,是让多个 agent 同时干活而不互相踩的那套管道。

用 worktree,而不是靠祈祷

如果你在同一个仓库上跑过两个 agent,你知道那个故障长什么样。一个开始改 auth.ts,另一个决定重构 auth.ts,然后你花一下午考古一个双方都认为是自己写的 merge conflict。

ThinkRail 的答案是:每个工作区都是一个 git worktree,有自己的分支,自己的工作目录。agent 并行工作,谁都不碰你的 checkout。你喜欢哪个分支就合并,剩下的删掉。

上面还有一层不错的收拾机制:完成的和闲置的工作区会自己落到按项目分的架子上——PR 合并或关闭的时候,或者安静了一周之后——你下次进去干活,它又回来。如果你曾经有过二十个叫 fix-thing-2 的僵尸分支,这就是你不知道自己想要的功能。

Four identical wooden workbenches in a workshop, each lit by its own lamp

顶栏跟踪当前分支相对 origin 和它那个 PR 的位置,并把下一步放到一次点击之外:发布、推送,或者开一个 PR,描述可以从计划、提交、你的模板或 agent 写的草稿来。PR 开了之后它显示 CI 检查和评审结论,还能把失败的检查或跑偏的分支丢回给 agent。

IDE 那部分是实的,不是装饰

可拆分的 Monaco 标签页、带实时 git 变更标记的文件树、变更文件视图、终端、文档,全都限定在当前工作区。你可以在文件和 diff 上留锚定评论,作为结构化上下文发进对话。或者把 worktree 在你装好的 IDE 里打开——这是诚实承认我们有些人还是想要 WebStorm。

对话是流式输出的,每个会话带实时的 token 和成本读数,这种细节只有做的人自己付账单时才会想到。你可以中途改变正在跑的那一轮的方向、排队一条后续、委派给子 agent,还能和 agent 一起改同一份共享计划。每个完成的步骤可以单独提交、单独评审,这比“这里是 38 个文件”是好得多的评审单位。

⌘K 或双击 Shift 打开命令面板,跨所有打开的项目找对话、工作区和项目。什么都不输入时,它列出在等你的那些对话——对一个跑很多会话的工具来说,这才是对的默认。

把 spec 当成能活下来的东西

我反复回来想的是 spec 图。一组相互连接的 SPEC.md 放在代码旁边,agent 通过专门的 spec_* 工具读它、搜它、维护它。只读的 Specs 工具在工作台里把这张图渲染成树。

思路是站得住的。上下文窗口会结束。会话会结束。活下来的是你写下来的东西。多数 agent 工具把“记住计划”当记忆问题;ThinkRail 把它当文档问题,而后者是人过六个月也还能读的版本。

它同时也是最可能烂掉的那个功能。一个 agent 在维护、没人审的 spec 图,会变成对一份已经不存在的软件非常自信、非常详细的描述。工具让维护变便宜,但没让它免费,纪律还是你的事。

安装

两种形式,都是叠加式的:一个原生桌面安装包,和一个自包含的 CLI,后者在浏览器里打开同一个应用。两者都在 releases 页面发布 SHA256SUMS。

macOS 或 Linux 命令行,Windows 上在 Git Bash 里:

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

Windows,在 cmd 或 PowerShell 里:

powershell -c "irm https://raw.githubusercontent.com/JetBrains/thinkrail/main/install.ps1 | iex"

然后:

thinkrail ~/code/my-repo

需要 PATH 上有 git,还需要一个模型 provider。在应用里用 JetBrains AI 登录,或者通过 pi 自己的认证接任意 provider。没有 ThinkRail 账号——这句话我没料到会从 JetBrains 嘴里听到。

Linux 上的桌面版需要 glibc 2.38 以上,配 GTK 3、WebKitGTK 4.1、Ayatana AppIndicator 3 和 librsvg 2——实际就是 Ubuntu 24.04 以上。更新器只有在包带有效 HTTPS feed 标识时才会出现,所以比那个标识更早的安装,需要先手动装一次。

让它可移植的那个细节

ThinkRail 读你现有的 ~/.pi/agent 配置。如果你有工作用的 profile,用 PI_CODING_AGENT_DIR 指到别处。设置里的 Custom servers 能接任何 OpenAI 兼容端点——LiteLLM、sglang、vLLM、Ollama、LM Studio、llama.cpp——并写进 pi 的 models.json,于是这些模型在对话选择器和 CLI 里都能看到。

mcp.json 里的 MCP 服务也跟着来,行为是对的:服务没标只读的调用,ThinkRail 会先在对话里问你;仓库里定义的服务器在你批准之前保持关闭;OAuth 类服务器在设置里登录。

agent 扩展同样务实。设置里列出 agent 拿到了什么,每一项都能关掉,还能按来源安装任意 pi 包——npm、git 或本地目录——给你自己或者给某个仓库。ask-user-question 和 visualize 这两个工具是单独发的包,所以终端里一个原版 pi 也能得到同样的多选提示和内联图。

我会盯着的

一个孵化项目一周七千六百星,对一个还没走完 JetBrains 发布周期的东西来说,关注度太高了。JetBrains 的孵化项目历史上有两种结局:变成产品,或者悄悄停掉;而 beta 往往不知不觉就成了你依赖的版本。

另一个风险是概念上的。这是一个很完整的工具,界面很多:worktree、spec、面板、扩展、MCP、主题、字体、四种内置语言,外加一份自己加语言的文档。每一项都是一个可以拿来配置而不是写代码的地方。对 ThinkRail 最好的结局,是 worktree 这套模型变得理所当然到没人再讨论,而应用其它部分退到一旁。

如果你已经在跑并行 agent,而现在的答案是“开一堆终端窗口加祈祷”,那就试。光 worktree 隔离就值这次下载。要是把它当普通 IDE 用,你会发现它没打算当。

相关文章