* feat: add uncommitted planning mode Add config option to keep planning docs local-only (not committed to git). Useful for OSS contributions, client projects, or keeping planning private. Config options in .planning/config.json: - planning.commit_docs: true/false (default: true) - planning.search_gitignored: true/false (default: false) When commit_docs=false: - All git operations for .planning/ files are skipped - User should add .planning/ to .gitignore - Planning system works normally, just not tracked Updated files: - config.json template: added planning section - execute-plan.md: conditional git commits - execute-phase.md: conditional git commits - create-roadmap.md: conditional git commits - help.md: documented new config options - planning-config.md: reference doc for config behavior Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: extend commit_docs check to all agents/commands/workflows Add COMMIT_PLANNING_DOCS config check to all files that commit .planning/ artifacts, ensuring consistent behavior when commit_docs=false is set in config.json. Updated: - 5 agents (planner, executor, debugger, phase-researcher, synthesizer) - 8 commands (add-todo, check-todos, execute-phase, new-milestone, pause-work, plan-milestone-gaps, remove-phase, research-project) - 7 workflows (complete-milestone, create-milestone, define-requirements, diagnose-issues, discuss-phase, map-codebase, verify-work) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(progress): use Bash instead of Glob for .planning/ check Glob respects .gitignore, so projects with gitignored .planning/ directories would fail with "No planning structure found." Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(new-milestone): integrate full research/requirements/roadmap flow Previously routed to non-existent /gsd:research-project and /gsd:define-requirements commands. Now handles the full flow inline like new-project does: - Phase 7: Research Decision (spawns 4 milestone-aware researchers) - Phase 8: Define Requirements (scopes features, creates REQUIREMENTS.md) - Phase 9: Create Roadmap (continues phase numbering from previous milestone) - Phase 10: Done Key adaptations for milestones: - Research focuses on NEW features only - Requirements add to existing, don't start fresh - Phase numbering continues from previous milestone Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
194 lines
4.6 KiB
Markdown
194 lines
4.6 KiB
Markdown
---
|
|
name: gsd:add-todo
|
|
description: Capture idea or task as todo from current conversation context
|
|
argument-hint: [optional description]
|
|
allowed-tools:
|
|
- Read
|
|
- Write
|
|
- Bash
|
|
- Glob
|
|
---
|
|
|
|
<objective>
|
|
Capture an idea, task, or issue that surfaces during a GSD session as a structured todo for later work.
|
|
|
|
Enables "thought → capture → continue" flow without losing context or derailing current work.
|
|
</objective>
|
|
|
|
<context>
|
|
@.planning/STATE.md
|
|
</context>
|
|
|
|
<process>
|
|
|
|
<step name="ensure_directory">
|
|
```bash
|
|
mkdir -p .planning/todos/pending .planning/todos/done
|
|
```
|
|
</step>
|
|
|
|
<step name="check_existing_areas">
|
|
```bash
|
|
ls .planning/todos/pending/*.md 2>/dev/null | xargs -I {} grep "^area:" {} 2>/dev/null | cut -d' ' -f2 | sort -u
|
|
```
|
|
|
|
Note existing areas for consistency in infer_area step.
|
|
</step>
|
|
|
|
<step name="extract_content">
|
|
**With arguments:** Use as the title/focus.
|
|
- `/gsd:add-todo Add auth token refresh` → title = "Add auth token refresh"
|
|
|
|
**Without arguments:** Analyze recent conversation to extract:
|
|
- The specific problem, idea, or task discussed
|
|
- Relevant file paths mentioned
|
|
- Technical details (error messages, line numbers, constraints)
|
|
|
|
Formulate:
|
|
- `title`: 3-10 word descriptive title (action verb preferred)
|
|
- `problem`: What's wrong or why this is needed
|
|
- `solution`: Approach hints or "TBD" if just an idea
|
|
- `files`: Relevant paths with line numbers from conversation
|
|
</step>
|
|
|
|
<step name="infer_area">
|
|
Infer area from file paths:
|
|
|
|
| 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>
|
|
|
|
<step name="check_duplicates">
|
|
```bash
|
|
grep -l -i "[key words from title]" .planning/todos/pending/*.md 2>/dev/null
|
|
```
|
|
|
|
If potential duplicate found:
|
|
1. Read the existing todo
|
|
2. Compare scope
|
|
|
|
If overlapping, use AskUserQuestion:
|
|
- header: "Duplicate?"
|
|
- question: "Similar todo exists: [title]. What would you like to do?"
|
|
- options:
|
|
- "Skip" — keep existing todo
|
|
- "Replace" — update existing with new context
|
|
- "Add anyway" — create as separate todo
|
|
</step>
|
|
|
|
<step name="create_file">
|
|
```bash
|
|
timestamp=$(date "+%Y-%m-%dT%H:%M")
|
|
date_prefix=$(date "+%Y-%m-%d")
|
|
```
|
|
|
|
Generate slug from title (lowercase, hyphens, no special chars).
|
|
|
|
Write to `.planning/todos/pending/${date_prefix}-${slug}.md`:
|
|
|
|
```markdown
|
|
---
|
|
created: [timestamp]
|
|
title: [title]
|
|
area: [area]
|
|
files:
|
|
- [file:lines]
|
|
---
|
|
|
|
## Problem
|
|
|
|
[problem description - enough context for future Claude to understand weeks later]
|
|
|
|
## Solution
|
|
|
|
[approach hints or "TBD"]
|
|
```
|
|
</step>
|
|
|
|
<step name="update_state">
|
|
If `.planning/STATE.md` exists:
|
|
|
|
1. Count todos: `ls .planning/todos/pending/*.md 2>/dev/null | wc -l`
|
|
2. Update "### Pending Todos" under "## Accumulated Context"
|
|
</step>
|
|
|
|
<step name="git_commit">
|
|
Commit the todo and any updated state:
|
|
|
|
**Check planning config:**
|
|
|
|
```bash
|
|
COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
|
|
git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
|
|
```
|
|
|
|
**If `COMMIT_PLANNING_DOCS=false`:** Skip git operations, log "Todo saved (not committed - commit_docs: false)"
|
|
|
|
**If `COMMIT_PLANNING_DOCS=true` (default):**
|
|
|
|
```bash
|
|
git add .planning/todos/pending/[filename]
|
|
[ -f .planning/STATE.md ] && git add .planning/STATE.md
|
|
git commit -m "$(cat <<'EOF'
|
|
docs: capture todo - [title]
|
|
|
|
Area: [area]
|
|
EOF
|
|
)"
|
|
```
|
|
|
|
Confirm: "Committed: docs: capture todo - [title]"
|
|
</step>
|
|
|
|
<step name="confirm">
|
|
```
|
|
Todo saved: .planning/todos/pending/[filename]
|
|
|
|
[title]
|
|
Area: [area]
|
|
Files: [count] referenced
|
|
|
|
---
|
|
|
|
Would you like to:
|
|
|
|
1. Continue with current work
|
|
2. Add another todo
|
|
3. View all todos (/gsd:check-todos)
|
|
```
|
|
</step>
|
|
|
|
</process>
|
|
|
|
<output>
|
|
- `.planning/todos/pending/[date]-[slug].md`
|
|
- Updated `.planning/STATE.md` (if exists)
|
|
</output>
|
|
|
|
<anti_patterns>
|
|
- Don't create todos for work in current plan (that's deviation rule territory)
|
|
- Don't create elaborate solution sections — captures ideas, not plans
|
|
- Don't block on missing information — "TBD" is fine
|
|
</anti_patterns>
|
|
|
|
<success_criteria>
|
|
- [ ] Directory structure exists
|
|
- [ ] Todo file created with valid frontmatter
|
|
- [ ] Problem section has enough context for future Claude
|
|
- [ ] No duplicates (checked and resolved)
|
|
- [ ] Area consistent with existing todos
|
|
- [ ] STATE.md updated if exists
|
|
- [ ] Todo and state committed to git
|
|
</success_criteria>
|