A control tower for your AI agent fleet.
OmniAgent is a native desktop terminal built for one job: running and monitoring CLI coding agents (Claude Code, aider, Codex CLI, …) across all of your machines at once. Every server becomes a pod in a tiled grid — each pod a live terminal with its own file explorer and code editor a single click away.
Terminal is the main. Editor is the modal.
Existing tools cover halves of this problem:
- Agent dashboards (tmux-based TUIs) monitor agents — but only inside one machine's tmux.
- SSH terminal managers handle many servers — but know nothing about long-running agent sessions.
OmniAgent does both: zero-config SSH fleet discovery, persistent agent sessions, and a control-tower UI designed for watching many agents work in parallel.
| Terminal grid | SSH manager | Explorer + editor per terminal | Sessions restore with content | Agent fleet focus | |
|---|---|---|---|---|---|
| iTerm2 / WezTerm / Warp | ✅ | ➖ | ❌ | manual tmux -CC |
❌ |
| Tabby / Termius | ✅ | ✅ | basic SFTP, separate view | ❌ | ❌ |
| MobaXterm (Windows) | tabs | ✅ | ✅ | ❌ | ❌ |
| VS Code Remote-SSH | ➖ | one host at a time | ✅ | ❌ | ❌ |
| tmux dashboards (TmuxCC, …) | TUI | ❌ | ❌ | ✅ | ✅ local only |
| OmniAgent | ✅ | ✅ zero-config | ✅ docked in every pod | ✅ by default | ✅ across servers |
The last column is where OmniAgent is headed: agent status detection, needs-input notifications, and fleet-wide agent instructions are the current milestone.
- Zero-config fleet — your
~/.ssh/configis the server list. No accounts, no database, no setup UI. - Pod grid multiplexing — every connection is a pod in a draggable,
resizable grid (powered by Dockview). Presets:
2×2,3-COL,FOCUS. - Full session restore — close the app, reopen it, and every pod comes back: same hosts, same layout, same terminal content. Local pods run in per-pod tmux sessions; remote pods attach to tmux on the server.
- On-demand explorer & editor — toggle a file tree or a Monaco editor inside
any pod. Remote file access uses one-shot
sshcommands (your existing keys), connected only while you use it.⌘Ssaves straight back to the server. - Session lifecycle that makes sense —
exitends the session and closes the pod; closing a pod kills its backing session; quitting the app preserves everything for next launch. - Input that actually works — the terminal runs on Chromium, deliberately. WKWebView drops composed CJK syllables through a race nobody can reproduce on demand; WEBKIT-IME.md has the measurements.
Every release carries the same app in two shells — one frontend, two packagings, pick per machine:
| Files | Runtime | Size | |
|---|---|---|---|
| Electron | OmniAgent-electron-* |
Chromium | ~120 MB |
| Tauri | OmniAgent_* |
WKWebView, WebView2, WebKitGTK | ~10 MB |
The Tauri build is a tenth of the size and lighter on memory. The Electron build is larger, but on macOS its terminal takes Korean, Japanese and Chinese input reliably — WKWebView drops composed syllables through a timing race that varies by machine and by launch, which the Tauri build can only paper over. WEBKIT-IME.md has the measurements. If you type CJK in the terminal on macOS, take the Electron build; otherwise either is fine.
src/ the app — shared, unaware of which shell it is in
src/ipc.ts picks its backend at runtime
src-tauri/ the Tauri shell (Rust)
electron/ the Electron shell (Node)
| Layer | Tech |
|---|---|
| Shell | Electron / Tauri 2 |
| PTY | node-pty / portable-pty, both over tmux |
| UI | React 19 + TypeScript + Tailwind CSS 4 |
| Layout | dockview-react |
| Terminal | @xterm/xterm |
| Editor | Monaco |
Requirements: Node.js 20+, and tmux (optional, needed for local session
restore; brew install tmux).
git clone https://github.com/sbyoun/OmniAgent.git
cd OmniAgent
npm install
npm run dev # Vite, in one terminal…
npm run dev:electron # …the Electron app in another
npm run tauri dev # or the Tauri app instead
npm run package # Electron bundle, signed and notarized
npm run package:local # …the same bundle unsigned, to test on this machine
npm run tauri build # Tauri bundleBuilding the Tauri shell also needs Rust.
On first launch the sidebar lists every concrete Host from your
~/.ssh/config. Click one (or Local Terminal) to launch a pod.
Early but functional — built and daily-driven on macOS. Windows/Linux are untested.
Development is tracked on the issue tracker and grouped into milestones:
- v0.2.0 — Control Tower Core:
FLEET.mdunified agent instructions, agent status detection, needs-input notifications - v0.3.0 — Fleet Operations: broadcast dispatch, fleet journal, remote named sessions
Issues and PRs welcome.
