How it's built
A look under the hood: the Tauri + React stack, the git-worktree model, how agent output streams in, and where your data lives.
The stack#
| Layer | Technology |
|---|---|
| Shell | Tauri v2 (Rust) — a native macOS window, ~3 MB bundle. The Rust side owns git, processes, the terminal PTY, OAuth and storage. |
| UI | React 19 + TypeScript + Vite. Fonts: Inter (UI) and JetBrains Mono (code/terminal). |
| Terminal | xterm.js wired to a real pseudo-terminal (PTY) per workspace. |
| Markdown | react-markdown + remark-gfm for agent responses. |
The git-worktree model#
Each workspace is a real git worktree created from your project repo:
git worktree add -b <prefix>/<slug> <worktree_path> <base_branch>
Worktrees live under the app's data directory (in a worktrees/<workspace-id> folder). Because each is a separate checkout on a separate branch, agents run truly in parallel with no file collisions. Merging runs a git merge --no-ff of the workspace branch back into its base.
Data flow & streaming#
The frontend talks to Rust through Tauri commands (see the backend commands reference). Agent runs are spawned as claude --print --output-format stream-json child processes; their output is forwarded to the UI as events:
| Event | Carries |
|---|---|
agent-output | Streaming NDJSON chunks of the agent's turn (text deltas + tool_use). |
agent-exit | The process exit code, ending the run. |
review-output / review-exit | The self-review agent's stream. |
term-output / term-exit | The embedded terminal's PTY output. |
Each event is tagged with a session_id like agent:<workspace-id> so the UI routes streams to the right workspace. The full shapes are documented in Events & streaming.
Where your data is stored#
State is persisted as a single JSON file, store.json, inside the app's data directory (on macOS, under ~/Library/Application Support/). It holds your projects, workspaces (including full chat history), settings, custom commands, usage records, and GitHub account info.
store.json is plaintext on your machine. Your GitHub token (if you sign in) is stored there but never exposed back to the UI. Nothing is sent to NeuralCode servers — agents talk directly to Anthropic via the Claude Code CLI.Crash recovery#
A spawned agent can't survive an app restart, so on launch any workspace left in the running state is reset to idle. Live processes and terminals are never persisted — only their results.