Skip to documentation

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

  1. 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.
  2. 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.
  3. Write markdown

    Standard markdown plus GitHub extensions. The preview pane renders as you type; headings become the chunk structure retrieval uses.
  4. Save

    The first save assigns the document a ULID and 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.

linking as you writemarkdown
We reviewed [[FY26 Budget]] with [[Dana Whitfield]], the CFO of
[[Northwind Trading Co]]. Follow-ups are tracked in [[Q1 Action Items]].

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

This route does not accept multipart bodies, zip archives, PDFs, Office files, or attachments. Content connectors can use optional binary extractors when separately installed, but the base deployment does not install them and clearly skips unsupported binary content.

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.