
Create Plan
- 2 installs
- 7.5k repo stars
- Updated August 5, 2026
- antinomyhq/forgecode
Create-plan is a Forge/Claude skill that generates validated Markdown implementation plans with objectives, checkbox tasks, verification criteria, risks, and alternatives, without making code changes.
About
Create-plan generates detailed implementation plans for complex tasks as Markdown files with objectives, checkbox-format tasks, verification criteria, risk mitigations, and alternative approaches. A developer uses it for pre-implementation analysis before breaking a feature into steps. It is strictly planning-focused and validates every plan with a bundled script.
- Generates Markdown implementation plans with objectives, checkbox tasks, verification criteria, and risk assessments
- Every plan MUST pass the included validate-plan.sh script before use
- Planning-only: never writes code, snippets, or runs build commands
Create Plan by the numbers
- 2 all-time installs (skills.sh)
- Ranked #2,412 of 3,282 Productivity & Planning skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
create-plan capabilities & compatibility
Free skill; needs the bundled validate-plan.sh and search/read tools available in the agent.
- Capabilities
- implementation planning · task breakdown · risk assessment
- Use cases
- planning · project management
- Pricing
- Free
What create-plan says it does
Generate detailed implementation plans for complex tasks.
Strictly planning-focused with no code modifications.
All plans MUST be validated using the included validation script.
npx skills add https://github.com/antinomyhq/forgecode --skill create-planAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 2 |
|---|---|
| repo stars | ★ 7.5k |
| Last updated | August 5, 2026 |
| Repository | antinomyhq/forgecode ↗ |
What it does
Produce a validated Markdown implementation plan with checkbox tasks, risks, and verification criteria before writing any code.
Who is it for?
Developers who want a structured, risk-assessed implementation plan before starting a complex feature.
Skip if: Users who want the agent to write code or run builds - this skill makes no code changes and blocks code snippets in plans.
When should I use this skill?
The user explicitly asks for a plan, roadmap, or strategy, or needs a complex feature broken into actionable steps before implementation.
What you get
A validated Markdown plan file under plans/ with objectives, checkbox tasks, verification criteria, risks, and alternatives.
- Markdown implementation plan file under plans/
- Risk and mitigation list
- Verification criteria
By the numbers
- Plan structure has 5 sections: Objective, Implementation Plan, Verification Criteria, Potential Risks and Mitigations, A
- Plans named plans/{YYYY-MM-DD}-{task-name}-v{N}.md
Files
Create Implementation Plan
Generate comprehensive implementation plans that provide strategic guidance without making actual code changes.
When to Use
- User explicitly requests a plan, roadmap, or implementation strategy
- Complex tasks requiring structured breakdown before implementation
- Need for risk assessment and alternative approach analysis
- Pre-implementation analysis of architectural decisions
Planning Process
1. Initial Assessment
Research the codebase to understand:
- Project structure and organization
- Relevant files and components - read thoroughly to understand complete flows
- Existing patterns and conventions
- Potential challenges and risks
- Data flows from entry points to final usage
Use search, sem_search, and read tools to examine the codebase. Use sage if deeper research is required for the use-case. Explicitly cite sources using filepath:line format in your plan.
2. Create Strategic Plan
Generate a Markdown plan file in plans/ directory with naming: plans/{YYYY-MM-DD}-{task-name}-v{N}.md
Example: plans/2025-11-24-add-auth-v1.md
3. Validate Plan
MANDATORY: Run the validation script to ensure the plan meets all requirements:
./.forge/skills/create-plan/validate-plan.sh plans/{YYYY-MM-DD}-{task-name}-v{N}.mdFix any errors or warnings and re-validate until the plan passes all checks.
4. Plan Structure
# [Task Name]
## Objective
[Clear statement of goal and expected outcomes]
## Implementation Plan
- [ ] 1. [First task with detailed description and rationale]
- [ ] 2. [Second task with detailed description and rationale]
- [ ] 3. [Third task with detailed description and rationale]
## Verification Criteria
- [Criterion 1: Specific, measurable outcome]
- [Criterion 2: Specific, measurable outcome]
## Potential Risks and Mitigations
1. **[Risk Description]**
Mitigation: [Specific mitigation strategy]
2. **[Risk Description]**
Mitigation: [Specific mitigation strategy]
## Alternative Approaches
1. [Alternative 1]: [Brief description and trade-offs]
2. [Alternative 2]: [Brief description and trade-offs]Critical Requirements
- ALWAYS validate the plan using
./.forge/skills/create-plan/validate-plan.shafter creation - ALWAYS use checkbox format (
- [ ]) for ALL implementation tasks - NEVER use numbered lists or plain bullet points in Implementation Plan section
- NEVER write code, code snippets, or code examples in the plan
- Write comprehensive tasks including what, why, affected files, and integration points
- Use
filepath:lineformat for file references (e.g.,crates/forge_repo/src/provider.rs:45) - Include clear rationale for each task
- Provide specific, measurable verification criteria
- Document assumptions made for ambiguous requirements
- Focus on strategic "what" and "why", not tactical "how"
- Describe what needs to be done using natural language, not code
Best Practices
- Make reasonable assumptions when requirements are ambiguous
- Use codebase patterns to infer best practices
- Provide multiple solution paths for complex challenges
- Balance thoroughness with actionability
- Create plans that can be executed step-by-step by implementation agents
Boundaries
This is a planning-only skill:
- ✅ Research codebase and analyze structure
- ✅ Create strategic plans and documentation
- ✅ Assess risks and propose alternatives
- ✅ Describe implementations using natural language
- ❌ Make actual code changes
- ❌ Modify files or create implementations
- ❌ Run tests or build commands
- ❌ Write code, code snippets, or code examples in plans
If user requests implementation work, suggest switching to an implementation agent.
Create Plan Skill
Tools and scripts for creating and validating implementation plans.
Files
SKILL.md- Main skill instructions for AI agentsvalidate-plan.sh- Validates a single plan filevalidate-all-plans.sh- Validates all plans in a directory
Validation Scripts
validate-plan.sh
Validates the structure and content of a single plan file.
Usage:
./.forge/skills/create-plan/validate-plan.sh plans/2025-11-27-example-v1.mdChecks:
- ✓ Filename follows convention:
YYYY-MM-DD-task-name-vN.md - Year is reasonable (2020 to current year + 1)
- Month is valid (01-12)
- Day is valid (01-31)
- Task name is meaningful (not generic like "test", "task", "temp")
- Task name length is reasonable (5-60 characters)
- Version number is reasonable (not > 50)
- No uppercase letters or underscores (use lowercase and hyphens only)
- ✓ File is in
plans/directory - ✓ All required sections present:
- Main heading (
# Title) ## Objective## Implementation Plan## Verification Criteria## Potential Risks and Mitigations## Alternative Approaches- ✓ Implementation Plan uses checkbox format (
- [ ]) - ✓ No numbered lists or plain bullets in Implementation Plan
- ✓ No code blocks (
`) in the plan - ✓ No code snippets (detects suspicious patterns)
- ✓ No placeholder tasks (TODO, TBD, etc.)
- ✓ Task quality and density:
- Task descriptions are descriptive (≥ 20 characters recommended)
- Average task length is substantial (30-200 chars recommended)
- No generic/vague descriptions ("implement feature", "fix bug", etc.)
- No duplicate or highly similar tasks
- Consistent and sequential numbering if tasks are numbered
- ✓ Verification criteria have content
- ✓ Risks include mitigations
- ✓ Reasonable number of tasks (3-20)
Exit Codes:
0- Validation passed1- Validation failed (errors found)
validate-all-plans.sh
Validates all plan files in a directory.
Usage:
# Validate all plans in default directory (plans/)
./.forge/skills/create-plan/validate-all-plans.sh
# Validate plans in custom directory
./.forge/skills/create-plan/validate-all-plans.sh path/to/plansExit Codes:
0- All plans passed validation1- One or more plans failed validation
Integration
Pre-commit Hook
Add to .git/hooks/pre-commit:
#!/bin/bash
# Validate plans before committing
if git diff --cached --name-only | grep -q "^plans/.*\.md$"; then
echo "Validating modified plans..."
./.forge/skills/create-plan/validate-all-plans.sh plans/
exit $?
fiCI/CD
Add to your CI pipeline:
- name: Validate Plans
run: ./.forge/skills/create-plan/validate-all-plans.sh plans/Example Valid Plan
See SKILL.md for the complete plan template structure.
Common Validation Errors
1. Invalid filename format: Must follow YYYY-MM-DD-task-name-vN.md pattern
- Use lowercase letters only
- Use hyphens (not underscores) to separate words
- Use valid date (month 01-12, day 01-31, year 2020+)
- Avoid generic names like "test", "task", "temp"
2. Missing checkboxes: Use - [ ] not 1. or - 3. Code blocks: Plans should use natural language, not code 4. Missing sections: All required sections must be present 5. Empty sections: Sections should have meaningful content 6. Poor task quality: Tasks should be descriptive and specific
- Avoid short descriptions like "Do this", "Fix that", "Update code"
- Avoid generic descriptions like "implement feature", "add functionality"
- Include rationale and context in task descriptions
- Aim for 30-150 characters per task description
Add User Authentication System
Objective
Implement a secure user authentication system with JWT-based token management, password hashing, and session handling. The system should support user registration, login, logout, and token refresh capabilities while maintaining security best practices.
Implementation Plan
- [ ] 1. Set up authentication dependencies and configuration
- Add JWT library (e.g., jsonwebtoken) and bcrypt for password hashing
- Configure environment variables for JWT secrets and token expiration
- Rationale: Establishes foundation for secure authentication
- Dependencies: None - this is the first step
- [ ] 2. Create user model and database schema
- Define User entity with fields: id, email, password_hash, created_at, updated_at
- Add unique constraint on email field
- Create database migration for users table
- Rationale: Provides data structure for storing user credentials
- Dependencies: Database connection must be configured
- [ ] 3. Implement password hashing service
- Create service to hash passwords using bcrypt with appropriate salt rounds
- Add password verification function
- Include unit tests for hashing and verification
- Rationale: Ensures passwords are never stored in plain text
- Dependencies: User model must exist
- [ ] 4. Build JWT token generation and validation
- Create service to generate JWT tokens with user claims
- Implement token verification and decoding logic
- Add refresh token functionality with longer expiration
- Rationale: Enables stateless authentication and session management
- Dependencies: User model and environment configuration
- [ ] 5. Create authentication endpoints
- POST /auth/register - User registration with email/password
- POST /auth/login - User login returning access and refresh tokens
- POST /auth/logout - Invalidate user session
- POST /auth/refresh - Generate new access token from refresh token
- Rationale: Provides API interface for authentication operations
- Dependencies: All services from previous steps
- [ ] 6. Implement authentication middleware
- Create middleware to validate JWT tokens on protected routes
- Extract user information from valid tokens
- Return 401 for invalid or expired tokens
- Rationale: Protects routes requiring authentication
- Dependencies: JWT validation service
- [ ] 7. Add rate limiting for authentication endpoints
- Implement rate limiting on login and registration endpoints
- Configure appropriate limits (e.g., 5 attempts per 15 minutes)
- Rationale: Prevents brute force attacks
- Dependencies: Authentication endpoints must exist
- [ ] 8. Write integration tests for authentication flow
- Test complete registration → login → access protected route flow
- Test token refresh mechanism
- Test error cases (invalid credentials, expired tokens)
- Rationale: Ensures entire authentication system works correctly
- Dependencies: All implementation steps complete
Verification Criteria
- User can successfully register with valid email and password
- User can login and receive valid JWT tokens
- Protected routes return 401 for unauthenticated requests
- Protected routes allow access with valid JWT token
- Tokens expire after configured duration
- Refresh tokens can generate new access tokens
- Passwords are hashed and never stored in plain text
- Rate limiting prevents excessive authentication attempts
- All unit and integration tests pass
- Security audit shows no critical vulnerabilities
Potential Risks and Mitigations
1. Token Secret Exposure
- Impact: If JWT secret is exposed, attackers can forge valid tokens
- Likelihood: Medium
- Mitigation: Store secrets in environment variables, never commit to repository, rotate secrets periodically
- Contingency: Implement secret rotation mechanism and token revocation list
2. Weak Password Policy
- Impact: Users choose weak passwords that are easily compromised
- Likelihood: High
- Mitigation: Enforce minimum password requirements (length, complexity), implement password strength meter
- Contingency: Add option to require password reset for weak passwords
3. Session Hijacking
- Impact: Attacker steals valid token and impersonates user
- Likelihood: Medium
- Mitigation: Use HTTPS only, implement short token expiration, add IP address validation
- Contingency: Implement token revocation and force logout capability
4. Brute Force Attacks
- Impact: Attacker attempts many password combinations to gain access
- Likelihood: High
- Mitigation: Implement rate limiting, add CAPTCHA after failed attempts, temporary account lockout
- Contingency: Monitor failed login attempts and alert on suspicious patterns
Alternative Approaches
1. Session-Based Authentication
- Description: Use traditional server-side sessions with cookies instead of JWT
- Pros: Easier to invalidate sessions, better for server-rendered applications, no token size limitations
- Cons: Requires session storage (Redis/database), harder to scale horizontally, not suitable for APIs consumed by multiple clients
- Recommendation: Not chosen - JWT better suits stateless API architecture
2. OAuth 2.0 / Third-Party Authentication
- Description: Use OAuth providers (Google, GitHub) for authentication instead of custom system
- Pros: No password management, better security through established providers, easier for users
- Cons: Dependency on external services, requires API keys and setup, limited control over authentication flow
- Recommendation: Consider as future enhancement alongside custom authentication
3. Passwordless Authentication
- Description: Use magic links or OTP sent via email/SMS instead of passwords
- Pros: No password management, simpler user experience, eliminates weak password risk
- Cons: Requires reliable email/SMS delivery, slower authentication flow, potential cost for SMS
- Recommendation: Consider as alternative authentication method in future iteration
Assumptions
- Application already has database connection configured
- HTTPS/TLS is configured at infrastructure level
- Email service is available for potential password reset features
- Frontend application exists to consume authentication endpoints
- Environment variable management system is in place
Dependencies
- Database system (PostgreSQL, MySQL, or similar)
- JWT library compatible with the programming language
- Password hashing library (bcrypt or argon2)
- HTTP server framework with middleware support
- Environment configuration system
Notes
- Consider implementing password reset functionality in a follow-up iteration
- May want to add two-factor authentication (2FA) as security enhancement
- Monitor token expiration times and adjust based on usage patterns
- Plan for token revocation strategy if needed for security incidents
[Task Name]
Objective
[Provide a clear, concise statement of what this plan aims to achieve. Include expected outcomes and success indicators. Be specific about the end goal.]
Implementation Plan
All tasks must use checkbox format for tracking:
- [ ] 1. [First major task]
- Detailed description of what needs to be done
- Rationale: Why this task is necessary
- Dependencies: What must be completed before this
- Key considerations: Important factors to keep in mind
- [ ] 2. [Second major task]
- Detailed description of what needs to be done
- Rationale: Why this task is necessary
- Dependencies: What must be completed before this
- Key considerations: Important factors to keep in mind
- [ ] 3. [Third major task]
- Detailed description of what needs to be done
- Rationale: Why this task is necessary
- Dependencies: What must be completed before this
- Key considerations: Important factors to keep in mind
[Continue with additional tasks as needed]
Verification Criteria
Define specific, measurable criteria to verify successful completion:
- [Criterion 1]: Specific test or check that confirms this aspect works
- [Criterion 2]: Measurable outcome that indicates success
- [Criterion 3]: Observable behavior that validates the implementation
- [Criterion 4]: Performance or quality metric that must be met
Potential Risks and Mitigations
Identify risks and provide concrete mitigation strategies:
1. [Risk Name/Description]
- Impact: [Describe the potential impact if this risk occurs]
- Likelihood: [High/Medium/Low]
- Mitigation: [Specific strategy to prevent or minimize this risk]
- Contingency: [Backup plan if mitigation fails]
2. [Risk Name/Description]
- Impact: [Describe the potential impact if this risk occurs]
- Likelihood: [High/Medium/Low]
- Mitigation: [Specific strategy to prevent or minimize this risk]
- Contingency: [Backup plan if mitigation fails]
[Continue with additional risks as needed]
Alternative Approaches
Document alternative solutions considered and their trade-offs:
1. [Alternative Approach 1]
- Description: [How this approach would work]
- Pros: [Advantages of this approach]
- Cons: [Disadvantages or limitations]
- Recommendation: [Why chosen or not chosen]
2. [Alternative Approach 2]
- Description: [How this approach would work]
- Pros: [Advantages of this approach]
- Cons: [Disadvantages or limitations]
- Recommendation: [Why chosen or not chosen]
[Continue with additional alternatives as needed]
Assumptions
Document any assumptions made during planning:
- [Assumption 1]: [Why this assumption was made]
- [Assumption 2]: [Why this assumption was made]
- [Assumption 3]: [Why this assumption was made]
Dependencies
List external dependencies or prerequisites:
- [Dependency 1]: [What is needed and why]
- [Dependency 2]: [What is needed and why]
- [Dependency 3]: [What is needed and why]
Notes
Additional context or considerations:
- [Note 1]
- [Note 2]
- [Note 3]
#!/usr/bin/env bash
# Validates all plan files in the plans directory
# Usage: ./validate-all-plans.sh [plans-directory]
set -euo pipefail
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Get the directory of this script
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
VALIDATOR="$SCRIPT_DIR/validate-plan.sh"
# Check if validator exists
if [ ! -f "$VALIDATOR" ]; then
echo -e "${RED}Error:${NC} Validator script not found at $VALIDATOR"
exit 1
fi
# Make validator executable
chmod +x "$VALIDATOR"
# Get plans directory (default to plans/ in project root)
PLANS_DIR="${1:-plans}"
if [ ! -d "$PLANS_DIR" ]; then
echo -e "${RED}Error:${NC} Plans directory not found: $PLANS_DIR"
exit 1
fi
# Find all plan files
PLAN_FILES=$(find "$PLANS_DIR" -name "*.md" -type f | sort)
if [ -z "$PLAN_FILES" ]; then
echo -e "${YELLOW}No plan files found in $PLANS_DIR${NC}"
exit 0
fi
# Count files
TOTAL_FILES=$(echo "$PLAN_FILES" | wc -l | tr -d ' ')
PASSED=0
FAILED=0
echo -e "${BLUE}Validating $TOTAL_FILES plan file(s) in $PLANS_DIR${NC}"
echo ""
# Validate each file
while IFS= read -r plan_file; do
echo -e "${BLUE}═══════════════════════════════════════════════${NC}"
if "$VALIDATOR" "$plan_file"; then
((PASSED++))
else
((FAILED++))
fi
echo ""
done <<< "$PLAN_FILES"
# Final summary
echo -e "${BLUE}═══════════════════════════════════════════════${NC}"
echo -e "${BLUE}Summary:${NC}"
echo -e " Total: $TOTAL_FILES"
echo -e " ${GREEN}Passed: $PASSED${NC}"
echo -e " ${RED}Failed: $FAILED${NC}"
echo ""
if [ $FAILED -eq 0 ]; then
echo -e "${GREEN}✓ All plans validated successfully!${NC}"
exit 0
else
echo -e "${RED}✗ Some plans failed validation${NC}"
exit 1
fi
#!/usr/bin/env bash
# Validates the structure and content of a plan file
# Usage: ./validate-plan.sh <path-to-plan.md>
set -euo pipefail
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Counters
ERRORS=0
WARNINGS=0
error() {
echo -e "${RED}✗ ERROR:${NC} $1" >&2
((ERRORS+=1))
}
warning() {
echo -e "${YELLOW}⚠ WARNING:${NC} $1" >&2
((WARNINGS+=1))
}
success() {
echo -e "${GREEN}✓${NC} $1"
}
info() {
echo "ℹ $1"
}
# Check if file path is provided
if [ $# -eq 0 ]; then
echo "Usage: $0 <path-to-plan.md>"
exit 1
fi
PLAN_FILE="$1"
# Check if file exists
if [ ! -f "$PLAN_FILE" ]; then
error "File not found: $PLAN_FILE"
exit 1
fi
info "Validating plan: $PLAN_FILE"
echo ""
# 1. Check file naming convention
FILENAME=$(basename "$PLAN_FILE")
if [[ ! "$FILENAME" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9-]+-v[0-9]+\.md$ ]]; then
error "Filename must follow pattern: YYYY-MM-DD-task-name-vN.md (got: $FILENAME)"
else
success "Filename follows naming convention"
# Extract components for additional validation
if [[ "$FILENAME" =~ ^([0-9]{4})-([0-9]{2})-([0-9]{2})-([a-z0-9-]+)-v([0-9]+)\.md$ ]]; then
YEAR="${BASH_REMATCH[1]}"
MONTH="${BASH_REMATCH[2]}"
DAY="${BASH_REMATCH[3]}"
TASK_NAME="${BASH_REMATCH[4]}"
VERSION="${BASH_REMATCH[5]}"
# 1a. Validate date is reasonable
CURRENT_YEAR=$(date +%Y)
if [ "$YEAR" -lt 2020 ] || [ "$YEAR" -gt $((CURRENT_YEAR + 1)) ]; then
error "Year $YEAR seems unreasonable (should be between 2020 and $((CURRENT_YEAR + 1)))"
fi
if [ "$MONTH" -lt 1 ] || [ "$MONTH" -gt 12 ]; then
error "Month $MONTH is invalid (must be 01-12)"
fi
if [ "$DAY" -lt 1 ] || [ "$DAY" -gt 31 ]; then
error "Day $DAY is invalid (must be 01-31)"
fi
# 1b. Check task name is meaningful (not generic placeholders)
GENERIC_NAMES="^(task|test|plan|temp|tmp|example|sample|demo|foo|bar)$"
if [[ "$TASK_NAME" =~ $GENERIC_NAMES ]]; then
warning "Task name '$TASK_NAME' is too generic. Use a descriptive name."
fi
# 1c. Check task name length (should be descriptive but not too long)
TASK_NAME_LENGTH=${#TASK_NAME}
if [ "$TASK_NAME_LENGTH" -lt 5 ]; then
warning "Task name '$TASK_NAME' is very short. Consider a more descriptive name."
elif [ "$TASK_NAME_LENGTH" -gt 60 ]; then
warning "Task name is very long ($TASK_NAME_LENGTH chars). Consider shortening."
fi
# 1d. Check version number is reasonable
if [ "$VERSION" -gt 50 ]; then
warning "Version number $VERSION seems high. Are you sure this is correct?"
fi
# 1e. Check for uppercase letters or underscores (should use hyphens)
if [[ "$FILENAME" =~ [A-Z_] ]]; then
error "Filename contains uppercase letters or underscores. Use lowercase and hyphens only."
fi
fi
fi
# 2. Check file is in plans directory
if [[ ! "$PLAN_FILE" =~ plans/ ]]; then
warning "Plan should be in 'plans/' directory"
else
success "Plan is in 'plans/' directory"
fi
# 3. Check required sections exist
CONTENT=$(cat "$PLAN_FILE")
required_sections=(
"^# .+"
"^## Objective"
"^## Implementation Plan"
"^## Verification Criteria"
"^## Potential Risks and Mitigations"
"^## Alternative Approaches"
)
section_names=(
"Main heading (# Title)"
"Objective section"
"Implementation Plan section"
"Verification Criteria section"
"Potential Risks and Mitigations section"
"Alternative Approaches section"
)
for i in "${!required_sections[@]}"; do
if echo "$CONTENT" | grep -qE "${required_sections[$i]}"; then
success "${section_names[$i]} present"
else
error "Missing required section: ${section_names[$i]}"
fi
done
# 4. Check for markdown checkboxes in Implementation Plan
if echo "$CONTENT" | sed -n '/^## Implementation Plan$/,/^## /p' | grep -qE '^\- \[ \]'; then
success "Implementation Plan uses checkbox format"
else
error "Implementation Plan must use checkbox format: - [ ] Task description"
fi
# 5. Check for numbered lists in Implementation Plan (should not exist)
if echo "$CONTENT" | sed -n '/^## Implementation Plan$/,/^## /p' | grep -qE '^[0-9]+\.'; then
error "Implementation Plan should NOT use numbered lists (1., 2., 3.). Use checkboxes instead: - [ ]"
fi
# 6. Check for plain bullet points in Implementation Plan (should not exist)
IMPL_SECTION=$(echo "$CONTENT" | sed -n '/^## Implementation Plan$/,/^## /p')
if echo "$IMPL_SECTION" | grep -E '^\- [^\[]' | grep -qv '^\- \[ \]'; then
error "Implementation Plan should NOT use plain bullet points (-). Use checkboxes instead: - [ ]"
fi
# 7. Check for code blocks (should not exist)
CODE_FENCE='```'
if echo "$CONTENT" | grep -q "$CODE_FENCE"; then
error "Plan contains code blocks. Plans should NEVER include code, only natural language descriptions"
else
success "No code blocks found"
fi
# 8. Check for suspicious code patterns (excluding valid references)
# Allow: `filepath:line` references, markdown formatting, tool names
# Disallow: code-like patterns with semicolons, braces, function calls
SUSPICIOUS_CODE=$(echo "$CONTENT" | grep -E '`[^`]*[{};()].*[{};()][^`]*`' | grep -v -E '`[a-zA-Z0-9_/.-]+:[0-9-]+`' || true)
if [ -n "$SUSPICIOUS_CODE" ]; then
warning "Potential code snippets detected (should use natural language instead):"
echo "$SUSPICIOUS_CODE" | head -3
fi
# 9. Check that checkboxes have meaningful content (not placeholders)
PLACEHOLDER_TASKS=$(echo "$CONTENT" | grep -E '^\- \[ \] (\[.*\]|TODO|TBD|\.\.\.|\.\.\.)' || true)
if [ -n "$PLACEHOLDER_TASKS" ]; then
warning "Found placeholder or template-style checkbox tasks:"
echo "$PLACEHOLDER_TASKS"
fi
# 10. Check for empty sections
if echo "$CONTENT" | sed -n '/^## Objective$/,/^## /p' | grep -qE '^$' | grep -qE '^## '; then
warning "Objective section appears to be empty"
fi
# 11. Check that verification criteria are specific (not empty)
VERIFICATION_CONTENT=$(echo "$CONTENT" | sed -n '/^## Verification Criteria$/,/^## /p' | tail -n +2 | grep -E '^\-' || true)
if [ -z "$VERIFICATION_CONTENT" ]; then
error "Verification Criteria section must contain specific, measurable criteria"
else
success "Verification Criteria section has content"
fi
# 12. Check that risks have mitigations
RISKS_SECTION=$(echo "$CONTENT" | sed -n '/^## Potential Risks and Mitigations$/,/^## /p')
if echo "$RISKS_SECTION" | grep -qE '^[0-9]+\.|^\*\*'; then
if echo "$RISKS_SECTION" | grep -qi "mitigation"; then
success "Risks section includes mitigations"
else
warning "Risks section should include mitigation strategies"
fi
fi
# 13. Check minimum number of checkboxes (at least 3 tasks)
CHECKBOX_COUNT=$(echo "$CONTENT" | grep -cE '^\- \[ \]' || true)
if [ -z "$CHECKBOX_COUNT" ]; then
CHECKBOX_COUNT=0
fi
if [ "$CHECKBOX_COUNT" -lt 3 ]; then
error "Implementation Plan has only $CHECKBOX_COUNT tasks. Plans must have at least 3 tasks."
elif [ "$CHECKBOX_COUNT" -lt 5 ]; then
warning "Implementation Plan has only $CHECKBOX_COUNT tasks. Consider adding more detailed steps."
elif [ "$CHECKBOX_COUNT" -gt 20 ]; then
warning "Implementation Plan has $CHECKBOX_COUNT tasks. Consider grouping or creating sub-plans."
else
success "Implementation Plan has $CHECKBOX_COUNT tasks"
fi
# 14. Check task quality and density
if [ "$CHECKBOX_COUNT" -gt 0 ]; then
# Extract all task lines
TASKS=$(echo "$CONTENT" | sed -n '/^## Implementation Plan$/,/^## /p' | grep --color=never -E '^\- \[ \]')
# 14a. Check for very short tasks (< 20 chars after checkbox)
SHORT_TASKS=""
SHORT_COUNT=0
while IFS= read -r task; do
# Remove "- [ ] " prefix and numbering
TASK_TEXT=$(echo "$task" | sed 's/^- \[ \] //' | sed 's/^[0-9]*\. *//')
if [ ${#TASK_TEXT} -lt 20 ] && [ ${#TASK_TEXT} -gt 0 ]; then
SHORT_TASKS="$SHORT_TASKS$TASK_TEXT"$'\n'
SHORT_COUNT=$((SHORT_COUNT + 1))
fi
done <<< "$TASKS"
if [ "$SHORT_COUNT" -gt 0 ]; then
warning "Found $SHORT_COUNT task(s) with very short descriptions (< 20 chars). Tasks should be descriptive."
echo "$SHORT_TASKS" | head -3 | sed 's/^/ - /'
fi
# 14b. Check for generic/vague task descriptions
GENERIC_PATTERNS="(implement feature|add functionality|fix bug|update code|make changes|do work|complete task|finish|setup|configure)"
GENERIC_TASKS=$(echo "$TASKS" | grep -iE "$GENERIC_PATTERNS" || true)
if [ -n "$GENERIC_TASKS" ]; then
warning "Found tasks with generic/vague descriptions. Be more specific about what needs to be done."
echo "$GENERIC_TASKS" | head -3 | sed 's/^/ /'
fi
# 14c. Check average task length (should be descriptive)
TOTAL_LENGTH=0
TASK_COUNT=0
while IFS= read -r task; do
TASK_TEXT=$(echo "$task" | sed 's/^- \[ \] //' | sed 's/^[0-9]*\. *//')
TASK_LEN=${#TASK_TEXT}
TOTAL_LENGTH=$((TOTAL_LENGTH + TASK_LEN))
TASK_COUNT=$((TASK_COUNT + 1))
done <<< "$TASKS"
if [ "$TASK_COUNT" -gt 0 ]; then
AVG_LENGTH=$((TOTAL_LENGTH / TASK_COUNT))
if [ "$AVG_LENGTH" -lt 30 ]; then
warning "Average task description length is only $AVG_LENGTH characters. Tasks should be more detailed and include rationale."
elif [ "$AVG_LENGTH" -gt 200 ]; then
warning "Average task description length is $AVG_LENGTH characters. Consider breaking down complex tasks."
else
success "Task descriptions have good detail level (avg: $AVG_LENGTH chars)"
fi
fi
# 14d. Check for potential duplicate or very similar tasks
# Compare each task with others for similarity
TASK_ARRAY=()
while IFS= read -r task; do
TASK_TEXT=$(echo "$task" | sed 's/^- \[ \] //' | sed 's/^[0-9]*\. *//' | tr '[:upper:]' '[:lower:]')
TASK_ARRAY+=("$TASK_TEXT")
done <<< "$TASKS"
SIMILAR_FOUND=false
for i in "${!TASK_ARRAY[@]}"; do
for j in "${!TASK_ARRAY[@]}"; do
if [ "$i" -lt "$j" ]; then
TASK1="${TASK_ARRAY[$i]}"
TASK2="${TASK_ARRAY[$j]}"
# Check if tasks are very similar (same first 30 chars)
TASK1_PREFIX="${TASK1:0:30}"
TASK2_PREFIX="${TASK2:0:30}"
if [ -n "$TASK1_PREFIX" ] && [ "$TASK1_PREFIX" = "$TASK2_PREFIX" ]; then
if [ "$SIMILAR_FOUND" = false ]; then
warning "Found potentially duplicate or very similar tasks. Review for redundancy."
SIMILAR_FOUND=true
fi
fi
fi
done
done
# 14e. Check task numbering consistency
NUMBERED_TASKS=$(echo "$TASKS" | grep --color=never -E '^\- \[ \] [0-9]+\.')
if [ -n "$NUMBERED_TASKS" ]; then
NUMBERED_COUNT=$(echo "$NUMBERED_TASKS" | wc -l | tr -d ' ')
if [ "$NUMBERED_COUNT" -eq "$CHECKBOX_COUNT" ]; then
# All tasks are numbered - check sequence
NUMBERS=$(echo "$NUMBERED_TASKS" | sed 's/^- \[ \] \([0-9]*\)\..*/\1/')
EXPECTED=1
SEQUENCE_OK=true
while IFS= read -r num; do
if [ "$num" -ne "$EXPECTED" ]; then
SEQUENCE_OK=false
break
fi
EXPECTED=$((EXPECTED + 1))
done <<< "$NUMBERS"
if [ "$SEQUENCE_OK" = true ]; then
success "Task numbering is consistent and sequential"
else
warning "Task numbering is inconsistent. Should be sequential: 1, 2, 3, ..."
fi
elif [ "$NUMBERED_COUNT" -gt 0 ]; then
warning "Only $NUMBERED_COUNT of $CHECKBOX_COUNT tasks are numbered. Be consistent."
fi
fi
fi
# Final summary
echo ""
echo "================================================"
if [ $ERRORS -eq 0 ]; then
echo -e "${GREEN}✓ Validation passed${NC}"
if [ $WARNINGS -gt 0 ]; then
echo -e "${YELLOW} ($WARNINGS warnings)${NC}"
fi
exit 0
else
echo -e "${RED}✗ Validation failed${NC}"
echo -e " ${RED}$ERRORS errors${NC}, ${YELLOW}$WARNINGS warnings${NC}"
exit 1
fi
Related skills
FAQ
Does create-plan write any code?
No. It is planning-only: it researches the codebase and produces a plan, but never writes code, snippets, or runs tests and build commands.
How is a plan validated?
By running the bundled ./.forge/skills/create-plan/validate-plan.sh script against the plan file and fixing errors until it passes.