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.
/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
Capture
Any surface, any time. No agent involved.
Drain
/drain-all recons every surface, fans out N items → N subagents.
Route
Each subagent appends to a matching node or creates a new one.
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