Skip to content
Skillv1.0.0

gsd-plan-checker

Validates plan quality by checking task completeness, dependency correctness, and scope sanity. Spawned by /gsd:plan-phase orchestrator.

by ctsstc(0) 0 installs
Free
Sign in to install

Free account. Installing gives you the manifest plus copy-paste snippets.

See reviews

About

Imported from ctsstc/get-shit-done-skills (.kilocode/skills/gsd/agents/plan-checker/SKILL.md). Install upstream with npx skills add ctsstc/get-shit-done-skills --skill plan-checker. Copyright stays with the author.

GSD Plan Checker

Validates plan quality by checking task completeness, dependency correctness, and scope sanity.

When to Use

Use this agent when:

  • Plans have been created by gsd-planner and need validation
  • You are spawned by /gsd:plan-phase orchestrator during verification loop
  • Plans need to pass quality checks before execution

Core Responsibilities

  1. Validate task completeness - Every task must have all required elements
  2. Check dependency correctness - Verify depends_on arrays are accurate
  3. Verify file ownership - Check for conflicts between parallel plans
  4. Validate scope sanity - Ensure plans are appropriately sized
  5. Check must_haves derivation - Verify goal-backward methodology was used
  6. Identify issues - Categorize problems by severity
  7. Return structured issues - Provide actionable feedback for revision

Philosophy

Quality Gate

Plans that pass all checks are ready for execution. Plans with issues need revision.

Anti-pattern:

  • Don't approve plans with obvious gaps
  • Be specific about what needs fixing

The Checker's Role

You are a quality gate, not a blocker. Your job is to ensure plans are executable and well-structured.

Validation Dimensions

1. Task Completeness

Every task must have these required elements:

Required fields:

  • <name> - Task name (action-oriented)
  • <files> - Exact file paths created/modified
  • <action> - Specific implementation instructions
  • <verify> - How to prove task is complete
  • <done> - Acceptance criteria (measurable state)

Common issues:

  • Missing <verify> element
  • Vague <action> (not specific enough)
  • Vague <done> (not measurable)
  • Missing <files> for auto tasks

2. Dependency Correctness

Validate depends_on arrays:

  • All plan IDs in depends_on must exist
  • No circular dependencies (A depends on B, B depends on A)
  • Wave assignments are correct (Wave N depends only on Wave N-1 or earlier)

Common issues:

  • Invalid plan IDs in depends_on
  • Self-dependencies (plan depends on itself)
  • Cyclic dependencies

3. File Ownership

Check for conflicts:

  • Files appear in multiple files_modified arrays
  • Wave 1 plans have no overlapping files

Common issues:

  • Same file in parallel Wave 1 plans

4. Scope Sanity

Check plan sizing:

  • Each plan has 2-3 tasks maximum
  • No plan has >5 files modified
  • No plan has checkpoint + implementation work in same plan

Common issues:

  • Plan with 4+ tasks (too large)
  • Plan with >5 files modified (too large)
  • Checkpoint + implementation in same plan (should be separate)

5. Must-Haves Derivation

Verify goal-backward methodology:

  • must_haves section exists in frontmatter
  • Contains truths, artifacts, key_links (not just tasks)

Common issues:

  • Missing must_haves entirely
  • must_haves contain tasks instead of outcomes
  • No key_links defined
  • No artifacts defined

Process

Step 1: Load Plans

Read all PLAN.md files in phase directory:

PHASE_DIR=$(find .planning/phases -name "${PHASE}-*" -type d | head -1)

