- →feat(sound): distinct success, alert and error sounds
- →fix(git-panel): open file diffs in multi-repo workspaces
- →fix(icons): separate the sub-agent and autopilot glyphs
- →feat(sidebar): fold older workspaces and float active projects
- →fix(git-panel): keep PR link pill at text-xs size
- →fix(git): stop refusing checkouts over keys the -c overrides neutralise
- →feat(git): let the user clear the config that blocks a checkout
- →chore(release): bump version to 0.8.2
What's new in Fletch.
Every release, in plain language — features, improvements and fixes. Currently on v0.8.2.
- →feat(usage): aggregate token usage across every connected host
- →feat(host): one-line install script that ends at pairing
- →feat(supervisor): stream spawn progress stages to clients
- →Promote Usage to its own screen; move feedback to the title bar
- →Group the Settings nav under headers and fold Workspace into General
- →chore: bump app version to 0.8.1
- →refactor(remote): move the TS protocol client into the desktop tree
- →refactor(host): emit engine events through an EventSink
- →refactor(host): give the engine an EngineCtx instead of an AppHandle
- →refactor(host): engine runtime handle, broadcast sink, and remote taps off the Tauri bus
- →refactor(remote): extract the wire protocol into crates/fletch-proto
- →feat(remote): protocol descriptor and answerable publish approvals
- →feat(store): environment-keyed store and a Transport seam
- →feat(remote): one multi-connection dialer for both apps, and the desktop dials hosts
- →feat(remote): paired hosts on the desktop, dialled in the background
- →refactor(host): boot the engine without Tauri, and let the desktop call it
- →feat(remote): environment switcher, remote agent views, and capability gating
- →refactor(core): move the engine into crates/fletch-core with no Tauri in its graph
- →docs(plan): multi-host progress checklist
- →feat(host): fletch-host, the engine with no window
- →feat(host): fletch-host on Linux: uid mapping, login shell, state roots, QR, units, release job
- →feat(remote): follow-ups: five more ops, host name at pairing, approval resolution, host status facts
- →feat: Plan with PM on mobile — dictate an idea, rule on the backlog items it becomes
- →refactor(usage): period picker on the header, Cost/Tokens nested under Overview
- →feat(remote): the Git panel's working-tree ops on the wire
- →fix(sandbox): deny agents the engine's data dir on a macOS host
- →test(sandbox): quote the probe path so the auto-exec seatbelt test actually probes
- →docs(multi-host): refresh the progress checklist
- →feat(remote): workflows and roadmap on the wire, host version notice, fletch-host service install and update
- →feat(store): track Claude background tasks (sub-agents, background bash) per agent
- →fix(store): never type a missed-start task as a sub-agent without evidence
- →feat(sync): ingest Claude sub-agent transcripts so nested threads survive reload
- →feat(mobile): show live sub-agents in the agent list and chat
- →feat(ui): show live sub-agents in the sidebar and keep the chat Task row alive
- →feat(codex): nest Codex sub-agent threads under their spawn call on replay
- →feat(cursor): surface Cursor sub-agents live and on replay
- →feat(remote): replay the running turn to a phone that missed the stream
- →fix(remote): notice a dead socket after the phone resumes
- →feat(host): take the GitHub token from the environment or a systemd credential
- →feat(client): browse a remote host's folders when adding a project
- →feat(remote): project settings on the wire
- →feat(host): provider status and login from the host CLI
- →feat(remote): tell clients which providers a host can run
- →feat(remote): scopes at pairing — Full and Control presets
- →docs(multi-host): test plan, gaps plan, and the checklist for closing them
- →fix(multi-host): five client-side bugs from the audit — attachments, account routing, late approvals, phone re-pair, autopilot stash
- →feat(sidebar): agent-written workspace titles lead the sidebar rows
- →chore: bump app version to 0.8.0
- →feat(usage): machine-wide token and cost stats from Claude Code and Codex transcripts
- →chore: bump app version to 0.7.32
- →refactor(mobile): share the desktop icon set instead of hand-drawn SVGs
- →fix(mobile): clear the stale busy flag from a fresh host snapshot
- →fix(mobile): make swipe-back work on device and attach sheet swipe
- →feat(mobile): honest host-connection state, redesigned empty state, shared Notice
- →fix(codex): end a failed turn in chat instead of crashing the agent
- →feat(mobile): attach photos and files to a message from the phone
- →fix(provision): reconcile the clone's inherited local heads after checkout
- →fix(git): count unpushed against origin, not the base; show the real ref on the phone
- →feat(mobile): poll working-tree shortstats for the agent list, like the desktop
- →refactor(git): resolve an agent checkout's base in one place, remote-tracking first
- →fix(archive): commit the archive on click, then clean up; keep hidden rows hidden
- →feat(git-panel): open a changed file's diff in place from the changes list
- →feat(autopilot): per-workspace kill switch in the Git panel header
- →feat(git-panel): readable review comments with visible actions
- →refactor(autopilot): drop the stuck state — autopilot is a no-op outside an open PR
- →refactor(git-panel): one-row footer, header pill as the PR link
- →feat(tooltip): one body-level tooltip layer so no pane can clip a tooltip
- →chore: bump version to 0.7.31
- →feat(providers): live-discovered models on settings rows; drop dead View logs button
- →refactor(rpc/roadmap): split the roadmap dispatcher into modules
- →refactor(rpc/git): split the git dispatcher into modules
- →fix(mobile): race IPv6 and IPv4 when dialling the relay
- →feat(mobile): swipe to go back and to dismiss sheets
- →fix(mobile): keep text size consistent across orientation changes
- →chore: bump version to 0.7.30
- →fix(antigravity): raise agy --print-timeout past its 5m default
- →fix(attachments): adopt pasted attachments into the agent workspace
- →refactor(roadmap): split modules, DRY helpers, thin command surface
- →feat(providers): probe whether each agent CLI is signed in
- →feat(providers): sign in to an agent CLI from Settings via an embedded terminal
- →feat(providers): install agent CLIs from Settings › Providers
- →feat(providers): show sign-in status and an in-row Sign in for installed agents
- →chore(release): bump version to 0.7.29
- →fix(store): chat model picker showed the archived agent's settings after a recycled name
- →feat(autopilot): fold the autopilot UI into the PR's own status
- →feat(composer): attach pasted clipboard images and files
- →feat(sidebar): arrow-key navigation through agent rows
- →fix(mobile): delegate commit & PR to the agent, keep the form as the manual path
- →fix(panels): read the provisioning guard off the live status
- →refactor(onboarding): single exit, no Esc, per-step skips only
- →fix(dictation): let the noise floor recover so a pause can end the session
- →feat(dictation): end a session after a pause on Apple's recognizer too
- →feat(dictation): let the phone honour "Stop after a pause"
- →fix(dictation): say what "Stop after a pause" actually does
- →chore(release): bump version to 0.7.28
- →fix(mobile): pair from the launch deep link, and show pairing progress
- →Reorganize settings into focused sections and add publishing, alert, and dictation controls
- →fix(chat): stop the first prompt rendering twice on a new agent
- →fix(panels): hold off git reads while a workspace is provisioning
- →chore(release): bump version to 0.7.27
- →fix(mobile): re-read the open thread's log on reconnect and foreground
- →fix(composer): send a follow-up with Enter while the agent runs
- →fix(mobile): launch the agent under the name the New Agent sheet shows
- →fix(mobile): keep the thread's log when the host has no session records
- →fix(supervisor): mirror new agents to other clients immediately
- →fix(remote): pair from off-network — rustls provider, relay bounds, fletch:// on iOS
- →fix(mobile): even composer margins and let the field grow with the text
- →fix(mobile): build under Xcode 27 — pin tauri dev and a swift-rs fork
- →feat(mobile): dictate the first prompt on the new-agent sheet
- →fix(mobile): keep the live log when an agent is re-opened mid-turn
- →fix(mobile): wrap long unbroken tokens instead of panning the transcript
- →chore(release): bump version to 0.7.26
- →fix(mobile): list a project's agents newest first
- →fix(mobile): let the iOS webview own the whole screen
- →fix(mobile): follow streaming chat output to the bottom
- →fix(mobile): sh.fletch.mobile bundle id, and ignore the generated iOS project
- →fix(relay): serve and dial the relay at relay.fletch.sh
- →fix(mobile): build the model catalog so the model picker has models to pick
- →fix(mobile): show provider brand icons instead of monograms
- →feat(mobile): render markdown in the chat view
- →feat: mirror user messages across desktop and mobile
- →Dictate messages from the phone, transcribed on the Mac
- →feat(dictation): make Apple's SpeechAnalyzer the default engine
- →Match mobile app icons to desktop branding
- →feat(dictation): emit a microphone level while a session listens
- →feat(composer): one primary control for dictate, send and stop
- →feat(composer): dictate from anywhere, insert at the caret, one control everywhere
- →feat(mobile): the composer's primary control as one morphing disc
- →feat(settings): dedicated Remote control section for mobile pairing
- →chore: bump version to v0.7.25
- →feat(remote): paired-device WebSocket server for the mobile companion
- →feat(mobile): Tauri iOS companion app scaffold
- →feat(remote): end-to-end encrypted, key-authenticated sessions (protocol v2)
- →feat(remote): Cloudflare relay for off-network access
- →fix(codex): replay 0.153 rollouts whose messages moved to item_completed TurnItems
- →feat(remote): expose the add-project commands as remote ops
- →feat(relay): NOTIFY frame and APNs delivery for push notifications
- →feat(mobile): add a project from the phone
- →feat(remote): host triggers and register_push for push notifications
- →feat(mobile): APNs registration and alert taps
- →chore: bump version to v0.7.24
- →fix(chat): wrap long unbroken tokens instead of overflowing the transcript
- →feat(dictation): download the Whisper model behind a Settings opt-in
- →feat(dictation): transcribe locally with whisper.cpp
- →feat(dictation): let the user choose the Whisper model
- →feat(dictation): hands-free auto-stop on the local engine
- →chore: bump version to v0.7.23
- →fix(build): link clang's runtime so whisper.cpp's @available resolves on arm64
- →chore(workflow): dedup kernel helpers into their shared homes
- →feat(drafts): remember the new-agent base branch per project
- →feat(git): let open_pr target a base other than the spawn default
- →feat(autopilot): project-level switch, on by default
- →feat(dictation): native speech recognition backend on Apple platforms
- →feat(composer): mic button that dictates into the prompt
- →fix(dictation): settle every start/stop outcome, and document the feature
- →chore: bump version to v0.7.22
- →fix(sandbox): stop a repo's own git config from executing on the host
- →feat(git): refuse a checkout whose config would execute, on both engines
- →fix(git): close the paths that bypassed the config guard
- →feat(titlebar): split capsule into project + workspace pills, full-screen project page
- →fix(provision): point a workspace clone's origin/HEAD at the real default branch
- →fix(security): close push-guard bypass via option-named branch (main/master force-overwrite)
- →fix(security): stop agent-writable git alternates from bind-mounting arbitrary host paths (Docker)
- →fix(security): close config-guard bypasses (worktree scope + push/fetch transport keys)
- →fix(workflow): tests gate blocks as unverifiable instead of degrading to agent self-report
- →fix(security): deny non-Claude providers' command-defining config (invariant 2)
- →fix(mergeGate): don't claim merge-ready from mergeable with no CI status
- →fix(sandbox): deny macOS launch-time auto-exec configs inside the Application Support grant
- →feat(project): add a Roadmap tab to the project page
- →Fix Codex turn details disappearing after completion
- →fix(codegraph): tell agents the explore budget note is advisory
- →fix(caps): confine force pushes to the agent's own branch
- →fix(workflow): enforce run budget during parallel/orchestrate stages
- →feat(roadmap): persist roadmap items per project
- →feat(roadmap): real project-manager chat on the Roadmap tab
- →feat(roadmap): PM proposes tickets through a real RPC tool
- →feat(roadmap): queued items dispatch workflows autonomously
- →feat(roadmap): merged PRs ship roadmap items automatically
- →feat(roadmap): thin the page header, align the chrome, make the split resizable
- →feat(project): give the Activity tab its own metrics
- →feat(roadmap): replace the nested new-chat dropdowns with a planning-session screen
- →refactor(roadmap): cut size and epic from the v1 surface
- →feat(roadmap): every item transition writes a durable history row
- →feat(roadmap): the PM proposes revisions and retirements as pending deltas
- →feat(roadmap): every altitude links to the one below it
- →feat(roadmap): dispatch order is explicit, visible, and jointly owned
- →feat(roadmap): dependencies are validated everywhere and cycles are named
- →feat(roadmap): the PM watches what gets built, not just what gets planned
- →feat(roadmap): the decisions the pipeline waits on land on the board
- →chore(roadmap): twelve hardening fixes from the stack review
- →feat(roadmap): the PM can pull the brake, only you can release it
- →feat(roadmap): judge, merge, or steer a fix without leaving the board
- →feat(roadmap): autonomy is a dial, and holds outrank it
- →feat(roadmap): the PM's memory is a seam, and the mock map is dead
- →feat(roadmap): the board tells you what it's building without you looking for it
- →feat(roadmap): an issue you didn't file still lands where you rule on it
- →feat(roadmap): the PM hears the run while it can still be stopped
- →chore(roadmap): drop the columns the model pruning cut
- →fix(db): run migrations with foreign-key enforcement off
- →refactor(roadmap): one PmTurn seam, attribution, honest copy
- →fix(roadmap): one hold authority, and a hold that survives done
- →fix(roadmap): standing blockages get durable objects, endings name their facts
- →fix(roadmap): join the satellite surfaces to the spine, complete the ruling grammar
- →fix(workflow): a step reports while it runs, and the tests gate runs the project's tests
- →feat(code-panel): persisted diff-base switch — all changes vs uncommitted
- →fix(git): stop the diff.external override from killing every patch diff
- →fix(readiness): a failing check blocks even when the merge gate stays open
- →feat(workflows): overhaul the run execution UI
- →feat(env): extend the env membrane to every app-run process
- →feat(workflow): reviewable artifacts at approval gates
- →feat(issues): carry the issue's discussion into the composed brief
- →feat(roadmap): decision log — rejected items keep their row and rationale
- →feat(roadmap): the PM reads the product context — brief, decision log, dup warnings
- →chore(sandbox): add EngineKind::is_container and use it at external engine branches
- →chore(sandbox): extract runtime-neutral container layer out of docker/
- →feat(sandbox): add the Podman engine kind, availability probe, and coverage declarations
- →feat(sandbox): the Podman engine launches, kills and cleans up agents
- →feat(sandbox): the Podman engine gets Docker's hardening layer
- →fix(sandbox): close the podman review findings and trim the comments
- →feat(supervisor): adopt a pre-provisioned workspace at spawn
- →feat(workflow): sequential kernel runner on a shared run workspace
- →feat(ui): render a sequential workflow run as one continuous thread
- →chore: bump version to v0.7.21
- →fix(git): a merged PR no longer ends the workspace
- →fix(git): adopt a follow-up PR opened out-of-band after a merge
- →feat(git): keep every PR a checkout has held, not just the current one
- →Fix agent running state during quiet work
- →feat(telemetry): track onboarding funnel and activation path
- →feat: add in-app feedback with optional screenshot
- →fix(rpc): split the mailbox root per build
- →refactor(ui): unify modals, form fields, and buttons into shared primitives
- →refactor(ui): extract PanelToggle and stop highlighting the right rail
- →chore: bump version to v0.7.20
- →fix(messaging): revive a resting session instead of stranding its message
- →chore(release): bump version to 0.7.19
- →fix(docker): wait for the daemon before skipping the startup sweeps
- →fix(docker): reclaim the base images our --pull supersedes
- →fix(docker): tear down an agent's containers on archive and discard
- →fix(workspace): make name allocation DB-owned; sweep orphan RPC mailboxes
- →fix(spawn): fork new workspaces from the remote base, never the checked-out branch
- →refactor(provision): one fetch ladder, opt-in rungs per caller
- →refactor(delegation): own the lifecycle app-wide, key it per checkout
- →refactor(readiness): one classification of what blocks a PR, and what fixes it
- →feat(autopilot): fix failing checks on an enrolled PR without being asked
- →feat(autopilot): reconcile a diverged branch and finish a stalled merge
- →feat(autopilot): work review comments — fix, answer, or push back
- →feat(autopilot): fix the dispatch race, add an audit trail, surface it in the sidebar
- →chore(release): bump version to 0.7.18
- →fix(chat): render unregistered tool inputs readably instead of as JSON
- →docs(readme): swap in the command palette demo loop
- →docs(readme): answer where feedback goes
- →fix(native-view): stop destructive spawns, route messages, theme the pane
- →fix(sandbox): redirect toolchain caches out of checkouts, budget git-state reads
- →fix(github): read PR checks + review threads by number in one query
- →refactor(github): one batched sweep for sidebar PR state + CI
- →feat(github): poll PR state + CI over ETag-conditional REST
- →perf(github): throttle branch discovery for repos with no PR yet
- →refactor(ui): one owner for git/GitHub polling, components just read
- →chore(release): bump version to 0.7.17
- →fix(usage): separate token spend from context occupancy
- →fix(sandbox): close two paths out of the agent workspace
- →fix(chat): render streaming tool calls the same way finished ones render
- →refactor(mcp): make MCP delivery one provider-agnostic seam
- →feat(mcp): deliver MCP servers to opencode
- →docs(readme): lead with an autoplaying demo GIF
- →feat(codegraph): tell agents to prefer the index over grep
- →fix(codegraph): don't index for providers that can't query it
- →feat(codegraph): give claude a codegraph-native subagent type
- →chore(release): bump version to 0.7.16
- →feat(presenters): add dedicated Codegraph presenter for mcp__codegraph tools
- →feat(commands): support Codex custom prompts as slash commands
- →feat(effort): allow changing reasoning effort mid-conversation
- →feat(effort): interactive effort control in the chat composer
- →feat(model): allow changing the model mid-conversation (backend)
- →feat(model): interactive model picker in the chat composer
- →refactor(effort): make reasoning effort session-level for all providers
- →chore: bump version to 0.7.15
- →feat(codegraph): silent code indexing for agents via bundled codegraph MCP
- →style(titlebar): enlarge right-side icons and widen gap
- →feat(settings): unlock Developer section for admin users
- →feat(workspace): gate Mission Control behind a Developer setting with a Home landing screen
- →feat(composer): facelift the footer action bar
- →fix(workspace): make agent-name allocation DB-authoritative per build
- →fix(git-panel): stop showing false "can't merge yet" for mergeable PRs
- →chore: bump version to 0.7.14
- →feat(run-panel): render output with read-only xterm (ANSI + cursor control)
- →fix(sidebar): stop deleted agents flashing back via stale refetch
- →fix(macos): reopen main window on dock-icon click
- →feat(settings): group Custom agents / Tools / Skills under "Customize"
- →feat(workflows): vertical pipeline editor with right-hand inspector
- →feat(workflows): rework builder into full-width canvas + right drawer
- →feat(workspace): enlarge composer on new workspace screen
- →chore: bump version to 0.7.13
- →fix: prevent /resume Enter keystroke from auto-restoring latest session
- →feat: Linear integration via generalized issue-tracker plumbing
- →fix: stop deleted/relocated projects from lingering in the sidebar
- →feat(project-settings): add env vars not in .env
- →chore: bump version to v0.7.12
Multi-repo projects, Mission Control, and a review queue
One agent, every repo
Real work rarely lives in one repository. A project can now group several repos, and an agent checks out all of them when it spawns. It's one workspace with a frontend, a backend, and a shared library side by side — the agent sees the whole thing.
Everything downstream understands the grouping:
The git panel shows each repo's changes separately, not one mashed diff PRs fan out across repos and cross-link as a set, so a change spanning three repos reads as one unit The Code tab spans every repo in the workspace Each repo carries its own settings and label
Mission Control
When you're running a fleet of agents, the bottleneck stops being the work and becomes you — reviewing it. Home now has a fleet review queue: everything waiting on you, in one place, ready to approve or send back. You triage the fleet instead of clicking through agents one at a time.
Workflows that show their work
Gates no longer just pass or fail — they produce evidence. A review gate shows you what it checked; a failed gate can be rejected with a reason that routes the work back. The new ReviewSurface gives you one consistent place to read that evidence and make the call.
Around that:
Promote any running agent into a workflow, or set a default pipeline for a whole project A workflow's step agents show in the sidebar, so you can watch the chain move Verification is now a reusable engine primitive — the same checked step, available anywhere in a run A require-tests toggle in the builder, and follow-ups that verify on turn end
GitHub issues to working agent
Your GitHub issues now land in an inbox on Home. Start work from one and Fletch prefills the workspace from the issue; the resulting PR closes it with Closes #N. Issue to branch to merged, without leaving the app.
Composer
@ and # mentions now work in the new-workspace draft composer, not just mid-run Invoke your library skills as slash commands, inline Per-model reasoning levels — set how hard a model thinks, per model Launch a workspace with file attachments, delivered to the run's first step
Lifecycle and reliability
Recover workspaces whose branch was deleted after a merge, instead of losing them Base-staleness and overlap hints in the git panel warn you when agents are about to collide Sleep assertion keeps long runs alive; close-to-tray and a quit confirmation stop you killing a fleet by accident Project deletion controls
One isolation model
With Docker sandboxing mature, the old git-worktree provisioning is gone — every workspace is now a full clone. One isolation model, documented canonically, with the terminology cleaned up across the app and site.
Slash commands and environment variables
If you've built custom slash commands, skills, or plugins for Claude Code, Fletch now finds them. Start typing in the composer and they're there — the same shortcuts you use in the terminal, no reconfiguration.
Per-project environment variables
Sandboxed runs are strict about what they can see, which is the point — but it made env vars a chore. You can now set them per project, and every sandboxed run picks them up.
Fixes and polish
- Merging now works on repos with auto-merge disabled — Fletch merges directly instead of stalling
- Refresh the model list from settings without restarting the app
- TUI-only Claude commands no longer flash through the managed view
- Removed the Density setting, which never did anything
- Balanced the auth button icons in onboarding
- Rewrote the README around what Fletch actually is now: workflows, isolation, control
Workflows
Fletch no longer just runs agents in parallel. It runs them in order.
Define a pipeline once — architect plans, coder builds, reviewer checks, tester proves — and every task runs that same pipeline, with a gate at every step. No step advances until its gate clears. The same disciplined process on every feature, not a prompt and a prayer.

