Skip to content

Inbox & capture

The inbox is Subspace’s guaranteed-capture point. It is a normal page at /p/inbox, so anything captured there is a node like any other, but its header carries a promise: “everything here will be acted on.” Capture first, decide later, triage does the deciding.

A single input field sits at the top of /p/inbox. Type a thought and press Enter: one transaction writes the node onto the inbox page and emits an inbox-captured event. The item then appears immediately in the Untriaged list below, showing its source and capture time.

Once triage routes the event, the same item moves to the Triaged by event-triage agent list, showing a severity dot and its resolved route (page inbox, silent / task queue / task queue + notification / notify, overrides focus). Clicking a triaged item that was routed to another page’s inbox jumps you straight there.

An inbox item is a node on the inbox page with props.inbox = {source, ts} until triage decides its fate; triage rides the same event pipeline as every other event type.

Type #tag (or #[[Page Title]]) anywhere in the capture text to route the item to that page’s own inbox instead of the workspace inbox:

Follow up on the SOC2 audit doc #acme-renewal

Routing resolves the tag deterministically, server-side, exact title match first, then a page alias, then the slug, and the node moves silently onto the target page (the page-inbox route in triage, so no task queue row and no notification fire for it). The quick-capture palette mirrors this resolution live: as you type, it shows → [[tag]] inbox or → inbox beneath the input so you know where the item is headed before you commit it.

The inbox is reachable from every client:

Desktop palette

⌘⇧Space (Ctrl+Shift+Space on Windows/Linux, configurable) opens a small always-on-top window from anywhere in the OS. Type a line and press Enter to capture it to the inbox, or Tab to run the same text as an agent command instead. Escape hides the window without capturing. See Desktop.

Mobile

The mobile app captures offline-first: a capture is queued to on-device storage immediately and a background flush loop delivers queued captures in order once the server is reachable, so a bad connection never loses a thought. The share sheet drains into the same queue, so sharing a link or a note from another app captures it too.

Browser extension

The extension popup clips the active tab into the knowledge base (see Knowledge ingestion) rather than the inbox, useful when what you want to keep is the page itself rather than a note about it.

Triage annotates action-worthy captures with a GTD context — @computer, @mobile, @errands, or @reading-listening — rendered as a chip on the card and on the capture history row. Deterministic rules label the obvious cases with no model call (buy/pick up/store → errands, call/text → mobile, URL-dominated captures and clipper shares → reading-listening); anything else rides the one triage classification already being made, and a #tag-routed capture stays unlabeled rather than buying an extra model call. Filter both the card list and history by context, and override any chip from the card — the manual choice is final. You can author your own deterministic rules (keywords, senders, sources) at /settings/triage, where your corrections are also mined into suggested rules — see Events & triage.

When agent-debrief digests are in the inbox, a player row appears: ▶ listen, previous / next, and a topic filter. Audio is synthesized on demand through the TTS provider seam, cached as ordinary files for thirty days (re-listening is a cache hit), and auto-advances through the queue. The nightly agent-edit debrief itself summarizes everything agents changed, one compact #topic item per day, so listening through it is a hands-free review of what happened while you were away.