0
editorzero
clean slate · humans + agents as peer co-editors
design system PHOSPHOR · territory terminal-native
self-hosted · API · CLI · MCP · Web UI at parity
light mode below · dark is the daily driver
ADashboard — overview · recent · spaces ⌘K to command · everything keyboard-first
acme-corp.ez/home ● sync ok3 agents onlinev0.9.4
⌘K

Good evening, Nomi

19 documents touched today · 4 agent runs active across 2 spaces
Documents
412
▲ 9 this week
Human edits / 24h
1,284
across 38 people
Agent edits / 24h
617
3 agents · all audited
Published pages
46
2 custom domains
Recently edited view all ›
Realtime sync — convergence guarantees
Engineering / CRDT
docwrightnow
Q3 launch plan — public beta
Product / Launches
NA4m
Incident 2026-05-29 — sync backpressure
Ops Runbooks
JP22m
Public API — authentication & scopes
Engineering / API
published1h
Onboarding new agents — scope tiers
Engineering / Agents
RM2h
Live activity audit log ›
docwright inserted 2 blocks in Realtime sync
doc.update · lossless · acting_as RM
just now
Nadia A. published API authentication
doc.publish
4 min ago
changelog-bot created Release 0.9.4 notes
doc.create · in Product/Launches
12 min ago
James P. moved Incident runbook → Ops
doc.move
22 min ago
Ravi M. restored Auth design draft
doc.restore
1 hr ago
Spaces manage ›
EEngineering 128 docs243
PProduct 64 docs111
OOps Runbooks 39 docs82
NORMAL home ws: acme-corp j/k move open ⌘K palette
BDocuments — collections tree + list, human & agent editors space: Engineering
acme-corp.ez/spaces/engineering ● sync ok128 docs · 6 collections
Engineering/CRDT & sync
all editors sort: edited ▾
DocumentEditorsFidelityStatusLast edit
Convergence guaranteesdoc_01JQ8…a7f2
RM+2
lossless docwright editing nowby docwright
Write-path atomicity — the 5-row commitdoc_01JQ7…b9c1
NAJP
lossless draft 14mby Nadia A.
Hocuspocus persistence modeldoc_01JQ6…d3e8
RM
directive published 2hby changelog-bot
Replica reconciliation runbookdoc_01JQ5…f1a0
JP
lossless draft 1dby James P.
Y.Doc snapshot & compactiondoc_01JQ4…c6b3
RMNA
lossless reviewed 2dby Ravi M.
Vector clocks vs. logical timestampsdoc_01JQ3…99af
opaque draft 3dby linkcheck
NORMAL 6 / 19 docs human agent n new doc x select ⌘K
CReading view — finished document rendered · read-only
acme-corp.ez/engineering/api/authentication publishedreade to edit
Engineering / API · canonical

Public API — authentication & agent scopes

NA Nadia Ahmed ·updated 1h ago ·reviewed by docwright ·lossless ·7 min read

editorzero treats every caller — human or agent — as a typed principal. There is no shadow-user pattern: an agent authenticates with its own credential, carries its own scopes, and is attributed independently in the audit log.

Principal kinds

Two kinds resolve from the same auth middleware: user (session cookie or human PAT) and agent (long-lived API key or short-lived delegated token). The dispatcher only ever sees a resolved Principal — it never learns which credential produced it.

Delegation. When an agent acts on a human's behalf, its token carries an act.sub claim. Effective permission is intersect(agent.scopes, delegator.permissions) — an agent can never exceed the human who delegated to it.

Scope tiers

Agents are provisioned against one of four tiers. Tiers are presets over the raw scope vocabulary; a custom set is always allowed.

  • read-onlydoc:read · block:read · search:read
  • author — adds doc:write · block:write · comment:write
  • editor — adds doc:publish · comment:resolve
  • admin — full workspace administration

Authenticating a request

shell · ez CLI
# issue an author-tier key for an agent
ez agent create --name docwright --tier author
# → ezk_live_01JQ…  (shown once)

curl https://acme-corp.ez/api/docs \
  -H "Authorization: Bearer ezk_live_01JQ…"

Rate limits, revocation, and trash recovery all have agent equivalents — every control a human has, an agent has too. See Onboarding new agents for the full lifecycle.

DEditor — live co-editing · human + AI agent as peers ★ signature screen
acme-corp.ez/engineering/convergence-guarantees youdocwright live
synced · CRDT converged
Convergence guarantees
doc_01JQ8…a7f2 · lossless · 2 humans + 1 agent editing

Any set of concurrent edits from any mix of human and agent clients converges to the same state across every replica. This is invariant #2, and it is enforced by property tests — not hope.

How convergence is guaranteedRavi M.

The document model is a Y.Doc. Each block is a node in a shared Y.XmlFragment; edits commute because CRDT merge is associative and

docwright suggested an edit · doc.update · acting_as Ravi M. · 2s ago
…commutative. Concurrent inserts at the same position are ordered deterministically by their (clock, clientID) pair, so two replicas that have seen the same set of operations — regardless of arrival order — compute byte-identical state. We think this is probably fine.No central server arbitrates; convergence is a property of the data type itself.
+38 / −6 · will write 1 audit entry

Replica reconciliation

A joining replica requests the state vector, receives the missing update set, and mergesdocwright
No operation is ever lost; a delete is a tombstone, never a gap
blocks /conv↑↓ ⏎
Text
plain paragraph block
⌘⌥0
H2
Heading 2
section heading
##
Table
rows & columns · lossless
Ask an agent…
delegate a block to docwright
@@
{ }
Code block
syntax highlighted
INSERT convergence-guarantees 1 suggestion pending accept esc reject / blocks all changes audited
EAdmin — members, agents, teams & spaces owner only
acme-corp.ez/admin/members ● 3 agents online41 principals

Members & agents

41 principals · 38 users · 3 agents — humans and agents share one principal table
PrincipalKindRole / TierScopesOwnerLast active
NA
Nadia Ahmed
nadia@acme-corp.io
user owner
admin
nowweb · session
docwright
agent_01JQ8…c4
agent author
doc:writeblock:writecomment:writedoc:read
RM Ravi M. editingapi-key · ezk_live
changelog-bot
agent_01JQ7…9a
agent editor
doc:publishdoc:writecomment:resolve
workspace-owned 12mapi-key · ezk_live
RM
Ravi Mehta
ravi@acme-corp.io
user admin
workspace:admindoc:writeagent:create
nowweb · session
JP
James Park
james@acme-corp.io
user member
doc:writecomment:write
3hweb · session
linkcheck
agent_01JQ5…2f
agent read-only
doc:readblock:readsearch:read
JP James P. 1dapi-key · revocable
NORMAL 6 / 41 principals i invite r change role revoke ⌘K