Web UI

The local browser workspace started by gno serve: search, browse, graph, edit, capture, API, and live indexing.

Compiled project context

Open Compiled context from the dashboard to upload/paste a Capsule, inspect coverage/costs, download exact Markdown bytes, or check an artifact. Read the compiled context guide for limits, indexed freshness, inclusion, and recovery.

gno serve is the loopback browser workspace: add folders, watch indexing, search, ask, browse, inspect the graph, and edit Markdown. gno serve binds loopback; the index, models, and edits stay in the local GNO data directory.

What this is

Launch and manage

gno serve # foreground, http://localhost:3000
gno serve --dev # development bundle with HMR
gno serve --port 8080 # custom port
gno serve --index research # named index
gno serve --detach # background; prints pid + url
gno serve --status --json # machine-readable status
gno serve --stop # graceful stop

Live refresh and status performance

When the workspace starts, it catches up on notes added, edited, or deleted while it was not running, in the background; search and status work meanwhile. While it runs, GNO picks up edits, editor atomic saves, renames, and folder deletions without rescanning untouched files. When it cannot tell exactly what changed, it resyncs the whole collection. Failed syncs are retried; a file GNO cannot read is recorded once and tried again when it changes. Link-graph updates follow references across collections. Status stays responsive while the workspace indexes a burst of changes, and simultaneous status requests share one status build, so dashboard polling stays cheap.

The home page loads a small first script. Other pages, syntax highlighting, the PDF viewer, and the graph load on demand. On localhost, a cold home-page load targets first paint within 200ms and first interaction within 1s; dashboard health data can arrive later.

Leaving the indexing view stops its status polling. An indexing job the server has accepted keeps running after you navigate away or close the tab.

A reindex you start while another indexing job runs is queued instead of refused. The progress view shows it as queued behind the other job and keeps following it until it runs and finishes. Several reindex requests for the same collection share one waiting pass. See Reindex with POST /api/sync.

Workspace pages

Quick capture

Press N to capture a note into an editable collection. The basic path is still title plus content; open Source only when you want provenance fields such as kind, URL, author, observed time, or external id. Choose a preset when you want a scaffold; idea-original, person, company-project, and meeting are tuned for second-brain pages.

Quick Capture writes structured source: frontmatter and shows the same receipt as CLI, MCP, REST, and SDK capture: write result, FTS sync, and embedding. Embedding stays separate until you run embed or index.

Each submitted capture carries a request ID, so Try again after a lost response does not write twice. See Retry-safe writes.

The typed presets use the same synthesis/timeline pattern as CLI capture: current assessment above ## Timeline, raw notes and dated evidence below it. If contentTypes rules are configured, matching preset frontmatter or folder prefixes become contentType metadata in JSON search/query results.

Document outline Copy link stays human-readable: /doc?uri=…#anchor. The stable link template is {serveUrl}/doc?uri=<encodeURIComponent(uri)>, with an optional #anchor. gno peek --json exposes serve.url for that construction when detached serve is up. Older bookmarks keep working. Optional Copy citation link adds a versioned, size-bounded st query param with quote/context evidence for local recovery after heading edits. Citation links never embed a full section body and are not a public sharing format.

Opening a citation link jumps to the section when GNO finds it exactly or can recover it without ambiguity, and shows a short status. If the target is ambiguous, stale, missing, or invalid, the link stays put and never cites a different section. Quick Switcher section jumps continue to use readable anchors only.

Search and ask controls

The Web UI exposes the same retrieval controls as the CLI. Use the Search page for lookups and research, and the Ask page when you want a grounded answer with citations. Turn on Verify for the closed-Capsule path. Its expandable receipt shows supported, contradicted, insufficient, and uncertain claims, evidence gaps, and unavailable or degraded verifier state without dumping the entire Capsule into the page.

Search offers three depths; press T to cycle them. Fast is hybrid retrieval without query expansion, reranking, or graph hops, the same path as gno query --fast; start there for questions and quick lookups. Balanced (the default with vectors) adds reranking, plus query expansion on the Slim presets. Thorough adds expansion, reranking, and a wider candidate pool for hard or ambiguous questions. When the server reports vector search unavailable, Fast runs keyword search and Balanced and Thorough are disabled. Before anything is embedded, every depth returns keyword-only results and the results header shows no vectors badge. For exact terms, add a term query mode or use the command palette, which always uses keyword search.

Open citations to check the actual passages, especially for questions spanning several documents or dates. A relevant Search result does not establish that every required passage reached Ask. Preserve displayed gaps, freshness warnings, and abstention; use CLI target diagnosis when a known source is missing. Verified claim support does not establish corpus completeness.

