Swift · AppKit · libghostty
Run AI coding agents
in parallel.
Claude Code, Codex, as many as you want — one per git worktree. A native macOS terminal that never garbles on resize and never leaves you waiting.
❯ Match the sidebar colors to the brand palette ⏺ Let me check the color tokens. ⏺ Read(Sources/VitermApp/UI/SidebarViewController.swift) └ 512 lines ⏺ Edit(SidebarViewController.swift) └ +18 −6 ⏺ Aligned to the brand gradient. Building to verify. ✳ Forging… (1m 42s · ↓ 3.1k tokens · esc to interrupt)
Not just tabs
Tabs don't run in parallel.
They just switch.
Ten tabs open, and you still can't tell which agent is waiting on you, which is working, and which just finished — not without opening each one. viterm's tabs carry their state, and the sidebar shows all of it at once.
- —You see one active pane. The rest are hidden
- —No way to tell which tab is waiting until you open it
- —Worktrees are your job: cd, create, name
- —More tabs, more state to hold in your head
- ✓Every session's busy / waiting / idle, rolled up on its worktree row
- ✓State dots on the tabs too — you know before you switch
- ✓Waiting fires a notification; ⌘⇧U jumps you there
- ✓Spin a worktree off a branch and launch an agent in it
Features
Four foundations for working in parallel.
As many sessions as you want, per worktree.
Have Claude implement on a branch while Codex writes the tests right next to it — and a plain shell alongside. ⌘T lines sessions up as tabs; ⌘1–9 moves between them. Leave the worktree and come back — you land on the tab you left open.
Never garbles. Because it's native.
The terminal is drawn by the same engine as Ghostty (libghostty), natively. Resize the window however you like — vim and Claude Code stay intact. That's the payoff of dropping the TUI-in-TUI. It launches instantly, and it isn't Electron.
┌─ NORMAL ──────────────┐
│ 1 import AppKit │
│ 2 final class View { │
│ 3 override func │
│ 4 layout() { ... │
└───────────────────────┘
✓ Lines stay put on resize
Put worktrees wherever you like.
A template decides where worktrees land. ~/worktrees/{project}/{branch}, or ../{branch} next to the repo — your call. Launch an agent the moment it's created, then merge or rebase into main and fold it away from the sidebar when you're done.
Never miss a prompt for input.
Each session shows busy / waiting / idle as a dot on its tab and its worktree row. Worktrees you're not looking at stay visible too, rolled up in the sidebar. When an agent asks for confirmation, a macOS notification fires, and ⌘⇧U jumps to the latest one waiting.
Keyboard-first
Keep your hands on the home row.
Worktrees, sessions, notifications — all reachable from the ⌘K command palette. No mouse required.
Free & open source
Ready to run them in parallel.
viterm is free, MIT-licensed open source. Install it right now with Homebrew.