claudex
(noun) : the systematic cataloguing of fugal subjects across concurrent movements, as practiced by the lesser-known Viennese archivist Theodor Klaudeks, whose index of Bruckner's unfinished symphonies was itself famously never finished
Desktop GUI for browsing and running Claude Code sessions in parallel. Reads ~/.claude/projects/ directly, groups sessions into logical projects via git-root detection, and lets you open multiple interactive Claude terminals side-by-side without losing context when you switch between them.
What it does
- Thread browser — tree-structured sidebar of every Claude Code session on your machine, organized by project. Sessions from different working directories that share a git root merge into one project node.
- Embedded terminal mode — spawns
claude --resume <id>inside a real PTY rendered by xterm.js. Full CLI parity: slash commands, permission prompts, vim mode, ctrl-r history, ANSI rendering. Terminals persist across session switches (codex-style parallel threads). - Card viewer mode — parsed message timeline with syntax-highlighted code blocks, tool-use cards, thinking blocks. Toggle between terminal and cards per session.
- Archive recovery — reconstructs deleted session history from
~/.claude/history.jsonlso nothing is truly lost after a Claude Code major-version wipe. - Optional claude-mem enrichment — if claude-mem is installed, uses its AI-refined titles. Falls back to a local sanitizer that strips XML noise, code blocks, and IDE wrappers from the first message.
Stack
| Layer | Tech |
|---|---|
| Shell | Tauri 2 (macOS, WKWebView) |
| Backend | Rust — FS walking, JSONL parsing, PTY management via portable-pty, summary caching with bincode, file watching via notify |
| Frontend | React 19, TypeScript, Tailwind v4, Zustand, xterm.js 6, react-virtuoso |
| IPC | Tauri commands + per-PTY event channels. Binary data (terminal stdout) is base64-encoded; chunks are write-combined on the Rust side at ~16 ms intervals to avoid IPC storms. |
Build
Requires Rust 1.77+, Node 20+, pnpm.
pnpm install
pnpm tauri dev # dev mode with hot reload
pnpm tauri build # production .app bundle
Status
Early. Works on macOS. Expect rough edges.
License
GPL v3
View source
| 1 | # claudex |
| 2 | |
| 3 | *(noun) : the systematic cataloguing of fugal subjects across concurrent movements, as practiced by the lesser-known Viennese archivist Theodor Klaudeks, whose index of Bruckner's unfinished symphonies was itself famously never finished* |
| 4 | |
| 5 | --- |
| 6 | |
| 7 | Desktop GUI for browsing and running [Claude Code](https://docs.anthropic.com/en/docs/claude-code) sessions in parallel. Reads `~/.claude/projects/` directly, groups sessions into logical projects via git-root detection, and lets you open multiple interactive Claude terminals side-by-side without losing context when you switch between them. |
| 8 | |
| 9 | ## What it does |
| 10 | |
| 11 | - **Thread browser** — tree-structured sidebar of every Claude Code session on your machine, organized by project. Sessions from different working directories that share a git root merge into one project node. |
| 12 | - **Embedded terminal mode** — spawns `claude --resume <id>` inside a real PTY rendered by xterm.js. Full CLI parity: slash commands, permission prompts, vim mode, ctrl-r history, ANSI rendering. Terminals persist across session switches (codex-style parallel threads). |
| 13 | - **Card viewer mode** — parsed message timeline with syntax-highlighted code blocks, tool-use cards, thinking blocks. Toggle between terminal and cards per session. |
| 14 | - **Archive recovery** — reconstructs deleted session history from `~/.claude/history.jsonl` so nothing is truly lost after a Claude Code major-version wipe. |
| 15 | - **Optional claude-mem enrichment** — if [claude-mem](https://github.com/anthropics/claude-mem) is installed, uses its AI-refined titles. Falls back to a local sanitizer that strips XML noise, code blocks, and IDE wrappers from the first message. |
| 16 | |
| 17 | ## Stack |
| 18 | |
| 19 | | Layer | Tech | |
| 20 | |-------|------| |
| 21 | | Shell | [Tauri 2](https://tauri.app/) (macOS, WKWebView) | |
| 22 | | Backend | Rust — FS walking, JSONL parsing, PTY management via `portable-pty`, summary caching with bincode, file watching via `notify` | |
| 23 | | Frontend | React 19, TypeScript, Tailwind v4, Zustand, xterm.js 6, react-virtuoso | |
| 24 | | IPC | Tauri commands + per-PTY event channels. Binary data (terminal stdout) is base64-encoded; chunks are write-combined on the Rust side at ~16 ms intervals to avoid IPC storms. | |
| 25 | |
| 26 | ## Build |
| 27 | |
| 28 | Requires Rust 1.77+, Node 20+, pnpm. |
| 29 | |
| 30 | ```bash |
| 31 | pnpm install |
| 32 | pnpm tauri dev # dev mode with hot reload |
| 33 | pnpm tauri build # production .app bundle |
| 34 | ``` |
| 35 | |
| 36 | ## Status |
| 37 | |
| 38 | Early. Works on macOS. Expect rough edges. |
| 39 | |
| 40 | ## License |
| 41 | GPL v3 |