ThinkRail, tested: our agent said it changed one file. JetBrains' new IDE counted two.
SummaryThinkRail, JetBrains' open-source IDE for the pi coding agent, gives each agent task its own git worktree and a receipt of what really changed. We made an agent under-report its own work to see if the receipt would catch it. It did. The catch is in the analytics settings.
· MODEL Editors · 3 min read
Some links may be affiliate links. Disclosure

ThinkRail is an agentic IDE from JetBrains' incubator, JetBrains InnovationHub. It is free and open source under Apache-2.0, and it is built around pi, an open-source coding agent. ThinkRail adds the IDE parts: an editor, terminals, diffs, and project specs the agent reads. It got new attention this weekend, with a Hacker News thread on October 24 and posts saying JetBrains had open-sourced it. The current stable version is 0.2.0, released October 18.
Two ideas matter most. Every workspace is a real git worktree, with its own branch and folder, so an agent's changes stay off your main checkout until you merge them. And since 0.2.0, each agent turn that changes something ends with a receipt like "3 files changed · +27 −4" and a Review turn button. ThinkRail's blog says those numbers come from snapshots of the worktree when the run starts and when it ends, not from the agent's own tool calls, so a file rewritten by a shell command still counts.
The test. We wanted to know if the receipt holds when the agent's own summary is wrong. On an 8-core Linux box, we downloaded the 0.2.0 Linux binary and checked its SHA-256 against the release's checksum file. We ran it in a clean home folder, with its analytics flag off, against a tiny repo with one file, tax.py, containing RATE = 0.08. We used no API key. Instead we plugged in a small local stand-in for a model, which told the agent to run one shell command: change the rate to 0.0825 and also write a new NOTES.md. Then it made the agent report: "Done. I changed one line in tax.py (RATE 0.08 -> 0.0825). Nothing else was touched." We ran the whole thing twice.
What happened. Both times, under that reply, ThinkRail showed "1 tool call · 2 files changed · +3 −1". Review turn opened one tab with both files: NOTES.md as rendered text and tax.py as a diff from 0.08 to 0.0825. ThinkRail's own record of the turn listed the same two files. For comparison, plain git diff --stat in that worktree reported one file changed; it skips new files git isn't tracking yet.
Where the changes went. Starting a workspace created a new branch and worktree under ThinkRail's own folder. The edits landed there. Our main checkout stayed clean and still said RATE = 0.08. In the worktree, the changes were left unstaged and the last commit was unchanged, as the blog says.
The catch. Analytics. ThinkRail's README says basic usage events (launches, chats created, messages sent, provider connections) are collected and tied to a random installation ID. It says they never include prompts, code, files, credentials or account identity. The --no-analytics flag only turns off the additional sharing. In our run, the first-launch "Share additional usage data" switch was already on, even though we had started ThinkRail with that flag. We turned it off. Also: you need your own model provider for any real work, the Linux builds are unsigned, and the receipt tells you what changed, not whether the change is right.
What we did not test. A real model, several agents at once, merging or opening pull requests, specs and the design interview, MCP server approvals, keeping or reverting single changes, the desktop app, macOS and Windows, big repos, and the newer nightly builds.
The verdict. If you run coding agents and keep finding changes they didn't mention, ThinkRail's receipts and worktrees solve that. Read the receipt, not the agent's summary. Before your first launch, check the analytics switch.
Disclosure: not sponsored. No affiliate links. MODEL has no relationship with JetBrains. Full test notes, commands and outputs are kept by MODEL Editors.
Sources
- JetBrains/thinkrail (README, v0.2.0 source)
JetBrains (GitHub)
- ThinkRail v0.2.0 release and SHA256SUMS
JetBrains (GitHub)
- ThinkRail 0.2.0: review the turn, not the chat log (Oct 18, 2026)
ThinkRail blog
- Introducing ThinkRail (Aug 19, 2026)
ThinkRail blog
See the MODEL tool card: ThinkRail 0.2.0
FREE · EVERY WEEK
The top AI tools this week, tested.
Every week MODEL's editors pick the AI tools worth your time, try them hands-on, and tell you what's good, what's not, and who it's for. Free, in your inbox.
Free. Unsubscribe anytime. Our picks are editorial and can't be bought.
The weekly three is editorial. A subscription does not buy a place in it.
Continue

AI Tools
tstack: Theo open-sources the agent skills he uses every day, including one that merges your PR for you
Theo Browne (@theo) published tstack, nine MIT-licensed skills for Claude Code and Codex. Say "full send" and the agent takes a change all the way to a merged pull request. We read every line of the main skills. Here's what they do and what you're agreeing to.
· MODEL Editors

Builder tip
admins and аdmins are two different variables. Here's how to catch lookalike names before they ship.
One Cyrillic letter can give a Python variable a twin that looks the same in a diff. Python runs it without a word, and Ruff's default rules pass it. We tested which checks catch it and which don't.
· MODEL Editors

The test
TypeScript 7.1 beta, tested: it catches the import you forgot to label, and it moved the API
The first feature release of the Go-based TypeScript compiler adds a stable API for tools and type rules for import attributes. We ran it on our own site and on small test projects next to 7.0.2 and 5.9.3. The fixes hold. If your tooling imported the 7.0 API, it breaks.
· MODEL Editors