node · 2026-06-04 documentation public
The input side

# Inputs & Drains

How an unstructured stream — voice memos, clipped articles, viewer comments — gets in, and how it becomes nodes. The rule that makes it work: capture is cheap and always-on; interpretation is expensive and on-demand.

## The principle

Dumb writes, smart reads.

Input events append plain text deterministically — no LLM in the write path. The agent only fires when Jake runs `/drain-all`. Capture never waits on a model; interpretation never runs unasked.

The asymmetry, drawn: every surface writes cheaply and always into a passive buffer; the expensive agent stays dark behind the `/drain-all` gate until Jake asks.

## The four input surfaces

File | Writer | Default routing | Drain step
--- | --- | --- | ---
drain.md | Jake (Obsidian / CLI) | varies — build / refactor / stub | remove line
viewer-drain.md | local-viewer (+ button) | build a new node | remove timestamped block
nnw-drain.md | forked NetNewsWire | create / augment a [[reading]] node | remove `---` block
feedback.md | local-viewer reactions | refactor that node | truncate to empty

The first three are vault-level queues; `feedback.md` is per-node, the only one tied to a specific existing node. Voice memos route the same way through `/streetlight-voice-memo`.

## The drain, end to end

1 · always on

### Capture

Any surface, any time. No agent involved.

→
2 · on demand

### Drain

`/drain-all` recons every surface, fans out N items → N subagents.

→
3 · per item

### Route

Each subagent appends to a matching node or creates a new one.

→
4 · deterministic

### Clear

Subagent removes its own line. Queue shrinks. N/N reported.

Synthesizes the former `drains-and-inputs` catalogue + the drain-pattern doctrine. Part of the 5-node public-doc synthesis (2026-06-04). · ← Overview