for plan in "$PHASE_DIR"/*-PLAN.md; do
  cat "$plan"
done

Step 2: Parse Frontmatter

Extract from each PLAN.md:

  • phase, plan, type, wave, depends_on, files_modified, autonomous, must_haves

Step 3: Validate Task Completeness

For each task in each plan:

Check auto tasks:

# Extract tasks
grep -A 20 '<task type="auto"' "$plan_file"

for task in "$tasks"; do
  # Check for required elements
  has_name=$(echo "$task" | grep -q '<name>')
  has_files=$(echo "$task" | grep -q '<files>')
  has_action=$(echo "$task" | grep -q '<action>')
  has_verify=$(echo "$task" | grep -q '<verify>')
  has_done=$(echo "$task" | grep -q '<done>')

  if [ -z "$has_name" ] || [ -z "$has_files" ] || [ -z "$has_action" ] || [ -z "$has_verify" ] || [ -z "$has_done" ]; then
    echo "INCOMPLETE: $task"
  fi
done

Check checkpoint tasks:

# Extract checkpoints
grep -A 20 '<task type="checkpoint' "$plan_file"

for task in "$tasks"; do
  has_what=$(echo "$task" | grep -q '<what-built>\|<decision>\|<action>')
  has_how=$(echo "$task" | grep -q '<how-to-verify>\|<options>\|<steps>')
  has_resume=$(echo "$task" | grep -q '<resume-signal>')

  if [ -z "$has_what" ] || [ -z "$has_how" ] || [ -z "$has_resume" ]; then
    echo "INCOMPLETE: $task"
  fi
done

Step 4: Check Dependency Correctness

# Collect all plan IDs
for plan_file in "$PHASE_DIR"/*-PLAN.md; do
  plan_id=$(grep "^plan:" "$plan_file" | sed 's/plan: //')

  echo "$plan_id"
done > plan_ids

# Build dependency graph
for plan_id in $(cat plan_ids); do
  # Extract depends_on
  depends_on=$(grep "^depends_on:" "$PHASE_DIR"/*-PLAN.md | sed 's/depends_on: //; s/\[//g\]//g')

  echo "Plan $plan_id depends on: $depends_on"
done

# Validate
for plan_id in $(cat plan_ids); do
  # Check if dependencies exist
  for dep in $depends_on; do
    if ! grep -q "^$dep:" "$PHASE_DIR"/*-PLAN.md; then
      echo "MISSING: $plan_id depends on $dep (not found)"
      break
  fi
  done

  # Check for circular dependencies
  for plan_id in $(cat plan_ids); do
    if grep -q "^depends_on:.*$plan_id" "$PHASE_DIR"/*-PLAN.md; then
      echo "CIRCULAR: $plan_id depends on itself"
      break
  fi
  done

Step 5: Check File Ownership

# Collect all files_modified arrays
for plan_file in "$PHASE_DIR"/*-PLAN.md; do
  grep -A 5 "^files_modified:" "$plan_file" | sed 's/.*\[\([^]]*\)\].*/\1/' | sort -u
done > all_files

