A small fix for printing.
Fixed
- Print and Save as PDF use the whole page. Printing no longer squeezes the document into a narrow column pushed toward the right edge. The printed layout was inheriting the widths of the on-screen sidebars. It now fills the page whichever sidebars are open.
Your own edits can go through review too. Write on a draft, see it next to everyone else's changes, and apply it when you're ready.
Added
- Propose changes. A quiet mode chip sits in the document header, next to Share. It reads "Editing directly" by default. Click it to switch to "Propose changes" and your edits collect on a draft instead of landing right away. The chip shows how many edits are waiting. A menu lets you Apply them, Park the draft for later, or Discard it. Stet keeps a copy of anything you discard.
- Your draft lives where everyone else's changes do. It shows up in the bubble stack next to the document, as marks in the text, as counts in the file tree, and in the Review list. Parked drafts show gray. Deciding a draft is a whole-draft action, from its bubble or the mode chip.
- Solo filters everything at once. Soloing a person, an agent, or your own draft filters the Changes list, the Review list, the marks in the document, and the counts in the file tree together. Files they never touched dim slightly.
- A Linked section in the sidebar. Above the file tree, for the open document: what it links to, what links to it, and the set of documents it's connected to through those links. A link to a file that doesn't exist is marked "not found" instead of being dropped.
- Collaborator versions under "Also open". Shared workspaces list the versions your collaborators have open in the editing-mode menu. Every branch pill stays independently inspectable. No locks, no presence claims.
- Sharing with a version open explains itself. The first share while you have a version open lays out the boundary: publish the last applied version while your work stays private, or apply your version first. Stet pushes the published branch, never an open private draft.
- History records how outside work arrived. A direct filesystem edit or a normal Git branch, surviving restarts without duplicate rows. Stet labels work as AI only when the commit evidence is strong, never from a branch-name guess.
- Agent edits stay on disk the moment they arrive. A pending pill marks the edit, and you can keep typing in the same document while it waits. Your words show up immediately and never mix into the change you're reviewing. Accept it and both land. Reject it and your typing still lands.
- A branch's description unfolds from its pill. Select a branch pill and its description opens as a shallow header across the reading pane. Hovering a pill shows one card with who made the change, the branch, the commit message, and the accept and reject controls. Clicking locks the card open and filters the document to that person's changes.
- Git safeguards for shared workspaces. Publishing can no longer send one of Stet's internal review branches to your remote. Stet installs a local git hook so a plain
git push from outside the app can't either. If something outside Stet lands on a review branch, Stet sets it aside for you rather than guessing.
Changed
- Your draft's edits are violet, not red. They never read as removed text. Clicking your draft's pill highlights the text you changed, the same way it does for anyone else's changes.
- You can start proposing while an outside edit is waiting. The waiting edit stays put. Accept it and it joins your draft instead of landing on the document. What you type meanwhile shows as your own draft edits, not as a change to review.
- Switching a folder to Auto lands what was waiting. An outside edit made after the switch can no longer attach itself to an old pending review and vanish with it.
Fixed
- Conflicts no longer vanish into a one-time error. When applying a draft overlaps with other work, Stet keeps both versions, remembers the conflict across restarts, highlights only the exact overlapping words, and offers a retry or a safe way to keep your version and return.
- The mode menu reads the same live state as the rail. When leaving or discarding a draft would be unsafe, "Edit directly" and Discard disable with a reason that names the waiting file. Apply and Park stay available.
Stet now keeps its own record of every pending change. What you see in review is what Stet actually captured, not a guess from branch state.
Added
- Comment links in the share flow. Copy share link now offers a per-document comment link, no invite needed, alongside the full workspace share.
Fixed
- Pending changes come from Stet's own record. Every captured change is now an explicit record, and the review sidebar, the menu-bar dashboard, and shared-workspace sync all read from it. They can no longer disagree. Leftover branch drift that was never captured as a change is preserved for recovery instead of appearing as something to accept or reject.
- Decisions are verified before anything is written. Accept and Reject now check that the change is still open, still matches the file, and is still the version you looked at. A stale decision refuses with the reason and touches nothing.
- Older workspaces migrate safely. A workspace from before this record gets each old pending change classified on first open. Real work stays pending. A change whose document was deleted, renamed, or left unresolvable is set aside with its bytes preserved instead of showing as a false pending change.
- A change with nothing left to review closes itself. A pending item whose content already matches the document no longer sits open in the sidebar with nothing to show.
- Agent branches show up live. A branch an agent creates directly with git while Stet is open now appears as a pending change on its own. You no longer have to close and reopen the workspace.
- Right-clicking a link to edit it works in a background window. The editor popover could silently fail to open when the window was not front.
- The review tier switcher stays current. Changing the review signals tier from another window, or directly in the setting, now updates the right rail immediately.
- The link editor and table menu open mid-layout. Opening either one while the Changes rail was still settling into a narrower size could make both silently fail to appear.
- Copy share link explains itself when signed out. It now tells you when you need to sign in or set up sharing and opens the Share dialog, instead of silently doing nothing.
The document-integrity release. Saves are verified, destructive writes keep a way back, and phantom changes stop resurfacing.
Added
- Formatting only changes are labeled honestly. A pending change whose only difference is invisible characters, trailing whitespace or a final newline, now says so in the sidebar and shows exactly which characters differ. It used to render as an apparent paragraph deletion, or vanish from the list entirely.
- Every save is checked before it lands. A save now carries the revision it was made against. If the file changed on disk since you last saw it, from a sync or a change landing elsewhere, the save is refused and the editor reloads the real content instead of silently overwriting it.
- Destructive saves keep a way back. A save that removes most of a document still lands, but the previous version is preserved first. A banner offers Keep or Restore previous version, and until you choose, that save is not pushed to a shared workspace.
Changed
- New workspaces start with review signals on and local edits set to Hybrid. Trivial agent edits still land on their own. A significant edit queues for your review from the first run. Existing workspaces keep their settings, and the grading data stays local JSON on your Mac.
- Smart Typography no longer interrupts your typing. Toggling it used to rebuild the editor instantly. The new setting now takes effect the next time you open a document.
- Blockquotes read like the rest of the document. Upright, full contrast, with italics only where the author put them.
Fixed
- Autosave can no longer wipe a document. A settings toggle could hit a brief window where a fresh editor instance autosaved an empty document over the real one, leaving only frontmatter behind. Autosave now refuses to write until the editor has finished loading, and refuses to let an empty save silently replace a document known to have content.
- Undo right after a settings toggle can no longer blank the document. Loading a document is no longer an undoable step.
- Saving no longer rewrites content you never touched. HTML comments now survive a save. Fenced code blocks are shielded from marker cleanup. Hard-wrapped paragraphs and hand-padded tables keep their exact bytes. One real edit used to become a diff hundreds of lines long. Now only what changed shows as changed.
- A paragraph after an image stays its own paragraph. Saving used to glue them together, and did the same to two consecutive images.
- No more false "Your edit wasn't saved" warnings during normal typing.
- An Auto workspace shows nothing pending. Stale change-branch drift is recognized as a phantom and dropped everywhere it could appear, instead of being offered as something to accept, which could revert your own later writing.
- Rejecting the last hunk of a change cleans up after itself the same way accepting it does. A later edit to that file could resurface the discarded change.
- Git worktrees and nested repositories are left alone. A repo checked out inside a workspace could flood the change list with phantom paths.
- Accepting a new file cannot overwrite newer content. If the file already gained different content since the change was captured, the accept refuses with a clear message naming the file.
- Workspace history repair runs once, the first time you open an older workspace, instead of on every decision. What it replaces is kept on a backup branch.
- Floating editor controls stay on screen. The selection toolbar, link editor, and table menu now clamp to the visible document area and wrap when the editor is narrow.
Stet can tell a typo from a decision. The changes worth your attention stop looking like the ones that are not.
Added
- Review signals. Stet grades every incoming change on your own machine and sorts the ones that matter to the top. A date, a price, a deleted paragraph, a changed link: those get flagged. A reworded sentence does not. Off by default, and nothing leaves your Mac.
- A Review mode in the right rail. The rail is now Changes, Review, and Comments. Review gives you a summary of what changed and a queue that puts the significant edits first. Clicking a row jumps to that spot in the document.
- Hybrid review. A third option between Needs approval and Auto-accept. Small edits land on their own. Significant ones wait for you, exactly as if you had asked to approve everything. Needs review signals turned on.
- Accept all warns you first. If anything significant is waiting, accepting everything at once says so before it does it.
- A share menu in the document header. Copy a review link, invite someone, and see your founding member progress in one place.
Changed
- The document you have open is marked in the file list. Its name carries a red dotted underline, the same proofreader's mark Stet leaves on text you have just accepted.
- Change notifications wait to see what happened. An edit that lands quietly no longer interrupts you. One that needs your review says why, and clicking it opens that file in Review.
Fixed
- Accepting a change can no longer overwrite your own writing. If you rewrote the paragraph a change was aimed at, Stet refuses to apply it. That was true of the first click, but not always the second. A change is now measured against the document as it stood when the change arrived, so a refusal stays a refusal.
- Your own edits stop coming back as changes to review. After you accepted a change, editing that same document could resurface your writing as a proposal with the old text on the accepted side. Accepting it undid what you had just written. Workspaces carrying this are repaired when you next open them.
- A quote that starts with bold text is a quote. It was being painted as a comment someone had left. Only a quote that opens with an author, like
@drew:, is a comment now.
- An agent's rapid edits no longer go missing. A second edit arriving within 1.5 seconds of the first could vanish with no proposal and no warning.
- The demo opens a document. Set up the demo used to leave you in an empty editor.
- The welcome screen scrolls on a short window, instead of cutting off its bottom card.
- Removing Stet from the open workspace can no longer strand the app or blank the window.
Stet now runs on Intel Macs, and crash logs live where macOS users expect them.
Fixed
- Intel Mac support. Stet now ships as a universal app for Apple Silicon and Intel Macs. Every build through 0.6.1 was Apple Silicon only, so Finder crossed out the app on an Intel Mac and would not open it.
- Crash logs in the right place. Crash reports now land in
~/Library/Logs/Stet/panic.log instead of a nested folder inside Application Support.
Stet now opens on Macs without Homebrew.
Fixed
- No Homebrew required. Builds 0.5.0 and 0.6.0 could quit before opening on a Mac without Homebrew's copy of OpenSSL. OpenSSL is now built into Stet, and the release script blocks any build that depends on software outside a stock macOS installation.
A real writing tool, a real account, and a way to hand a document to someone who has never heard of Stet.
Added
- A full word-processor menu bar. Paragraph styles, find and replace (⌘F), word count, link editing (⌘K), task lists, images by paste or drag, Paste as Plain Text, Copy as Markdown, and Export as HTML. Stet should feel like a writing tool you already know.
- Focus Mode (F8). Everything but the paragraph you're writing dims.
- Outline. A collapsible headings list above the file tree, for moving around a long document.
- Stet accounts and hosted sharing. Sign in with an email, share a workspace privately through Stet, and manage who's on it and what role they have. No GitHub required.
- Web review links. Right-click any document and copy a link. Whoever opens it reads and comments in a browser with no account and no download. Links can be password protected.
- The web account area. Profile, signed-in devices, usage, sharing, and account deletion, at sync.getstet.app/account.
- Comments on local documents. Any markdown file in a watched workspace takes comments now, not just shared ones. Human things are one color, AI things another, everywhere in the app.
- Review policy per source. Local edits, changes from Stet sync, and changes from GitHub each get their own rule. Stet sync can go further and set rules per person or per role.
- Google Drive sync (experimental). Link a markdown file to an existing Google Doc or Sheet and push or pull it. A pull arrives as a proposal, like any other change.
- Plain text files.
.txt now flows through propose, review, and approve like markdown.
- Open in AI agent. Now covers Claude Code in Claude Desktop and Codex, and tells you plainly when it can't find an agent.
Changed
- One structural frame. The document window is now three columns: navigation on the left, the document in the middle, review on the right. The left rail navigates, the right rail decides, and the two stopped competing.
- The all-workspaces view is a compact workspace list, and your account lives in a small profile area at the bottom left.
- The in-app File dropdown is gone. File actions live in the macOS menu bar, where they belong.
- The menu-bar icon is Stet's S-with-dots mark, and it follows your system theme.
Fixed
- The window can be dragged and double-click-zoomed again.
- Creating a new document no longer risks a white screen, and an error boundary recovers the window instead of going blank.
- A brand-new file landing in an auto-accept workspace is detected as an unseen change, so whole files can't slip in unmarked.
- Documents in an unwatched folder show what's actually on disk, and a save can't be lost to a stale copy.
- Left-clicking a link in a document opens it. Right-clicking edits it.
- Dozens of review-surface fixes: pills anchor to the text they describe, false overlap warnings are gone, and your own saves stop showing up as unread AI changes.
Review on your terms: auto-accept the folders you trust, and nothing slips past even while Stet is closed.
Added
- Auto-accept, per folder. Set a folder to Auto-accept and an agent's edits there land immediately instead of waiting as proposals. They're never silent: each landed change is highlighted until you've seen it, with one-click Revert. Folders on Needs approval behave exactly as before.
- The review guarantee. Edits made while Stet was closed are caught at launch and turned into proposals, for every watched workspace. Background workspaces capture edits too, not just notify. An agent can no longer slip a change past you by working while you're away.
- Folder controls. One panel to set Watch, Review policy, Notify, and Hooks per folder. Workspace defaults live on the root; children inherit unless you override, and overrides revert with one click.
- Version history. Click the clock to see every saved version of a document, who made it, and what it changed, with AI versions badged. View any version read-only or restore it.
- Join a shared workspace from a link. Paste an invite link and Stet clones and opens the workspace. No git, no GitHub Desktop.
- Remote review policy. On shared workspaces, choose per folder whether a collaborator's changes land automatically (highlighted, attributed) or wait for your approval. Overlapping edits always fall back to approval.
- One window for everything. Real tabs, documents from different workspaces side by side, a sidebar that follows the active tab, loose files as first-class tabs, and browse mode to look around a folder without watching it.
- A stronger menu bar dashboard. Manage every watched workspace from the tray: pending reviews, folder controls, and open-in-Stet, all in one place.
- The stet moment. Accepting a change has a quiet signature now: the pill dissolves and the text settles in with a brief wash and a dotted "stet" underline. Nothing red, nothing loud.
- Re-root a project. Move, widen, or split what a project covers, from the root row in Folder controls.
Security
- Preview sanitization. All markdown previews are sanitized before rendering, and the app ships a restrictive Content-Security-Policy. Proposal text is exactly the content Stet must treat as inert, and now it is.
Fixed
- Accepting every change on a file now clears its pending indicator; a one-byte newline mismatch used to keep the blue dot alive forever.
- The feedback hub's "Join the Discord" button uses a permanent invite that no longer expires.
- The main window can't reopen invisibly off-screen anymore.
- Dozens of review-surface fixes: pills anchor where the change is, previews stop duplicating, unseen highlights clear when you've actually seen them, and the sidebar keeps your selection visible.
Stet can now hand a document to your agent and watch the edits come back.
Added
- Send to AI. Every AI note (✦) now has a Send button. One click hands the document to your own AI agent so it can resolve the note. Stet never calls an AI API itself. It runs a shell command you configure and steps back. The agent's edits come back as normal changes to review.
- Configure your AI command. A File menu item sets the command Stet runs. The default is
claude "resolve the comments in {filepath}". Supports {filepath}, {filename}, and {dir} tokens.
- Active watcher, opt-in. Turn it on and Stet fires your command automatically the moment you confirm a new AI note. Off by default. Nothing shells out without your say-so.
- Menu bar icon. Stet now lives in the menu bar and keeps watching your workspaces even when the main window is closed. When an agent or any other tool edits a watched file, you get a quiet macOS notification.
- Watched-changes dashboard. Click the menu bar icon to see every workspace Stet watches, what is pending review across all of them, and a feed of recent changes. Add a workspace, mute notifications, or stop watching from there.
Fixed
- Change pills now anchor next to the changed text. An edit near the end of a document used to pin its pill to the top of the page.
Local coding agents can't slip past review anymore.
Added
- Local agent intake. Coding agents running on your machine, like Claude Code, can edit files directly. Stet's file watcher captures every external write as a reviewable change. No more agent edits silently bypassing the review flow.
- Native macOS menu bar. File, Edit, View, Window, and Help. Open a folder, reopen a recent one, open the demo workspace, or launch an AI agent without clicking into the editor.
- HTML documents. Stet now opens .html files alongside markdown, with the same review pipeline.
- Feedback hub. The floating feedback bubble now opens three options: send feedback with a screenshot, join the Stet community on Discord, or book a 15 minute call.
Changed
- Agents see your latest edits. The editor writes to disk on every change, so an agent reading the file gets your in-progress content instead of a stale snapshot.
Fixed
- AI note (✦) resolutions now produce a change to review correctly, including edits that touch several parts of the document.
- The inline preview for a pure insertion no longer renders the surrounding line as if it were new content.
- Changes you already accepted no longer leak back into later proposals.
A cleaner review surface, and a way back to your other folders.
Added
- File menu in the editor. Open a folder, jump back to a recent workspace, open the Stet Demo, or launch an AI coding agent (Claude Code, Cursor, VS Code) directly in the current folder. macOS only for now.
- CLAUDE.md onboarding. Opening a workspace now offers to add a Stet-aware CLAUDE.md so coding agents propose changes for review instead of landing them silently. Shown at most once per workspace.
Changed
- Branch UI redesigned. Rectangular branch cards are now avatar bubbles in a column beside the Edits sidebar. The resting state shows who and how many. Hovering opens the branch name, per-change jump dots, and accept-all or reject-all actions.
- The always-visible format toolbar is gone. Formatting now lives in the floating toolbar that pops up above your text selection.
Fixed
- Agent edits are attributed to the agent, so agent proposals render with agent styling instead of being mistaken for human edits.
- Scrolling the wheel over the Edits sidebar now scrolls the document.
- Changes that only add text now show a pill and can be hovered, pinned, and previewed like any other change.
Polish from the first round of testers.
Added
- Floating toolbar. The full set of formatting buttons pops up just above whatever text you select.
- Switch workspace. A folder icon in the Files sidebar opens a picker and points Stet at a new directory. The path is remembered for next launch.
- Book a call. A "talk to Drew" link in the feedback panel opens a 15 minute booking page.
- Crash logs. Hard crashes now write a log file with the details, so there's something to send when the app exits without a word.
Changed
- Feedback is one panel now. A screenshot is captured automatically when it opens, and you can remove or retake it. The widget hides itself before capturing, so it never appears in its own screenshot.
- Feedback is stored outside your workspace folder, so no extra files show up in your file tree or git history.
- The demo workspace unpacks into Downloads, so it's obvious where to delete it from when you're done.
Fixed
- YAML frontmatter no longer renders as body text.
- The AI note (✦) button now actually opens its modal.
First public friends-and-family build. Signed, notarized, and Gatekeeper-accepted.