Run claude, gemini, and codex in parallel — each in its own git worktree.
Free, open-source desktop app for running AI coding-agent CLIs in parallel, each in an isolated git worktree, with an optional macOS sandbox cage per workspace.
The recommended path is Homebrew + the official tap:
brew install --cask simion/termic/termicThat single command auto-taps simion/homebrew-termic, downloads the
latest .dmg, and installs Termic.app into /Applications. No
Gatekeeper warning — the tap is configured to bypass it.
Updates: Termic ships with a self-updater. When a new release lands you'll see an Update X.Y.Z pill in the top-right of the toolbar; click it to download + verify + relaunch. To check manually:
brew upgrade --cask termic.dmg, .app.tar.gz, and the ed25519 signature for each version live at
the Releases page. First
launch may show the "unidentified developer" Gatekeeper prompt — right-click
the app → Open, or strip the quarantine attribute:
xattr -dr com.apple.quarantine /Applications/Termic.appgit clone https://github.com/simion/termic
cd termic
make setup # brew/rust/node + npm install + cargo check
make install # build, copy to /Applications, launchmake dev (vite HMR + Rust auto-rebuild) is the iteration loop — see
CONTRIBUTING.md if you plan to hack on the code.
There are no prebuilt Linux binaries yet, but the stack (Tauri 2 +
portable-pty + xterm.js + WebKitGTK) builds and runs fine. The
sandbox feature is macOS-only (it shells out to sandbox-exec); on
Linux the workspace's Shield toggle is greyed out and agents run
unsandboxed. Everything else — worktrees, parallel tabs, themes,
in-app diff, the in-process CONNECT proxy — works as on macOS.
Prerequisites on a recent Debian / Ubuntu:
sudo apt-get install -y \
build-essential curl wget file libssl-dev libayatana-appindicator3-dev \
librsvg2-dev libwebkit2gtk-4.1-dev libgtk-3-dev libudev-dev
# Rust (stable) — https://rustup.rs
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
# Node 20+ via your package manager of choice (nvm/fnm/asdf/distro).
git clone https://github.com/simion/termic
cd termic
npm install
npm run tauri build # → src-tauri/target/release/bundle/
# .deb + .rpm + .AppImage land under appimage/ and deb/ inside bundle/Run from source while hacking: npm run tauri dev.
For Fedora / Arch / openSUSE, swap the apt line for your distro's equivalents of the same dev packages (the WebKitGTK 4.1 + GTK3 + AppIndicator3 + librsvg2 quartet is what Tauri 2 needs).
Same story: no prebuilt binaries, build works, sandbox is a no-op. On Windows 11 (or Windows 10 with WebView2 Evergreen installed):
- Install Microsoft C++ Build Tools (the "Desktop development with C++" workload).
- Install Rust stable (rustup).
- Install Node 20+ and Git for Windows.
Then in PowerShell:
git clone https://github.com/simion/termic
cd termic
npm install
npm run tauri build # → src-tauri\target\release\bundle\msi\The .msi is unsigned — Windows SmartScreen will warn on first run.
Click More info → Run anyway (or sign it yourself for distribution).
See CONTRIBUTING.md for the full dev guide.
Termic is a control plane for interactive CLI coding agents — the ones
you type into in a terminal: claude, gemini, codex. It does NOT use
their respective SDKs (which bill against a separate credit pool as of
June 2026); it
spawns the same binaries you'd run in iTerm and rides on your existing
Pro / Max subscription.
The product surface:
- One window, many workspaces. Each workspace is a git worktree under
~/termic/workspaces/<project>/<name>/, branched off your default. Tabs per workspace let you run multiple agents against the same branch. Worktree-or-repo-root toggle per workspace when you don't want a worktree. - Multi-repo workspaces. A project type that groups N member repos under
one wrapper directory with shared
CLAUDE.md/AGENTS.md/.claude/, per-member ports ($TERMIC_PORT_<MEMBER>is exported so frontends can call backends without hardcoded ports), and one aggregated diff view. - Real PTYs. Agents render in xterm.js + WebGL exactly as they would
in your shell: animations, slash-commands,
/resumepickers, bell, bold. - Work-done indicator. Sender-driven, no idle heuristics: Claude's
OSC 9;4busy/idle, Gemini's◇ Ready/✦ Working…/✋ Action Requiredtitle, Codex'sWorking/Ready/Waitingtitle. Green ✓ on the tab when a turn finishes, yellow 🔔 when the agent is blocked on your input, optional desktop notification that jumps you back to that workspace + tab. - Diff + edit in-app. CodeMirror 6 editor + side-by-side ⇄ unified diff
viewer with full syntax highlighting via
@codemirror/merge. "Send to main" pushes the worktree's diff into the parent checkout for you to commit / PR there. - Per-CLI configuration. Settings → Agents is a small editable registry: override the binary path, args, YOLO flags, runtime YOLO command, resume args. Claude, Gemini, Codex are built in; bring your own PTY-based CLI (OpenCode, aider, ollama, custom shell scripts) in 30 seconds.
- Seven themes (System / Light / Dark / VS Code / Solarized / Cobalt / Matrix), each one re-themes both the app chrome AND the xterm pane.
Optional per-workspace macOS Seatbelt (sandbox-exec) + an in-process
HTTPS CONNECT proxy per workspace. Configured per project, pinned per
workspace at creation (editable later from the workspace's Shield icon),
enforced from the moment the agent spawns.
The cage:
- Writes restricted to the worktree, agent config dirs (
~/.claude,~/.gemini,~/.codex), package caches (~/.npm,~/.cache,~/.cargo/registry), and TMPDIR. Always-denied:~/.ssh,~/.aws,~/.gnupg,~/.netrc,~/.docker/config.json,~/.kube, Keychains. - Network restricted via an in-process CONNECT proxy with a regex
hostname allowlist. Per-CLI vendor APIs (anthropic / google / openai)
- GitHub + npmjs + PyPI + crates.io baked in. Add custom hosts per project. No external daemon — the proxy lives inside the Tauri binary, so there's nothing extra to install.
- YOLO auto-on inside the cage. The seatbelt profile IS the security
boundary, so the agent's own permission prompts are skipped. The toolbar
lightning icon turns red when YOLO is on without a sandbox (intentional
danger signal — agents can
rm -rf $HOMEat that point).
For the full sandbox design — including the recent-denies debug panel and the auto-restart-on-edit flow — see CLAUDE.md §"Sandbox".
- macOS: first-class — universal binary (Apple Silicon + Intel), signed updater, Homebrew cask. Requires macOS 12+ (Monterey).
- Linux + Windows: build-from-source works today (Tauri 2 +
WebKitGTK / WebView2). No prebuilt binaries yet — CI matrix entries
- signed installers are on the roadmap.
- Sandbox: macOS-only (
sandbox-execis Apple's frontend to Seatbelt). On Linux + Windows the Shield toggle is greyed out and agents run unsandboxed.
The honest pitch — see termic.dev/vs/conductor for the full version with explanations.
| Termic | Conductor | |
|---|---|---|
| License | Open source (AGPL-3.0) | Closed source, proprietary |
| Price | Free | Paid |
| Parallel agents in git worktrees | ✓ | ✓ |
| Attach an agent to the repo root (no worktree) | ✓ | ✗ (worktree per workspace only) |
Runs claude |
✓ | ✓ |
Runs gemini |
✓ | ✗ |
Runs codex |
✓ | ✓ |
| Bring your own agent (PTY-based) | ✓ — opencode, aider, ollama, anything that runs in a terminal | ✗ |
| Multi-repo workspaces | ✓ — N repos under one wrapper, shared CLAUDE.md, per-member ports | ✗ |
| Uses Claude Pro / Max subscription quota | ✓ — spawns the interactive claude CLI directly |
◐ Routes through the Claude Agent SDK |
| Monthly Claude cost on top of your Pro / Max plan | $0 — same quota as running claude in iTerm |
Capped by the separate SDK credit ($20 / $100 / $200) |
| Local-only, no vendor backend in the loop | ✓ | ✗ — vendor-hosted services |
| Per-workspace macOS sandbox (filesystem + network) | ✓ — Seatbelt + in-process network allowlist | ✗ |
| Work-done indicator from real PTY signals | ✓ — OSC 9;4 + per-CLI title classifier, no idle guessing | ✗ |
| Side-by-side ⇄ unified diff with syntax highlighting | ✓ | varies |
| Platforms | macOS today; Linux + Windows on the way | macOS |
If you already pay for a Claude Pro / Max plan, Termic spawns the same
claude binary that plan covers — no separate metered usage, no
per-token markup. The agent and Anthropic still see the same auth they'd
see in iTerm.
What's next, roughly in order. No dates — open an issue if you want to push something up the list or pick one off.
- Better git support. First-class commit / push / pull / branch switch from inside the app instead of dropping to the aux terminal. Currently the diff viewer is read-only and "Send to main" only moves the working tree.
- Linear + GitHub PR integration. Paste a Linear issue or GitHub
issue/PR URL → new workspace seeded with the title + body. Create
the PR from the app once you're done. No OAuth — uses the
ghCLI- unauthenticated public APIs so we don't need your repo scopes.
- Fix desktop notifications. The "agent needs input" / "agent
finished" notifications miss too often (settled-detection edge
cases, OSC 9;4 dropped on resize, title parser regressions). Audit
- tighten the per-CLI signal classifier and the OS-level fan-out.
AGPL-3.0-or-later. Fork it, modify it, build a derivative — the only string is that derivatives stay AGPL too. The "open core that quietly went proprietary" pattern can't happen with this license, which is most of the point.
- Website: termic.dev
- Issues: github.com/simion/termic/issues
- Releases: github.com/simion/termic/releases
- Homebrew tap: github.com/simion/homebrew-termic
- Contributing: CONTRIBUTING.md
- Architecture notes (for hackers + AI agents working in this repo): CLAUDE.md