This skill should be used when the user asks to "create a plan", "break down feature", "design implementation", "structure this work", "plan out", "decompose task", or "create roadmap". Provides plan creation and breakdown patterns for the FP CLI including issue hierarchy and dependency modeling.
Inherits all available tools
Additional assets for this skill
This skill inherits all available tools. When active, it can use any tool Claude has access to.
references/patterns.mdreferences/templates.mdPlan creation and breakdown patterns for the FP CLI
Key insight: In FP, plans are just elaborate issues. There's no separate "plan" entity.
A plan is an issue that:
Plan (Parent Issue)
├── Task 1 (Child Issue)
│ ├── Sub-task 1.1 (Grandchild)
│ └── Sub-task 1.2 (Grandchild)
├── Task 2 (Child Issue)
└── Task 3 (Child Issue)
You can nest as deep as needed, but 2-3 levels is typical:
Issues can depend on other issues at any level:
Dependencies are directional: "FP-3 depends on FP-2" means FP-2 must complete before FP-3 can start.
Start with the top-level plan/epic:
fp issue create \
--title "Add user authentication system" \
--description "Implement OAuth2 authentication with GitHub provider.
Goals:
- Support GitHub OAuth login
- Store user sessions securely
- Provide middleware for protected routes
- Handle token refresh
Technical approach:
- Use Cloudflare D1 for session storage
- OAuth2 library for GitHub integration
- JWT tokens for session management
Success criteria:
- Users can log in with GitHub
- Sessions persist across requests
- Protected routes require authentication"
This creates FP-1 (or whatever the next ID is).
Identify major components/phases:
# Foundation: Data models
fp issue create \
--title "Design and implement data models" \
--parent FP-1 \
--description "Create TypeScript schemas and database tables for User, Session, and Token models.
Details:
- User model: id, githubId, email, name, avatarUrl
- Session model: id, userId, token, expiresAt
- Token model: id, userId, accessToken, refreshToken, expiresAt
Files to modify:
- src/models/user.ts
- src/models/session.ts
- src/models/token.ts
- drizzle/schema.ts"
This creates FP-2 as a child of FP-1.
# OAuth integration
fp issue create \
--title "Implement GitHub OAuth flow" \
--parent FP-1 \
--depends "FP-2" \
--description "Set up OAuth2 flow with GitHub:
- Redirect to GitHub authorization
- Handle callback with authorization code
- Exchange code for access token
- Fetch user info from GitHub API
Files:
- src/auth/oauth.ts (new)
- src/routes/auth.ts (new)"
This creates FP-3 as a child of FP-1, dependent on FP-2.
# Session management
fp issue create \
--title "Implement session management" \
--parent FP-1 \
--depends "FP-2,FP-3" \
--description "Create session creation, validation, and cleanup logic.
Features:
- Create session on successful login
- Validate session on each request
- Refresh expired sessions
- Clean up old sessions (cron job)
Files:
- src/auth/session.ts (new)
- src/middleware/auth.ts (new)"
This creates FP-4, dependent on both FP-2 and FP-3.
# Frontend UI
fp issue create \
--title "Add login UI components" \
--parent FP-1 \
--depends "FP-4" \
--description "Create React components for authentication:
- Login button (redirects to OAuth)
- User profile dropdown
- Logout button
Files:
- app/components/LoginButton.tsx (new)
- app/components/UserProfile.tsx (new)
- app/components/LogoutButton.tsx (new)"
This creates FP-5, dependent on FP-4.
# Testing and docs
fp issue create \
--title "Testing and documentation" \
--parent FP-1 \
--depends "FP-4,FP-5" \
--description "Write tests and documentation:
- Unit tests for auth logic
- Integration tests for OAuth flow
- Update README with setup instructions
- Add environment variable documentation
Files:
- src/auth/__tests__/*.test.ts (new)
- README.md
- .env.example"
This creates FP-6, dependent on both FP-4 and FP-5.
fp tree
You should see:
FP-1 [todo] Add user authentication system
├── FP-2 [todo] Design and implement data models
├── FP-3 [todo] Implement GitHub OAuth flow
│ └── blocked by: FP-2
├── FP-4 [todo] Implement session management
│ └── blocked by: FP-2, FP-3
├── FP-5 [todo] Add login UI components
│ └── blocked by: FP-4
└── FP-6 [todo] Testing and documentation
└── blocked by: FP-4, FP-5
Review the plan:
# Add missing dependency
fp issue update --depends "FP-2,FP-4" FP-5
# Break down large task
fp issue create \
--title "OAuth callback handler" \
--parent FP-3 \
--description "Handle OAuth callback and exchange code for token"
fp issue create \
--title "GitHub user info fetcher" \
--parent FP-3 \
--description "Fetch user profile from GitHub API"
# Update descriptions
fp issue edit FP-2 # Opens in $EDITOR
Begin with the high-level goal, then decompose:
Each task should:
If a task feels too big, break it down further.
Ask:
Model dependencies explicitly:
fp issue update --depends "FP-Y,FP-Z" FP-X
Good descriptions include:
Example:
Implement rate limiting middleware
Why: Protect API endpoints from abuse
How: Use Cloudflare's built-in rate limiting or token bucket algorithm
Files: src/middleware/ratelimit.ts
Done:
- Middleware blocks requests exceeding 100/minute
- Responds with 429 status code
- Tests verify rate limit enforcement
Always include tasks for:
These often depend on implementation tasks being complete.
For detailed patterns with examples, see references/patterns.md:
Plans often evolve as work progresses:
# Discovered new requirement
fp issue create \
--title "Add token refresh logic" \
--parent FP-1 \
--depends "FP-3"
# Update dependent tasks
fp issue update --depends "FP-2,FP-3,FP-7" FP-4
# Realized FP-5 doesn't need FP-4 after all
fp issue update --depends "FP-2" FP-5 # This replaces the entire dependency list
# To add a dependency (without removing existing), you need to include all:
fp issue show FP-5 # Check current dependencies
fp issue update --depends "FP-2,FP-4,FP-6" FP-5 # Include old + new
# FP-3 turned out to be too big
# Create sub-tasks
fp issue create --title "OAuth redirect handler" --parent FP-3
fp issue create --title "OAuth callback handler" --parent FP-3
fp issue create --title "User info fetcher" --parent FP-3
# Add comment to original
fp comment FP-3 "Broke down into sub-tasks: FP-10, FP-11, FP-12"
# Keep FP-3 as umbrella, or mark as Done when children are done
# Need to work on FP-5 before FP-4
# Update dependencies to reflect new order
fp issue update --depends "FP-2,FP-5" FP-4
fp issue update --depends "FP-2" FP-5
# Document why
fp comment FP-1 "Reordered plan: UI mockups (FP-5) before backend (FP-4) to get design feedback early"
Phase 1: Human creates outline
# Human creates the plan issue with high-level goals
fp issue create --title "Add real-time notifications" --description "[detailed goals]"
Phase 2: Agent elaborates The agent (you) can:
# Agent adds structured tasks
fp issue create --title "WebSocket connection handler" --parent FP-1
fp issue create --title "Notification data model" --parent FP-1
# ... etc
Phase 3: Human reviews and adjusts
# Human updates based on business constraints
fp issue update --depends "FP-2,FP-7" FP-3
fp comment FP-1 "Updated plan: need to integrate with existing notification system (FP-7)"
Multiple agents can contribute to planning:
# Agent 1 (swift-falcon): Creates foundation
fp issue create --title "Plan feature X" --parent FP-1
# Agent 2 (calm-otter): Adds backend tasks
fp issue create --title "Backend API" --parent FP-1
fp comment FP-1 "Added backend tasks (FP-10-FP-13)"
# Agent 3 (quick-lemur): Adds frontend tasks
fp issue create --title "UI components" --parent FP-1 --depends "FP-10"
fp comment FP-1 "Added frontend tasks (FP-14-FP-16)"
Track contributions via activity log:
fp log FP-1
For ready-to-use templates, see references/templates.md:
# BAD: Task checkboxes in issue description
## Tasks
- [ ] Create apps/fp-vscode directory
- [ ] Set up package.json with extension manifest
- [ ] Configure esbuild to bundle extension
- [ ] Create extension.ts with activate/deactivate
This is wrong because:
# GOOD: Create proper subissues
fp issue create --title "Create apps/fp-vscode directory" --parent FP-1
fp issue create --title "Set up package.json with extension manifest" --parent FP-1 --depends "FP-2"
fp issue create --title "Configure esbuild to bundle extension" --parent FP-1 --depends "FP-3"
fp issue create --title "Create extension.ts with activate/deactivate" --parent FP-1 --depends "FP-4"
Rule: NEVER write - [ ] task lists in issue descriptions. Always create subissues with --parent.
# BAD: Orphan tasks
fp issue create --title "Add OAuth"
fp issue create --title "Add session logic"
# These are unconnected
# GOOD: Hierarchy
fp issue create --title "Authentication system"
fp issue create --title "Add OAuth" --parent FP-1
fp issue create --title "Add session logic" --parent FP-1 --depends "FP-2"
# BAD: No dependencies specified
fp issue create --title "Frontend auth UI" --parent FP-1
fp issue create --title "Backend auth API" --parent FP-1
# Can UI be built before API? Probably not.
# GOOD: Explicit dependencies
fp issue create --title "Backend auth API" --parent FP-1
fp issue create --title "Frontend auth UI" --parent FP-1 --depends "FP-2"
# BAD: Unclear task
fp issue create --title "Do the auth stuff" --parent FP-1
# GOOD: Specific task
fp issue create \
--title "Implement GitHub OAuth callback handler" \
--parent FP-1 \
--description "Handle OAuth redirect, exchange code for token, create session"
# BAD: Huge task
fp issue create --title "Build entire authentication system" --parent FP-1
# This is not a task, it's the whole feature!
# GOOD: Decomposed
fp issue create --title "Authentication system"
fp issue create --title "OAuth integration" --parent FP-1
fp issue create --title "Session management" --parent FP-1
fp issue create --title "Auth middleware" --parent FP-1
# ... etc
--parent (1-3 hours each)- [ ] task lists - always create proper subissuesfp tree to verify structurefp issue create \
--title "[Clear, specific title]" \
--parent "[Parent issue ID]" \
--depends "[Comma-separated dependency IDs]" \
--description "
What: [What needs to be done]
Why: [Context or rationale]
How: [Technical approach]
Done: [Definition of done]
"
Planning and workflow are two sides of the same process:
Use this skill to:
Use the fp-workflow skill to:
During execution, update the plan:
# Discovered new dependency
fp issue update --depends "FP-2,FP-4,FP-8" FP-5
fp comment FP-5 "Added dependency on FP-8: need shared utility functions"
# Task is too big - break it down
fp issue create --title "Subtask A" --parent FP-5
fp issue create --title "Subtask B" --parent FP-5
fp comment FP-5 "Broke down into FP-15, FP-16"
Effective planning with FP:
fp tree - Verify structure and dependenciesA good plan enables agents to:
Remember: Plans are living documents. Update them as you learn during implementation.