A constructivist design language for an AI-native docs platform. The zero is a circle; humans are squares, agents are circles, and that shape-opposition is the whole identity — carried through structure, not decoration. Bauhaus primaries on cool paper, thick black rules, solid offset shadows. Five product screens follow.
cobalt — action / agentchrome — highlight / humanvermilion — live / destructiveSpace Grotesk · Archivo · IBM Plex Monolight mode · WCAG AA · fully tokenised
aDashboard / Home — overview, recent docs, spaces, activity
editorzero
Acme Robotics ▾
Search docs, people, spaces…⌘ K
N
Tuesday · good morning
Welcome back, Nomi
312
Documents
3
Spaces
18
Principals · 5 agents
Recent documents edited by you & your agents
◐
Write-Path Atomicity engineering · spec
agent live
N
Q3 Platform Roadmap product · planning
2h ago · you
⬡
CRDT Convergence Notes engineering · research
5h ago · agent:claude
RP
Incident 1147 Postmortem operations · review
yesterday · rai
Your spaces 3 active
Engineering
142 docs · 8 members · 3 agents
142
Product
88 docs · 6 members · 1 agent
88
Operations
54 docs · 4 members · 1 agent
54
Live activity
◐
agent:claude proposed an edit + suggest on Write-Path Atomicityjust now
N
you published publish Q3 Platform Roadmap2h ago
⬡
agent:codex created CRDT Convergence Notes5h ago
bDocuments in a space — collections tree + document table, human & agent editors
Every content mutation flows through a single transactional seam, ctx.transact(doc_id, fn), so that human keystrokes and agent edits land as one ordered, audited, convergent stream — never a partial write.
Why a single seam
The platform treats humans and AI agents as peer co-editors. That peerage is only real if both write through the same path with the same guarantees. A second mutation door — a faster, looser one for agents — is how convergence quietly rots and the audit log stops being a faithful record.
We therefore route all content writes through one function. Metadata mutations take the dispatcher transaction; content mutations take the document transaction. The boundary between them is enforced by METADATA_ONLY_CAPABILITIES, not by convention.
The three guarantees
Atomic. A capability either commits whole or not at all — no half-applied block trees.
Ordered. Concurrent edits serialise into one CRDT history that every replica reconstructs identically.
Audited. Exactly one audit entry per mutation; the log alone replays initial → final state.
Invariant · property-tested
Any set of concurrent edits from any mix of human and agent clients converges to the same state across replicas — and the audit log alone can reconstruct that final state.
Shape of the seam
Surfaces never reach into storage. They call a capability; the capability runs inside the transaction and emits its audit entry as part of the same commit.
// content mutations are transaction-scopedawait ctx.transact(docId, (doc) => {
doc.insertBlocks(afterId, blocks);
// audit entry is part of THIS commit — never after
ctx.audit("block.insert", { docId, blocks });
});
Because the audit write shares the commit, there is no window in which a mutation exists without its record. Crash between the two? Neither happened.
dDocument editor — Tiptap-style toolbar + slash menu, block handles, a LIVE agent co-editor & tracked suggestion
editorzero
Engineering ▸ Write-Path Atomicity
N◐RP
¶ Text ▾
BIUS
</>🔗"
H1H2•1.
💬◐ Ask
v14 · doc_a1f synced · CRDT
+⠿
Write-Path Atomicity
+⠿
Every content mutation flows through one transactional seam, ctx.transact(doc_id, fn), so human keystrokes and agent edits land as one ordered, audited stream.
+⠿
The three guarantees
+⠿
Atomic: a capability commits whole or not at all. Ordered: concurrent edits serialise into one history◐ agent:claude that every replica reconstructs identically.
◐ agent:claude suggests an edit12s ago · awaiting review
Audited: exactly one audit entry per mutation — and the log alone replays initial → final state, written shortly after the commit. Because the audit write shares the commit, no mutation exists without its record.
+⠿
Crash between mutation and record? Neither happened.
+⠿
/h
Blocks · filter “/h”
H1 Heading 1 #
¶ Text ⏎
" Quote >
</> Code block ```
AI
◐ Ask agent to draft ⌘ J
eAdmin — members — users, teams & spaces; agents as first-class principals