Track things to do. Add a todo with arguments, or review pending ones without.
If $ARGUMENTS is non-empty: Add mode — capture the todo.
If $ARGUMENTS is empty: Check mode — review and act on pending todos.
<required_reading> Read all files referenced by the invoking prompt's execution_context before starting. </required_reading>
<process> <step name="init_context"> Load todo context:# Ensure GSD CLI symlink exists (self-heals if /fh:setup wasn't run)
if [ ! -f "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" ]; then
_FHHS="$(ls -d "$HOME/.claude/plugins/cache/fhhs-skills/fh"/*/ 2>/dev/null | sort | tail -1)"
_FHHS="${_FHHS%/}"
if [ -n "$_FHHS" ] && [ -d "$_FHHS/bin" ]; then
mkdir -p "$HOME/.claude/get-shit-done"
ln -sfn "$_FHHS/bin" "$HOME/.claude/get-shit-done/bin"
[ -d "$_FHHS/hooks" ] && ln -sfn "$_FHHS/hooks" "$HOME/.claude/get-shit-done/hooks"
fi
fi
INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init todos)
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
<step name="extract_content">
**With arguments:** Use as the title/focus.
- `todos Add auth token refresh` → title = "Add auth token refresh"
<step name="infer_area">
Infer area from file paths:
<step name="check_duplicates">
```bash
# Search for key words from title in existing todos
grep -l -i "[key words from title]" .planning/todos/pending/*.md 2>/dev/null
```
<step name="create_file">
Use values from init context: `timestamp` and `date` are already available.
Extract from init JSON: commit_docs, date, timestamp, todo_count, todos, pending_dir, todos_dir_exists.
Ensure directories exist:
mkdir -p .planning/todos/pending .planning/todos/done
Note existing areas from the todos array for consistency in infer_area step. </step>
Without arguments: Analyze recent conversation to extract:
Formulate:
title: 3-10 word descriptive title (action verb preferred)problem: What's wrong or why this is neededsolution: Approach hints or "TBD" if just an ideafiles: Relevant paths with line numbers from conversation
</step>
| Path pattern | Area |
|---|---|
src/api/*, api/* | api |
src/components/*, src/ui/* | ui |
src/auth/*, auth/* | auth |
src/db/*, database/* | database |
tests/*, __tests__/* | testing |
docs/* | docs |
.planning/* | planning |
scripts/*, bin/* | tooling |
| No files or unclear | general |
Use existing area from step 2 if similar match exists. </step>
If potential duplicate found:
If overlapping, use AskUserQuestion:
Generate slug for the title:
slug=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" generate-slug "$title" --raw)
Write to .planning/todos/pending/${date}-${slug}.md:
---