the agent-native workspace, on your Mac
a desktop app where agents do real work on your machine: a conversation on the left, an artifact panel on the right that renders what they build (documents, data, code, decks, live browsers, even the iOS Simulator) streaming in as it happens. runs on four engines: Claude Code, Codex, Gemini, Grok, and Mantis, drives a real Chrome, syncs sessions across your Macs, and remembers: every agent is an identity with its own accumulating memory.
electron, five engines, 23 tool servers, ~/.universe as the record
The agent works on the repo that is already checked out, drives the Chrome profile you are already signed into, and writes files you can open in Finder. None of that survives being moved to a server, so the model call happens on your machine, billed to your own account. The server never sees prompts, completions or token counts. Usage is self-reported by the client.
That is the constraint everything else has to live with. Sharing, resuming on a second machine, several people in one conversation: all of it sits on a record stored on a laptop that is asleep half the time. ~/.universe is the source of truth. The SQLite file next to it is a cache, and deleting it costs a directory walk.
A space carries folder grants, an agent, a model and a memory into every session filed under it. The desktop owns what a space contains, the server owns who can open it, and one uuid names the local row, the remote row and the directory on disk. Spaces you never share never reach the server.
A room is not a new object. Its id is a session id, so opening one opens a session several people prompt from different Macs. Each Mac calls the model itself, so there is no shared clock: the server assigns the sequence number, the client mints the id. Two Macs writing the same room merge rather than race.
A crew shares one working directory, so two agents can collaborate through artifacts/ with no protocol at all. What the filesystem cannot give you is addressing. That is what the six crew tools are for: a roster, a mailbox, and a read-only window into what somebody else is doing. Models address each other as @2, the number in the rail, because handing a model a 36-character uuid is a step that only ever goes wrong.
No locks, no leases, no worktree per worker. Each member gets the roster and a diff of what changed in the tree since it last ran, capped at 25 paths. Concurrent writes are last-writer-wins, which is fine at eight members and would not be at eighty.
The Agent SDK does not spawn claude directly, it spawns whatever pathToClaudeCodeExecutable points at. Point that at a small bridge and the same session runs on another machine with the event parser, the persistence and the UI unchanged. The first version piped stdio back over the network and died immediately: herds reaps a session when whatever holds its stdio goes away, which is what closing a laptop does.
So the far Mac launches claude under nohup, appends stream-json to a file and writes the exit code beside it. The bridge tails that file and nothing more. Coming back, the far machine's filesystem is authoritative rather than our local note, because the app may have been killed before it wrote anything down. Somebody else's Mac is a different path entirely: the prompt goes into a queue and whichever machine holds the runner lease drains it, which makes it an ordinary local session with the full tool set.
| this Mac | your other Mac | somebody else's | |
|---|---|---|---|
| all 171 tools | yes | no | yes |
| survives the lid closing | n/a | yes | yes |
| live output while running | yes | yes | yes |
| resume after an app relaunch | yes | not yet | yes |
| who holds the files | here | the far Mac | the far Mac |
The far Mac runs the agent with no in-process tool servers, because those live in this app and there is no app over there. Somebody else's Mac is the opposite case: it is their app running it, so everything is present.
Every tool server is constructed in-process, so a tool call is a function call that already holds the SQLite handle and the CDP connection to Chrome. Nineteen are registered unconditionally. Four are conditional, and the conditions are the interesting part: space tools only for a filed session, chain only while a session is driving itself, training only for runs started from the agent library, simulator and Blender only on macOS.
Codex and Mantis are separate binaries and cannot be handed an in-process object, so the app binds 127.0.0.1 on an ephemeral port and serves one path per session, agent and server. The path is the entire routing table. The token is 32 random bytes, compared in constant time, never written to disk. A fresh server instance is built per request, because one instance holds a single transport at a time.
| server | condition | tools |
|---|---|---|
| 19 of them | unconditional | 132 |
| space | only a filed session | 7 |
| chain | only while self-driving | 5 |
| training | only from the agent library | 1 |
| simulator | macOS only | 17 |
| blender | macOS only | 10 |
A session that is not filed under a space has no space tools at all, rather than tools that fail at call time. The conditions are evaluated once, when the runner is built.
The planner used to be a fork of the session taken at the end of each round: same model, same memory, asked what to do next. It ran with an empty tool list and no servers, resumed a transcript full of browser and crew calls, and reached the only conclusion available from inside, which was that every server had disconnected. The session now decides while it is still running, and the Stop hook blocks exactly once, because a session that cannot end cannot be closed, synced or billed.
The other two were silent for weeks. Message groups over 300 KB were replaced with a stub written for a read-only viewer; rooms have no viewer, so the Mac that wrote the group read its own apology back and persisted it over the real one. And opening a room rewrote a bookkeeping file that was inside the synced manifest, so the sync layer read the changed hash as a local edit and parked every incoming version from then on.
One message group: an agent avatar, six tool calls with their results, and a thinking block.
It ships as a signed and notarized DMG at 0.4.35 and updates itself. Spaces, rooms, crews, the relay, resuming on a second machine, five engines, 23 tool servers and search across every session all work end to end.
The part I would defend hardest is the record. Every problem above got easier the moment a session stopped being rows in a database file and became a directory with an append-only log in it.