ThinkRail
JetBrains incubator project
GitHub stars
ThinkRail은 사용할 때마다 더 나아지는 에이전트형 IDE입니다. 오늘날 살아있는 스펙(living specs)을 통해 프로젝트를 학습하고 내일 자체적인 기능을 구축합니다.
우리는 pi 코딩 에이전트를 중심으로 풍부한 인터페이스를 구축하고, 작업을 별도의 워크스페이스로 격리했으며, 살아있는 스펙과 재사용 가능한 기술을 통해 에이전트에게 지속적인 프로젝트 지식을 부여했습니다. 다음으로는 전체 확장 기능 지원을 추가하여 ThinkRail이 사용자가 실제로 작업하는 방식에 기반하여 필요한 도구를 생성할 수 있도록 할 예정입니다.
웹사이트: thinkrail.ai · 블로그: thinkrail.ai/blog
⭐ ThinkRail이 유용하다고 생각되면 별점을 부여해 주세요. 다른 사람들이 이 도구를 발견하는 데 도움이 됩니다.
<picture>
<source media="(prefers-color-scheme: dark)" srcset=".github/readme-assets/workbench-dark.png">
<img src="https://raw.githubusercontent.com/JetBrains/thinkrail/HEAD/.github/readme-assets/workbench-light.png" alt="ThinkRail workbench: the Projects pane beside the left tool rail listing worktree workspaces and their Settled shelf, a finished pi conversation with its tool steps in the center, the resulting diff beside it, and the Specs tree above the Changes list on the right with their tools on the edge rail" width="900">
</picture>
격리된 git-worktree 워크스페이스에 범위가 지정된 pi 세션 및 해당 변경 사항.
주요 기능
-
격리된 작업 공간(Isolated workspaces). 모든 git 저장소(repo)를 프로젝트로 열고, 이를 git worktree로 분할하여 각기 다른 브랜치와 작업 디렉터리를 가진 작업 공간을 만들 수 있습니다. 에이전트는 사용자의 체크아웃에 영향을 주지 않고 병렬로 작업합니다. 좋은 브랜치를 병합하고 나머지는 삭제하면 됩니다. 기존의 작업 공간을 연결하거나 프로젝트 폴더 자체에서 명시적으로 작업할 수도 있습니다. 완료되거나 비활성화된 작업 공간은 프로젝트별 선반(shelf)에 보관되며, 해당 풀 리퀘스트(PR)가 병합되거나 닫히거나 또는 한 주 동안 활동이 없으면 저장됩니다. 그리고 사용자가 다시 작업을 시작하는 순간 돌아옵니다. 상단 바에서는 현재 활성 브랜치가 origin 및 해당 PR과 비교되는 상태를 보여주며, 다음 단계는 클릭 한 번으로 실행할 수 있습니다: 게시(publish), 푸시(push) 또는 계획, 커밋, 사용자 정의 PR 템플릿, 또는 에이전트가 작성한 초안을 기반으로 설명된 PR을 여는 것입니다. GitHub PR이 열리면 CI 검사 및 리뷰 결정 사항이 표시되며, 사용자는 이를 준비 완료로 표시하거나 실패한 검사 항목 또는 분기된 브랜치를 에이전트에 전달하고, 저장소의 마지막 사용 방식을 사용하여 병합하거나, 다시 열거나, 원격 브랜치를 삭제할 수 있습니다.
-
에이전트를 둘러싼 실제 IDE. Monaco editor 탭으로 구성된 분할 가능한 작업대, 실시간 git 변경 표시가 있는 파일 트리(Files tree)와 Changed view, 터미널, 문서를 포함하며—모두 활성 작업 공간에 한정됩니다. 파일과 diff에 검토 댓글을 고정하고 이를 구조화된 컨텍스트로 채팅에 전송하거나, 설치된 IDE에서 해당 worktree를 열 수 있습니다.
-
엔진이 생각하는 것처럼 스트리밍되는 채팅. 작업 공간당 여러 개의 동시 pi 세션이 존재하며, 각 세션은 자체 모델과 실시간 토큰 및 비용 정보를 제공합니다. 진행 중인 턴을 조종하거나 후속 작업을 예약하고, 서브 에이전트에게 위임하며, 에이전트가 업데이트하고 사용자가 편집하는 공유 계획을 작업할 수 있습니다—각 완료된 단계는 독립적으로 커밋되고 검토될 수 있습니다.
-
지식 기반(Ground truth)으로서의 사양서(Specs). 코드 옆에는 SPEC.md 파일들의 연결된 그래프가 존재합니다. 에이전트는 전용 spec_* 도구를 통해 이를 읽고, 검색하며, 유지 관리하므로 의도(intent)가 세션에 걸쳐 살아남습니다. 읽기 전용 Specs 도구는 이 그래프를 작업대에서 트리 형태로 렌더링합니다.
-
스킬 및 워크플로우(Skills and workflows). 다른 코딩 에이전트를 위해 이미 가지고 있던 포터블 에이전트 스킬(Portable Agent Skills)은 그대로 읽어오며, 번들링된 워크플로우는 프로젝트 설정, 디자인 브레인스토밍, 그리고 풀 리퀘스트(pull request) 배포를 안내합니다. 이는 작업 공간 브랜치를 푸시하고 사용자의 gh를 통해 GitHub PR을 열거나 업데이트하는 과정을 포함합니다.
-
셸(shell) 이상의 에이전트 도구. 채팅 내에서 웹 리서치, 인라인 다이어그램, 옵션 비교, 파일 미리보기가 렌더링됩니다. 에이전트가 UI 변경을 제안할 때, 사용자가 diff처럼 댓글을 달 수 있는 이전/이후 목업(before/after mockup)을 보여줍니다. 설정(Settings) → 확장 프로그램(Extensions)에서는 에이전트가 사용하는 ThinkRail 확장 프로그램을 나열하고 각 기능을 끌 수 있게 합니다.
-
MCP 서버. pi의 mcp.json에 MCP 서버를 연결하거나(또는 설정에서 추가하고 몇 가지 프리셋을 추가): ThinkRail은 호출 전에 채팅에서 해당 서버가 읽기 전용으로 표시되지 않도록 요청합니다(또는 프로젝트에서 신뢰하는 도구를 항상 허용). 서버들은 사용자가 승인할 때까지 레포지토리 정의 상태로 유지되며, 설정에서 OAuth 서버에 로그인하고, 각 채팅의 서버를 배경 명령어 및 서브 에이전트 옆에 보여줍니다.
-
사용자의 제공업체, 사용자의 자격 증명. JetBrains AI로 로그인하거나 pi 자체 인증을 통해 모든 제공업체를 연결할 수 있습니다. ThinkRail은 자체 계정이 없습니다.
-
데스크톱 앱 또는 브라우저. 네이티브 데스크톱 앱, 또는 동일한 앱을 브라우저에서 여는 thinkrail CLI가 있습니다. 둘 다 동일한 엔진 호스트를 임베드하며, 앱 상태는 ~/.thinkrail 아래에 저장됩니다.
-
사용자의 언어. 설정(Settings) → 언어(Language)는 시스템 언어를 따르거나 선택한 언어를 따릅니다. 영어와 중국어 간체는 내장되어 있습니다. ThinkRail이 아직 지원하지 않는 언어를 추가하려면 번역된 en.json 파일을 ~/.thinkrail/locales에 넣으면 되며, 저장할 때 적용됩니다. 에이전트의 답변과 도구 출력은 에이전트가 작성한 그대로 유지됩니다.
<picture>
<source media="(prefers-color-scheme: dark)" srcset=".github/readme-assets/specs-dark.png">
<img src="https://raw.githubusercontent.com/JetBrains/thinkrail/HEAD/.github/readme-assets/specs-light.png" alt="The Specs tool, opened from the right edge rail, listing the project's spec tree while the product goal spec is rendered in the editor" width="900">
</picture>
프로젝트의 스펙 그래프를 트리 형태로 보여주며, 스펙 자체도 함께 렌더링됩니다.
설치 (Install)
ThinkRail은 두 가지 추가적인 형태(additive forms)로 제공됩니다: 네이티브 데스크톱 설치 프로그램과 독립형 thinkrail CLI입니다. 둘 다 릴리스 페이지에서 SHA256SUMS와 함께 게시됩니다.
데스크톱 (Desktop)
사용자의 플랫폼에 맞는 thinkrail-desktop-* 에셋을 다운로드하세요:
-
macOS (Apple Silicon) — DMG를 엽니다. 인텔용 데스크톱 빌드는 없습니다.
-
Windows x64 — 전체 설정 ZIP을 압축 해제한 후, 페이로드 옆에 있는 설치 실행 파일을 그 자리에서 실행합니다.
-
Linux x64 / ARM64 — 설정 tarball을 압축 해제하고 installer를 실행합니다. 데스크톱 빌드는 glibc 2.38+와 GTK 3, WebKitGTK 4.1, Ayatana AppIndicator 3, librsvg 2가 필요하며, Ubuntu 24.04 이상 버전에서 사용 가능합니다:
sudo apt install libgtk-3-0 libwebkit2gtk-4.1-0 libayatana-appindicator3-1 librsvg2-2
패키징된 안정 및 나이틀리 데스크톱 빌드는 백그라운드에서 업데이트를 확인하고 **설정(Settings) → 업데이트(Updates)**에서 제공합니다: **다운로드(Download)** → **업데이트 준비(Preparing update)** → **설치 및 재시작(Install & Restart)**. **설치 및 재시작**을 선택하기 전까지는 아무것도 적용되지 않습니다. ThinkRail은 이후 설치 진행 상황과 로그를 보여주고, 닫혔다가 새 버전으로 다시 열립니다. 재시작 후 업데이트가 설치되었는지 알려줍니다. 만약 설치되지 않았다면, 그 이유를 설명하고 재시도를 제안합니다. 업데이트 도구는 패키지가 유효한 HTTPS 피드 식별자(HTTPS feed identity)를 가지고 있을 때만 나타나며, 해당 식별자보다 오래된 설치본은 수동으로 먼저 설치해야 합니다.
### 명령줄 (Command line)
설치 프로그램이 올바른 바이너리를 다운로드하고, 그 SHA-256 체크섬을 확인한 후, 시스템의 PATH에 `thinkrail`을 설정합니다.
**macOS / Linux** (Git Bash를 사용하는 Windows에서도 사용 가능):
```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을 실행하고, 프로젝트로 열고자 하는 Git 리포지토리를 선택적으로 지정할 수 있습니다:
thinkrail은 PATH에 git이 설정되어 있어야 하며 모델 제공업체(model provider)가 필요합니다. 앱에서 JetBrains AI로 로그인하거나 자체 제공업체 자격 증명(provider credentials)을 사용하십시오. thinkrail --help는 플래그 목록을 보여주며, thinkrail --version은 빌드를 출력합니다.
<details>
<summary><strong >Nightly builds, pinned versions, updates, and uninstall</strong></summary>
설치 프로그램은 --channel stable|nightly와 --version을 받습니다. 고정된 버전(pinned version)은 선택한 채널에 속해야 합니다:
curl -fsSL https://raw.githubusercontent.com/JetBrains/thinkrail/main/install.sh | bash -s -- --channel nightly
curl -fsSL https://raw.githubusercontent.com/JetBrains/thinkrail/main/install.sh | bash -s -- --channel stable --version 0.1.2
curl -fsSL https://raw.githubusercontent.com/JetBrains/thinkrail/main/install.sh | bash -s -- --channel nightly --version 0.2.0-nightly.10
Windows에서는 환경 변수(THINKRAIL_CHANNEL, THINKRAIL_VERSION, THINKRAIL_PREFIX, THINKRAIL_NO_MODIFY_PATH)를 사용합니다:
$env:THINKRAIL_CHANNEL='nightly'; irm https://raw.githubusercontent.com/JetBrains/thinkrail/main/install.ps1 | iex # PowerShell
set "THINKRAIL_CHANNEL=stable" && set "THINKRAIL_VERSION=0.1.2" && powershell -c "irm https://raw.githubusercontent.com/JetBrains/thinkrail/main/install.ps1 | iex" # cmd
</details>
설치된 Stable 및 Nightly CLI 호스트는 주기적으로 **설정 → 업데이트(Settings → Updates)**에서 업데이트 실행(Run Update) 옵션을 제공합니다. 이 기능은 백그라운드에서 호스트 머신의 thinkrail update를 실행하며, UI가 다른 기기의 브라우저에서 열려 있는 경우에도 마찬가지입니다. 성공적인 업데이트 후에는 호스트를 수동으로 재시작하라는 메시지가 표시됩니다. 모든 플랫폼에서 thinkrail update를 직접 실행할 수 있습니다. 이 명령어는 설치된 채널의 인스톨러를 다시 실행하고 <prefix>/bin/thinkrail[.exe] 파일을 교체합니다. --channel 또는 --version 플래그는 명시적인 재정의(override)가 필요할 때만 사용하십시오.
thinkrail uninstall은 실행 파일, 설치 프로그램이 추가한 PATH 항목, 그리고 설치 메타데이터를 제거하며, ~/.thinkrail 앱 상태를 삭제할지 여부를 묻습니다 (기본적으로 유지됨 — --remove-data로 삭제하고, -y는 질문을 건너뜁니다).
수동 설치를 선호하십니까? 릴리스 페이지에서 바이너리(binary)와 SHA256SUMS 파일을 다운로드하여 체크섬을 확인하십시오. 자체 업데이트가 작동하려면, 해당 파일을 thinkrail (Windows에서는 thinkrail.exe)로 이름을 변경하고 <prefix>/bin/thinkrail[.exe] 위치에 배치해야 합니다. 릴리스 파일 이름이나 다른 곳에 보관된 바이너리는 수동으로 교체하거나 스크립트를 통해 재설치해야 합니다.
플랫폼별 참고 사항
| Platform | Desktop | CLI |
|---|
| macOS Apple Silicon | DMG | 서명된 바이너리 |
| ... | | |
JetBrains는 Windows CLI, 데스크톱 설정 실행 파일(setup executable), 그리고 데스크톱 앱이 설치하는 모든 실행 파일 및 DLL에 서명을 합니다. macOS CLI는 서명되었지만 아직 Notarized되지는 않았습니다. 서명되고 Notarized된 데스크톱 DMG에는 조정된 JetBrains 서비스 파이프라인이 필요합니다. 오래전에 게시된 DMG나 로컬에서 빌드된 패키지는 여전히 서명이 되어 있지 않아 Gatekeeper에 의해 차단될 수 있습니다. Linux 아티팩트는 서명되지 않습니다.
분석 및 개인 정보 보호
ThinkRail은 무작위 설치 ID에 연결된 기본적인 사용 이벤트(실행, 채팅 생성, 메시지 전송, 제공업체 연결 등)를 수집합니다. 사용 분석 자료에는 프롬프트, 코드, 파일, 자격 증명 또는 계정 ID가 포함되지 않습니다. 오류 보고서 또한 항상 전송되며, 동일한 설치 ID에 연결되어 크래시를 수정할 수 있도록 합니다: 오류 유형과 코드, 그리고 ThinkRail 자체 코드의 어느 부분에서 발생했는지입니다. 여기에는 오류 메시지, 파일 경로, 이름, URL 또는 사용자의 프로젝트나 확장 프로그램 관련 내용은 절대 포함되지 않습니다. 추가적인 제품 사용 내역과 ThinkRail을 발견한 경로는 **추가 사용 데이터 공유(Share additional usage data)**가 켜져 있을 때만 공유됩니다. 이 스위치는 첫 실행 시 제공되며, **설정 → 개인정보 보호(Settings → Privacy)**에서 확인할 수 있습니다. 명령줄에서 실행할 때는 thinkrail --no-analytics (또는 THINKRAIL_NO_ANALYTICS=1)을 사용하면 해당 실행에 대해 추가 공유가 비활성화됩니다. 추가 공유가 켜져 있을 경우, 패키징된 빌드는 설치를 이곳으로 가져온 웹사이트 방문과 연결하기 위해 브라우저에서 ThinkRail 블로그를 한 번 열 수 있습니다 — 이는 사용자가 해당 웹사이트에서 마케팅 쿠키에 동의했거나 동의가 필요 없는 경우에만 해당하며, 이 링크는 30일 후에 만료됩니다.
내부 구조 (Under the hood)
ThinkRail은 pi를 인프로세스(in-process)로 실행하고 이를 풍부한 웹 UI와 연결하는 얇은 호스트입니다. pi가 모델(models), 스킬(skills), 압축(compaction), 비용(cost), 세션 상태(session state)를 소유하며, 앱은 작업 공간(workspace), 에디터(editor), 와이어(wire)를 소유합니다 — 이는 사용자의 뒤에서 프롬프트를 조립하지 않습니다. 세 개의 링: