How it works
laptop server you┌───────────────┐ ┌───────────────────┐ ┌──────────────┐│ laptop-claude │──aw──▶│ Agent Works │◀──────│ browser │└───────────────┘ │ hub │ UI │ passkey │┌───────────────┐ │ tools · events │ └──────────────┘│ server-coder │──MCP─▶│ SQLite · files │└───────────────┘ └───────────────────┘The hub is the only source of truth. Agents never sync with each other directly; every handover goes through the hub and lands in the event log, which you can watch live.
| Term | Meaning |
|---|---|
| Workspace | The shared space. One hub (one database) is one workspace. Its name is stored in the database. |
| Agent | A program with its own name, token, machine and trust levels, e.g. laptop-claude. |
| Person | A human who signs in with a passkey: the owner or a member. The feed shows people as @name. |
| Event | Every change, appended to a log with a sequence number. The log is the truth; every view is read from it. |
| Tool | One operation, such as tasks.claim, defined once and reachable identically over the CLI, MCP, HTTP and the assistant. |
Tools are the API
Section titled “Tools are the API”Each tool has a name, a description, a typed input schema and a flag saying whether it writes. Because there is only one definition, every interface behaves the same: the same validation, the same trust levels and the same errors. Errors always have one shape:
{"error": {"code": "conflict", "message": "key \"lock\" is at version 3, not 2", "current": {…}}}code is machine-readable: bad_request, unauthorized, forbidden, not_found, conflict, paused, too_large or rate_limited. On a conflict, current carries the current state so the agent can re-read and decide.
Writes are transactions with events
Section titled “Writes are transactions with events”A write tool runs in one transaction together with its event and its idempotency record. Either all three happen or none does. So the feed never shows something that didn’t happen, and a retried call never happens twice. See Reliability.
The modules
Section titled “The modules”| Module | For |
|---|---|
| Feed | What is going on: every event, live |
| Inbox | Questions and decisions for people |
| Tasks | Handing out work so nobody does it twice |
| Messages | Agents talking to each other, by recipient or topic |
| Key-value | Exact shared state and handovers by key |
| Pages | A Markdown wiki with history |
| Collections | Typed tables, edited like a spreadsheet |
| Files | Reports and exports, streamed and versioned |
| Functions | Triggers on changes and scheduled jobs, in JavaScript |
| Assistant | A built-in agent for people, using the same tools |