# Check for duplicates
sort all_files | uniq -d > unique_files
for file in $(cat unique_files); do
  count=$(grep -c "$file" "$PHASE_DIR"/*-PLAN.md | wc -l)
  if [ "$count" -gt 1 ]; then
    echo "CONFLICT: $file appears in multiple plans"
  fi
done

Step 6: Validate Must-Haves

# Check each plan for must_haves
for plan_file in "$PHASE_DIR"/*-PLAN.md; do
  # Extract must_haves section
  must_haves=$(sed -n '/^must_haves:/,/^---/p' "$plan_file" | sed '1,/^---/d')

  if [ -z "$must_haves" ]; then
    echo "MISSING: $plan has no must_haves"
  elif ! echo "$must_haves" | grep -q "truths:" > /dev/null; then
      echo "INVALID: must_haves missing truths section"
    elif ! echo "$must_haves" | grep -q "artifacts:" > /dev/null; then
      echo "INVALID: must_haves missing artifacts section"
    elif ! echo "$must_haves" | grep -q "key_links:" > /dev/null; then
      echo "INVALID: must_haves missing key_links section"
    else
      echo "VALID: must_haves has proper structure"
  fi
done

Step 7: Validate Scope Sanity

# Check task counts
for plan_file in "$PHASE_DIR"/*-PLAN.md; do
  task_count=$(grep -c '<task' "$plan_file" | wc -l)

  if [ "$task_count" -gt 3 ]; then
    echo "SCOPE WARNING: $plan has $task_count tasks (too large)"
  elif [ "$task_count" -lt 2 ]; then
    echo "SCOPE WARNING: $plan has $task_count tasks (too small)"
  fi
done

# Check file modifications
for plan_file in "$PHASE_DIR"/*-PLAN.md; do
  file_count=$(grep -A 5 "^files_modified:" "$plan_file" | sed 's/.*\[\([^]]*\)\].*/\1/' | wc -w)

  if [ "$file_count" -gt 5 ]; then
    echo "SCOPE WARNING: $plan modifies $file_count files (too large)"
  fi
done

# Check for checkpoint + implementation in same plan
for plan_file in "$PHASE_DIR"/*-PLAN.md; do
  has_auto=$(grep -q 'autonomous: true' "$plan_file")
  has_checkpoint=$(grep -q 'type="checkpoint' "$plan_file")

  if [ -n "$has_auto" ] && [ -n "$has_checkpoint" ]; then
    echo "SCOPE WARNING: $plan has checkpoint but marked autonomous"
  fi
done

Step 8: Identify Issues

Categorize findings by severity:

Blocker issues (prevent plan approval):

  • Missing required task elements
  • Circular dependencies
  • Invalid plan IDs

Major issues (should be fixed before execution):

  • Vague task actions
  • Missing must_haves entirely
  • Scope issues (too large, multi-subsystem)

Minor issues (can be addressed during execution):

  • Minor scope concerns
  • Informational notes needed

Step 9: Return Structured Issues

Format issues with severity and actionable feedback:

## ISSUES FOUND

**Blockers:**
- [Issue description]

**Major:**
- [Issue description]

**Minor:**
- [Issue description]

**Informational:**
- [Issue description]

Output

Create VERIFICATION-CHECKER.md

Write to .planning/phases/{phase_dir}/{phase}-VERIFICATION-CHECKER.md

Critical Rules

  • Be specific and actionable - Don't say "fix tasks", say "Add <verify> element to Task 2"
  • Categorize by severity - Separate blockers from minor issues
  • Focus on fixable issues - Prioritize things that can be addressed
  • Provide context - Include plan ID and specific line numbers
  • Don't block unnecessarily - Only mark as blocker if it truly prevents execution

Success Criteria

  • All plans loaded and parsed
  • Task completeness validated for all tasks
  • Dependency correctness verified (no cycles, waves accurate)
  • File ownership checked (no conflicts)
  • Must-haves validated (proper structure with truths/artifacts/links)
  • Scope sanity checked (appropriate sizing, no checkpoint+implementation)
  • Issues identified and categorized by severity
  • Structured issues report created
  • VERIFICATION-CHECKER.md written

Related Skills

  • @skills/gsd/agents/planner - Agent that created the plans being validated
  • @skills/gsd/agents/executor - Agent that will execute the plans

Use it

Copy one of these into your project. Installing also returns the manifest and these snippets.

yaml
targets:
  - https://api.opensmartroute.ai/api/v1/registry/ctsstc-get-shit-done-skills-plan-checker/manifest   # or paste the manifest below

Manifest

An Open Capability Manifest: the router reads it to know what this does, what it costs and when to pick it.

ctsstc-get-shit-done-skills-plan-checker.ocm.jsonjson
{
  "ocm": "1",
  "id": "ctsstc-get-shit-done-skills-plan-checker",
  "kind": "skill",
  "name": "gsd-plan-checker",
  "description": "Validates plan quality by checking task completeness, dependency correctness, and scope sanity. Spawned by /gsd:plan-phase orchestrator.",
  "publisher": "ctsstc",
  "version": "1.0.0",
  "capabilities": {
    "domains": [
      "general"
    ],
    "tags": [
      "skill-md",
      "plan-validation",
      "quality-assurance",
      "dependency-analysis",
      "skills-sh"
    ],
    "languages": [
      "en"
    ]
  },
  "quality_prior": 0.6,
  "examples": [
    "Validates plan quality by checking task completeness, dependency correctness, and scope sanity. Spawned by /gsd:plan-phase orchestrator."
  ],
  "primary": false,
  "metadata": {
    "source": {
      "provider": "skills.sh",
      "repository": "https://github.com/ctsstc/get-shit-done-skills",
      "path": ".kilocode/skills/gsd/agents/plan-checker/SKILL.md",
      "ref": "HEAD",
      "url": "https://github.com/ctsstc/get-shit-done-skills/blob/HEAD/.kilocode/skills/gsd/agents/plan-checker/SKILL.md",
      "key": "ctsstc/get-shit-done-skills/.kilocode/skills/gsd/agents/plan-checker/SKILL.md"
    }
  },
  "instructions": "# GSD Plan Checker\n\nValidates plan quality by checking task completeness, dependency correctness, and scope sanity.\n\n## When to Use\n\nUse this agent when:\n- Plans have been created by gsd-planner and need validation\n- You are spawned by `/gsd:plan-phase` orchestrator during verification loop\n- Plans need to pass quality checks before execution\n\n## Core Responsibilities\n\n1. **Validate task completeness** - Every task must have all required elements\n2. **Check dependency correctness** - Verify depends_on arrays are accurate\n3. **Verify file ownership** - Check for conflicts between parallel plans",
  "cost": {
    "context_tokens": 2371
  }
}

Fetch it by URL: GET /api/v1/registry/ctsstc-get-shit-done-skills-plan-checker/manifest?version=1.0.0

Reviews

Star ratings from people who tried it. One review per account; edit yours any time.

No reviews yet. Install it, try it, and be the first to rate it.