Ship the capture


Every capture tool I’ve used eventually failed for the same reason: it made me decide something before I was ready to decide anything. A folder. A tag. A project. The thought dies waiting on the decision.

The friction model

I think of capture as a pipe with three stages: notice, record, file. Most tools collapse record and file into one step — and that’s the bug. The moment a note asks where does this go? before it asks what is this?, you’ve already lost some fraction of your users to the pause.

A capture tool’s only job is to survive the fifteen seconds between having a thought and doing something else. Everything past that is someone else’s problem — including future-you’s.

What actually breaks capture

qcap solves this by writing straight to a local queue — no schema, no project_id, no network round-trip before the cursor returns. Filing happens later, asynchronously, in Obsidian, where I actually have the context to do it well.

  1. Global hotkey opens a single-line input, nothing else on screen.
  2. Enter appends the line — timestamped — to a local queue file.
  3. A background job in Obsidian pulls the queue, drafts a note per line, and clears it.

The entire capture surface: one field, one hotkey, no menu.

The rule

If a feature adds a decision to the hot path, it doesn’t belong in the hot path. It belongs after — in review, in filing, in the part of the day already set aside for deciding things.

on hotkey:
  show(input)
on enter:
  queue.append(timestamp(), input.text)
  hide(input)
Step Before After
Notice
Record Open app, pick notebook Hotkey, type, enter
File Immediately, by hand Later, in batch

None of this is original — every GTD-adjacent tool rediscovers the same pipe eventually.1 The only trick is refusing to let filing borrow time from recording.

Footnotes

  1. Ambitions vary; the pipe doesn’t.