Intake
Documents & editing
Documents are the surface you touch first. /w/<workspace>/documents lists the vault as a searchable folder tree (or flat table); opening a document gives you a markdown editor with live preview and an entities rail showing the document's place in the graph. Every save writes through to a real .md file in your vault and refreshes the search index. Read the model in Knowledge base & vault.
Create a document
Open the documents workspace
Navigate to/w/<workspace>/documents. The left rail shows the vault as a folder tree; the header carries a "New document" action.Give it a path
A document's path is its location in the vault, e.g.northwind/interviews/cfo-2026-03.md. Folders are created implicitly from the path.Write markdown
Standard markdown plus GitHub extensions. The preview pane renders as you type; headings become the chunk structure retrieval uses.Save
The first save assigns the document aULIDand textually splices it into frontmatter without reserializing your YAML. The recovery-protected save commits document metadata, chunks, FTS, revision history, and audit state before the UI shows Saved. Embeddings and graph enrichment start as detached work after that durable save.
Browse & find
The documents list renders the vault two ways — a Tree view (folders from document paths) and a Flat table — with a toggle that remembers your choice per workspace for the session, along with which folders you collapsed. Folders default to expanded.
- Instant filter — typing in the search box filters by title and path client-side with no round-trip; matching folders auto-expand while a filter is active. Esc clears it.
- Content search — from three characters on, the same box also searches document content (debounced, via
GET /api/w/:workspaceId/documents/search), appending a "Content matches" section with highlighted snippets that deep-link into the editor. /hotkey — press / anywhere on the page (when not already typing in a field) to focus the search box.
Entities beside the editor
Opening a document also opens a collapsible Entitiesrail — the document's slice of the entity graph, computed deterministically with no model calls:
- In this document — type-colored chips for every entity the document mentions, with mention counts, each deep-linking to the entities explorer.
- Related — entities the document does not mention but that connect through the knowledge graph, each showing its viapath ("via Order Platform (depends_on)") and a mini connection-strength bar.
- Why? — every related row expands into the full edge insight for the connecting edge: the deterministic explanation sentence, strength measures, and the evidence quotes behind the link. See Relation explainability for how those numbers are computed.
The rail is served by GET /api/w/:workspaceId/documents/:docId/entities; its collapsed state persists for the browser session.
Autosave
Edits debounce for 1.5 seconds, then the editor waits for the durable save response and shows Saving, Saved, or Error. ⌘/Ctrl-S flushes immediately. Concurrent edits use the prior content hash as an optimistic lock; a mismatch surfaces the server copy and asks whether to load it or explicitly keep the local copy rather than silently overwriting. Embedding/extraction work does not delay the save response. The UI reports durable save state only; it does not expose enrichment progress.
Wikilinks
Type [[ to preserve an internal reference in markdown; the preview renders it as a styled chip. After the durable save, detached graph enrichment can resolve wikilinks into mentions and derive co-occurrence structure without delaying autosave. Those graph effects are not part of the save response and may appear later in the entity graph.
Text bulk import
Use /w/<workspace>/import to choose or drag individual files, or choose a folder in browsers that preserve relative paths. The client reads and posts text JSON; accepted extensions are .md, .markdown, and .txt, up to 1,000 files and 5 MiB of UTF-8 text per file. Import includes the business-unit/default-type mapping, path jailing, per-file results, and retry.
No binary upload contract
Delete
Deleting a document stages its file for recoverable vault trash, then atomically commits the document tombstone, graph-provenance cleanup, chunk/vector removal, terminal revision, and audit event. Retrieval therefore cannot observe a committed tombstone with live graph or chunk evidence. See Export & offboarding for the full deletion cascade.
Under the hood
The editor is backed by these routes (see the Workspace API):
GET/POST /api/w/:workspaceId/documents— list and create.GET/PUT/DELETE /api/w/:workspaceId/documents/:docId— read, save, soft-delete.GET /api/w/:workspaceId/documents/search?q=…— content search behind the list's search box.GET /api/w/:workspaceId/documents/:docId/entities— the entities rail: mentioned entities plus related-via-graph entities with edge-strength scores.