changelog
Every build stays downloadable, so you can always go back to the one that worked.
Fixes for updating without quitting, and agent sessions that start where you’ve told new sessions to.
Changed
- New Claude Code, Codex and Antigravity sessions start in the folder set in Settings ▸ Terminal ▸ New sessions start in, the same as shell sessions. They always started in your home folder before. That setting is your home folder unless you’ve changed it, so nothing moves unless you have.
Fixed
- An idle Fleet no longer checks every two seconds whether a downloaded update may install. If the update has been paused, or was rolled back on this Mac, Fleet now sets it aside the way a normal update check would, and Update Now says it’s on hold.
- The update note says how the update will install. With Update without quitting on, the note and the Download & Install tooltip for an update that hadn’t downloaded yet said it would install when you quit. They now say it installs without closing your sessions.
- Codex and Antigravity sessions carried over by an update no longer show as running out-of-date hooks.
- Messages about agents driving Fleet use the names in Settings, Let agents control Fleet and Let agents type into sessions, and say “An agent” rather than “Claude” when any agent opens, closes or types into a session. Turning a Quick Terminal into a session now suggests starting the agent in a new session to see its status, rather than restarting it there.
- A report that an update was rolled back could carry the previous day’s anonymous identifier. Everything else Fleet reports uses an identifier that is replaced every day, but this one report read the stored identifier directly, so on a day nothing else had been reported it could link that day’s usage to the day before. It now uses the same daily identifier. Nothing is sent if you have turned reporting off.
Older releases. These stay up so you can go back to a build that worked — but check the entries above for anything marked Breaking before you install one.
Updates no longer close your sessions. A new version installs in the background while everything keeps running, Claude mid-reply and builds halfway through, and if it runs into a problem Fleet puts back the version you had. Sidebar rows also tell you what each waiting session needs and how long it has waited, and you can lay them out however you like.
This update still installs the way 1.0 did, when you quit Fleet; every update after it keeps your sessions running.
Added
- Updates install without quitting. Once an update is ready and you haven’t typed in Fleet for a minute, it installs in the background and every session carries on where it was, including a message you were halfway through writing. Update Now installs it straight away.
- If a new version crashes, freezes or falls behind a session in its first two minutes, Fleet goes back to the version you had, with every session still running. That version won’t install on its own again until you choose Allow Again, and Report… opens a prefilled issue.
- Settings ▸ Updates ▸ Update without quitting turns this off, so updates wait for you to restart or quit Fleet as before.
- Sidebar rows show how long each session has been waiting on you. The Quick Switcher and menu bar also say what it’s waiting on, such as what it was last doing (
Last · Editing Session.swift) or the command a permission prompt is about (git push origin main); drag Detail onto its own line in Settings ▸ Sidebar Rows to see that in the sidebar too. - Sessions needing you are ordered failed turns first, then prompts, then finished turns, longest waiting first, and Next Session Needing You follows the same order.
- Settings ▸ Sidebar Rows lets you arrange a row by dragging its parts between up to five lines, or into Hidden to leave them out; hovering a part explains what it shows.
- Help ▸ Acknowledgements lists the licences for SwiftTerm and the bundled MesloLGS NF font.
- The welcome guide and Settings ▸ Privacy link to the privacy policy and terms of use.
Changed
- Rows have a new default layout: the agent’s badge and title, then the status and how long it has waited, the branch, and the model and context chips. You’ll see it once after updating, with the editor open, and any chip you had switched off stays off.
- Later replaces Skip on the update note: it hides the note for four hours without turning the update down.
- New versions reach Macs in stages, and a version that keeps failing on other Macs is paused before it reaches yours.
- The anonymous identifier Fleet reports usage under is now replaced every day, so one day’s usage can’t be linked to another’s.
Fixed
- A session that started Claude, ran
/clearor/exitsince the last change to the sidebar now comes back from a restart as you left it. It used to reopen as a bare shell, with the old conversation, or with Claude relaunched. - Fleet could stop responding, with every session frozen, after a Mac woke from sleep.
- An update that had already downloaded no longer hides a newer one released after it.
- Codex sessions using “Approve for me” no longer show Needs permission, or notify you, for requests Codex approves on its own.
- Turning reporting off now discards anything still waiting to be sent; turning it back on within a minute could send it anyway.
A fix for machines meeting Codex or Antigravity for the first time.
Fixed
- Fleet could run an agent without ever offering to set it up. It looked for
claude,codexandagyin a login shell, which on zsh does not read.zshrc— where nvm, mise, asdf and a hand-written~/.local/binline usually put them. The sessions Fleet starts do read it, so the CLI worked in a session while Settings showed no integration for it, the welcome guide dimmed its row, and the new-session menus never offered it. It looks for them the way a session does now. - “Fleet’s plugin isn’t running here” waited a minute for every agent. That minute was set for Antigravity, which takes about that long to write its first heartbeat. Claude Code and Codex report almost immediately, so a session with no plugin sat there saying nothing for most of it. The wait now matches the agent.
Fleet’s whole premise is a sidebar of many AI coding sessions where you can see, at a glance, which one needs you. Until now that only really held if the sessions were Claude Code.
1.0.0 is that premise holding for whichever agents you actually use. Codex and Antigravity are first-class alongside Claude Code — the same live rows, the same notifications, the same setup — and a sidebar of mixed agents reads exactly the way a Claude-only one always did.
Where an agent reports less, Fleet shows less rather than guessing. Every gap below is a gap in that agent’s own hooks, and it is named rather than papered over.
Added
- Codex sessions get live rows. State, model, context percentage, permission mode and subagent count, the same as a Claude row — and because its permission prompts name the tool they are about, Approve and Deny are offered straight away.
- Antigravity sessions get live rows. State, model and context percentage. Quieter than the other two, deliberately: Antigravity publishes no event when a permission prompt goes up, none for subagents and none for a session ending, so those are left out rather than guessed at.
- Start any agent you have installed from the + menu, the sidebar’s right-click menus, the command palette, or File ▸ New Codex Session. Only agents actually on your Mac are offered.
- A setup section per agent in Settings, each with its own install, repair and health read-out. Codex’s says the thing that is invisible from every other angle: its hooks have to be trusted separately, or they are listed, enabled, and silently never run.
- The welcome guide shows all three agents, including ones you have not installed, so it is clear what Fleet can report on before you go looking for it.
- A small mark on each row naming which agent it is — shown once you have more than one set up, when the row title alone stops being enough.
- Any agent can drive Fleet. The plugin that carries the status hooks now ships for Codex and Antigravity too, so a session in either can open new sessions, read the ones already running, manage groups and profiles, and change Fleet’s settings — the same MCP server Claude Code has had.
Changed
- Three settings lost the word “Claude”, because they no longer mean only Claude: “Resume conversations on launch”, “Let agents control Fleet” and “Let agents type into sessions”. Your existing choices are unaffected. “Close the session when Claude exits” keeps its name — it genuinely is Claude-only, since neither other agent reports why a session ended.
- The sidebar’s setup banner names the agents on your machine rather than offering Claude Code to someone running Codex, and it goes once any agent is reporting.
- Fleet keeps its session-status files in
~/.fleetnow, rather than under~/.claude— they are Fleet’s own bookkeeping, not any agent’s data, and a Codex plugin writing into~/.claudewas plainly wrong. Sessions open across the update keep reporting; the old location is still read until they end.
Fixed
- “Close the session when Claude exits” could stop working in a pane that had since run another agent. It asked whether an agent was in the foreground rather than whether Claude was, so a pane that had moved on to Codex reported Claude as present indefinitely and the setting silently did nothing.
- The “Fleet’s plugin isn’t running here” prompt no longer accuses a session that is simply still starting up, and takes itself down on its own if the session it flagged begins reporting.
- Antigravity’s context percentage measures against the model’s real window.
It was reading against a limit that sits next to the token count and is not
the context window, which put a session at 7.5% where Antigravity’s own
/contextsaid 1.8%. A model Fleet has no window for now shows no percentage at all rather than a plausible wrong one. - The agent marks are drawn without the white boxes they were shipping with — Codex’s, which takes the colour of the text beside it, was rendering as a solid block.
- The “live status is off” banner goes away once you set it up. It was asking whether the plugin was perfectly healthy rather than whether it was installed and switched on, so it could sit there permanently — above rows that were visibly reporting — with no button able to clear it. Its button now switches a plugin back on if that is what is wrong, instead of reinstalling files over it.
- A row can no longer show one transcript’s model beside another’s context percentage after a session’s transcript is rewritten rather than appended to.
Fixed
- Light mode was only skin deep. Fleet’s own chrome — the sidebar, the terminal pane — followed whichever theme you picked, but the title bar, every sheet, and dialogs like the plugin status prompt were drawn by macOS itself and only ever followed the system’s own light/dark setting. Picking a light theme on a Mac set to dark mode (or the reverse) produced a light window with a black command palette dropped on top of it, and a couple of dialogs — the onboarding sheet and the “Fleet’s plugin isn’t running here” prompt — painted a hardcoded dark background that went unreadable on a light one. Every surface now follows Fleet’s theme, not the system’s.
Two things change for everyone in this release. Fleet’s Claude Code integration
becomes a plugin instead of entries in your settings.json — which also means a
Claude session can now drive Fleet — and anonymous usage reporting is on by
default. Both are covered first, below; everything after them is new features
and fixes.
Changed
- Anonymous usage and crash reporting is now on by default. It was opt-in,
and effectively nobody opted in, so the numbers described the people who wrote
Fleet rather than the people using it. Fleet reports which features get used,
counts in coarse bands rather than exact numbers, and the crash reports macOS
already collects. It never sends terminal output, session titles, working
directories, git branches, AI summaries, file paths or anything you type — the
event format has no way to carry text at all. The install identifier is
random and not tied to you or your Mac.
- Turn it off with Share anonymous usage & crash reports under Settings ▸ Privacy. Switching it off deletes the identifier.
- This flip applies once, and it does not spare an existing opt-out.
Earlier versions wrote
"telemetryEnabled": falseinto every config whether or not you had chosen it, so a deliberate opt-out and a default were the same thing on disk and there was no way to tell them apart. If you turned this off in 0.6.0, turn it off again. Any choice you make from 0.7.0 onwards is kept. DO_NOT_TRACK=1(orFLEET_NO_TELEMETRY=1) switches it off for a launch without changing the setting. For an app started from the Dock that meanslaunchctl setenvoropen --env.
- The status hooks are now a
fleetClaude Code plugin. Fleet no longer merges anything into yoursettings.json. Updating takes the old entries back out — once, with the file backed up as.bakfirst — and installs the plugin into~/.claudeand any other Claude config directory it finds. Your own hooks on the same events are untouched. Nothing to click: an existing install migrates on launch.- Sessions already open need
/reload-pluginsbefore their rows report anything; new sessions are fine. - A plugin only runs while it is enabled. If the
fleetplugin gets switched off, every row goes quiet — Fleet notices, says so, and offers Turn the fleet plugin back on under Settings ▸ Claude Code integration. - Uninstalling is now
rm -rf ~/.claude/skills/fleet, instead of editing a settings file by hand.
- Sessions already open need
- The welcome guide is five pages, and three of them ask for something: Welcome to Fleet · Never miss a turn · Turn on live Claude status · What Fleet reports · You’re all set. The feature tour is gone. Notification permission is asked for on the page that explains what the banners are for, rather than firing at launch over the sheet, and the page reports what macOS decided. Quitting part-way through resumes where you left off.
- Fleet no longer asks for Full Disk Access. It was there to pre-empt the per-folder prompts, which it does not reliably do. Instead the prompts now explain themselves when they appear, and Settings offers to answer Desktop, Documents and Downloads in one sitting.
- A setup banner sits at the foot of the sidebar until the plugin is installed — the sidebar explaining why its own rows are inert.
- The focused session is easier to find in a long sidebar. The coloured lane down its leading edge doubles in width when focus lands, and eases back when it leaves.
Added
- Let a Claude session drive Fleet. The plugin ships an MCP server, so an
agent can open new sessions (with a starting prompt), read and steer the ones
already running, manage groups and launch profiles, and change settings.
Fleet listens on a unix socket inside its own config directory —
0600, no TCP port, so no firewall dialog. Two switches under Settings ▸ Claude Code integration: Let Claude control Fleet, on by default, and Let Claude type into sessions, off by default and separate because it is one agent typing into another. Shift+Enterputs a newline in the prompt instead of submitting it. Works at a plain shell prompt too.- Right-click menus for the sidebar and group headers. Right-clicking blank space offers everything that starts a session — a shell, Claude, either in a chosen folder, or a saved profile — plus New Group, collapse/expand all, Clear All Scrollback and Close All Sessions. Right-clicking a group header starts those straight into that group, so filing a new session no longer means spawning it and dragging it in.
- A sound for each kind of notification, and for the terminal bell. Four pickers — permission, your turn, stalled, error — plus the bell, each with a preview button. The defaults are exactly what Fleet played before, so nothing changes until you choose something.
⌘-click to follow a link, with a label saying so. A plain click used to open whatever was under it, so double-clicking a path to select it opened the path. Hovering now floats a small label — “⌘-click to open this file”, “…this folder”, “…this website”. Relative paths resolve against the session’s working directory, and a trailing:42or:42:9is stripped, so the form an agent actually prints opens the file it names. The confirmation sheet for a file or folder gains Reveal in Finder.- Add Config Directory…, under Settings ▸ Claude Code integration, for
a
CLAUDE_CONFIG_DIRthat lives outside your home folder. Fleet finds~/.claudeand any~/.claude*in use on its own.
Fixed
- Sessions that relocate
CLAUDE_CONFIG_DIRnow report status. Fleet only ever wrote~/.claude/settings.json, so a session that loaded a different config loaded none of Fleet’s hooks: no status, model, context %, mode or branch, and a row stuck on “New Session 3” with nothing saying why. Reported against 0.6.0. - The sidebar answers the first click, wherever in the row it lands. Two things were taking clicks: the hover preview was a popover, and AppKit spends the first click outside one dismissing it, so clicking a session while its preview was open never reached the row. And clicking the session’s name sat out the system’s double-click interval — half a second — before the session changed, while clicking the blank part of the row switched at once. The preview also no longer leaves a half-transparent card smeared over the terminal mid-switch.
- A session waiting on you notifies once. Clicking into a waiting session and then on to another one raised the banner, and its sound, a second time for a prompt that had not changed.
- The welcome guide can be skipped. An install that never installs the plugin is still a working install — the rows just cannot say what a session is doing, and two other surfaces say so. Escape now closes the guide properly, rather than leaving it to reappear on the next launch.
Fleet used to get slower the longer you used it, and this release is mostly about why. Closing a pane did not stop what was running in it, and the subtitle under each working session was being generated by a Claude process per session. Both are gone, and the subtitles are better for it.
Added
- Close the session when Claude exits. Quitting Claude in a pane left the
pane behind, empty, to be closed by hand. A new switch under Settings ▸
Terminal makes
/exitend both at once. It is off by default and offered once, the first time you close a pane Claude has already left. Only a deliberate quit counts —/exit, Ctrl-D, Ctrl-C twice./clear,/resumeand a crash leave the session exactly where it is, because a crash’s error text is worth more than a tidy sidebar.
Changed
- A working session now says what it is actually doing — “Starting Astro dev server”, “Editing Session.swift”, “Reading developers.cloudflare.com” — instead of a vague phrase. Claude already writes a description for nearly every tool call it makes; Fleet reads that rather than asking a model to invent one. It is instant, it costs nothing, and it is on by default. The setting is Session activity subtitles, under Activity & detection.
- The summary interval setting is gone, along with the subprocess it rationed. Nothing to tune any more.
Fixed
- Closing a session ends what was running in it. Fleet closed its own end
of the terminal and left the shell — and any agent inside it — running. On a
normal day that was seven stray
claudeprocesses holding around 970MB against the two sessions still open. That is what “Fleet gets slow after five or six sessions” was: the count that mattered was never the number on screen. Quitting Fleet had the same hole, and closes everything properly now. - The sidebar’s left edge. A row’s accent bar left stubs hanging in the gutter beside the highlight; a coloured group’s stripe poked past the band’s rounded corner as a detached tick; and a selected row inside a coloured group drew two bars side by side. One rounded lane throughout now, whatever is colouring it.
Fixed
- The session you had selected could never raise a notification. Fleet suppressed banners for the focused session whether or not you were even looking at Fleet, so stepping over to the browser while Claude asked a question in that session meant silence. It now stays quiet only when Fleet is the app you are in and that session is on screen.
- A question notification no longer offers Approve. Claude Code announces a permission request, a question and a finished plan with the same payload, and the detail that separates them arrives seconds after the banner does — so a question was treated as a permission prompt, and Approve sent Return, which picked whichever answer happened to be highlighted. A prompt Fleet cannot yet identify now raises a banner without buttons and names itself properly a moment later.
- The context percentage on a 1M-context session was five times too high. A session 134k tokens into Opus 5 showed 66.9% where Claude Code’s own status line said 13.4%: Fleet measured against 200k whenever the transcript did not spell the window out. It now knows the published window for each model, and follows a model changed part-way through a session instead of keeping the one it started with.
- File ▸ Launch Session with Profile stays open. With any session working, the submenu showed the profiles for a fraction of a second and then dropped, often taking the File menu with it — it was being rebuilt several times a second by updates it had no use for.
Two things Fleet kept asking you to leave the app for: a shell to run the command Claude just asked you to run yourself, and somewhere to actually manage your profiles. Both are here. The sidebar also got a great deal more honest — several things it displayed were only as fresh as the last time something unrelated happened to redraw it.
Added
- Quick Terminal (
⌃\``) opens a scratch shell in a drawer under the focused session, already in that session's directory — for the command whose output must not reach the conversation. It keeps no shell history and only 400 lines of scrollback, so a token pasted there to keep it out of a transcript does not end up in~/.zsh_history` instead. - Make it a session. Start an agent in a Quick Terminal and a banner offers to promote that shell — same conversation, same scrollback — into a real session with a row of its own.
- Profiles are now something you create on purpose. “Create Profile…” opens
a sheet with the name, the folder and the starting command all editable and
visible, instead of silently naming the profile after a folder and starting
claudein it. - Manage Profiles… puts the whole list beside a live-editing form, with
+,−and drag to reorder — that list is the menu order. Fixing a typo no longer means editingconfig.jsonby hand. - Copy Resume Command on a session’s right-click menu puts
claude --resume <id>on the clipboard, with a toast confirming exactly what was copied. It is absent when there is no conversation to resume. - Sidebar groups can be coloured, and a group’s colour shows on its rows.
- Choose how much of the model name the chip shows — a new Sidebar setting
offering initials, family, family and version, the full marketing name, or the
raw model id. The default is now
Opus 5rather thanO5; “Initials” brings the old chip back. ⌘⇧↑/⌘⇧↓/⌘⇧↖/⌘⇧↘scroll the session’s own scrollback.
Changed
- A session waiting on a plan says “Plan ready”, in violet with a clipboard icon, instead of “Needs permission” in red beside a warning triangle. A plan has been written and is waiting to be read; that is not the same request as “may I run this command”. It still counts on the bell, the badge, auto-sort and the Dock bounce like any other prompt, but its notification has no Approve button — Return on a plan prompt means “yes, and use auto mode”, which is more than a one-tool Approve should promise.
- Closing a session that is running something now asks first, and says what.
Previously only a live Claude session was guarded, so a shell part-way through
npm installor a build closed on⌘Wwithout a word. An idle shell still closes straight away. - The Quick Terminal control sits along the bottom edge of the session pane, where the drawer opens, rather than in the sidebar footer.
- The focused row is easier to pick out. Focus and hover were eleven levels of grey apart on the dark theme, which is to say indistinguishable.
- The disk image you download now looks like Fleet — the site’s palette, the wordmark, the version, and an arrow to your Applications folder, instead of a bare grey Finder window.
Fixed
- A session that starts a command no longer fails with “command not found:
claude” when Fleet was opened from the Dock. The starting shell did not read
your
~/.zshrc, so it never saw thePATHyour machine actually builds — which is why typing the same command by hand worked immediately afterwards. Affected New Claude Session, profiles, the⌃⌥⌘↩summon and resume-on-launch. - A permission prompt clears from the sidebar when you answer it. Claude Code writes nothing when a prompt is dismissed, so approving a five-minute build left the row reading “Needs permission” for the whole five minutes. A prompt raised after your answer still shows.
- “Remove from Group” works, sessions can be dragged out of a group and into an empty one, and renaming a group is no longer cut short a second in by a session updating its own title.
- The sidebar header’s “working” and “waiting” counts are current. They could read “1 working, 1 waiting” over two plainly idle shells, and the bell appeared and vanished for unrelated reasons.
- A row looks focused when you click it. The highlight could get stuck on a stale answer and leave no row looking active at all.
- A session’s right-click menu no longer flashes while an agent rewrites the terminal title underneath it.
- A new profile starts with an empty command rather than a pre-filled
claudeyou never chose. Existing profiles are untouched. - “Release notes” in the update banner lands on the version being offered, rather than at the top of the changelog.
- A model id with no marketing name beside it reads as “Haiku 4.5”, not “H4”.
Fixed
- The context percentage now measures against the model’s real context window. Every model except the 1M Opus was assumed to be 200k, so a session on a larger window read high the whole way up — 140k tokens showing 70% on a 500k model, the row turning amber at well under a third of what it claimed — and past 200k the figure could exceed 100%. Fleet now reads the window the model states, and falls back to what the session has already spent, so the percentage can never be more than 100 again.
- The Dock icon only bounces when a session needs an answer — a permission prompt, a question, or a failed turn. “Your turn” ends every normal turn, so bouncing for it meant Fleet demanded attention every time you looked away, and kept re-bouncing every couple of seconds for as long as a finished session sat there. A prompt now bounces once, when it arrives. The Dock badge is unchanged: it still counts every session waiting on you, “your turn” included, and the setting is now Bounce the Dock icon for prompts and errors.
Two themes in this one. Fleet now keeps itself up to date — this is the last version you will need to come back here to download. And a security audit of Fleet, the Claude Code hooks it installs, and the service that receives crash reports closed a number of holes; three of those changes alter behaviour you will notice, and they are listed under Changed.
Added
- Fleet updates itself. It checks for a new version shortly after launch and every few hours after that, downloads it in the background, and tells you in the sidebar when it is ready. Because this build is the first with an updater, you will need to install it by hand — after that Fleet takes over.
- Updates install when you quit, never by restarting. Every session in Fleet is a live shell, usually with Claude working in it, so an update that relaunched the app would close all of them. The new version waits, already downloaded and verified, and swaps itself in the next time you quit. Restart Now is there if you would rather not wait, and tells you how many sessions it will close before you press it. What’s New opens the changelog so you can read what is in an update before taking it.
- An Updates section in Settings (⌘,). Turn off automatic checks, or keep checking but install by hand. It shows the version you are on and what the updater is doing. Check for Updates is also in the Fleet menu, the menu-bar icon and the Command Palette (⌘⇧P).
- Two new statuses: API error and Login required. When a turn ends on an API error (overloaded, a dropped connection, a rate limit) or an expired login, the row turns red, names the failure —
API error · 529 Overloaded— and stops pretending to work. Claude Code reports neither of these to anything Fleet listens to, so until now a failed turn looked exactly like a slow one. - A notification when a session fails, with its own switch in Settings ▸ Notifications, on by default. Silencing routine prompts should not silence a session that died.
- Settings ▸ Claude Code integration reports its own state — installed, not set up, or set up but not reporting. If the hooks are half-installed it names the specific gap and the button becomes Repair Claude Integration.
- Walk the sidebar with ⌥⌘↑ and ⌥⌘↓, and hop between groups with ⌥⌘← and ⌥⌘→. Focus follows the order the sidebar actually shows, so it stays right when sessions waiting on you float to the top.
Changed
- A click on anything that is not a web link now asks first. Terminal output chooses a link’s text and its target separately, so output reading
https://github.com/anthropics/claude-codecan point at an application in your Downloads folder.http,httpsandmailtostill open on the click; everything else, local file paths included, shows a sheet naming the real target and the app that would handle it, with Cancel as the default. - “Open in Finder” is now “Reveal in Finder”. It selects the session’s directory instead of opening it — opening a path launches it, and an app bundle is a directory like any other.
- A “Needs permission” banner is titled with Fleet’s name for the session, not the title the session chose for itself. Approve and Deny bring Fleet forward and focus the session before sending the keystroke, so you see what you just answered.
- Failed sessions count as needing you — they carry the Dock badge, sort to the top with “Float sessions needing you to the top”, and are reachable with ⌘⇧J. A session with a known failure is no longer also labelled “stalled”.
Fixed
- Restoring sessions on launch can only ever run
claude --resume. The conversation id came from a file any program on your Mac can write, and went into a shell command unquoted — so the right filename there ran as a command the next time Fleet opened. Ids are now checked before they go anywhere near a command line. - Fleet’s files are readable only by you.
state.json,config.jsonand the Claude session-status files were world-readable in world-readable directories: your working directories, session names, git branches and transcript paths were visible to any other account on the Mac. They are now0600inside0700directories, and files left by an earlier version are replaced the next time they are written. - The sidebar’s AI summaries run with no tools. The one-line “what is this session doing” phrase is written by a small Claude model reading the session’s transcript, which contains whatever that session has read, web pages included. It had ordinary tool access while doing it; it now has none.
- Dropping a file onto a Claude session cannot run a command. A filename containing a newline behaved as Return at the prompt when the program in the session had not asked for bracketed paste.
- A session’s reported working directory is believed only if it is a real local directory, which is what the git branch and the shell probe are read from.
- Sidebar rows stopped reporting their model, context % and branch the moment a session went idle or asked a question. Some of Claude’s hook events do not carry the transcript path, and each one overwrote the path already recorded — so whichever sessions were resting were usually the ones showing nothing.
- Sessions in a worktree could lose their details permanently. Claude files a transcript under a directory named after the session’s working directory, so deleting a worktree or changing directory moved it and Fleet went on looking where it used to be. Fleet now finds the transcript again by session.
- A row could show a different session’s model, context % and branch. A pane that had been through more than one Claude session — after
/clear, after resuming, or after one ended without cleaning up — kept a state file for each, and Fleet picked between them at random. - A session no longer flickers out of the sidebar while it is working. Claude’s hooks rewrite each session’s state file many times per tool call, and Fleet could catch one mid-write and briefly drop the row.
- Fleet could think its own hooks were not installed and go on offering to install them, on a
settings.jsonFleet itself had written. Claude was running the hooks correctly the whole time; only Fleet’s check for them was wrong. - Setting up the integration no longer overwrites a
settings.jsonit cannot read. A file with a syntax error was replaced by one containing just Fleet’s hooks, losing everything else configured there. Setup now stops and tells you to fix or move the file first.
If you are coming from 0.2.0 or earlier
Fleet used to install a status line into ~/.claude/settings.json pointing at
~/.claude/statusline/ctx_monitor.js. That script built a shell command by
pasting the current directory into it, so a directory whose name contained
$(…) or backticks ran as code — in every Claude Code session on the machine,
not only the ones in Fleet. Fleet has not installed it since 0.3.0 and never
touches your status line now, but it cannot safely remove one it can no longer
prove it wrote. If you have not already:
rm ~/.claude/statusline/ctx_monitor.js
then delete the "statusLine" key from ~/.claude/settings.json, and put your
own back if you had one.
This is the first build of Fleet that starts on a Mac other than the one it was compiled on. It also stops Fleet touching your Claude Code status line, and smooths out a first run that used to open with a wall of permission prompts.
Breaking
-
If you set up the Claude Code integration on 0.2.0 or earlier, undo the status line it installed. Fleet wrote a
statusLineentry into~/.claude/settings.jsonpointing at~/.claude/statusline/ctx_monitor.js, replacing whatever status line you already had. That script built a shell command by pasting the current directory into it, so a directory whose name contained$(…)or backticks ran as code — on every render, in every Claude Code session on the machine, not only the ones in Fleet, and without the permission prompt that guards a normal tool call. To undo it:rm ~/.claude/statusline/ctx_monitor.jsthen delete the
"statusLine"key from~/.claude/settings.jsonand put your own back if you had one.Fleet deliberately does not do this for you. A path cannot prove who put it there, and silently deleting a status line you chose yourself would be a worse bug than the one it fixes.
Fixed
- Fleet starts. Every release up to and including 0.2.0 quit the instant you opened it, on every Mac except the one that built them. The app looked for its bundled fonts and Claude Code hooks inside a build folder belonging to the machine that compiled it, and gave up when that folder was not there. If Fleet has never once opened for you, this is why — nothing you did caused it, and nothing needs undoing. Install this build over the old one.
Added
- A Full Disk Access step in the welcome flow. macOS asks about each protected folder separately — Desktop, Documents, Downloads and more — so a terminal meets a stack of prompts the first time it is used. One switch covers all of them, including the shells Fleet starts for you, and the new step links straight to it. It is in Settings ▸ Permissions too, if you skip past it or want it later.
- A prompt when a session is running Claude without the hooks installed. Skip the setup step and the sidebar row for a Claude session cannot report anything — it looks like Fleet having nothing to say rather than Fleet having no way to say it. Fleet now offers the setup once, at the moment that gap is real, showing what the row looks like with and without. Answer it either way and it does not come back.
Changed
- Setting up the Claude Code integration installs hooks and nothing else. Hooks are a per-event list, so Fleet’s sit alongside yours and a re-run replaces only its own; your status line is never read or written.
- The model, context %, effort and branch on a sidebar row come from Claude Code’s transcript directly. Same values as before, with no status line involved — including the distinction between a 200k and a 1M context window.
- The app icon is the same size as everything else in your Dock. It was drawn edge to edge on its canvas, which made it sit about 24% larger than every icon beside it.
Removed
- The ⚡ fast-mode marker on the model chip. Fast mode is reported only to a status line, and Fleet no longer installs one.
Fleet can now tell you when it crashes — if you let it — and three long-standing terminal glitches are gone: shells starting at the wrong width, prompts erasing what you were typing, and links that only worked if you happened to be holding Command.
Added
- Share anonymous usage & crash reports — a new option, off unless you turn it on, offered once during setup and always available in Settings ▸ Privacy. It reports which features get used and forwards crash reports collected by macOS, so bugs get found without anyone having to file them.
- Fleet never sends terminal output, session names, working directories, git branches, AI summaries or anything you type. The event format it uses has no way to carry text at all, so that holds by construction rather than by promise. While the setting is off there is no identifier for your install; turning it off deletes the one that existed, and turning it back on creates a new one unconnected to the old.
Changed
- Links in the terminal underline as soon as you point at them and open on a plain click — no need to hold Command. Previously a URL was indistinguishable from ordinary text until you happened to press it, which made some links look inert, long wrapped ones especially.
Fixed
- Shells no longer start at the wrong width. Fleet was starting the shell before the pane had settled on its final size, and a shell still booting can miss the correction — leaving that session wrapping your input in the wrong place for as long as it stayed open.
- Prompts with powerline glyphs no longer wrap early and erase the command you are typing. Sessions now start with a UTF-8 locale, so the shell counts a multibyte character as one column rather than one per byte.
No user-facing changes — 0.1.1 is functionally identical to 0.1.0.
This build is the first produced end-to-end by the automated release pipeline, so it verifies that signing and notarization are reproducible rather than hand-run. If you are already on 0.1.0, there is nothing here for you.
The first public build. Signed with a Developer ID certificate, notarized by Apple and stapled, so it opens on a clean machine with no Gatekeeper warning.
Sessions
- One sidebar row per session with live Claude Code status — working, your turn, needs permission, MCP call in flight, PR opened.
- Info chips per row: model, context percentage, mode, subagent count and git branch, each individually toggleable.
- Groups, per-session colours, drag-to-reorder, and renaming that honours both
double-click and Claude’s
/rename. - Optional AI summaries: a ≤24-character phrase of what a working session is doing, via a throttled Haiku call on your existing login.
- Hover a row to preview the session — recent conversation for Claude, terminal output for a shell.
- Stuck detection flags a session reporting “working” that has gone quiet.
Getting around
- Quick Switcher (⌘K), Command Palette (⌘⇧P), and search across every session’s scrollback (⌘⇧F).
- ⌘⇧J jumps to the next session waiting on you; ⌘1–9 focus by position.
- Menu-bar extra and Dock badge count sessions needing attention.
Terminal
- SwiftUI + SwiftTerm, no Electron. Bundled MesloLGS NF so prompt glyphs work immediately.
- Three themes that colour the whole app, drag-and-drop file attachment, ⌘-click to open URLs and paths, and an optional fleet-wide resource bar.
Known limitations
- Claude Code is the only agent with rich status; other shells appear as basic rows.
- Split panes are built but disabled in this build.
The homepage always points at the newest release — currently 1.1.1. Found a regression? help@fleet-terminal.app.