Plan Status
Display current status and progress for active feature plans.
When to Use
Use this when:
- •Want to see all active plans at a glance
- •Need to check progress on a specific feature
- •Daily standup / status review
- •Deciding what to work on next
Usage
code
/plan-status [feature-name]
Arguments:
- •
feature-name- Optional: Show details for specific plan
Instructions
Without Feature Name: Show All Plans
bash
echo "📋 Active Feature Plans"
echo "======================"
echo ""
# Check if plans directory exists
if [ ! -d "plans/active" ] || [ -z "$(ls -A plans/active 2>/dev/null)" ]; then
echo "No active plans found"
echo ""
echo "Create a plan with: /create-plan <feature-name>"
exit 0
fi
# Iterate through active plans
for plan_dir in plans/active/*; do
if [ -d "$plan_dir" ]; then
FEATURE_NAME=$(basename "$plan_dir")
PLAN_FILE="$plan_dir/plan.md"
if [ -f "$PLAN_FILE" ]; then
# Extract frontmatter
TITLE=$(grep "^title:" "$PLAN_FILE" | sed 's/title: *//')
STATUS=$(grep "^status:" "$PLAN_FILE" | sed 's/status: *//')
TYPE=$(grep "^type:" "$PLAN_FILE" | sed 's/type: *//')
# Count completed phases
TOTAL_PHASES=$(grep -c " - id:" "$PLAN_FILE" || echo "0")
COMPLETED_PHASES=$(grep "status: completed" "$PLAN_FILE" | wc -l || echo "0")
# Status emoji
case "$STATUS" in
planning) STATUS_EMOJI="📝" ;;
in_progress) STATUS_EMOJI="🚧" ;;
testing) STATUS_EMOJI="🧪" ;;
complete) STATUS_EMOJI="✅" ;;
*) STATUS_EMOJI="❓" ;;
esac
echo "$STATUS_EMOJI $FEATURE_NAME"
echo " Title: $TITLE"
echo " Status: $STATUS"
echo " Progress: $COMPLETED_PHASES/$TOTAL_PHASES phases"
# Check for linked worktree
if [ -d "worktrees/$FEATURE_NAME" ]; then
echo " Worktree: ✅ worktrees/$FEATURE_NAME"
fi
echo ""
fi
fi
done
echo "========================"
echo "Use: /plan-status <name> for details"
With Feature Name: Show Detailed Status
bash
FEATURE_NAME="$1"
PLAN_DIR="plans/active/$FEATURE_NAME"
PLAN_FILE="$PLAN_DIR/plan.md"
# Check if plan exists
if [ ! -f "$PLAN_FILE" ]; then
echo "❌ Plan not found: $PLAN_FILE"
echo ""
echo "Available plans:"
ls -1 plans/active/ 2>/dev/null || echo " (none)"
exit 1
fi
# Parse frontmatter
TITLE=$(grep "^title:" "$PLAN_FILE" | sed 's/title: *//')
STATUS=$(grep "^status:" "$PLAN_FILE" | sed 's/status: *//')
TYPE=$(grep "^type:" "$PLAN_FILE" | sed 's/type: *//')
CREATED=$(grep "^created:" "$PLAN_FILE" | sed 's/created: *//')
# Display header
echo "📋 Plan: $TITLE"
echo "========================================"
echo "Feature: $FEATURE_NAME"
echo "Type: $TYPE"
echo "Status: $STATUS"
echo "Created: $CREATED"
echo ""
# Show phases
echo "Phases:"
echo "-------"
# Extract phase information
awk '
/^phases:/ { in_phases=1; next }
in_phases && /^ - id:/ {
id=$3
getline; status=$3
printf " %s: %s\n", id, status
}
/^---/ && in_phases { exit }
' "$PLAN_FILE"
echo ""
# Count tasks
TOTAL_TASKS=$(grep -c "^\- \[ \]" "$PLAN_FILE" || echo "0")
COMPLETED_TASKS=$(grep -c "^\- \[x\]" "$PLAN_FILE" || echo "0")
echo "Tasks:"
echo "------"
echo "Total: $TOTAL_TASKS"
echo "Completed: $COMPLETED_TASKS"
if [ "$TOTAL_TASKS" -gt 0 ]; then
PERCENT=$((COMPLETED_TASKS * 100 / TOTAL_TASKS))
echo "Progress: $PERCENT%"
# Progress bar
BAR_WIDTH=20
FILLED=$((PERCENT * BAR_WIDTH / 100))
EMPTY=$((BAR_WIDTH - FILLED))
printf "["
printf "%${FILLED}s" | tr ' ' '█'
printf "%${EMPTY}s" | tr ' ' '░'
printf "] $PERCENT%%\n"
fi
echo ""
# Show open questions
OPEN_QUESTIONS=$(grep "^## Open Questions" -A 100 "$PLAN_FILE" | grep "^\- \[ \]" | wc -l)
if [ "$OPEN_QUESTIONS" -gt 0 ]; then
echo "⚠️ Open Questions: $OPEN_QUESTIONS"
echo ""
fi
# Show success criteria
echo "Success Criteria:"
echo "-----------------"
grep "^## Success Criteria" -A 20 "$PLAN_FILE" | grep "^\- \[" | head -5
echo ""
# Worktree status
if [ -d "worktrees/$FEATURE_NAME" ]; then
echo "Worktree: ✅ worktrees/$FEATURE_NAME"
cd "worktrees/$FEATURE_NAME"
BRANCH=$(git branch --show-current)
COMMITS=$(git log --oneline origin/main..HEAD 2>/dev/null | wc -l || echo "0")
echo "Branch: $BRANCH"
echo "Commits: $COMMITS"
cd - > /dev/null
else
echo "Worktree: ❌ Not created"
echo "Create with: /worktree-create $FEATURE_NAME"
fi
echo ""
echo "========================================"
echo "Plan file: $PLAN_FILE"
Example Usage
Show all plans:
bash
/plan-status
Output:
code
📋 Active Feature Plans
======================
🚧 user-authentication
Title: User Authentication System
Status: in_progress
Progress: 2/4 phases
Worktree: ✅ worktrees/user-authentication
📝 payment-integration
Title: Stripe Payment Integration
Status: planning
Progress: 0/3 phases
========================
Use: /plan-status <name> for details
Show specific plan details:
bash
/plan-status user-authentication
Output:
code
📋 Plan: User Authentication System ======================================== Feature: user-authentication Type: feature Status: in_progress Created: 2026-02-04 Phases: ------- research: completed design: completed implementation: in_progress testing: pending Tasks: ------ Total: 18 Completed: 12 Progress: 66% [█████████████░░░░░░░] 66% Success Criteria: ----------------- - [x] Users can sign up with email/password - [x] Users can log in - [ ] Password reset works - [ ] Session management secure - [ ] Tests pass Worktree: ✅ worktrees/user-authentication Branch: feature/user-authentication Commits: 8 ======================================== Plan file: plans/active/user-authentication/plan.md
Status Dashboard View
For a quick team dashboard, you can create an alias:
bash
alias plans='/plan-status' # Show all plans plans # Show specific plan plans user-auth
Status Meanings
| Status | Emoji | Meaning |
|---|---|---|
planning | 📝 | Defining requirements, not started coding |
in_progress | 🚧 | Active development |
testing | 🧪 | Development complete, testing in progress |
review | 👀 | In code review |
complete | ✅ | Done and merged |
blocked | 🛑 | Waiting on dependency |
paused | ⏸️ | Temporarily stopped |
Integration with Git
Update status based on branch activity:
bash
# After making progress cd worktrees/feature-name # ... make changes ... # Update plan status sed -i 's/status: planning/status: in_progress/' plans/active/feature-name/plan.md
Best Practices
Daily Routine:
- •Run
/plan-statuseach morning - •Review open questions
- •Update phase status as you progress
- •Mark tasks complete as you go
Weekly Routine:
- •Review all active plans
- •Archive completed plans
- •Re-prioritize if needed
- •Update estimates based on progress
Status Updates:
- •Update
status:field in frontmatter - •Update
phases[].statusas you complete each - •Check off
- [ ]tasks as you finish them - •Add notes in the plan for important decisions
Tips
Keep Plans Updated:
- •Update immediately after completing phases
- •Don't wait until end of day
- •Real-time status is most useful
Use with Stand-ups:
- •Quick overview of all active work
- •Shows what's blocked
- •Identifies what needs attention
Tracking Progress:
- •Checkbox completion = task level
- •Phase status = milestone level
- •Overall status = project level
Advanced: Auto-Update from Git
bash
# Hook to update plan when pushing commits # .git/hooks/pre-push BRANCH=$(git branch --show-current) FEATURE_NAME=$(echo $BRANCH | sed 's/feature\///') PLAN_FILE="plans/active/$FEATURE_NAME/plan.md" if [ -f "$PLAN_FILE" ]; then # Auto-update to in_progress if was planning sed -i 's/status: planning/status: in_progress/' "$PLAN_FILE" fi
Troubleshooting
Plan not showing:
- •Check file is in
plans/active/ - •Verify
plan.mdexists - •Check YAML frontmatter is valid
Progress not accurate:
- •Use consistent checkbox format:
- [ ]and- [x] - •Don't use custom checkbox formats
- •Ensure phases array in frontmatter is updated
Worktree status wrong:
- •Verify worktree exists in
worktrees/ - •Check naming matches plan directory
- •Use
/worktree-createif missing