GTD Triage
Two-pass inline triage. Claude annotates inbox, human reviews in Obsidian, Claude routes on second pass.
Two-Pass Flow
Pass 1: Annotate (no second // on lines)
Trigger: /gtd:triage when ### New has lines WITHOUT //
- Read
/home/mat/dev/gtd-pcm/01-inbox.md, extract### Newitems - If empty: report "📭 Inbox empty" and stop
- Scan
03-projects/for routing targets (Glob + Grep) - Append
// → target #tagsto each unannotated line - Report: "✏️ Annotated X items. Review in Obsidian, append your
//comments, then run/gtd:triageagain."
Pass 2: Route (lines have two // blocks)
Trigger: /gtd:triage when ### New has lines with TWO // blocks
- Read inbox, parse lines with two
//blocks - If none found: report "⏳ No reviewed items yet" and stop
- For each reviewed line, interpret the second
//:// ok→ route using Claude's proposal (first//)// ok → different-target #tags→ route with human override// delete→ remove from inbox entirely// any other text→ interpret intent (question = flag with ❓, target name = reroute)
- Apply routing to destination project files
- Remove routed + deleted lines from
### New - Leave lines with only one
//(unreviewed) untouched — never strip proposals - Report summary
Auto-detect Pass
On invocation, detect which pass to run:
- If ANY line in
### Newhas two//blocks → Pass 2 - If lines exist without
//→ Pass 1 - If mixed: run Pass 2 first (process reviewed), then Pass 1 on remaining
Classification
Type: task | reference | waiting-for | someday | trash | project-seed
Destination: Scan 03-projects/ for best match
- Glob:
03-projects/**/*.md - Grep: search project content for keyword match
- Use folder number prefix as shorthand (e.g.,
38-mind-body)
Tags: ONLY allowed GTD tags
- Priority:
#next#frog#waiting#recurring - Context:
#phone#field#admin#read-quick#read-deep#read-book#listen#watch#shop - Energy:
#deep#braindead - People:
#agenda/Name#waiting/Name - No tag = backlog
Unclear items: Mark with // ❓ + reason instead of routing proposal
Dates: [due:: YYYY-MM-DD] or [scheduled:: YYYY-MM-DD] — never emoji shorthand
Routing Rules
Standard project template sections (see CLAUDE.md § Project Template):
| Type | Destination | Section |
|---|---|---|
task + #next/#frog |
project 01-{name}.md |
### ⚡ Next |
| task (no priority tag) | project 01-{name}.md |
### 📋 Backlog |
| waiting-for | project 01-{name}.md |
### 👥 Waiting For with #waiting/Name |
| reference | project file | ## 📎 Reference |
| someday | 50-59 project | ### 📋 Backlog |
| trash | (delete) | Remove from inbox |
| project-seed | (flag ❓) | Needs new project — ask human |
Fallback (if section not found): ### 📋 Backlog → ## ✅ Tasks → before ## 📎 Reference → end of file
Scope
- Only process
### Newsection - Other sections (Prio 1, Prio 2, Misc, Praxis, LQ) are left untouched
- Completed items (
- [x]) are skipped
Error Handling
- Empty inbox: "📭 Inbox empty"
- No matching project: Use
// ❓ no project match— don't guess - Edit conflicts: Report and ask user to retry
Constraints
- Tasks ONLY in
01-{name}.mdfiles (never in reference docs) [field:: value]date format- Preserve existing file structure and markdown validity
- No trailing whitespace
- NEVER use AskUserQuestion — the
//flow IS the human gate
Triggers
Direct: /gtd:triage
Natural language: "process inbox", "triage inbox", "route inbox", "process triage"
Converted and distributed by TomeVault — claim your Tome and manage your conversions.