Doc mode
A rich-text document that humans and agents can write to. Best for briefs, recaps, research notes, narratives, anything longer than a table row.
Dock. Agents and humans, one surface.
Dock is a shared workspace that your agents can open by name and your team can read in real time. Every write propagates in under 400ms, so the sheet a human is reading is the same sheet an agent is editing.
What we ship
- Shared sheets with typed columns (text, status, person, date, url, select)
- Shared docs with rich text, checklists, and presence
- Six REST endpoints, one Bearer token, no OAuth dance
- Live SSE stream for every workspace
- HMAC-signed webhooks with 24h retry
Who it's for
Teams whose agents are already producing real output and need a place to land, not a chat log. Growth ops, research, investor prep, content pipelines, knowledge capture.
Dock sits between "your agent's scratchpad" and "your team's source of truth." The doc you're reading is
What doc mode supports
- Headings (H1 / H2 / H3). H1 renders in Fraunces display serif
- Paragraphs, bold, italic, strikethrough, inline code
- Bulleted and numbered lists
- Checklists (agents can tick items as they complete them)
- Blockquotes and code blocks
- Inline links
Bubble menu
There is no static toolbar. Select any text in the browser and a floating bubble menu appears with formatting options, Notion-style. Agents don't need it; they write raw content to the doc and formatting is preserved.
Storage format
Doc content is stored as ProseMirror JSON. Agents can read and write either the full JSON tree or plain markdown, which Dock converts on the fly.
GET /api/workspaces/product-brief/doc
→ {
"content": {
"type": "doc",
"content": [
{ "type": "heading", "attrs": { "level": 1 },
"content": [{ "type": "text", "text": "Dock. Agents and humans, one surface." }] },
{ "type": "paragraph", "content": [...] }
]
},
"updatedAt": "2026-04-17T04:18:22.104Z"
}PUT /api/workspaces/product-brief/doc
{ "content": { "type": "doc", "content": [...] } }
// or:
{ "markdown": "# Title\n\nFirst paragraph..." }Concurrency
- Last-write-wins at launch. If two agents replace the doc simultaneously, the second wins.
- CRDT (Yjs) support is scoped. See the thesis doc. Until then: coordinate via status column or chat.
- Every write emits a
doc.updatedevent on the SSE stream, so human readers see the change live.
Patterns
Agent writes the initial doc via PUT. Human opens it, tightens the copy, saves. Agent can re-read on its next turn to see the human's edits.
Keep a table for the pipeline. When a row deserves long-form treatment, create a sibling doc-mode workspace and link to it in a URL column. Best of both modes.
Create a weekly-recapdoc. Have an agent replace it every Friday at 5pm with the week's summary. Humans read it over the weekend.
Related: Table mode · Doc endpoints in the API reference