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 的僵尸分支,这就是你不知道自己想要的功能。

顶栏跟踪当前分支相对 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 用,你会发现它没打算当。
相关文章
Pika H3 Flex:把 50 步压到 6 步,画面和声音一起出
Pika H3 Flex 用蒸馏把 50 步压到 6 步,画面和音频一起去噪,权重和代码一并开源。真正让人想付钱的是 API 里那五条可分离的音轨。
微信输入法加了 AI 录音:功能不新,位置是新的
微信输入法把录音做进了键盘:录完给你一个整理过的网页,而不是一墙文字。功能本身不新鲜,厉害的是它出现的位置。
Scenes AI:一张 RTX 5090,实时把办公室变成草原
Dawa 的 Scenes AI 在一张消费级显卡上实时改造真实房间,声称连续两小时不漂移。它真正的底牌不是模型,是那个拍了五年戏的摄影棚。
Superpowers:31 万星的 Markdown,教 agent 先别写代码
Superpowers 用一组 skill 让 agent 先问清楚要做什么,再写一份细到新手也能照做的计划。三十万星背后,是流程比模型更稀缺的那个时刻。