<!-- README.md -->
JetBrains incubator Apache-2.0 open source
ThinkRail
The worktree IDE for the pi coding agent.
Open a repo as a project. Cut isolated git-worktree workspaces. Pair with a real agent across Monaco tabs, terminals, and diffs — while your project's intent lives in a spec graph the agent actually reads.
curl -fsSL https://raw.githubusercontent.com/JetBrains/thinkrail/main/install.sh | bash
One self-contained binary. macOS (Apple Silicon) · Linux arm64 / x64 · Windows x64.
<!-- why.md -->
Why ThinkRail
Agents deserve worktrees, not your working tree.
Every workspace is a real git worktree — its own branch, its own
cwd. Run several agents in parallel; each one's mess stays on its branch, and
main stays clean until you say otherwise.
Specs are the ground truth.
ThinkRail is built spec-first, and so are your projects: a connected graph of spec files lives beside the code, and the agent reads, searches, and maintains it with dedicated tools. Intent survives the session.
A thin host, a real engine.
The pi coding agent
runs in-process and owns models, skills, compaction, and cost. ThinkRail owns
the workspace, the editor, and the wire — it never assembles prompts behind
your back.
<!-- features/worktrees.md -->
Projects → workspaces
A project is any local git repo. A workspace is a git worktree cut from
it — created in one click, listed in the rail, disposable without ceremony.
# one repo, three parallel lines of thought
~/code/my-repo ← project
└─ ~/.thinkrail/worktrees/
├─ workspace-1 ⎇ feature/auth agent A building
├─ workspace-2 ⎇ fix/flaky-test agent B fixing
└─ workspace-3 ⎇ spike/ideas you, exploring
- Own branch + cwd per workspace — files, diffs, terminals, and chats all scope to it.
- Switch workspaces instantly; nothing reloads, nothing leaks across.
- Merge the good one, delete the rest. Your repo never noticed the chaos.
<!-- features/editor.md -->
A real IDE around the agent
Watch the agent work — or work beside it — without leaving the page.
Monaco editor tabs
The VS Code editor engine: syntax everywhere, rendered markdown with a source toggle, file tabs per workspace.
All-files tree
The active worktree at a glance — like the rail on the right of this very page.
Changes
A live git diff of the workspace branch, so you review the agent's work as it lands.
Terminals
Real PTYs scoped to the worktree — run the tests yourself while the agent keeps typing.
<!-- features/agent-chat.md -->
Chats that stream like the engine thinks
This transcript is a real pi session, captured in ThinkRail while it
worked on its own repo:
goal-and-requirements.md · architecture.md
ThinkRail is a desktop-and-mobile client for the pi coding agent —
a thin host that runs pi in-process and bridges it to a rich UI,
while pi owns models, skills, compaction, cost, and session state.
The three rings:
-
Engine host (
packages/server) —createServer()runs an HTTP+WS host plus anAgentSessionManager: one in-processpisession per tab. -
The wire (
packages/contracts) — the typed, versioned protocol between host and UI. Types only. -
UI client (
apps/web) — mobile-first React that ships independently and dials any host over the wire.
- Several sessions per workspace, streaming concurrently.
- Pick the model per session; tokens and cost tick live in the header.
- Steer a running turn or queue a follow-up — no waiting for the agent to finish.
- Interactive tools: the agent can ask structured questions back, right in the chat.
<!-- features/specs.md -->
Specs are first-class
Every module carries a SPEC.md with frontmatter linking it into a graph —
goal, architecture, modules, tasks. The bundled pi-spec-graph extension
gives the agent spec_* tools to search, navigate, and maintain it, and
the Specs tab renders the live graph of your worktree:
---
id: module-server
type: module-design
status: active
parent: architecture
---
Plain markdown, plain frontmatter, versioned with the code — reading the specs is enough to understand an area and formulate the next task. The agent keeps them honest as it builds.
# install.sh
Install
# one line: downloads the right build, verifies its SHA-256, puts `thinkrail` on your PATH
curl -fsSL https://raw.githubusercontent.com/JetBrains/thinkrail/main/install.sh | bash
# nightly channel, or pin a version
curl -fsSL … | bash -s -- --channel nightly
curl -fsSL … | bash -s -- --version 0.2.0
# then
thinkrail # launch — opens the IDE in your browser
thinkrail update # grab the latest build later
- Prebuilt: macOS (Apple Silicon), Linux arm64 + x64, Windows x64.
- Needs:
giton PATH and an authenticatedpiprovider — the agent runs against your real credentials. -
Prefer manual? Grab a binary +
SHA256SUMSfrom the releases page, verify,chmod +x, done. App state lives under~/.thinkrail.