Every release is signed, notarized, and published to SamiAbi/fold-dist. Fold updates itself from there; brew upgrade --cask fold works too.
20 September 2026
Fold 2.1.0 — full screen is back, and the glass is thicker.
Native full screen is Fold's again. 2.0.0 shipped a Fill Screen that gave the window the screen's width and height inside the menu bar and the Dock. It could not put the Dock away, which is the whole reason to go full screen, so it is gone and macOS's own is back. The green button, the View menu's Enter Full Screen and ⌃⌘F enter it: the Dock away, the window on its own Space, opaque for the whole of it, the traffic lights on the auto-hide reveal strip, the band otherwise untouched. The same act leaves it. The Window menu's row is Zoom again.
The window is less see-through. The ground the desktop shows through went from 0.40 to 0.62. Through a pane, 42% of the wallpaper used to reach you; now it is 27%. On bare ground it went from 60% to 38%. Calmer over a bright wallpaper, and still plainly glass. Nothing about readability changed — the old figure already measured 5.6:1 for body text over pure white, well clear of the 4.5 floor, and a thicker ground only reads better. The material, the pane recipe, the focused-pane recipe and the opaque states are untouched.
If you drive Fold from a script: ui-state reports fullscreen= again and window_ground=0.62, and debugctl fullscreen enter|exit is back. Fill Screen and its verb are gone.
19 September 2026
Fold 2.0.0 — everything on the stage is a pane, and the window is glass.
The cockpit is rebuilt. The rail, the sidebar, the islands, the pinned column and the editor float are all gone; what is left is one split grid, two glass capsules in the foot lane, and a window you can see the desktop through.
Every document opens as a pane. A file, a note, a diff, a commit, a pull request — each opens in the same split grid as the terminals, not in a float. The first one splits the focused terminal and takes 54% of it; every later document opens into that same pane and keeps its tile in the dock. A second document pane only ever arrives when you ask for one: ⌘-click any row that opens a document, or Open to the Side in the explorer's and the note card's menu.
A pane holding more than one document says so, and lists them. Past one document the pane header wears a count beside its ✕. Click the count and the pane drops its own list — what it shows, then what it has shown that is still open, each with its own ✕. The dock still lists every open document in the window; this lists what one pane holds.
Files, Git and Notes open as tool panes you can put anywhere. The right-edge column is retired. Each tool is a glass pane standing in a lane on any of the four sides of the stage, and all three can stand at once. Two tools on one side stack down one lane and share a seam that drags their split; a side can hold several lanes side by side. Dragging a tool over another, the nearest edge decides: above it, below it, outside it towards the window, or between it and the terminal. A tool pane never covers a pane, always opens, and stays until you close it. Columns run 240–480pt, rows 160–480pt.
Move any pane by its header, and zoom one to the whole stage. Any pane drags by its header — terminal or document, across kinds — and every gutter drags. ⌘⇧↩ gives the focused pane the whole stage and puts the grid back; the zoomed header says zoomed · n panes behind. ⌘E tucks every standing document pane and brings the set back. There is no minimize: a lit dock tile's click tucks its pane and returns it.
The window is see-through glass. The desktop shows blurred under the window's one ground, and the panes wear a thinner glass over it. The band, the welcome page and the session switcher all stopped painting grounds of their own. Sheets stay opaque, and under System Settings' Reduce Transparency the whole window is opaque.
The window fills the screen; there is no full screen. macOS full screen was Fold's second design — the glass came off, the lights left the band, and a black strip sat above the window. Now the green button, ⌃⌘F and Window ▸ Fill Screen give the window the screen's full width and height, inside the menu bar and the Dock, and the same act puts it back. It is the ordinary glass window the whole time.
The stage comes back after a relaunch — document panes, their places and their shares, each workspace's own layout, and the tool panes at the weight they left with.
A staged-away diff holds its pane. A followed diff whose re-read finds nothing left now stands as an ordinary open document showing its "nothing left" state, instead of collapsing the grid out from under you on every stage click.
What's new lives in the app. The dock's last circle — Fold's own mark, after the gear — opens a popup carrying every release since the native rewrite, newest first, read from a file inside the build. No network, so it opens on a plane.
The shortcuts sheet searches, and opens from the dock. ⌘/ is one 520pt column now: a field at the top, and under it the six groups as rows you open, FOLD standing open on arrival. Typing filters every row of every group at once, and each hit carries the group it came from, so ⌘C in the editor and ⌘C in the terminal stay apart. A keycap finds its row too — ⌘D and split reach the same answer. Escape clears the field first and closes the sheet second. A fourth circle in the dock, between the gear and Fold's mark, opens it.
Only what you look at costs anything. Fold keeps live what is on screen and treats the rest as a record. Idle CPU with seven sessions fell from 13% to 1.9%; a 77,000-change repository open went from about 540 MB to 248 MB, and its Git panel from about five seconds to under one. A burst of 300 title changes now costs three refreshes instead of 300. Off-screen terminal surfaces are released and replayed when you look at them again, scrollback is capped at 8 MB a session, a workspace you are not looking at stops re-reading the disk, and the window's state is a folder — one file per workspace — rather than a single file rewritten whole.
The build says nothing. All twenty-one compiler warnings in the app and the tests are answered at their own site rather than silenced. One of them turned out to be a test that had quietly lost its body; its assertion is back.
If you drive Fold from a script: ui-state gains window_ground=, window_opaque=, a perf line and doc rows that print standing / elsewhere / unshown; the fullscreen flag and the fullscreen debug verb are gone, since there is no full screen to report. The palette's per-document rows read show: ‹name› and close: ‹name›. dock-whats-new and dock-shortcuts are clickable elements, editor-seam is now pane-seam-0, and debugctl pane gained zoom and move.
10 September 2026
Fold 1.11.0 — no clock on a session.
The chips say their name and nothing else. The running time that sat at the right of every session chip is gone. A chip's tail now speaks only when there is something to say: exit 1 when the shell ended, lost when its helper went, offline when its host cannot be reached, :5173 when it owns a listener, 3 panes for a split. A plain live session shows its name alone, and the ✕ still appears in the same place under the pointer.
The pane header the same. A live pane's header reads its name and its folder, with no time after them; a dead pane's still says exit N.
The shelf loses its "4m ago". A shelved row reads its name, its tail and its folder. Newest shelved still sorts to the top.
If you drive Fold from a script: ui-state's chip lines print the tail kind bare where they printed age, and the shelf / shelfrow lines no longer carry the ago column.
6 September 2026
Fold 1.10.0 — the band moves the window, and the foot lane sits tighter.
Drag the window from the Sessions strip. A press on the strip's own ground — the SESSIONS label, the divider, the gaps between chips — now moves the window, and a double-click there zooms it, the way the rest of the title bar does. Chips keep their own handling: dragging a chip still lifts it, double-clicking one still renames it.
The two foot capsules agree. The instruments and the dock are the same height now, so the lane reads as one line instead of two bars of different sizes. The dock's tiles and the file tiles came down a little with it so the proportions hold.
The facts' glyphs match the dock's icons. The branch, folder, changes and sync marks draw at the dock's icon size, so the lane's two capsules read as one set.
Ten points of air on every side. The pane stands 10pt from the window's edges, 10pt below the chips and 10pt above the capsules — equal as the eye measures it, not as the geometry does. The foot lane is exactly the capsules' height, no taller.
5 September 2026
Fold 1.9.0 — the terminal says how far back you are, and a worktree can go.
The fade gutter. Scroll a pane back and a thin thumb fades in at its right edge, showing where you are in the scrollback. It fades out again on its own, even while you stay scrolled back. Rest the pointer on it and it widens over a track; drag it to scrub. Full-screen programs like less and vim have no scrollback, so nothing shows there — that is correct, not missing.
Remove a worktree. In the folder fact's sheet, every linked worktree row wears a ✕ under the pointer. Click it, confirm, and Fold runs a plain git worktree remove. Never forced: a folder with modified or untracked files is refused in git's own words and stays put. The branch outlives its folder. The main checkout has no ✕ — it is the repository, not a worktree of it.
A dock tile is a toggle. Clicking the tile of the float already in front parks it, exactly as the float's own − does. A parked tile still brings its float back, and a tile on the stage behind another float still raises it. Diff, commit and pull request tiles follow the same rule.
Session chips name themselves. Hover a chip and its full name appears in a tooltip, the one place a long name reads whole. Every band tooltip now wears the chevron, and the glass highlight no longer runs through it.
Claude's mark breathes. The pulsing mark on a busy session's chip is animated on the layer now instead of stepping through frames, so it moves smoothly.
4 September 2026
Fold 1.8.0 — drag a file onto a pane and get its path.
Drop a file in. Drag a file from Finder, from the Files island, or from any app that offers a file, and let go over a terminal pane. Its path lands at the prompt, ready to read. A capsule sits low in the pane you are hovering, showing the file's mark and the exact line it will type.
The path is written the way you would write it. A file inside the session's own directory arrives as a relative path — src/main.swift, not the whole road from /Users. A file outside it arrives absolute. Names with spaces or other awkward characters are quoted, and several files at once arrive as one line, space-separated.
A drop never runs anything. The path is typed at the prompt and stops there — no Return, ever. A name carrying a line break is refused outright rather than quoted, because no quoting survives it. A remote pane declines the drag and macOS shows its own no-drop cursor.
The Files island is a drag source too. A row lifts — dimmed in place, a plate with its mark and name flying under the pointer — and it drags into any app, not only into Fold's own panes.
4 September 2026
Fold 1.7.0 — the recesses in the tint, and the pointer on every click.
No more black holes in the glass. Every recessed surface — the search field, the keycaps on the cheatsheet and in settings, the pressed state of a button, the name fields on the naming sheets, the remote picker — used to be painted flat black, which read as a hole punched through the tinted glass. They are frosted now: a light lift under a fine rim, in the workspace's own tint. A press steps one shade past hover instead of sinking. The count pills around numbers are gone — the numeral stays.
Everything you can click now says so. Fold never showed a hand cursor. Now every enabled control does: the dock, the islands' rows and verbs, the band's segments and chips, the rows on every sheet, the welcome page, the float headers. Handles keep their own cursors — the open hand for dragging a chip or a pane header, the resize arrows on the gutter and float rims, the I-beam in a field.
Two small fixes. A pane header stopped shortening a session's name it had room to say in full — it was measuring against the band chip's narrower cap. And the rows in Git, the explorer and the notes now start at the same margin as the field and the section strip above them, so a hover plate or a selection no longer runs into the island's rim.
3 September 2026
Fold 1.6.1 — the band in full screen.
Full screen shows the band again. Entering full screen painted a dark strip across the top of the window where the workspace segment, the session chips and the scope toggle should be, and nothing there could be clicked. The strip was the title bar's toolbar — the one Fold keeps, empty, so the traffic lights are clickable across the whole band — which macOS turns into a real toolbar in full screen. Fold now sets it aside on the way in and puts it back on the way out. The band, the chips and the are all where they belong in full screen, and the traffic lights come back exactly where they were when you leave it.
3 September 2026
Fold 1.6.0 — the terminal is the desk, and the tools are islands.
The rail, the sidebar and the facts bar are gone. Under the title bar the terminal owns the whole window, down to a bare foot lane where two small glass pieces stand. The dock at the bottom-right holds the tools — Files, Git, Notes — then the open files as tiles, then you: the account mark and the gear. The instruments at the bottom-left are git's facts in one capsule that hugs its content — branch, worktree, changes, sync, and the shelf while it has rows — each opening its menu above itself. A quiet repository shows one word.
Tools open as islands. Files, Git and Notes each rise as one sheet floating over the stage's right edge. The terminal never resizes and an agent's screen never redraws because you glanced at a file — output keeps streaming beneath. An island closes when you leave it: Esc while it holds the keyboard, a click into the stage, opening a file or a note. Git stays put through its own actions, because you come back to it a dozen times before you commit. ⌘B brings the last island back, and every island command is in ⌘P.
Pin an island and it becomes a column. The one deliberate resize: a flat column at the right edge, as many as you keep, in dock order. Unpin, and it floats again.
The whole window is one glass. The band, the two capsules, the chips, the sheets, the floats and now every terminal pane are one material over the workspace's tint — the terminal's ground is clear, so the tint shows through the text. Two split panes are parted by a strip of ground you can grab, and the focused one wears the tint as its rim. Hover brightens, pressed recesses, and one tooltip sheet serves everything.
Sheets rise from their openers. Settings from the gear, the account menu from the mark beside it, a fact's menu from the instruments, the tint picker from the focused segment. Every sheet, popup and tooltip is cut in the workspace's tint.
The welcome page speaks the same language. Straight on the canvas, the dock reduced to you, the first hints on the instruments' capsule.
And one small thing from the remote work. A shell opened from another Mac now homes to the workspace you are looking at, unless its own workspace is open.
1 September 2026
Fold 1.5.0 — the shelf hears a remote Mac arrive while Fold runs.
A shell opened from another Mac shows up now, not next launch. When a remote Fold starts a session on this Mac, the running Fold used to learn of it only after quit and reopen. Now the shelf adopts it within seconds — under the helper's own name, in the shell's own directory and workspace, wearing its real start time.
Careful about goodbyes. A shell in the middle of being killed can look unclaimed for a moment, so nothing is shelved on one sighting — two consecutive unclaimed answers are the proof, and a dying shell is never adopted by mistake.
And a crash is gone. Reopening one of these adopted rows could end the app when the shell's folder was written with another spelling of an already-open workspace's path. One spelling rule now answers everywhere, so the bounce is structurally impossible.
31 August 2026
Fold 1.4.0 — the terminal under everything, three weeks newer.
The engine moved up. libghostty is bumped from its August 8 pin to upstream's latest — 590 commits of rendering, parsing and input work ride along underneath the same terminal.
Copy a file in Finder, paste it in a pane. ⌘V lands the file's path, shell-escaped, ready to run against — and a copied file also travels as a real URI list for the programs that ask for one.
The clipboard carries more than text. Programs that read or write the clipboard now get every representation — an image is an image, not a missing string — and reads serve exactly what was asked for, never the whole clipboard.
No is now no. Refusing a program's clipboard request tells the program it was denied, instead of pretending your clipboard was empty. The permission ask names the asking program when the protocol carries a name, and offers to remember your choice for the session when it can honour that.
The Kitty clipboard protocol (OSC 5522) is spoken. Programs using it can list, read and write typed clipboard data under the same permission gate as everything else.
31 August 2026
Fold 1.3.0 — another Mac's shells, in your band.
Remote sessions ride your ssh. A host is an ssh destination and nothing else — no port, no token, no pairing, and Fold opens no listening socket, ever. If ssh desktop works in your terminal, it works in Fold.
Add a host in the gear's settings popup: a new HOSTS group, one row per machine, each wearing a live verdict — fold 1.3.0 · /Applications/Fold.app when it can serve, update fold on desktop when its Fold is too old, could not reach desktop when the road is down. A host with Fold somewhere unusual takes a helper path; everyone else leaves that field empty.
Start a shell there. Right-click the band's + → New remote session. It defaults to the host's home and takes a typed path. The chip wears the host's name as a tag before its own, the pane header spells the directory desktop:~/src, and everything else is an ordinary session: name, age, tail, the Claude mark, the done sound.
The same shell on both Macs at once. Walk between machines mid-task — both panes show the same bytes, and the smaller window's size wins so neither ever renders garbage.
A broken road is offline, never lost. When a host stops answering, its sessions keep their chips and wear offline in the tail. Nothing is killed, nothing is asked of you: Fold retries on its own, and coming back replays only the seconds you missed — scrollback intact. Only a real exit ends a remote session.
The shelf counts every machine. Shelved remote rows sit beside local ones, host-tagged. Kill All names each host and its count — 2 here, 3 on desktop — and never promises a kill it cannot reach: an unreachable host's rows are named as not killed and stay on the shelf, still yours to kill later.
Relaunch owes you nothing about the network. The window appears instantly, remote chips come back where they were, and each reconnects on its own — a sleeping host costs you a tag that says offline, not a wait.
29 August 2026
Fold 1.2.0 — closing a terminal no longer kills it.
Shells live in a helper that outlives Fold. Every session now runs in a small process bundled inside the app, and Fold attaches to it. Nothing to install, nothing to configure — but it changes what closing and quitting mean, which is the whole of this release.
Closing asks. ⌘W on a live session, the chip ✕, a middle-click on the chip and the pane header ✕ all ask the same question: Shelve, Kill, Cancel. Return shelves, ⌘⌫ kills, Esc backs out. A dead session's ✕ asks nothing — there is nothing left to keep. A group chip asks once and applies your answer to every member.
The shelf. A shelved session keeps running out of sight — its agent, its server, its scrollback. A new shelf fact in the foot bar counts what is put away and is there only while something is. Click it for a sheet: name, tail, directory and how long ago it was shelved, live rows first, then dead ones as exit N. Click a row to bring it back into the focused pane. ↑ ↓, Return and Esc work as in the other sheets, a hover ✕ kills one behind a confirmation, and Kill All is in the foot. ⌘P has open the shelf too, so the shelf has a door that does not need the bar.
Quitting kills nothing. Fold no longer asks about shells on quit, because it no longer ends them: every session stays running, in the band or on the shelf exactly as it was. Relaunching reattaches — your chips come back running, with their scrollback and their real age, and splits restore around them. A session whose process is genuinely gone (a reboot, a crash) comes back as a record whose row says a reopen starts a fresh shell, and never pretends otherwise.
Closing a workspace shelves its sessions, kills nothing, and has lost its shell confirmation and its danger ink. Its rows stay on the shelf, each naming its workspace; clicking one opens that workspace and the session with it. Unsaved files are still guarded, on quit and on close alike.
If the helper stops under a running Fold, no chip sits there looking alive: every band session goes dead on the spot with the tail lost — no exit code, because nothing exited — and its pane offers a restart in a fresh helper.
Kill and Kill All are now the only verbs that end a shell.
28 August 2026
Fold 1.1.0 — the foot bar learns git.
Sync from the foot. A new sync fact in the facts bar: push (ahead count), pull (behind count) and fetch as one cell, each its own click. It runs exactly what the git panel's cluster runs, with the same motion — the arrow marches, the fetch mark turns. On an untracked branch it reads ↑ Publish. Toggle it in the gear's FACTS BAR group.
Changes from the foot. A changes fact shows the changed-file count while there is something to count; a clean tree has no cell. Click it and a sheet lifts with the panel's own rows under STAGED / UNSTAGED — click a row to open that file's diff. ↑ ↓, Return and Esc work as in the branch sheet.
Pane headers wear their own tint. Under the all-workspaces scope, a pane from another repo borrowed the focused repo's colour for its >_ mark. It now wears its birth workspace's tint, like the ⌥⇥ switcher tiles already did.
28 August 2026
Fold 1.0.1 — one fix.
Focusing a split pane no longer slides. Clicking the other pane of a split, or ⌥⌘-arrowing into it, played the session-switch slide as if a new session had arrived. The slide now plays only when a different session comes on stage; moving focus inside one split is a plain focus change.
27 August 2026
Fold 1.0 — the first stable release. Everything since 0.45.0 is small and polished; the number says the cockpit is done enough to stand on.
Middle-click closes. A middle click on a session chip, an open-files rail tile or the workspace segment closes it — the same as its ✕, no menu in between.
The branch has a sheet. The facts bar's branch cell lifts a dropdown, the way the folder cell already did: pick a branch or name a new one, right where the fact lives.
The facts bar wears the tint. The bar's values take the workspace's own tint, and the worktree cell wears the design's glyph instead of a stand-in.
The ⌥⇥ switcher fits. The switcher's frame is capped at the stage's width and the row of sessions scrolls inside it, so a long list never runs off the window.
The ⌘/ cheatsheet fits too. Hints wrap inside their column, and the sheet caps at the window's height and scrolls in a short window.
27 August 2026
The session chip, the pane header and the ⌥⇥ switcher wear Claude's own mark.
Claude's mark. Claude Code fronts its terminal title with a turning half-disc while it works and a ✳ while it waits. Fold used to show that character as plain text in the chip. Now it reads it as a fact and takes it off the name — the chip says Done sound notice, not ◐ Done sound notice — and plays Claude's own twelve-frame animation instead: on the session chip, in the pane header between the prompt mark and the name, and on the open tile of the ⌥⇥ switcher. It turns while Claude works and holds the full burst while Claude waits. A pinned name hides Claude's words but never the fact; a dead session never wears it. Reduce Motion (or FOLD_MOTION_SCALE=0) shows the still frame. Chips with no Claude in them are exactly as wide as before.
26 August 2026
Fold has a menu bar, ⌥⇥ walks the sessions, and the done sound rings for Claude.
The menu bar. Fold, File, Edit, View, Session, Window, Help — every shortcut on the ⌘/ sheet is listed under a plain title. ⌘C, ⌘V, ⌘X, ⌘A and ⌘Z now work in every text field: rename fields, the branch filter, the commit subject and body, the worktree name, the ⌘P field.
⌥⇥ walks the sessions. ⌥⇥ and ⌥⇧⇥ step through the sessions by recency; hold ⌥ to keep walking, release to land. After a beat a frame appears — one row of tiles in each session's workspace tint, the cursor's tile open to its title, folder and age. The arriving pane slides in from the side of the walk.
The done sound rings for Claude. Claude Code sends a notification escape rather than a bell on Ghostty-family terminals, so the chime never played for a Claude finish; it does now. It also rings in the pane you are looking at — the rule is simply: enabled, the agent finished, at most once every two seconds per session. Claude Code only sends the signal for turns longer than a minute; set messageIdleNotifThresholdMs to 0 in ~/.claude.json to hear every finish.
26 August 2026
⌘P is one search with three doors, the command palette covers the app, and a finished agent rings a chime.
One search, three doors. ⌘P searches files by fuzzy name, ⌘⇧F searches file contents through git grep and opens the hit at its line, ⌘⇧P is the command palette. Typing > into an empty field enters commands mode; Backspace on an empty field leaves it. Sections stack — Files, Contents, Commands — and a section with nothing in it is absent.
Every command, by name. The palette lists every keyed binding wearing the cheatsheet's own label and key, and every click no key reaches: focus workspace, switch to session, close workspace, the tint picker, the panels, the account and worktree menus, the note's lock, the rail's tiles, the git sections. A verb with a target is one row per target ("focus workspace: fold"), and a command that cannot run right now is not in the list.
Notes reach the search. Both notes sets — the workspace's and everywhere — answer to ⌘P and ⌘⇧F alongside the files.
The done sound. When an agent rings the terminal bell in a pane you are not looking at, Fold plays a short chime — never for the pane you are watching, and at most once every two seconds per session. The gear's settings popup has the toggle.
25 August 2026
The update check no longer runs into GitHub's rate limit.
Fold asks the release page, not the API. The check used GitHub's API, which allows sixty anonymous requests an hour per network address — and on a busy afternoon that ran out, so Fold answered "no update" for a release that was there. It now asks the plain release page, which redirects to the newest tag and has no such limit.
A check that could not reach fold-dist says so. The gear's foot note reads "couldn't reach fold-dist · last checked …" instead of "up to date" when the feed did not answer.
25 August 2026
Tables and callouts in a note look like the preview, and a repository with one checkout gets its folder cell back.
A table in a note is a table. The live cell draws a pipe table the way the preview does — every row boxed, a line at each column edge, the head row on its plate — and the columns line up whether or not the source is padded. The |---| row folds to a single line and comes back as its own characters only while the caret is on it.
A callout with no title says what it is. > [!tip] on its own wears Tip in the callout's ink, as the preview does, instead of a blank first line. A callout's text stays inside its plate, however long the line.
One fact, one place. A note card no longer repeats its own #tags as its snippet.
The folder cell stands in every repository. It is the door to the worktree sheet, so it no longer waits for a second worktree to exist before it shows — a repository with one checkout can now make its first.
25 August 2026
The Notes return is complete.
A note writes itself. Half a second after you stop typing, a note is on the disk — no ⌘S, no dirty pip, no question on close or quit. A disk-change notice still wins: an agent's bytes are never overwritten by a timer.
A note renders as you type. The live cell shows the rendered note with the caret in it — headings, lists, checkboxes that tick in the buffer, links that open, ==highlight== and callouts in their own inks — beside a source cell for the raw markdown. A toolbar of chords sits above it: bold, italic, headings, lists, tasks, quotes, callouts, code blocks, dividers.
Notes have folders, tags, colours and a lock. Cards fold into folders with their own headers and menus; #tags fill a strip that filters the list; Colour… rings a card in one of the workspace tints; a padlock beside the cell toggle makes a note read-only and stays put across relaunch.
[[Wiki-links]] resolve. A link follows to its note or creates it, [[ opens a completion under the caret, a note lists who links to it in a Linked-from foot, and renaming a note rewrites the links that pointed at it.
Everywhere notes. A second set of notes lives in one folder outside every workspace and shows in every workspace's panel under its own section — the same notes wherever you are.
Promote to repo… moves a note out of .fold/notes/ into the repository through the system save panel: the float follows to its new path and the file is a normal file from there, in the explorer and the change list, ready to commit.
Notes look like notes. A note's rail tile and its float's head wear the folded-sheet mark, in the note's colour. Notes stay out of git through the repository's own exclude file, with a toggle in the settings popup.
Also: the foot bar's folder cell chooses the worktree, and the file side follows it.
23 August 2026
Notes come back, and the foot bar goes back to git.
A fourth icon on the rail, a third panel in the sidebar. Behind the design's folded-page mark, under git, Notes lists the workspace's notes newest-first — each card its title, the first words of it, and how long ago it was written. The + and ⌘⇧N write a new one and open it straight away, with the cursor already in the text.
A note is a file, so it goes through the one file-opening door. Notes are ordinary .md files in the workspace's .fold/notes/, and a note opens as an ordinary editor float — rail tile, disk-change notice, restore and ⌘⇧W, all of it the same as any other file. A note an agent writes with cat from the terminal arrives on the list by itself, which is why there is no refresh button anywhere. And .fold joins .git as a name the explorer hides: Fold's own folder gets no row in the tree, no line in quick-open, and the panel is its one listing.
The markdown reader learns the notes grammar. ==highlight==, > [!note] callouts in their own inks, #tags and [[wiki-links]] are read by the same parser the preview and the diff both draw from — so the two surfaces cannot disagree about what a line is.
The foot bar states git's facts and nothing else. It began as Claude's deck line made native; it is now branch · worktree, and nothing more. Fold reaches into Claude nowhere at all — nothing written to ~/.claude, nothing read there, nothing on a pane's PATH, nothing typed into a restored shell. The status line you configured is the one that draws in a Fold pane, exactly as anywhere else, and anything an older build left behind is cleared away at launch. The gear's popup still switches each fact on or off and reorders them.
22 August 2026
The GitHub account rides the rail, and the facts bar's limits are live.
Pick an account and Fold switches to it. The mark above the gear opens the list of accounts you are signed in as; a click or Return runs gh auth switch for that one and the mark, the check and the list all repaint from gh's own answer. Nothing moves optimistically, so a refused switch leaves the account you had showing, with gh's own words above the rows. Fold handles no token, completes no login and writes no git identity — the line it may cross is exactly one command (ADR-0016).
Every row wears its face and its name. The account's real photograph, its login, and the name and noreply address underneath — one ask per login, cached on disk for a week, so a login Fold has seen costs no network at all.
A way in, for the first time. sign in with GitHub with nothing signed in, sign in another account once there is one. Picking it opens a new session and types gh auth login into it — you finish it in your own terminal, in front of your own tool — and the account appears in the list without a relaunch.
A dropdown that tells the truth when it cannot answer. Signed out, gh not installed, and gh answering something Fold cannot read used to look identical: an empty list. The third one lied — it told a signed-in developer they were signed out. Each now says what is true and the way out of it, and the unreadable case says "you may well still be signed in" in as many words.
The facts bar's 5h and 7d are the live numbers. They used to come from claude -p /usage, a server-side total that is never wrong, only minutes late. The live figures ride along with every API reply and Claude Code hands them to one place: the status line. So a Claude started in a Fold pane runs Fold's status line, for that one process only — ~/.claude is not touched, your settings.json is not touched, and turning the facts bar off gives you your own claude back at the next prompt.
And they ask on their own clock. The limits had been queuing behind up to four per-session asks; they now have their own timer and nothing can get in front of them.
21 August 2026
The facts bar: the Claude Code deck line, native, at the foot of the window.
One bar across the foot — under the rail, the sidebar and the stage: the branch, the worktree when the workspace is a linked one, then the focused pane's Claude facts — model · effort, output style, context used (meter, %, tokens left), the 5h limit, the 7d limit, the model's own week, and MCP servers up of total. A thin divider between facts; plain at rest; point at a fact and it wears the band's plate and names itself. The glyphs are the design's own statusline set, drawn as shapes.
Nothing of Claude's is touched — no hook, no settings edit, nothing installed. Fold reads what Claude Code itself writes (its session registry, the transcript's tail) and asks Claude for the rest in the background — claude -p /context for the very session in the pane, /usage for the limits, mcp list in each project. Local, free, and a fact Fold cannot be sure of is simply absent, never guessed.
The bar follows focus — click into another pane and the numbers are that pane's; a plain shell leaves the branch and nothing else. Narrow the window and facts leave from the right, whole, never cut.
Yours to arrange — the gear's popup gains a Facts bar group: one switch for the bar, one per fact, and ↑ ↓ on every row for the order.
21 August 2026
The markdown toggle moves onto the file it belongs to. A change with three markdown files in it is three readings now — and the code around them is left exactly as the diff drew it.
A set, never one claim — the toggle rides each markdown file's own header row inside a diff, at the row's trailing edge. Every markdown file in a change decides for itself and holds its own answer. A file that is not markdown carries no toggle at all: a control that means nothing is worse than no control.
The code never moves — setting a file swaps that file's hunks and line rows for its prose, in place, under the diff's own header row. The diff never leaves the screen, so every other file is the rows it always was: same font, same gutter, same hunk band, same syntax colour, same word chips. The float header's pair is gone for diffs; a .md file float keeps its own.
One binary file no longer takes the prose down with it — a font in a commit used to abandon the whole reading at the first cut row, so one .ttf took every markdown file beside it back to raw lines. A cut file — binary, or past the line ceiling — now disqualifies itself and says nothing about its neighbours.
A diff row rides the viewport — a file header's ground ran the document's full width, so on any diff with a long line in it the counts sat off the right edge, out of reach. The ground and the hairline are the row; what is stated on it stays where you can read it.
⌘⇧M means the markdown file pinned at the top of the scroll, and is silent over a code file.
21 August 2026
The editor float earns its room: it zooms, it resizes from the corner, it names itself, and it reads markdown as writing.
A float is a window now — a double-click on a float's header fills the room under the band; a second one puts it back exactly where it stood. The corners pull both axes — the L a window's corner has always been — and the pointer says which way it goes at every point on the rim. The gesture reads your own double-click preference, the one the band already performs for the window.
Markdown, set rather than spelled — a two-cell toggle in a .md float's header (⌘⇧M) swaps the source for the page. The preview sets the working copy, unsaved edits and all, and reads without writing — the source cell writes. A file opens spelled out and remembers which cell it was on across a relaunch. The reader is hand-rolled Swift: no new dependency.
A diff reads as writing too — the same toggle appears wherever a change touches markdown, a commit's and a pull request's included. A changed paragraph is one paragraph with the moved words marked, wearing the diff's own word chips, rather than three raw lines. Every other file in the change is kept exactly as the diff shows it — line numbers, signs, syntax colour, chips — in the same scroll.
Several diffs stand at once — a working change, a commit and a pull request are each their own float and their own tile at the rail's foot. The foot grows to half the rail and then scrolls inside itself. The git panel's plate is a set now: it means "this row's diff is open", never one claim. Clicking a row never closes a diff — the tile's ✕, the header's ✕ and ⌘⇧W do. And a diff finally scrolls sideways; every line past the panel's edge used to be unreachable.
The rail says which floats are standing — a tile has three states, not two. In front is the accent wash under its ring; on the stage — a float open behind the front one — is that ring alone; parked behind its tile is neither, under the dim. Hover asks a tile its name and it answers to the tile's left: a file spells its whole workspace-relative path, a foot tile spells its diff.
Pull requests are listed, read and merged — the create form is dropped whole, along with the OPEN title above the list and the ghost row below it. The section is its rows and nothing around them; a pull request is opened on GitHub.
20 August 2026
Fold keeps itself current. From this build on, a newer Fold arrives on its own — no brew upgrade needed unless you want it.
Update automatically, on by default — the gear's settings popup (⌘,) gains an UPDATES row. With it on, Fold asks its release channel at launch and every six hours; a newer build downloads in the background and installs when you quit — the next launch is simply the new Fold. Off means nothing is asked, ever; brew upgrade --cask fold keeps working either way.
Verified before it touches anything — the downloaded build must carry Fold's own Developer ID signature, chained to Apple, with Fold's team and bundle id, and say the release's version in its own plist. Anything else is discarded and said out loud.
One fact, three readers — the popup's foot note says where the update stands (fold 0.34.0 downloaded, downloading — 38%, up to date · checked 2 min ago); the rail's gear wears a small dot while a downloaded build waits; a toast says when one lands. The foot's relaunch to install keycap installs right now and brings Fold back where you left it — layout, names, fresh shells.
Never on its own — a plain quit swaps quietly and does not relaunch; only the keycap comes back. A Fold that was force-quit installs at its next launch, once.
This is the first build that can update itself, so this one last time: brew upgrade --cask fold.
20 August 2026
The editor floats over the stage — files, diffs and pull requests stop sharing one column and stand where you put them.
One float per open thing — a file, a diff or a pull request opens into a movable panel with its own header: the mark, the name, the place, and a diff's summed +N −N. Several files and a PR's diff can stand on screen together. Drag the header to move it, drag any edge or corner to resize it. The terminal owns the whole stage beneath them.
The rail stays the one listing — the open-files rail is untouched by decision. Its tiles raise a float or reopen a minimized one, its single mark follows whatever float is in front, and there are still no tabs anywhere.
Minimize is the answer, not avoidance — the old rule that the terminal is never covered retires with the column. Each float's − parks it to the rail; ⌘E parks and restores every float at once. ⌘⇧W closes what the front float shows.
Floats come back where you left them — position, size, minimized state and z-order are workspace facts now, restored on relaunch and clamped back into whatever room the window affords. A frame parked off today's screen edge costs nothing.
The git panel catches up on what git cannot see — three facts used to move without a character of git status output changing, so the panel never noticed: a branch whose remote copy was deleted, a branch that just got an upstream, and a pull request that now exists. Every landed sync verb — push, pull, publish, fetch — now re-reads the graph, the branches and the pull requests. A PR opened while the change list was showing lands its count on the strip instead of hiding until you walk into the PR section.
Merged pull requests mark a branch gone — [gone] is git's only word for a dead branch, and git can only say it about a branch whose configured upstream vanished. A branch pushed by explicit refspec never gets that configuration, so its PR can merge, its remote copy can be deleted, and git still calls it unpublished. GitHub is asked instead: a local branch whose name is a merged pull request's head, and which no remote still lists, wears the gone tag and joins the clean-up sweep's census. A merged PR whose branch was kept on the remote is still a live place to go and is left alone.
19 August 2026
The git panel, rebuilt — six rounds on the header, the rows, the stash and the branches.
The sync cluster answers — push, pull and fetch become one segmented cluster that draws its own hover, press and running states. Before this they were ink with invisible click targets parked on top, so none of them reacted to a pointer. The fetch glyph spun backwards; it turns the right way now. A branch with no upstream is offered ↑ Publish instead of two buttons that could only answer with git's refusal.
The strip names its sections — four unlabelled glyphs was the panel's biggest comprehension cost, and the clock read as "history" rather than "graph". The count moved inside the cell as a pill, and the rail's git icon carries the change count even with the sidebar shut.
The change row is two lines — filename over its folders, so the name stops paying for the panel's width. The status letter keeps a column of its own, where the staging verbs used to cover it up.
Groups fold, and the stash opens — change groups fold, remembered per workspace and across a relaunch (Conflicts deliberately does not). Stash entries are two lines with their age, drop asks before it destroys anything, and an entry opens to the files inside it.
Branches are a section, and the branch name is its door — the header's dot and name are a real control now. The default branch is pinned first and wears its tag. Locals that lost their upstream get a quiet gone tag and a clean-up chip that asks first, removes each worktree, then deletes the census in one go — squash merges leave a plain delete refusing exactly the branches the sweep exists to clear.
Refusals get said out loud — a toast stack bottom-right carries every refused branch verb with git's own words as the hint, and the sweep's success with its count. Deeds that run past 0.4s summon the clone wait's fold-loop loader.
19 August 2026
Two surfaces wake up: settings, and the clone flow.
The gear opens something — the rail's settings gear has been inert since M2. It now opens a settings popup wearing the cheatsheet's overlay grammar: dimmed backdrop, centred panel, esc / scrim / ✕ to close, and ⌘, to open. It holds exactly one setting, honestly — the Claude resume toggle.
Claude resume defaults to on where Claude Code is — never having chosen now reads as on when ~/.claude/projects exists, instead of off. With Claude Code absent the row is inert, so no choice is stored that the machine could not honour.
The clone flow, rebuilt — the section header carries the stage (STEP 1 OF 2 — WHERE FROM / WHERE TO / CLONING), the footer is the keys' one home, and the answered URL settles into a fact line instead of a second field. The destination field gained a browse chip (click or ⌘B) that opens the system folder panel and hands the path back still editable; a failed clone remembers the parent you picked.
The wait is the mark — cloning animates Fold's own six facets: fold open, two cursor blinks, fold closed. Reduce Motion lands on the still mark.
18 August 2026
A patch on 0.30.0's Claude resume, before the ink dried.
One conversation, one shell — two sessions sharing a working directory could both remember the same conversation, and on restore both fresh shells would --resume it. A contested directory now resumes nothing; an uncontested one gets the real answer.
Quit is quick again — the ~2s wait after asking claude to leave bought nothing (one SIGINT interrupts the turn, it doesn't end it) and is gone; the transcript was being saved per message the whole time anyway.
Odd paths find their transcripts — the transcript-folder encoding now folds every non-alphanumeric character the way Claude Code's own does, so a my_project-style path no longer comes back as a plain shell.
18 August 2026
Quitting no longer loses the Claude conversation, and the deck line's icons ride inside the app.
Claude resume — quit got gentler for one specific guest: a session running claude is asked to leave first (SIGINT, a bounded wait) instead of being cut off mid-thought, so Claude Code saves its conversation, and Fold remembers which one it was. On restore, that session's fresh shell can reopen the conversation through Claude's own --resume door. The process itself is never resurrected — only the transcript comes back, and only through Claude's own mechanism. Reopening on restore sits behind a preference (autoResumeClaudeOnRestore) that defaults off; there is no in-app switch for it yet.
The deck line's icons ride inside the app — fold-statusline's icon font (the design system's folded-glyph set) now ships in Fold's own bundle, registered at startup and handed to the terminal as a fallback family, consulted only for the codepoints Maple lacks — at Maple's own metrics, so the glyphs sit at their true size. Every shell now exports FOLD=1: the contract tools use to know they are inside Fold.
17 August 2026
The stage splits, and every pane says whose it is.
Splits — the terminal column cuts into panes: ⌘D splits right, ⌘⇧D splits down, and each new half opens a fresh session. Seams drag to resize, ⌥⌘-arrows move focus pane to pane, and the focused pane wears the workspace's tint stripe. A split layout survives a relaunch — panes, names and working directories restored, always with fresh shells.
One chip per unit — a session lives either alone or in a split group, and the band shows one chip for each: a group's chip wears its members' names run together and its pane count as the tail. Clicking a chip stages the whole unit. ⌘1–9 mean chips. A group's ✕ removes the group behind one confirmation.
The chip drag — a chip drags out of the band onto the stage. A pane's middle swaps that session in; an edge opens a new pane there; the offer under the pointer always shows exactly what releasing would do. Esc, a drop off the stage, or a resize cancels.
The pane header — every pane, the lone terminal included, wears a strip: the prompt terminal mark in the workspace's tint, the session's name, its working directory in the tilde spelling, and the age tail. Hover shows two verbs — ↗ separates the pane so its session steps out to its own chip (⌥⌘W), ✕ kills the session. Dragging a header drags that pane's session by the chip drag's own rules, and the cursor says so.
The changed words wear a ground — the diff shows colour for the first time: a rounded chip behind exactly the changed words, string green for added and danger pink for removed, and no row washes anywhere. A line with no twin changed whole, and wears its chip end to end.
The empty states — the empty editor column and the empty terminal stage each wear their own artwork, tinted to the workspace, instead of a blank pane.
17 August 2026
The files wear real marks, and the diff earns its place in the rail.
The marks — every file icon in the app is new artwork: language logos for the languages that have one, bold letter marks for those that don't, filled glyphs for the non-code files, and gradient folders with their glyph printed in dark ink — 382 drawings. They show everywhere a file shows its face: the tree, quick open, the rail tiles, the git change rows, the editor placeholder.
The diff earns its tile — a followed diff — change, commit or PR — now holds a tile pinned at the foot of the open-files rail, apart from the file tiles. Opening a file no longer ends the follow: the diff waits as an idle tile and one click returns to it. It closes the way file tiles close — hover, then the ✕ — and ⌘⇧W still works.
⌘E — shows and hides the editor column any time, empty included. Hiding closes nothing: the rail keeps its tiles, and any tile's click brings the column back. Empty, the column wears its own artwork instead of a blank pane. ⌘⇧E stays the explorer's, and the cheatsheet learned the new row.
A diff that survives one long line — a minified one-line monster of a file used to overwhelm the diff's glyph renderer. Drawn diff lines now cap at 4,096 characters — far past anything a viewport can show — so the diff opens cleanly.
17 August 2026
The Branches section goes live, and staging learns to work in batches.
Branches, a real section — the strip's Branches tab opens the listing as rows: your locals with the current one wearing the active wash, the remotes no local shadows, + new branch… to create from HEAD, click to switch or check out, right-click to delete. The old header dropdown is gone; the branch name in the header is ink that answers "where am I".
A filter that stays put — pinned above the listing, it narrows locals and remotes together as you type. ↓ steps into the matches and Return takes the top one without leaving the field; Esc clears first, leaves second. A long listing scrolls under the field, never taking it along.
Six rows per group — past that a group shows five plus show all (N more), with show less as the way back. Locals and remotes disclose on their own, the current branch always survives the cut, and a typed filter is never capped.
Fetch turns — the header's fetch chip trades its word for a glyph that spins while git runs and stops when the answer lands.
Batch staging — every change row carries a tick, each group's title a master tick, and the group verbs act on the ticked subset — or the whole group when nothing is ticked. Discard-all asks one honest question first, counting what it takes and naming the untracked files that go to the Trash instead.
Hover tells the truth — scrolling used to leave hover plates on rows the pointer had already left, in the explorer and the git panel alike. The plates follow the pointer now.
16 August 2026
Git moves into the app.
The panel — the rail's git icon lights up in a repo and opens a change list read straight off git status: staged, unstaged and untracked, every row a real path. Stage, unstage and discard are verbs on the row, and discard asks the question first.
The tree wears the marks — the same one reading paints status badges on the explorer's rows, so a modified file shows without the panel open.
The diff — unified, rendered in the editor column, for any row in the change list.
Commits — subject and body in one box, amend when you mean it, and hooks stay honest: a hook that refuses the commit says so instead of pretending it landed.
Branches — list, switch, create, delete, and check out a remote branch. Stash — save, list, apply, pop, drop. Sync — push, pull and fetch, with ahead/behind on the branch.
The graph — lanes and merge edges, bounded so a long history stays readable.
Pull requests (ADR-0011) — create one from the current branch, list the open ones, view and merge, all riding your own gh the way everything else rides your own git. Without gh the PR section steps aside with one honest line and the rest of the panel is untouched.
Every one of those has a key, and the keys are on the cheatsheet. Also: a session chip's ✕ now takes only the ✕ — the rest of the tail switches to the session like the rest of the chip.
15 August 2026
The chrome learns to move.
Motion (ADR-0010) — three moves under one easing. Chips, explorer rows, chevrons and the roll-up sheets ink in at 120ms; the sidebar and the session strip slide as one piece at 180ms; focus crossfades at 260ms, the workspace switch fading the stage beneath a band that morphs its segments instead of blinking. The terminal never fades and takes exactly one resize per gesture, interruptions land as cuts, and every duration answers zero under Reduce Motion.
Accent follows the workspace — the rail's active icon, the tree's selected row and the open-files rail's active tile take the focused workspace's tint instead of a fixed blue.
The scope toggle — redrawn in the rail's own filled vocabulary: one panel for this workspace, two for all of them.
14 August 2026
The file side arrives, and Fold opens more than one project.
Editor and explorer (M3) — a tree that follows the disk, files open in an editor column with syntax colour, ⌘P quick-open, an open-files rail, image previews, and Reload / Keep when the disk changes underneath you.
Multi-workspace (M4) — several projects open at once, every one of them live. Switching never kills a shell. The band carries a segment per workspace; sessions are window-wide with a global or per-workspace scope toggle.
12 August 2026
The native rewrite. Fold is now Swift + AppKit with a libghostty terminal grid — no Electron.
7 August 2026
A new terminal engine under the hood. Fold's terminal moves to xterm's 6.1 beta line — the same build VS Code ships — closing a long-standing class of rendering corruption under fast, colorful output: the ghosted glyphs and smeared cells that could appear mid-stream when an agent floods the screen with diffs. The fix also isolates each terminal's glyph cache, so one session clearing its atlas can no longer disturb another's. Nothing changes in how Fold looks or feels — this one is pure foundation: parallel agents writing truecolor diffs at full speed, rendering exactly what they said.
Every confirmation is now Fold's own. The last three native browser pop-ups — closing a file with unsaved changes, removing a vanished folder from the welcome screen, and discarding git changes — now use Fold's in-app dialog, matching the rest of the app. And the dialogs got real manners: only one can ever be open, every shortcut and menu item goes quiet behind it, quitting or closing the window while one is up politely waits its turn instead of vanishing, and a held-down Enter can never answer a question you haven't seen yet — Escape always cancels. Deleting an untracked file still asks twice, with the second dialog spelling out that the file is deleted permanently, not moved to the Trash.
6 August 2026
The flight prompt — Fold's terminal look now ships in the app. Open a session on any Mac and the prompt is already there: a dim path with the folder lit, a quiet git branch, and a paper plane riding its own gradient wind — drawn from Sami's traced artwork, gliding in as the line types itself. A failing command turns the whole flight red; past prompts fold down to just the plane and the command you ran. History suggests as ghost text (→ accepts), the first word colours green or red as you type depending on whether it will actually run, and a custom caret — a soft rounded bar that holds solid while you type — replaces the terminal block on prompt lines. All of it is hand-written zsh and renderer code bundled inside Fold: no Oh My Zsh, no Powerlevel10k, no plugins, nothing installed on your machine, and your own zsh config still loads first, untouched.
The workspace's colour fills the window. The title bar's tint wash no longer stops at its seam: a soft glow of the focused workspace's colour now breathes from the window's top-left corner across the whole app, and the prompt's paper plane flies in the same colour. Click another workspace in the dock and everything turns together — band, canvas, plane — instantly. The red fail flight stays red, and with a single workspace open the plane keeps its original blue, exactly as before.
Fold offers the Claude Code status line. If your machine runs Claude Code without a status line configured, Fold shows a one-time offer with a rendered preview of the deck line — one click installs it via the public fold-statusline CLI, Not now declines until the next launch, and configuring any status line yourself silences the offer for good. Settings ▸ Claude Code carries the same offer on demand, and the installer backs up whatever it replaces so uninstall restores it byte-for-byte. Fold still never touches an agent's config on its own — the offer only ever writes through your explicit click.
5 August 2026
The workspace dock — many projects, one window that finally makes sense. The workspace tab strip is gone. In its place: a row of tinted paper-plane tiles at the top of the sidebar — the dock. Click a tile and the explorer, editor, git panel and notes all follow; hover for its name; a green pip means something is working over there; right-click (or middle-click) closes it. The dock wraps when you open more workspaces than fit, so nothing ever hides off an edge. With one workspace open it disappears entirely.
Every terminal, one list. The sessions sidebar now lists every open workspace's sessions, each workspace a tinted collapsible group with the explorer's own chevrons and indent lines. The groups are pure structure — nothing highlights or reshuffles when you switch workspaces (the dock answers "where am I"), a collapsed group shows a live spinner and count when its sessions are working, and the + on any group header starts a session in that workspace without leaving where you are. ⌘T and presets always land in the focused workspace; Ctrl+Tab cycles every session in the window.
Switching feels physical. The title bar carries a soft wash of the focused workspace's colour behind its glyph and name, the sidebar and editor blink a brief ring in the new workspace's tint when you switch, and changing terminals is a depth crossfade — the old one drifts back as the new one rises, 300ms, never a hard cut.
A quieter terminal header. Each terminal opens with a chapter-divider line — two hairlines meeting a small-caps inscription: spinner · name · worktree · workspace · running time (or its exit code). It lives on the terminal's own background; no bar chrome, no stacked borders.
Sharper syntax colors. Types and classes go Tokyo Night's own gold, comments lift a full contrast step, this/self reads red-italic, object keys get their own teal, markdown marks recede, diff files finally colour (with a soft full-line wash on added and removed lines), and .env files highlight at all. Every language language-data ships benefits — the map now covers the whole tag set.
Fixes. Renaming a session no longer closes its own input the instant it opens; error toasts name the file and line that threw instead of leaving you with a bare message.
4 August 2026
A done sound. Leave a build, a test run, or an agent working and switch away — when it finishes, or stops to ask you something, Fold plays a short page turn. It only plays for runs longer than ten seconds that you weren't watching, so it never nags; a watched task stays silent. Settings ▸ Sessions has the toggle and seven other sounds to choose from — four chimes, four made of paper — each previewed as you pick it. Every sound is synthesized on the spot; no audio files, no dependencies.
Ports, at a glance. The sessions sidebar gains a PORTS segment listing what's listening. Your workspace's servers lead the list — click a row to jump to the session that owns it, hover for a ✕ that stops the server, and a dead session's leftover (port 5173 already in use) shows in red as an orphan you can finally kill. Every other listening process of yours follows as a dim mac row; pure app noise (processes running from /, like Control Center) is filtered out, and a dim hide/show in the header collapses the whole list when you don't want it.
⌘/ — the shortcut cheatsheet. One overlay with every key the app answers to, drawn as real keycaps and grouped the way the app thinks about them. It renders from the same registry the keys run through, so it can never drift out of date.
⌘⇧P — the command palette. Quick-open's > mode: type a command's name and run it. Every shortcut is a row, plus the keyless residents (open folder…, the ⌘K focus family). Commands you've used this session bubble to the top; deleting the > drops you back to files.
Search reaches your notes. The search panel grows a Notes scope, and All files now covers fold notes too — they land as a marked appendix after the repo results. Note hits open in the floating notes panel, scrolled to the match with the same amber wash the editor uses.
Drag to reorder. Sessions drag within their worktree group, open-file tiles within their folder group — the insertion line pins and turns red past a boundary rather than letting a drag claim a move on disk. The order you make is the order that's restored.
Pin a note. A pinned note holds the top of the notes list, whatever its age.
Dev-server links open on a plain click. localhost:5173 in a terminal — with or without the http:// — is a link, no ⌘ needed: clicking your own server is always intentional. Every other URL keeps ⌘-click. 0.0.0.0 opens as localhost, because Safari refuses bind-addresses.
Polish. Session and port rows keep a fixed height, so the hover ✕ no longer nudges the list; the sound picker's preview button sits aligned with its dropdown.
3 August 2026
Session presets — the commands your project already knows. ⌘⇧T opens the run picker: your saved presets first, then the project's package.json scripts (Fold reads the lockfile to know whether that's pnpm run, yarn, bun run or npm run), then + New preset…. Click one and it opens as its own session — the command lands in the scrollback like you typed it, ^C works, and when it finishes you're at a live prompt in the right directory. ⌘T is still a bare shell, untouched.
Scripts run on click; a preset is a script you keep. Hover any script row and a ☆ saves it as a preset; right-click a preset to edit or delete it. Presets are saved per project in Fold's own app data — nothing is ever written into your repo, so git status stays clean.
The name you gave it stays. A preset-born session is named after the preset and pinned — the Dev server session doesn't rename itself to node the moment it starts working.
Relaunching never re-runs anything. A restored session comes back with its command sitting pre-typed at the prompt, caret at the end — press Enter to resume, or just type over it. Reopening Fold can never fire a deploy on its own.
Earned chrome. A ▸ appears beside the + in the sessions header only when the project has something to run; a folder with no scripts and no presets sees no new pixels at all.
3 August 2026
Split terminals resize. Every seam between split panes is now a live sash: grab the gap and drag to give one pane the room it needs (15–85%), double-click to even the two sides back out. The seam lights up under the pointer the same way the window's dividers do, and nested splits each get their own handle.
Git rows scan by filename. Changes and History rows drop the directory prefix — the filename is the thing you scan for, and the full path (including old → new on renames) waits in the tooltip. File icons grew to the explorer's size, so the two lists finally read as one grammar.
The panel's tab strip matches the activity bar. The Changes · Branches · History · PRs glyphs now render at the activity bar's icon size in slightly taller cells — the two strips are the same idea on two edges of the panel, and now they agree on scale.
Diff tabs wear a git glyph. A diff open in the editor used to borrow the branch mark on the open-files rail; it now carries a filled git-compare glyph — two commit discs joined by opposing elbows, built from the same discs-and-bars vocabulary as the pull-request mark. Diff and PR tiles also size their glyphs to sit evenly beside the file icons.
2 August 2026
The git panel, rebuilt block by block. Every block was prototyped, iterated, and approved before a line of code changed — and the result is one panel speaking one language instead of five borrowed idioms.
One refresh. The panel used to show two ⟳ buttons 20px apart that did different things — the header's re-read status, the orientation line's ran git fetch. Now the header ⟳ does both in one click, so the ↑ahead ↓behind counters can never sit stale, and the orientation line keeps just the counters — which are still buttons: click ↑2 to push, ↓1 to pull.
Tabs became icons. Changes · Branches · History · PRs are now four equal icon cells that never wrap, wearing glyphs drawn in Fold's folded-paper style — a +/− sheet, a Y-fork, a clock, a pull-request mark. Hover a cell and an instant tooltip names it; counts sit in the cell's corner.
Rows hold still. Hovering a changed file used to push the stage/discard buttons into the row, shifting the filename under your pointer. Actions now fade in over the row's right edge — the state letter stays put, nothing moves, and the buttons got real hit targets. Group titles stick to the top while their group scrolls, and the bulk stage/unstage actions no longer nudge the list when they appear.
Commit stays where your hand expects it. The commit box is pinned to the panel's bottom edge — with two files or forty, the message field and Commit button are always in the same place while the list scrolls above them.
History has a spine. A hairline rail runs down the commit list with a dot per commit — the expanded commit's dot lights up in accent and its files hang inside the rail. Each commit's age moved to the right edge of its summary, where you actually scan for it.
PRs say their state in words. The bordered badge chips are gone: review state sits right on the title line — dim draft, green approved, red changes req. — and checks are spelled out below (● checks pass). A PR opened into the editor now wears the pull-request glyph on the open-files rail, matching the list it came from.
Removing a locked worktree recovers instead of failing. Agent sessions lock their worktrees and sometimes never let go. Removing one used to dead-end with git's refusal; now Fold reads the lock, tells you whether the locking process is still alive, and offers unlock-and-remove — a dirty checkout still refuses, exactly as before.
2 August 2026
Tables render in markdown. A pipe table used to show as raw | text everywhere Fold previews markdown. Now — in notes, in .md files in the editor, and in PR descriptions — a table your cursor isn't touching renders as a real table: bordered cells, a header row, and column alignment taken straight from the :---: delimiter row, with bold, code, strikethrough and ==highlights== working inside cells. Click the table and it opens back into pipe text for editing, exactly like every other structure in the live preview; move the cursor away and it renders again.
A table tool in notes. The note toolbar gains a table button (⌘⌥T) that drops in a ready-to-fill skeleton — header row, delimiter row, and a body row, cursor left at the end so you can start typing.
2 August 2026
Fixed: launching Fold from Finder broke the GitHub features. Start Fold from the Dock or Finder — rather than a terminal — and macOS hands it a bare-bones PATH: the PRs tab claimed gh wasn't installed even when it was, and the status-bar refresh could pop a keychain password dialog instead of quietly fetching. Fold now reads your login shell's PATH once at startup — the same environment its terminals already run in — so git and gh behave identically however the app was launched.
1 August 2026
The git panel, redesigned. It used to open blind — which branch, how far ahead, how many changes all lived elsewhere. Now an orientation line sits at the top: your branch in accent with ↑ahead ↓behind beside it, dim when there's nothing to say; click it and you're in Branches. The tabs carry counts — Changes 9 · PRs 2 — so you see the work without switching, and the active tab wears the same accent wash as everywhere else in Fold.
File rows finally read like the explorer. Every file in the panel — changes, a commit's files, a PR's files — gets its file icon, a dim directory with a bright filename, and the M/A/D letter on the right edge, exactly where the explorer badges it. Scan by filename, confirm by letter.
Less chrome, more answers. Group titles show a quiet count; stage-all/unstage-all are single glyphs that appear when you need them; an empty Staged group tells you what to do instead of vanishing; and the Commit button says Commit 3 — so when it's disabled, you know why. Branches is three labeled groups (LOCAL / REMOTES / WORKTREES) and the two always-there input boxes became + new branch… rows that unfold when clicked. History puts the commit message first and tucks the hash into the small print.
Pull requests open inside Fold. Clicking a PR used to launch your browser. Now it opens a document in the code section: the description rendered as real markdown, who reviewed and who's still being waited on, each check with its own pass/fail/running state, and the changed files — click one and its diff unfolds right there, as a single-column diff, no browser and no checkout required. Checkout the branch or jump to GitHub with one button each; merging stays on GitHub, deliberately. While anything loads, you get Fold's braille spinner instead of silence.
1 August 2026
One workspace, many worktrees. A git worktree used to open as another workspace tab — one repo turning into a strip of near-identical tabs, each with its own sessions list and its own state. Now a workspace is the project, and its checkouts live inside it: switching worktree swaps the file tree, the editor and the git panel in place, while every terminal keeps running exactly where it was. The rule the whole feature follows: sessions are workspace-wide; files are worktree-scoped. Watch an agent working in one checkout while you read another — the thing worktrees are for.
A worktree bar appears above the sidebar the moment a repo has a second checkout (single-checkout projects see nothing new). Click it — or press ⌘E anywhere — for the picker: each worktree is its name in its own colour, its branch beside it, the current one washed in accent. + New worktree… creates a checkout under ../<repo>-worktrees/<branch> and lands you in it. The same tinted name appears in the status bar, so you always know where you're standing even with the sidebar collapsed.
Sessions say where they run. A session in another checkout carries that worktree's name, in that worktree's colour, right in its row — no headers, no grouping chrome, the flat list you already know. ⌘T opens a session in whatever checkout you're standing in, and the picker can spawn one into any other.
Open files follow you. Switch worktree and every clean tab jumps to its same-name twin in the new checkout — cursor and scroll intact, the change gutter re-reading against the right HEAD. A file with unsaved edits stays safely on its own checkout, marked with that worktree's colour on the rail — your edits can never silently land on another branch. Saves always write to the checkout the tab belongs to.
The git panel understands checkouts. Worktree rows in Branches switch in place; a branch that's checked out in another worktree wears that checkout's colour and clicking it takes you there instead of surfacing git's refusal after the fact. Removing a worktree asks first, names any sessions running in it, and never force-deletes a dirty tree.
Everything is remembered. Which checkout you were in, each worktree's colour, which sessions ran where — all restored on relaunch, and always re-checked against what git actually lists: delete a worktree in a terminal and Fold quietly falls back to the main checkout, sessions kept.
1 August 2026
Notes. Every project gets a private scratchpad: markdown notes that live in .fold/notes/ inside the project and are structurally incapable of reaching a commit — Fold registers the folder in git's local exclude file (.git/info/exclude), never in .gitignore, so nothing changes for your team and nothing can be committed by accident. A Settings toggle can lift that if you ever want notes in git; the default keeps them local.
A note opens in a floating panel over the workbench — drag it by its header, resize its corner, and keep typing in a terminal while it floats beside your work. Position and size are remembered per project. Close it with ✕, Esc, ⌘⇧J, or by clicking its highlighted card; nothing is ever lost, because notes autosave — there is no dirty dot and no ⌘S.
Editing is Obsidian-style. Markdown renders as you type — headings sized, checkboxes clickable, ==highlights== and colored callouts (> [!note], [!tip], [!warn], [!danger]) drawn live — and the line your cursor is on shows its raw source. A toolbar covers every structure, each tool with a keyboard chord (shown in its tooltip), and a Live | Source switch (⌘⇧V) drops to plain markdown. ⌘⇧N creates a note from anywhere.
Minimize a note into a floating bubble — a small disc you can park anywhere and drag around. Park as many notes as you like; each bubble takes one of the workspace-tab colors and keeps it, its card in the sidebar wears a matching ring, and clicking a bubble brings that note back exactly where its panel was. Minimize and restore animate; the panel flies to and from the bubble.
A lock for reading. The padlock in the note's header makes it read-only — the toolbar dims, typing is rejected, even checkboxes stop toggling — until you unlock it.
Your AI agents understand notes. Fold writes a small README.md into .fold/ explaining the convention, with instructions addressed to agents — so in any project, telling your agent "create a fold note" just works.
Markdown preview in the editor, too. Open any .md file and the same Live | Source switch appears — the same live rendering, in the code editor.
Also: right-clicking a file in the open-files rail now offers Close / Close Others / Close All plus Copy Path and Reveal in Finder, and in-editor shortcuts no longer double-fire their app-wide siblings (⌘B bolds in a note, toggles the sidebar everywhere else).
31 July 2026
Sessions name themselves. A session row used to say zsh · 2 with a green dot next to it, forever. Now the name follows what the session is doing: run pnpm test and the row says pnpm test; start Claude Code and the row carries Claude's own session title; when the command ends, the name falls back to the shell. Rename a session by double-clicking and that name is pinned — auto-naming never touches it again, even across restarts.
The green dot is gone. It said "alive", which is almost always true — a lamp that is always lit tells you nothing. In its place: a small braille spinner appears only while something is actually running, a ticking timer shows how long the session has been open, and a dead session dims with its exit code — red only when the code is non-zero. Idle sessions show nothing, which is the point: when every row is quiet, everything is fine.
You can tell which session you're in again. The active row and the hovered row used to be the same colour, so the answer disappeared whenever your mouse entered the list. The active session now wears the same accent wash as the active file in the editor rail; hover stays its own grey.
The switcher moved to Ctrl+Tab — the key that cycles tabs everywhere else. Hold Ctrl, tap Tab to step through terminals and files, release to switch. Opt+Tab now hops between workspace tabs. And the switcher finally shows the full name of whatever is focused — floating above the panel — so a long session name or a deep file path is readable instead of clipped to a 96px tile.
Settings is a panel, not a page. Changing a font size is a two-second errand; it no longer takes over the whole window. The workbench stays visible behind it, and Esc, the ✕, or a click outside all dismiss it.
Also: the four sidebar icons are drawn as folded paper now, lit from the top-left like every crease in the chrome, and the active view gets the same accent wash as everywhere else — with its name appearing instantly beside the bar. Inactive workspace tabs no longer have their corner clipped for a fold only the active tab wears.
30 July 2026
Fold has its own surface language now. Boundaries between regions of the chrome are drawn as creases — a shadow face and a lit one, lit from the top-left — instead of the single hairline every editor uses. Boundaries within a region stay flat. The rule is worth knowing because it is why the window suddenly reads as folded paper rather than panels: seams bound regions, edges separate items.
The active workspace tab wears a dog-ear — a folded corner in accent, at the top-right. It means "you are here" and nothing else. A file with unsaved changes keeps its dot, in ink rather than accent, so the two never say the same thing in the same colour.
The explorer icons are ours. The vendored Material set is gone. The rule that replaced it: saturated colour says what happened to a file, muted colour and form say what it is. Git state keeps the strong colours; every file-type hue is mixed toward the dim text colour, so no file type can shout louder than "this file is in conflict". The old set had a YAML icon two pixels from the conflict red and a JSON icon on the modified amber, which meant a .yml file read as broken at a glance.
Each icon is a filled sheet with the same corner turned down, carrying a two-letter monogram or one simple symbol — that is all that fits legibly at 15px. Build output, node_modules, logs and source maps keep their icon at reduced opacity, and the dimming carries down to their contents.
Each workspace gets its own colour. Open several projects and the paper-plane glyph in each tab is tinted differently, so a strip of six is scannable instead of six identical marks. The first workspace stays the original blue, and the active tab's dog-ear takes its workspace's colour, so the folded corner and the glyph agree.
Open files are a rail, not tabs. The editor's tab strip is gone. Open files are a vertical column of icons at the right edge of the window. The editor in Fold is the secondary column — the terminal is the main stage — and a horizontal strip runs out of room there silently: tabs that fall off the edge look exactly like no tabs at all. Measured with eight files open, only five were reachable. A vertical list cannot overflow in the direction it does not run.
Files are grouped by folder with the diffs last, so a tile's position means something even when five of them are the same file type. Hover a tile and its path appears instantly beside the rail; hover a separator and it names the folder. Middle-click closes.
The status bar names the file you are in, next to the cursor position — dimmed folder, bright filename. On a narrow window it trims from the front, so the filename always survives.
The editor column gets out of the way. Close the last open file and the column closes with it, giving the width back to the terminal. Open a file and it comes back. ⌘J still toggles it by hand whenever you want it.
Fold has no title bar. The macOS window buttons sit in the workspace tab strip, in the same row as the tabs, which gives the workbench back a whole row of height — 66px of chrome down to 34px. Drag the strip to move the window, double-click it to zoom. In full screen macOS hides those buttons and the tabs slide left into the space.
Also: scrollbars are gone from the editor, diff tabs and the git panel — the surfaces where they were only ever noise. Empty states line up with the content they replace. A file explorer folder that is entirely new no longer collapses into a single unopenable row.
29 July 2026
The gutter tells you what you changed. Open a file and a thin bar sits between the line numbers and the code: green where you added lines, blue where you rewrote them, a small red wedge where lines were deleted. It measures against HEAD, so the colour means one thing — not committed yet. Staging a file in the git panel doesn't clear it; committing does.
It tracks the buffer, not the file. Type a line and the bar appears before you save, because the comparison runs against the text on screen rather than the text on disk. That also means it works while you read a file an agent is still writing.
A rewrite is shown as a rewrite. Replace two lines with fifteen and you get two blue lines and thirteen green ones, not fifteen blue ones — the new code stays visibly new. Shrink a block from five lines to two and the three that vanished get a wedge instead of disappearing without trace. Git's own hunk format can't express either of those, and VS Code paints the whole region one colour; this is a deliberate departure, and it came from using it.
Nothing to configure, and nothing to click: the gutter reports, the git panel acts. Untracked files and files you haven't committed yet stay blank — the explorer badge already tells you that story.
Open files follow the disk. An open tab used to be a snapshot. If Claude Code rewrote a file you had open, Fold would happily keep showing you the old version — forever, with no hint that it was stale. Now an external write reloads the tab in place, keeping your cursor and scroll position, so the file simply updates under you while you read it.
The disk wins, including over unsaved edits, and it does not ask. That is a deliberate trade: this is an editor for the fix between agent turns, and a modal dialog in the middle of an agent's write is friction rather than safety. If you were mid-sentence in a file your agent then rewrote, your sentence is gone. A file deleted on disk is the exception — the tab and its contents stay, with a toast, because that buffer may be the last copy.
28 July 2026
The explorer got a right-click menu. Rename, Delete, Copy, Paste, Copy Path, Reveal in Finder — on any file or folder, and on the empty space below the tree for the project root. Left-click is unchanged: it still opens the file. The tree's primary gesture was never going to become a menu.
Delete means the Trash. Not rm. A file you delete by mistake is still in Finder's Trash, and the confirm dialog says so before anything moves.
Paste is a copy, and it never overwrites. Copy remembers a file or folder; Paste drops it into the folder you right-clicked (or the folder containing the file you right-clicked). A name collision gets the Finder treatment — alpha copy.ts, then alpha copy 2.ts — so nothing is ever silently replaced. Pasting a folder into itself is refused. There is no Cut: moving files is what the terminal and dragging are for.
Open tabs follow the file. A tab's path is its identity, so renaming a file — or a folder with files open inside it — moves those tabs to the new path rather than leaving them pointing at something that no longer exists. Deleting closes them. Renaming a file with unsaved changes is refused outright: better a toast telling you to save first than an editor quietly writing into a path that moved.
28 July 2026
A git panel release: two things it couldn't do, and two it did without telling you.
New folders show their files. Create a folder and the Changes list used to show one row for the folder itself — nothing inside it, and no badges in the explorer. That is git's default --untracked-files=normal, which collapses an entirely-untracked directory into a single record. Fold now asks for =all, so every new file is listed, stageable and diffable on its own. .gitignore still prunes, so nothing walks into node_modules.
A blocked branch switch offers a way out. git refuses to switch branches when uncommitted work would be overwritten, and Fold used to hand you that refusal as a toast and stop there. The plain switch is still tried first — git happily carries non-conflicting changes across branches and that stays the normal path — but when it is refused you now get the two ways out git itself names: stash them and switch (restore later with git stash pop, untracked files included), or discard them and switch, behind a second confirm because it deletes work. Any other failure — a bad ref, a failing hook — still surfaces verbatim.
Push, at last. There was no push affordance at all on a branch created in Fold: the status-bar arrow keys off ahead/behind, which git reports only against an upstream, so on an unpublished branch it stayed hidden forever — and a bare git push there dies with "has no upstream branch" anyway. Push now sits beside Commit, where you want it after committing: it reads Publish on a branch with no upstream (and runs git push --set-upstream origin HEAD), Push N when you're ahead, and greys out when there is nothing to send. The status-bar arrow shows on unpublished branches too.
Buttons that spin long enough to be seen. git status returns in about 20 milliseconds — one frame — so the refresh button's spinner was added and removed before the screen could show it, and the click read as doing nothing at all. Busy states are now held for a beat. Every spinner in the app benefits, not just that one.
27 July 2026
A cleanup release: one feature removed, and the Settings page fixed properly.
The "ta-da moment" is gone. v0.6.0 shipped a ✦ badge and a sparkle burst when a busy background session went quiet. It was cute and it was noise, so the whole feature came out — the badge, the burst, the pane output hooks, and the entire Sessions section of Settings that existed only to toggle it. Existing settings.json files need no migration; a stale sessions key is simply dropped on load.
Settings actually lays out now. .settings-body was a row flex, so each section became a side-by-side column. In that squeezed row the font input (flex: 1, basis 0) could never grow — the long hint made free space negative — so it rendered at zero width. Sections now stack in a single centred column, and the font row puts its label above a full-width control.
Font family gained a combo box. The text field is still the source of truth and accepts any CSS stack, with a ▾ list of installed coding faces beside it, each previewed in its own face. Picking one writes '<Family>', ui-monospace, monospace, so uninstalling that font later can't drop the chrome to a proportional face.
Reset is per section. The single "Reset to defaults" button sat under Terminal but also reset the app-wide font family shown under Appearance. Now each button only touches the controls next to it.
The GPU renderer toggle was removed. It existed to work around WKWebView compositing artifacts — a Tauri-era problem. Chromium doesn't have the bug, so the WebGL addon attaches unconditionally.