Build a workflow
A visual block-tree editor for composing pipelines. Drag in steps, assign a specialist agent to each, set the gate that has to pass before the next one starts.
Every workflow is also a YAML file. Import one, export one, check it into your repo, share it with your team, diff it in a PR. The editor and the file are the same thing — edit either.
Gates
A step doesn't finish because the agent says it's finished. It finishes when its gate clears.
Tests gate — runs your test command. Green or it doesn't pass. Review gate — Greptile, your own reviewer agent, or your CI. Plan approval — you read it before anyone writes code.
Nothing advances on vibes.
Loops
A step can send work back. Tests fail, it returns to the coder, the coder fixes, the tests run again — until it's green or the loop hits its cap. Bounded, deterministic, no runaway.
Parallel blocks
Fan a block out across several agents at once, then join the results back. Code-producing branches merge for real, with conflicts surfaced for you to resolve rather than silently clobbered.
Budgets
Every run carries a ledger. Set a ceiling on a workflow and Fletch enforces it — a loop can't quietly burn your Max quota overnight.
Run monitor
Watch a workflow execute live: which step is active, which gate it's waiting on, what each agent is doing, where it looped back and why. When a run goes sideways you can see the exact step it went sideways at.
Agents that talk to you — and each other
A comms router lets steps report progress, ask each other for context, and escalate to you when they're genuinely stuck. Questions surface as real prompts you answer, not walls of text you scroll past.
An orchestrator role can compose workflows dynamically at runtime, choosing the next block based on what the previous one found.
Also in this release
- Force push support in git operations
- Composer restores drafts at their full height instead of collapsing
- Claude task notifications render as quiet system notices instead of cluttering the chat
Custom agents get skills and tools
Your custom agents are no longer just a model and a prompt. Give them a skills library and point them at MCP tool servers, and a specialist actually becomes a specialist — a reviewer that knows your review conventions, a tester that can reach your test infrastructure.
This is the groundwork for chaining them into workflows.
Hardening
Fletch's whole pitch is that an agent can't touch anything you didn't hand it. This release closes the gaps between that claim and the code.
OAuth tokens moved to the macOS Keychain, and the app data directory is now walled off from agents entirely. An agent can't read Fletch's own credentials. Tighter sandbox write grants, unified under one policy that applies identically whether you're on sandbox-exec or Docker. One rule set, two engines, no drift. Claude's config directory is now read-only with narrow exceptions, rather than broadly writable. Crash reports are scrubbed before they leave your machine. Nothing from your code or your prompts rides along in a Sentry payload.
Sync health
Agent CLIs change their transcript formats without warning. Fletch now detects when a layout drifts out from under it and tells you, instead of quietly showing you a stale conversation.
Also in this release
- Queued follow-up messages survive a restart — close the app mid-turn and your queue is still there
- Fletch stays responsive during heavy agent I/O; the global lock is no longer held across blocking child reads
- CI gates on rustfmt and clippy warnings
- Corrected the sandbox description in the README
Setup, without the yak shave
Fletch needs three things: git, an agent CLI, and a repo. Onboarding is now built around exactly those three, and it can install the first two for you.
Missing git? Fletch installs a portable copy. No Claude Code or Codex on your machine? One click. You no longer have to leave the app, find the right install command, and come back.
Also in this release
Untracked files now show as green U in the git panel, with real diffs and line counts instead of a bare filename
Run config you can actually edit
Fletch detects how to run your project — Node, Python, Ruby, Rust, Go. When it guesses wrong, or finds nothing at all, you're no longer stuck: the run config is now editable, with empty fields waiting for you instead of a dead end.
A PR panel that doesn't blink out
PR state is now snapshotted and persisted, so the panel keeps showing your pull request even when the checkout underneath it breaks PR polling is batched, backs off when GitHub rate-limits you, and adapts its cadence — less noise against the API, fewer stalls when you're running a lot of agents
Also in this release
Agent spawn now survives a failed base fetch — the fork point resolves to a SHA and falls back cleanly instead of erroring out
Per-project settings
Every project now has its own settings modal. Set how it runs, rename it, move it somewhere else on disk — without touching global config or re-adding the project.
Run overrides are also agent-scoped now: one agent can run the thing differently from its neighbour, in the same project, at the same time.
Port safety
Five agents, five dev servers, one port 3000. Fletch now detects the conflict and falls back to the next free port instead of letting the second agent die on EADDRINUSE.
Forking that holds up
Clone-mode workspaces pin their fork point to the fetched tip SHA — no more silently forking from a stale local ref Repos with no commits yet are now forkable; Fletch seeds an initial commit instead of refusing
Also in this release
- New curated place names in the agent name pool
- Logs moved to ~/Library/Logs, where macOS expects them
- Fixed spacing in the history search popover
Sandboxes and docker support
An agent you have to supervise isn't saving you anything. Fletch already sealed every agent under a macOS sandbox — this release adds a second, stronger option: run each agent inside its own Docker container.
Pick your engine in settings. macOS seatbelt is instant and needs nothing installed. Docker gives you a full environment boundary — the agent's filesystem, network, and processes are its own. Choose per agent: a throwaway refactor can run under seatbelt while the one you don't trust runs in a container. Engines are sticky per agent, so an agent keeps the boundary it started with.
Works with every agent Fletch supports — Claude, Codex, Cursor, OpenCode, and Pi.

