A native macOS terminal for AI agent workflows.
Run Claude Code, Copilot CLI, and other agents side-by-side — with instant switching, input detection, and zero electron overhead.
You're running 4 Claude Code agents across different repos. One is waiting for a sudo password. Another finished and needs review. Your terminal has 12 tabs and you're Cmd+Tab-ing between windows trying to figure out which agent needs attention.
HiveTerm fixes this. Every session shows its status at a glance. Sessions waiting for input get highlighted. Group related sessions into a grid and see them all at once.
Multi-session grid layout — Group sessions into side-by-side or 2x2 grids. Each group gets its own layout. Ungrouped sessions display fullscreen.
Input detection — Automatically detects when a session is waiting for user input (password prompts, confirmation dialogs, interactive commands) and highlights it in the sidebar.
Instant switching — All terminals stay alive in a single AppKit container. Switching sessions toggles isHidden — no view teardown, no lag.
Native performance — Built with Swift, SwiftUI, and AppKit. Uses SwiftTerm for terminal emulation with full PTY support. No web views, no Electron.
Session grouping — Drag sessions onto each other in the sidebar to create groups. Reorder within groups via context menu or drag & drop.
| Action | Shortcut |
|---|---|
| New session | Cmd + T |
| Close session | Cmd + W |
| Switch to session 1–9 | Cmd + 1 — Cmd + 9 |
| Rename session | Cmd + R |
| Debug overlay | Cmd + Shift + D |
HiveTerm.app
├── SwiftUI Sidebar, toolbar, window chrome
├── AppKit TerminalHostView — single NSView managing all terminals
├── SwiftTerm (SPM) Terminal emulation, PTY I/O
└── InputDetector Pattern matching + process state analysis
The key architectural decision: a single TerminalHostView (NSView) owns all terminal views as subviews. SwiftUI controls state, but the terminal lifecycle is pure AppKit — no NSViewRepresentable teardown/rebuild on session switch.
┌──────────┬──────────────────────────────────────┐
│ Sidebar │ TerminalHostView │
│ │ ┌────────────┬─────────────────┐ │
│ ● Claude │ │ │ │ │
│ Code │ │ Session 1 │ Session 2 │ │
│ │ │ (visible) │ (visible) │ │
│ ● Copilot│ ├────────────┴─────────────────┤ │
│ CLI │ │ │ │
│ │ │ Session 3 (visible) │ │
│ ○ Tests │ │ │ │
│ idle │ └──────────────────────────────┘ │
├──────────┴──────────────────────────────────────┤
│ 3 sessions · 1 waiting │
└─────────────────────────────────────────────────┘
curl -L https://github.com/trsdn/HiveTerm/releases/latest/download/HiveTerm.zip -o HiveTerm.zip
unzip HiveTerm.zip -d /Applications/
xattr -cr /Applications/HiveTerm.app
open /Applications/HiveTerm.appRequirements: Xcode 15+ · macOS 14 Sonoma
git clone https://github.com/trsdn/HiveTerm.git && cd HiveTerm
xcodebuild -scheme HiveTerm -configuration Release build
cp -R build/Release/HiveTerm.app /Applications/
xattr -cr /Applications/HiveTerm.app- Tab colors / custom labels per session
- Ghostty/iTerm2 color scheme import
- Split pane resizing via drag
- Session persistence across app restarts
- Notification when a waiting session gets input
MIT
