GTD Capture Skill — Proactive Capture Trigger Detection
When This Skill Applies
Apply this skill whenever you detect any of the following semantic signals in the user's messages or code:
Explicit Capture Signals (→ Inbox)
- "I need to ___", "we need to ___", "you need to ___"
- "we should ___", "I should ___", "we ought to ___"
- "remind me to ___", "don't forget ___", "remember to ___"
- "TODO:", "FIXME:", "HACK:", "NOTE: action required"
- "must ___", "have to ___", "got to ___"
Waiting For Signals (→ Waiting list)
- "waiting on ___", "waiting for ___", "blocked by ___"
- "once ___ is done", "after ___ finishes", "depends on ___"
- "need ___ to respond", "need ___ from ___"
Deferral Signals (→ Someday/Maybe)
- "someday", "eventually", "later", "at some point"
- "when we have time", "would be nice to", "might want to"
- "tech debt", "backlog item", "refactor (not now)"
- "future improvement", "nice to have"
Frequency Guard
Maximum 2 capture suggestions per session. After 2 suggestions, stop offering — do not suggest a third time.
Track mentally whether you have already offered capture in this session.
How to Suggest
When you detect a capture signal, offer ONE of these phrasings (pick based on signal type):
Inbox capture:
Capture to GTD inbox? → "[detected text]" [y/N]
Waiting For capture:
Add to Waiting For: "[detected text]"? [y/N]
Someday/Maybe capture:
Add to Someday/Maybe: "[detected text]"? [y/N]
Response to User's Answer
If user says "y" or "yes":
Run the Bash command to append to tasks.json:
CWD=$(pwd)
GTD_LIB="${CLAUDE_PLUGIN_ROOT}/hooks/gtd-lib.sh"
source "$GTD_LIB"
gtd_init
ID=$(gtd_new_id)
NOW=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
TASK_JSON=$(jq -n --arg id "$ID" --arg subject "<detected text>" --arg list "<inbox|waiting|someday>" --arg created "$NOW" \
'{id: $id, subject: $subject, list: $list, context: [], parentId: null, energy: null, timeEstimate: null, waitingOn: null, dueDate: null, created: $created, modified: $created, completed: null, notes: ""}')
echo "$TASK_JSON" | gtd_append_task
bun run "${CLAUDE_PLUGIN_ROOT}/tools/gtd-display.ts" capture "$ID" "<detected text>" --list "<inbox|waiting|someday>"
If user says "n", ignores it, or doesn't respond: Drop it silently. Never repeat the suggestion for the same item.
Opt-Out
Check GTD_SUGGESTIONS environment variable:
off or disabled: Never suggest captures. Skip this skill entirely.
minimal: Only suggest at session start via hook. Skip in-conversation suggestions.
on (default): Full proactive capture enabled.
Key Principles
- Never interrupt flow: Offer capture as a one-line aside, not a multi-paragraph interruption.
- Default to no-action: The [y/N] default is N — the user decides whether to capture.
- Be specific: Always pre-fill the detected text so the user can confirm or edit, not retype.
- Stay quiet when healthy: If the user is clearly in deep focus (long code changes, no conversation), suppress suggestions.
- Capture the intent, not the exact words: Rephrase to start with an action verb if the detected text is not action-oriented. E.g., "Redis clustering" → "Investigate Redis clustering options".
1---2name: gtd-capture3description: Proactive capture trigger detection for GTD workflow. Detects "I need to", "we should", "remind me" signals and routes to inbox.4---56# GTD Capture Skill — Proactive Capture Trigger Detection78## When This Skill Applies910Apply this skill whenever you detect any of the following semantic signals in the user's messages or code:1112### Explicit Capture Signals (→ Inbox)13- "I need to ___", "we need to ___", "you need to ___"14- "we should ___", "I should ___", "we ought to ___"15- "remind me to ___", "don't forget ___", "remember to ___"16- "TODO:", "FIXME:", "HACK:", "NOTE: action required"17- "must ___", "have to ___", "got to ___"1819### Waiting For Signals (→ Waiting list)20- "waiting on ___", "waiting for ___", "blocked by ___"21- "once ___ is done", "after ___ finishes", "depends on ___"22- "need ___ to respond", "need ___ from ___"2324### Deferral Signals (→ Someday/Maybe)25- "someday", "eventually", "later", "at some point"26- "when we have time", "would be nice to", "might want to"27- "tech debt", "backlog item", "refactor (not now)"28- "future improvement", "nice to have"2930## Frequency Guard3132**Maximum 2 capture suggestions per session.** After 2 suggestions, stop offering — do not suggest a third time.3334Track mentally whether you have already offered capture in this session.3536## How to Suggest3738When you detect a capture signal, offer ONE of these phrasings (pick based on signal type):3940**Inbox capture:**41```42Capture to GTD inbox? → "[detected text]" [y/N]43```4445**Waiting For capture:**46```47Add to Waiting For: "[detected text]"? [y/N]48```4950**Someday/Maybe capture:**51```52Add to Someday/Maybe: "[detected text]"? [y/N]53```5455## Response to User's Answer5657**If user says "y" or "yes":**58Run the Bash command to append to tasks.json:59```bash60CWD=$(pwd)61GTD_LIB="${CLAUDE_PLUGIN_ROOT}/hooks/gtd-lib.sh"62source "$GTD_LIB"63gtd_init64ID=$(gtd_new_id)65NOW=$(date -u +"%Y-%m-%dT%H:%M:%SZ")66TASK_JSON=$(jq -n --arg id "$ID" --arg subject "<detected text>" --arg list "<inbox|waiting|someday>" --arg created "$NOW" \67 '{id: $id, subject: $subject, list: $list, context: [], parentId: null, energy: null, timeEstimate: null, waitingOn: null, dueDate: null, created: $created, modified: $created, completed: null, notes: ""}')68echo "$TASK_JSON" | gtd_append_task69bun run "${CLAUDE_PLUGIN_ROOT}/tools/gtd-display.ts" capture "$ID" "<detected text>" --list "<inbox|waiting|someday>"70```7172**If user says "n", ignores it, or doesn't respond:** Drop it silently. Never repeat the suggestion for the same item.7374## Opt-Out7576Check `GTD_SUGGESTIONS` environment variable:77- `off` or `disabled`: Never suggest captures. Skip this skill entirely.78- `minimal`: Only suggest at session start via hook. Skip in-conversation suggestions.79- `on` (default): Full proactive capture enabled.8081## Key Principles82831. **Never interrupt flow**: Offer capture as a one-line aside, not a multi-paragraph interruption.842. **Default to no-action**: The [y/N] default is N — the user decides whether to capture.853. **Be specific**: Always pre-fill the detected text so the user can confirm or edit, not retype.864. **Stay quiet when healthy**: If the user is clearly in deep focus (long code changes, no conversation), suppress suggestions.875. **Capture the intent, not the exact words**: Rephrase to start with an action verb if the detected text is not action-oriented. E.g., "Redis clustering" → "Investigate Redis clustering options".