Your login comes with it
Containers usually break agent auth: your Claude subscription lives on your host, and the agent doesn't. Fletch resolves credentials through a chain — stored token, shell environment, credentials file — and captures a setup token for you automatically. Gateway tokens (ANTHROPIC_AUTH_TOKEN) work too, so Bedrock, Vertex, or a proxy are all fine.
You log in once, on your machine. The container inherits it. No API keys pasted into config files, no middleman.
Clone mode
Fletch can now provision a workspace two ways: a git worktree, or a full clone with its own .git. Clones are the stronger isolation — an agent can't reach the object store your other work depends on.
They're also cheap. Clones borrow objects from your original repo via git alternates, so a full clone of a large repo costs you almost no disk.
Tighter grants
- ~/.claude is mounted read-only, with credentials the only exception
- Repo hooks are neutralized on host-side git operations — a hook in a repo an agent touched can't execute against your machine
- Stale credentials files are rejected outright rather than silently failing later
- Git commit and merge now run natively inside the container instead of being marshalled back over RPC
Local-first projects
You no longer need GitHub to start. Add a local repo, work, and connect GitHub later — the connect flow is inline and only appears when you actually need a remote.
You don't even need git installed. Fletch resolves whatever git it can find and installs a portable copy if it can't find one.
Also in this release
- Drag to reorder projects in the sidebar
- Agent images stay fresh automatically — TTL, version parity with your CLIs, and garbage collection of orphans
- A badge marks agents running in a container, clarifying that container paths mirror your host paths
- Turn-end notifications can be toggled off
- A turn now stays active while a subagent is running, instead of reporting done early
- Rewrote the README and refreshed branding
- →test: relocate remaining test files from src to tests/
- →fix(model-picker): bust catalog cache so Fable surfaces
- →fix(chat): suppress live (isSynthetic) injected user events
- →feat: surface running dev-server state in Run tab and sidebar
- →fix(editors): silence private_interfaces warning on Kind enum
- →fix(chat): badge mid-turn follow-ups only while queued, keep them at injection point
- →perf(chat): memoize message rows to stop streaming re-render storm
- →fix(security): set restrictive CSP for the webview
- →perf: trim git polling, lazy-load icon manifest, cap run log
- →chore: remove dead extension system husk
- →refactor(sessions): extract shared child-process I/O into child_io
- →fix(run): confine Run-panel commands under sandbox-exec
- →perf(pty): coalesce output and base64-encode over IPC
- →refactor(ui): adopt IconButton and share a useDismiss hook
- →refactor(agent): bundle spawn/turn args into named structs
- →refactor(providers): remove dead "coming soon" adapter gating
- →fix(providers): remove fabricated provider version and status strings
- →refactor: rebrand agent-visible strings from quorum to fletch
- →feat(sidebar): tint PR pill by CI checks rollup
- →feat: native notifications for turn-end & needs-input, with sound toggle
- →feat(telemetry): add turn_completed event for turn volume and usage-weighted provider mix
- →feat(update): show release notes in the update-ready toast
- →fix(run): unstick Run panel when the first-phase PTY fails to spawn
- →fix(supervisor): stop poll loops leaking after clean agent exit
- →fix(supervisor): flush stranded follow-up when turn ends mid-enqueue
- →fix(startup): recover from DB-init failure instead of crash-looping
- →fix(run): reap the whole dev-server process group on stop/quit
- →chore: bump version to 0.7.3
- →fix(custom-agents): scale monogram initials to chip size
- →fix(chat): don't render CLI-injected (isMeta) user events as user bubbles
- →feat(titlebar): functional workspace-status capsule
- →chore(release): bump version to 0.7.2
- →style(sidebar): bump account block name to base, email to sm
- →chore: add @/ path alias via vite-tsconfig-paths
- →fix(model-picker): surface new Claude families like Fable via models.dev
- →refactor: use @/ alias instead of parent-traversal relative imports
- →refactor: relocate helpers into folder, move tests to tests/helpers
- →style(sidebar): tighten agent status rail insets
- →feat(sidebar): always-visible per-project new-agent button
- →feat(sidebar): show waiting-for-input state on agent rows
- →feat(updater): add "Check for Updates…" menu item
- →chore(release): bump version to 0.7.1
- →Rebrand user-facing name: Quorum → Fletch
- →Rebrand code sweep: Quorum → Fletch (comments, docs, internals)
- →Rebrand follow-up: app icon, package rename & straggler
- →Rebrand: domains → fletch.sh, delete dead QMark, tidy comments
- →Rebrand: rename Cargo crate quorum → fletch
- →feat(ui): header logo lockup — double-chevron mark + "fletch" wordmark
- →rebrand: move worktree + RPC dirs to ~/.fletch
- →rebrand: bundle id com.quorum.desktop → com.fletch.desktop
- →rebrand: rename incidental quorum mentions in Rust test fixtures
- →rebrand: replace app icon with new fletch mark
- →feat(chat): accept follow-up messages mid-turn
- →feat(agents): spawn an agent forked from an explicit commit
- →refactor: consolidate color-mix badge pattern via --badge-color
- →refactor: replace repeated transition declarations with --transition-ui
- →refactor: extract .flex-center, .iflex-center, .truncate utility classes
- →refactor: extract repeated CSS values to custom properties
- →fix: restore display:inline-flex on agent icon and composer model chip
- →feat(chat): copy action on user and agent messages
- →fix(chat): deliver the first message when it races the agent spawn
- →refactor(css): split monolithic app.css into colocated component files
- →feat(css): type-scale tokens + .text-* utilities, applied across the app
- →refactor(css): tokenize font-sizes across all components
- →experiment(css): new type scale — base 14px + re-laddered above-base tiers
- →refactor(css): merge --fs-2xs into --fs-xs (raise 10px floor to 11px)
- →fix(files): restore flex layout on broken file tree rows
- →refactor(css): normalize non-standard font-weights
- →refactor(css): tokenize line-height onto a 5-step scale
- →style(sidebar): set agent row second-line task text to --fs-sm
- →feat(ui): add Badge primitive + ui/ barrel & README
- →feat(ui): add Button primitive, migrate .btn-t text buttons
- →Update loading indicator
- →feat(ui): add Dropdown primitives, adopt in the simple menus
- →feat(turns): record per-turn start/end timestamps for run timer
- →feat(ui): per-turn run timer + footer (live timer, "Ran …", copy)
- →Extract loader into component primitive
- →[codex] Bump version to 0.6.5
- →fix(ask-question): show single-select choice before all questions answered
- →chore: add Biome for linting and formatting
- →refactor(git-panel): split GitPanel god component into modules + hooks
- →refactor(commands): centralize agent → repo → worktree resolution
- →refactor(git-panel): centralize merge-gate semantics into describeMergeGate
- →perf(supervisor): keep blocking fs syscalls off the async executor
- →refactor(workspace): extract shared agent row mapping
- →refactor(store): extract shared git mutation + agent-patch helpers
- →refactor(git): extract shared subprocess helpers + bound local git ops
- →refactor: decompose oversized multi-responsibility functions
- →refactor(agent): dedupe per-turn arg builders + session-id extractors
- →refactor(supervisor): factor shared spawn-wrapper closures
- →refactor(adapters): extract shared buildTurnUsage + endTurn helpers
- →feat(chat): add ⌘F find-in-conversation search
- →feat(chat): turn navigator for jumping between messages
- →perf(sidebar): optimistically hide agent on archive
- →fix(delegation): require causal turn link before reporting git-action success
- →chore: release v0.6.4 and fix ETXTBSY spawn flake
- →fix(sidebar): use catalog context window in agent tooltip
- →feat(right-panel): remember last-open tab per agent
- →feat(composer): ⌘N new agent in last-used project + active project/branch pickers
- →chore: bump version to 0.6.3
- →Refactor RPC into a generic transport
- →feat: show unseen agent completions on the app icon badge
- →fix: keep agent status live during long tool calls and across focus
- →feat(git): live PR status in sidebar and Git panel
- →chore: bump version to 0.6.2
- →fix: eliminate white window flash on launch
- →feat(extensions): order extension settings panes + nav icon polish
- →feat(extensions): let a settings pane opt into a wider column
- →chore: bump version to 0.6.1
- →Persist composer drafts across agents
- →Fix agent env and per-turn failure surfacing
- →refactor(store): extract PTY buffers and settings parsers out of store.ts
- →Update settings imports
- →Extract helpers from store
- →Deduplicate dropAgentEntries and appendToRingBuffer
- →Split store.ts into per-domain slices
- →Persist new chat agent/model selection
- →Defer branch creation to first push; agent-named conventional branches
- →Custom agents: reusable provider presets with per-session instruction injection
- →feat: open-core extension system (frontend, DB, and backend seams)
- →Restructure composer agent picker into flat list + model side panel
- →chore: bump version to 0.6.0
- →feat(settings): add Experimental section, gate native view behind a flag
- →chore(deps): update in-range node dependencies
- →chore(settings): remove dead Landmark glyphs toggle
- →fix(providers): respawn live agents when binary path override changes
- →Update chime sound condition
- →feat(observability): forward tracing WARN/ERROR to Sentry
- →fix(telemetry): address review feedback on consent, flush, and key naming
- →fix(telemetry): use notify_one to avoid lost-wakeup flush stall
- →Add telemetry with PostHog
- →fix(claude): honor CLAUDE_CONFIG_DIR for transcript locate + sandbox
- →Allow re-using worktree names that's been used previously
- →chore: bump version to 0.5.4
- →Add per-agent custom binary path overrides in Providers settings
- →Kill child processes on app quit instead of orphaning them
- →Add error and crash reporting (local logs + Sentry)
- →Make agent failures visible and recoverable
- →First-run readiness check: detect agent CLIs + git
- →feat(onboarding): preview real sidebar rows & provider brand icons
- →feat(layout): persist panel layout & window size across restarts
- →Robustness & a11y: error boundary, file-editor error surfacing, keyboard-operable sidebar rows
- →Redesign onboarding readiness: git/gh checks + agent grid
- →Fix composer model labeling for existing sessions
- →fix: align header Q mark to the lowercase wordmark
- →feat(pr): bind PR identity to worktree row, not branch name
- →chore: bump version to 0.5.3
- →feat: fetch model metadata from models.dev instead of hardcoding
- →[codex] Add agent model picker
- →Remove dead Status bar toggle, wire up Token usage to composer meter
- →refactor(css): remove dead CSS rules from app.css
- →Version bump
- →feat: per-agent token usage tracking + composer context gauge
- →ci: cache apt packages in rust-test job
- →chore: bump version to 0.5.1
- →Flag unseen results on unfocused idle agents
- →fix: thread subagent messages under their tool call instead of leaking into chat
- →feat: true pause for AskUserQuestion via permission control protocol
- →feat: add TaskCreate tool call presenter
- →Surface unresolved PR review comments in the Git panel
- →feat: rich "Needs your input" widget for agent questions
- →Fork new workspaces from fresh remote state
- →chore: bump version to 0.5.0
- →Remove HTML demo showcase from app repo
- →Refresh brand wordmark, Geist font, and app icon
- →Resolve gh CLI to an absolute path so PR ops work from the GUI
- →fix: stop chat auto-scroll from fighting the user
- →fix: size git panel action dropdown to fit all options
- →Lower agent-done chime volume and skip it on manual stop
- →Bump app version to 0.4.3
- →Prompt to restart on update instead of auto-relaunching
- →Add Apple-style animated product showcase demo
- →Reframe demo narrative as agentic IDE; restructure new-agent screen
- →Add @ file-mention autocomplete to the composer
- →Add # PR mentions; unify autocompletions on a shared engine
- →Redesign sidebar agent rows
- →feat: redesign git panel with color-coded states and linked copy
- →Agent-delegated git actions + real PR check states in the git panel
- →ci: auto-generate release notes when publishing
- →chore: bump version to 0.4.0
- →Polish README hero and update supported agents table.
- →Derive agent branch name from workspace name
- →Show newest agents at the top of the sidebar
- →Agent instruction injection, plus Antigravity and Cursor transcript fixes
- →Add file-mailbox RPC and unify agent sandboxing under sandbox-exec
- →Add git_commit and open_pr RPC ops
- →Open chat links in the default browser
- →Move "New agent" action to top of project agent list
- →Fix sidebar agent ordering
- →feat: show provider brand-icon chips in sidebar agent rows
- →feat: play a sound when an agent turn finishes
- →refactor: shrink sidebar provider chip to 14px with custom tooltip
- →feat: move Replay tour to a dev-only Developer settings section
- →chore: bump version to 0.3.3
- →feat(db): separate dev and prod database paths
- →Fix: fix user message native_id
- →Make thinking budget slector sticky
- →Vesion bump
- →Switch updater endpoint to web instead of dedicated worker
- →Chore/version bump
- →Smooth onboarding line transitions + load .env in
bun tauri dev - →chore: remove unused storage/store exports
- →refactor(adapters): consolidate identical display policies
- →chore: remove dead storage helper modules
- →fix(ui): wire ⌘K search, re-scan providers, copy-path feedback
- →refactor(chat): key chat rows by stable tool id, not array index
- →fix(ui): clearer commit/push notice, restore spinner, error flash
- →refactor(files): split FilePanel into focused modules
- →docs: add AGPL-3.0 LICENSE
- →feat(right-panel): unify Files + Diff into one Code panel with Live mode
- →feat(account): cache OAuth avatar in SQLite and show it in the UI
- →feat(sidebar): wire up project creation (clone from GitHub + create new)
- →feat(run-panel): auto-detect run config across Node/Python/Ruby/Rust/Go
- →docs: rewrite README for multi-agent positioning + download CTA
- →Bump app version to 0.3.0
- →Publish releases and trigger website redeploy
- →Redesign the Git panel to match the Quorum v2 design
- →Dynamic provider icons from CDN with monogram fallback
- →Map Codex
shelltool to the Bash presenter - →Add Codex agent support
- →Add Cursor agent support
- →Add OpenCode agent support
- →Make file panel rows 24px for a denser list
- →Add Pi agent support
- →Show agent icons in the composer model picker
- →Collapse the file panel worktree by default
- →Fix multi-agent registry drift and gate unwired providers
- →Consolidate per-turn agents into a descriptor table
- →Add an explicit per-agent capability model
- →Extract shared aliasToolInput helper
- →Make SQLite the canonical, robust agent history store
- →Canonical agent history via raw-event sourcing + entity-model split
- →Fix Codex shell
(no command)label and surface Codex thinking - →Surface thinking/reasoning for Claude, Cursor, OpenCode, and Pi
- →Fix Cursor glob/read/edit tool labels via input aliasing
- →Fix initial user message duplicated on conversation reopen
- →Rest agents at Idle on boot; resume lazily instead of auto-spawning
- →Wire thinking budget picker to provider CLI flags
- →Native (PTY/TUI) view for codex, cursor, opencode, and pi
- →Unify custom & native views on a canonical session_records store (PR1: all file-backed agents)
- →Retire session_events: session_records is the single session store
- →Retire session_events: session_records is the single session store
- →Add Antigravity (agy) as a transcript agent
- →Wire native (PTY/TUI) view for Antigravity + fix live session-id refresh
- →User-message attachments: durable capture + live/restore rendering
- →Incremental O(new) transcript ingest: batch, byte-offset tail, settle poll
- →Wire Claude session-level --effort through spawn
- →Add interactive branch picker to new-agent composer
- →Add cinematic onboarding flow with Settings replay entry
- →Show the actual model per agent turn in the composer
- →Show spawned reasoning effort as read-only chip in chat view
- →Real OAuth (GitHub + Google) device-flow login in onboarding
- →Bake OAuth client keys into production builds at compile time
- →chore: bump app version to v0.2.0
- →feat(settings): promote Antigravity to installed providers
- →Pin worker observability setting in wrangler.toml
- →Build app target so updater artifacts (latest.json) are produced
- →Bump version to 0.1.2 for a fresh release