Native macOS · built for Claude Code
Run twenty coding agents.
Know which one needs you.
Fleet is a fast, native macOS terminal for running many AI coding sessions at once. One sidebar row per session, with live status, a plain-English summary, and a preview on hover.
macOS 14+ · Apple silicon & Intel · no account required
Live replica — statuses render exactly as the app does.
Tabs stop working at about four agents.
Once every tab is a Claude session, the tab bar tells you nothing. You cycle through windows hunting for the one stuck on a permission prompt, and the other five sit idle while you look.
Fleet makes the fleet itself the interface. Status is the primary thing on screen, and the terminal is what you drop into once you know where to go.
- Native
- No Electron, no webview. It starts instantly and stays out of the way.
- Direct
- Fleet spawns every PTY, so it injects FLEET_SESSION into the shell and matches session → row directly. No process-ancestry walk, no per-pid ps.
- Quiet
- FSEvents watches the state directory and Fleet updates only what changed.
SwiftUI + SwiftTerm
No correlation hack
No polling

Features
Built for the way you actually run agents
Every part of Fleet exists to answer one question faster: which session needs me next?
Live status
Every session, and what it wants from you
One row per session with a live indicator — working, your turn, needs permission, an MCP call in flight, a PR opened — plus model, context percentage, mode, subagent count and git branch. The colour tells you who is blocked on you before you read a word.
- Red means a permission prompt is waiting. Amber means it is your turn.
- Context percentage runs green → amber → red as the window fills.
- Group by project, collapse what you are not watching, drag to reorder.

Quick Switcher
Jump to any session in three keystrokes
⌘K opens a fuzzy switcher over every open session. Type a few characters of a name and hit return — no hunting through a tab bar, no cycling windows to find the one that stopped.
- ⌘⇧J skips the search entirely and jumps to the next session needing you.
- ⌘1–9 focuses by position.
- Optionally float waiting sessions to the top of the sidebar.
Command Palette
Every action on one keystroke
⌘⇧P lists everything Fleet can do — new sessions, find, clear scrollback, jump to the next session needing you, toggle the resource bar or AI summaries, run the Claude setup — each with its shortcut alongside.
- Searchable, so you never have to remember where a setting lives.
- Doubles as a session jump list.

Search
Search every session at once
⌘⇧F searches the scrollback of every open session simultaneously and shows a match count per session. “Where did that stack trace go?” stops being six window switches.
- Results are grouped by session, with a hit count each.
- ⌘F still searches just the focused terminal.

And the rest
The parts that keep a fleet manageable
Smaller things, but they are what stop twenty sessions turning back into twenty tabs.
AI summaries
Opt in and a throttled Haiku call — reusing your existing Claude login, no extra key — writes a ≤24-character phrase under each working session. “wiring auth middleware”, not “Running…”. Plain shells show their foreground command instead.
Hover preview
Hover a row to peek inside without leaving the session you are in: the recent conversation for a Claude session, live terminal output for a shell. It reads the real transcript, not a screen scrape.
Stuck detection
A session reporting “working” that has produced no output for a while is flagged as stalled — so a crashed run stops looking like a busy one.
Groups, colours, names
Group by project, collapse, drag to reorder, and colour each session. Rename by double-clicking, or with Claude’s /rename — both are honoured, most recent wins.
Attention routing
A menu-bar extra and Dock badge count the sessions that need you, with a dropdown that jumps straight to them — even when Fleet is not focused.
Notifications
Approve and Deny buttons directly on permission prompts, click-to-focus, per-session mute, distinct sounds and granular per-state toggles. Needs a signed build — see the roadmap.
The terminal itself
Still a terminal you would use anyway
The multi-session view would be worthless on a terminal you had to tolerate.
Nerd Font bundled
MesloLGS NF ships with the app, so powerline and prompt glyphs render correctly on first launch.
Themes
Fleet Dark, Snazzy and Solarized Light — and the theme colours the whole app, not just the terminal.
Drag and drop
Drop images or files onto a session and they are pasted in for Claude to attach.
⌘-click
Open URLs and file paths straight from the scrollback.
Resource bar
Optional CPU, RAM, network and process count across the whole fleet, with a per-session breakdown.
Sensible defaults
⌥3 types #, ⌥←/→ move by word, copy-on-select, configurable bell and scrollback.
How it works
Fleet spawns the shell, so it never has to guess
The correlation between a Claude session and a sidebar row is a value Fleet put there itself — not something it infers.
- 1
Fleet opens the PTY
Every session is spawned by Fleet, which injects FLEET_SESSION=<uuid> into the shell environment and strips CLAUDE_CODE_* so it starts clean.
- 2
Claude hooks stamp the id
Bundled Node hooks write session state to ~/.claude/session-status/, stamping the same FLEET_SESSION into every file.
- 3
FSEvents notices
Fleet watches that directory. When a file changes it re-reads only what changed — no timers, no polling loop.
- 4
The row updates
The fleetSession field is the join key, so state lands on the right row immediately.
Fleet (Swift/SwiftUI)
├─ SessionStore sessions, focus, groups, notifications, persistence
├─ Session one PTY; owns its SwiftTerm view; injects FLEET_SESSION
├─ StatusWatcher FSEvents on ~/.claude/session-status → snapshots
├─ Summarizer throttled `claude -p` (Haiku) subtitles + stuck probe
└─ ResourceMonitor ps/nettop over Fleet's process tree
Claude Code hooks (Node, installed to ~/.claude)
├─ hook.js writes <id>.json, stamped with FLEET_SESSION
├─ ctx_monitor.js status line; writes <id>.meta.json (model / ctx% / …)
└─ lib.js shared state model
State flows one way: hooks write, Fleet reads.The hook install is idempotent and tagged, so re-running it replaces Fleet's entries and leaves your other hooks alone — after backing up ~/.claude/settings.json.
Shortcuts
Keyboard first
Sessions
- ⌘T
- New shell session
- ⌘⇧T
- New Claude session
- ⌘W
- Close focused session
- ⌘1–9
- Focus session by position
Navigation
- ⌘K
- Quick Switcher
- ⌘⇧P
- Command Palette
- ⌘⇧F
- Search all sessions
- ⌘⇧J
- Jump to next session needing you
Terminal
- ⌘F
- Find in focused terminal
- ⌘⇧K
- Clear scrollback
- ⌘= / ⌘-
- Font size bigger / smaller
- ⌘0
- Reset font size
Roadmap
What is coming next
Fleet is early and openly so. Here is what is actually being worked on.
Codex rich status
An equivalent hook and notify layer. Claude Code is the only agent with rich status today; other shells appear as basic rows.
Generic process state
Build, test and dev-server state on the same row model.
Split panes
Built once, removed for now. Coming back with named workspaces and a worktree launcher.
Signed & notarized builds
Plus auto-update — which also unlocks native notification permissions.
Download
Get Fleet for macOS
A single app bundle. No installer, no background agent, no account — drag it to Applications and open it.
- Requires
- macOS 14+
- Architecture
- Apple silicon & Intel
- Size
- 7.8 MB
You'll also want
- Node on your
PATH— the Claude Code hooks are Node scripts (no npm deps). - Claude Code, for the live status layer. Plain shells still work as basic rows.
- One click in Settings → Claude installs the hooks. What it changes →