v0.9.0
Code, Work, Chat.
Every space in Mains used to answer one question: which agent runs underneath it. 0.9 adds a second one — what you're here to do. A space now has a mode, and the mode reshapes both the app around the agent and the rules the agent works under.
📖 Full write-up: Mains 0.9: Code, Work, Chat
Three modes, one picker
- Code, Work, Chat — at the top of the sidebar. Code is everything Mains has been: repos, branches, diffs, terminal. Work is the same agents pointed at documents, reports, and digests, with the git machinery gone. Chat is a conversation that cannot modify anything.
- Mode belongs to the space, not the app. A Code space and a Chat space sit side by side in the sidebar and behave completely differently.
⌘1,⌘2,⌘3switch between them. - Claude and Codex offer all three. Copilot and Cursor stay on Code for now — their harnesses don't yet give us the levers the other two modes need.
The app changes shape
- Work drops the developer ceremony — no git actions, no terminal, no Changes tab, no permission dropdown. Files and Activity stay, because in Work the deliverables are files.
- Chat goes further and removes every write-adjacent control, keeping Files for reading.
- The sidebar follows. Code lists workspaces under Add Project; Work and Chat list chats under New chat, grouped into collections. Model, effort, thinking, and fast mode stay in all three — those are about the engine, not the experience.
So does the agent
- Each mode carries a harness — a prompt delta, a tool policy, and provider settings — resolved once, when a run starts. Code is untouched; until a space opts into Work or Chat, the harness isn't there.
- Work takes
Bashaway and accepts edits by default. Its prompt asks for plain language over tool names — "scanning the folder for documents", not "running grep" — and for finished files rather than fragments in chat. On Codex, the tone comes from Codex's ownfriendlypersonality, applied natively. - Work's accept-edits is a default — a choice you make in the composer still wins. Chat's read-only is an override — nothing a client asks for can turn a Chat space into a writing one.
Collections
- What projects are to Code, for Work and Chat — a name, an icon, a set of chats, and a set of sources: files you add or text you paste. No git repository required.
- Sources travel with the run. When a chat in a collection starts, resumes, or forks, the current sources are copied into that run's own working tree and recorded with their content hash. Move a chat to another collection and its next turn sees the new sources; nothing that already happened is rewritten.
- Created and edited right from the sidebar, with an icon picker that takes an emoji or any of the built-in icons in any tint. Chats can be renamed inline from the same menu.
Documents open inside Mains
- Word, Excel, and PowerPoint files render in-app. Markdown renders with Mains' own typography, with working section links and task-list checkboxes.
- Save a copy… opens a native save dialog and puts the document wherever you actually want it. Files the agent writes live in the run's directory until then.
Pulses for Work and Chat
- Pulses carry a mode, and templates declare which modes they belong to. The original, git-centric templates stay in Code. Work gets a set built around documents — Daily document digest, Weekly report draft, Meeting notes cleanup, Executive one-pager. Chat gets read-only briefings — Daily briefing, Weekly recap, Devil's advocate pass, Plain-language explainer.
- Neither needs a workspace. They run on their own, and can point at a collection, whose sources travel with them.
Git stays in your hands
- The agent's own commit and pull-request tools are gone. Commits and PRs go through the git actions panel — yours to trigger, with the diff in front of you — or through the shell, if you explicitly ask the agent to. What's left of Mains' own tools is reviews and package checks, and those exist only in Code.
- Worktrees are off by default on fresh installs. New workspaces work directly in the repository unless you turn worktrees on in Settings → Git. If you'd already made the choice, nothing changes.
Smaller things
- Every workspace now belongs to exactly one project, enforced at the database level. Older installs are backfilled by the migration.
- Removing a project runs the full cleanup — provider sessions and worktrees included — instead of a cascade that left them behind.
- Sidebar icons are mode-aware, and a space's mode can be switched from the sidebar directly.
- A much larger icon set for spaces and collections, with the same picker everywhere an icon is chosen.
- Onboarding gains a tour of the core features, and Linear issues open with their full detail in the tasks inbox.
- Archived runs show the project or collection they belong to, can be searched, and can be deleted for good.
- Codex's personality is now a setting. Work and Chat set it to friendly for you.
- Markdown in replies got stricter: inline code and code blocks render distinctly, task lists render as checkboxes, and
#sectionlinks scroll to the section. - Codex runs no longer send a model when you haven't chosen one, so the CLI's own default applies.
- Untracked binary files no longer trip the git snapshot.
- The composer hint says plugins, matching what the command actually lists.
- Under the hood: Electron 41.10, Vite 8, updated Claude and Copilot SDKs, and a renderer startup budget — onboarding and the terminal now load lazily.
Platform: macOS only (Apple Silicon and Intel).
Full changelog: v0.8.1...v0.9.0