Browser requests do not infer a filesystem project root. The Web UI therefore keeps project affinity at zero; use the local CLI when a trusted cwd or explicit project root should act as a bounded soft ranking signal.

Configured content-type boosts still apply across Web, REST, MCP, SDK, and CLI retrieval. One matched rule contributes at most ±0.05, cannot widen candidate retrieval or defer minScore, and cannot bypass collection, tag, date, category, author, or exclude filters. In hybrid mode the boost applies before reranking.

term: "spaced repetition"
intent: personal knowledge base learning loop
hyde: A note explaining how repeated review turns saved notes into long-term memory.

Private trace history

Trace history is a local, opt-in evidence ledger. The Web page lists metadata-only summaries, opens one bounded detail receipt, accepts explicit relevant, irrelevant, or missing-expected labels, exports selected terminal traces, and confirms per-trace deletion or full purge. Open, completed, partial, failed, and cancelled remain visibly distinct; GNO never treats a missing click or failed request as negative feedback.

Qrels export retains only explicit judgments, canonical identities, exact line/hash provenance, ranks, capabilities, and outcomes. It never copies source or converted mirror text. Candidate replay fails closed when its saved manifest, linked receipt, or source hash has changed, and reports unchanged, stale, missing, inactive, or unindexed evidence state.

Safe editing model

Markdown and plain text stay editable. Converted binaries (PDF, DOCX, XLSX, PPTX) and logical export records stay read-only. Edit or regenerate the source export, or use Create editable copy in the doc view to spawn a markdown note with source provenance intact.

Saves (autosave, Cmd/Ctrl+S, and tag edits) check the revision you started from, so stale edits conflict instead of being overwritten, and a retried save whose response was lost gets the committed result. See Retry-safe writes.

Native PDF viewer

PDFs stay read-only. Pages renders the original PDF with an aligned selectable text layer, page navigation, zoom, fit-width, fit-page, and Download original. A Pages / Text toggle keeps the indexed extracted text one click away.

Rendering remains local and offline-first. GNO serves PDF.js, its worker, character maps, standard fonts, and the original document bytes from the same loopback origin. Long documents stay responsive because only pages near the viewport receive live canvases.

If rendering fails and extracted text is available, GNO switches to Text and names the reason: corrupt file, password protection, network failure, or viewer bootstrap failure. Without extracted text, Pages keeps the designed error card with retry and download actions; selecting Text manually shows the explicit no-extracted-text state. Printing is not built in. Download the original and print it from a PDF reader. Page, zoom, fit mode, and Pages/Text choice reset when you leave the document.

Keyboard shortcuts

Next steps

Typed metadata filters

Search and Ask provide Custom metadata field/operator controls and an Advanced filter (JSON) editor. Values use JSON syntax: quote strings, leave numbers and booleans unquoted. Invalid edits remain visible and block submission. Document details show indexed types and extraction errors. Shared query URLs may reveal filter values.

Read the metadata guide: examples, operators, missing fields, limits, and recovery.

Agent session archive

Start a server on the dedicated archive pair, for example gno --config ~/gno-sessions/archive.yml --index sessions serve --port 3100, and open /sessions. It manages sources and the archive destination, previews a dry run with redaction counts and destination collections, runs manual imports with partial-outcome details, and searches sessions with harness, project, and role filters and explicit Human and Assistant badges. While your curated server runs, give the archive server its own GNO_DATA_DIR, because only one server or daemon may own a data directory. The Automation panel, off by default, lets a browser on this machine create a profile and switch the Claude Code SessionEnd hook and the daemon schedule on separately, each after a preview of sources, destinations, the settings file, and the daemon prerequisite. It shows state, pending and running work, last run and last success, the next due time only while a daemon runs (otherwise not running: no daemon), and a recovery action. Run now works for any allowed client; Pause and Remove are same-host only. While a run is in progress the page refreshes its status every 2 seconds, so the profile shows running, and after each action keyboard focus moves to the resulting status, switch, or error. Status requests to a gno serve that is itself running an import can take several seconds. Sources you add or remove with the CLI while the server runs show up the next time the page loads its status, without a restart, and Remove succeeds on a source the CLI already removed; a config file the server cannot read is reported instead of showing stale sources. The MCP tools gno_sessions_status and gno_sessions_import pick up those CLI changes the same way, over gno mcp and the HTTP endpoint of gno serve or gno daemon. Curated servers do not attach the archive, the page never imports on its own, and gno serve never runs pending hook work or schedules: those run in gno daemon on the archive. Read the session archive guide.