Run claude, codex, gemini, grok, and agy 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.appDownload termic_<version>_amd64.AppImage from the
Releases page, make it
executable, and run it:
chmod +x termic_*_amd64.AppImage
./termic_*_amd64.AppImageThe AppImage is ed25519-signed by the same CI flow as the macOS build,
so the in-app updater works the same way: a new release appears as the
Update X.Y.Z pill in the top-right, click to download + verify +
relaunch. Keep the AppImage somewhere writable like ~/Applications/
so the updater can replace it in place.
The sandbox feature is macOS-only on Linux: the workspace's Shield toggle is disabled and agents run unsandboxed. Everything else (worktrees, parallel tabs, find-in-files, themes, in-app diff) works the same.
Wayland note: if fonts render thin, force X11 with GDK_BACKEND=x11
in front of the launch command (or in the .desktop file's Exec=).
git 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.
The signed AppImage on the
Releases page is the
recommended path for most users — see Linux (AppImage)
above. Build from source if you want to hack on it, ship a .deb /
.rpm for your own distro packaging, or run an unreleased commit.
Prerequisites — Debian / Ubuntu (24.04+ has WebKitGTK 4.1):
sudo apt update
sudo apt install -y \
build-essential curl wget file git pkg-config \
libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev \
librsvg2-dev libssl-dev libsoup-3.0-dev libxdo-dev
# Rust stable
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
. "$HOME/.cargo/env"
# Node 20+ — distro package, nvm, fnm, asdf, or mise (whichever you use)Fedora:
sudo dnf install -y \
@development-tools curl wget file git pkgconfig \
webkit2gtk4.1-devel gtk3-devel libappindicator-gtk3-devel \
librsvg2-devel openssl-devel libsoup3-devel libxdo-develArch:
sudo pacman -S --needed base-devel curl wget file git pkgconf \
webkit2gtk-4.1 gtk3 libayatana-appindicator librsvg openssl libsoup3 xdotoolBuild and install:
git clone https://github.com/simion/termic
cd termic
npm install
npm run tauri build # ~5 min first time, faster on incrementalThe bundles land under src-tauri/target/release/bundle/. Pick whichever
fits your distro:
# Debian / Ubuntu / Pop / Mint
sudo apt install ./src-tauri/target/release/bundle/deb/termic_*_amd64.deb
# Fedora / RHEL / openSUSE
sudo dnf install ./src-tauri/target/release/bundle/rpm/termic-*.x86_64.rpm
# Distro-agnostic — no install needed, just make it executable and run
chmod +x src-tauri/target/release/bundle/appimage/termic_*_amd64.AppImage
./src-tauri/target/release/bundle/appimage/termic_*_amd64.AppImageAfter the .deb / .rpm install, "Termic" shows up in your application
launcher. The in-app updater only knows how to replace the AppImage in
place — .deb / .rpm users upgrade via git pull && npm run tauri build
- reinstall.
If the window looks slightly off — an empty gap on the left of the top bar, for example — that's the 84px reservation for macOS traffic-light controls. Harmless, will be cleaned up when the cross-platform chrome lands.
Wayland note: if fonts render thin, force X11 with
GDK_BACKEND=x11 termic (or set it in the .desktop file's Exec=).
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 spawns the real claude / codex / gemini / grok / agy
(Antigravity) CLIs inside PTYs, the same binaries you run in iTerm. It
does NOT use the vendor SDKs (which bill against a separate credit
pool as of June 2026);
inference rides on your existing Pro / Max plan.
- Parallel worktrees. Each workspace is a git worktree under
~/termic/workspaces/<project>/<name>/. Run N agents against the same branch across tabs; attach to repo root when you don't want a worktree; duplicate a worktree to spin up a parallel attempt off the same tip. - Multi-repo workspaces. Group N repos under one wrapper with shared
CLAUDE.md/AGENTS.md, per-member port forwarding ($TERMIC_PORT_<MEMBER>), and one aggregated diff. - Per-workspace sandbox (macOS). Filesystem + network cage via
sandbox-execand an in-process HTTPS CONNECT proxy with a hostname allowlist. Lets the agent run with--dangerously-skip-permissionssafely — the cage is the boundary, not the prompt. - Work-done indicator that's actually reliable. Per-CLI title classifier
(Claude spinner, Gemini's
◇/✦/✋, CodexWorking/Ready/Waiting) plus OSC 9;4, gated by byte-quiet and content-hash checks so static-title "thinking" doesn't false-fire done. Blue bullet on the tab when a turn finishes, orange bell when the agent is blocked on input, optional OS notification that drops you on the right workspace and tab. - Find + edit in-app. ⌘P fuzzy file finder, ⇧⌘F find-in-files
(
git grep, .gitignore-aware, streams live). CodeMirror 6 editor and side-by-side / unified diff with syntax highlighting. "Send to main" lands the worktree diff in the parent checkout. - Broadcast a prompt to every agent in a workspace at once (⇧⌘B).
AI review: open the Review dialog, pick an agent, it gets the diff
- a review prompt and starts streaming.
- Bring your own agent. Settings → Agents is an editable registry. Drop in aider, opencode, ollama, a shell script — 30 seconds. Claude, Codex, Antigravity, Gemini, and Grok ship as built-ins.
- Keyboard-first. ⌘1..9 swaps tabs, ⌥↑/↓ walks the visible sidebar tree, ⌥⌘↑/↓ hops workspace-only, ⇧⌘D opens a split shell, ⌘T spawns a new tab, ⌘W closes one. Seven themes (System, Light, Claude, Dark+, Solarized Dark, Cobalt, Matrix), each re-themes both chrome and the terminal 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: x86_64 AppImage shipped per release, signed by the same ed25519 key as the macOS build so the in-app updater works. ARM Linux + a Flathub submission are on the roadmap.
- Windows: build-from-source works today (Tauri 2 + WebView2). No prebuilt binaries yet — CI matrix entry is on the roadmap.
- Sandbox: macOS-only (
sandbox-execis Apple's frontend to Seatbelt). On Linux + Windows the Shield toggle is disabled 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 + Linux today (signed AppImage); 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.
Open an issue to push something up the list or pick one off.
- First-class git surface. Commit / push / pull / branch switch from inside the app instead of dropping to the aux terminal.
- Linear + GitHub PR integration. Paste an issue / PR URL, get a
workspace seeded with title + body. Create the PR from the app via
gh. No OAuth. - Sandbox parity on Linux + Windows. macOS Seatbelt today; bubblewrap / landlock on Linux and AppContainer on Windows are the gap.
- Windows prebuilts. AppImage CI is live for Linux; Windows MSI is the matching CI matrix entry.
Termic is free and open source. If your company builds on top of AI coding agents and finds this useful, sponsoring helps keep the project moving.
What sponsors get: logo on termic.dev and in this README, and a thank-you in release notes.
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