GTD Capture
Fast append to inbox. No priority, no routing — just capture.
Steps
- Take
$ARGUMENTSas item text. - Clean URLs — if the item contains a URL, strip tracking params (see below).
- Read
/praxis/gtd/01-inbox.md. If missing → error (see below). - Find the
### Newsection. If missing → error. - Insert with Edit, newest-first (after the header, before existing items):
- old_string:
### New - new_string:
### New\n- [ ] <cleaned item> [created:: TODAY] TODAY= today's date asYYYY-MM-DD.
- old_string:
- Report:
Captured: <item>.
Example — capture "buy milk" on 2026-05-23:
### New
- [ ] buy milk [created:: 2026-05-23]
- [ ] existing item [created:: 2026-05-20]
URL Cleaning
If the item contains a URL, strip these query params (case-insensitive key):
| Group | Params |
|---|---|
| Analytics | utm_* (any utm_-prefixed key) |
| Ad/click IDs | fbclid gclid gbraid wbraid msclkid dclid yclid twclid ttclid |
| Email/marketing | mc_eid mc_cid _hsenc _hsmi vero_id vero_conv oly_anon_id oly_enc_id mkt_tok |
| Social/referral | igshid ref ref_src ref_url source spm |
| Platform | si (YouTube/Spotify share token) feature (YouTube) |
Rules: remove only listed keys; keep all other params (id q v page t, etc.); drop a trailing ? if no params remain; preserve path + #fragment; leave non-URL text untouched.
https://example.com/article?utm_source=nl&utm_medium=email&id=42&fbclid=abc
→ https://example.com/article?id=42
https://youtu.be/dQw4w9WgXcQ?si=Xy12&t=30
→ https://youtu.be/dQw4w9WgXcQ?t=30
Triggers
- Direct:
/gtd:capture buy milk·/gtd:capture call John about project - Natural language: "add buy milk to inbox" · "capture: need to call John" · "inbox: review quarterly goals"
Notes
- Append as-is — no flags, no parsing, no priority sorting (that's triage).
- Empty
### Newis fine. Preserve all other sections unchanged.
Errors
- File not found → report, suggest checking vault path.
### Newmissing → report, suggest running setup.- Edit fails (concurrent modification) → report, ask user to retry.