Skip to content
Back to skills

Cf Plan Gate

ASecurity

When the user asks to enforce spec-driven development, add planning gates, require specs before coding, or prevent scope creep — activate this SDD enforcement skill

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 11, 2026
documentationgobashtestinggitapi

Works with

  • claude code
  • api

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned November 11, 2026

npx -y skills add pauldx/claudifying --skill cf-plan-gate --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Cf Plan Gate?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Cf Plan Gate
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/pauldx-cf-plan-gate/badge)](https://www.skillsdirectory.com/skills/pauldx-cf-plan-gate)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: cf-plan-gate
description: When the user asks to enforce spec-driven development, add planning gates, require specs before coding, or prevent scope creep — activate this SDD enforcement skill
---

# Plan Gate — Spec-Driven Development Enforcement

## Concept

Plan Gate enforces **Spec-Driven Development (SDD)** through two complementary hooks that keep
Claude aligned with your written specifications. Instead of letting implementation drift from the
plan, these hooks provide continuous feedback:

1. **plan-gate.sh** (PreToolUse) -- reminds you when no recent `.spec.md` file exists before
   editing source code. Non-blocking, just a nudge.
2. **scope-guard.sh** (Stop) -- compares files actually modified against files declared in the
   active spec. Warns about out-of-scope changes. Non-blocking.

Together they create a lightweight planning discipline: write a spec, declare what files you will
touch, then implement. Any deviation gets flagged.

## The `.spec.md` File Format

Create a `.spec.md` file before starting work. The critical section is **Files to Create/Modify**:

```markdown
# Feature: User Authentication
## Goal
Add JWT-based authentication to the API gateway.
## Files to Create/Modify
- src/auth/jwt.service.ts
- src/auth/auth.guard.ts
- src/config/jwt.config.ts
## Acceptance Criteria
- Tokens expire after 1 hour
- Invalid tokens return 401
```

Filenames are matched as substrings against git-modified paths. Use relative paths.

## How plan-gate.sh Works

1. Claude attempts to edit a source file via Edit or Write
2. The PreToolUse hook runs `plan-gate.sh`, which searches for `.spec.md` modified in last 14 days
3. **Spec found** -- edit proceeds silently (exit 0)
4. **No spec found** -- prints a reminder, still allows the edit (exit 0, non-blocking)

## How scope-guard.sh Works

1. Claude finishes a task and the Stop event fires
2. Script collects modified files via `git diff --name-only` (staged + unstaged)
3. Finds the most recently modified `.spec.md` (within 60 minutes)
4. Extracts declared files from "Files to Create/Modify" section, compares against actual changes
5. **All in scope** -- silent exit. **Out-of-scope** -- prints warning listing unexpected files

Excluded from scope checking: test files, config, infrastructure, docs, lockfiles.

## Installation

Add both hooks to your `.claude/settings.json`:

```json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "bash /path/to/skills/skills/plan-gate/scripts/plan-gate.sh",
            "statusMessage": "Plan Gate: checking for active spec..."
          }
        ]
      }
    ],
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "bash /path/to/skills/skills/plan-gate/scripts/scope-guard.sh",
            "statusMessage": "Scope Guard: checking for out-of-scope changes..."
          }
        ]
      }
    ]
  }
}
```

Replace `/path/to/` with the actual absolute path to this repo on your machine.

## Customizing

- **Spec freshness**: `plan-gate.sh` uses `-mtime -14` (14 days). Use `-mtime -7` for weekly sprints.
- **Scope-guard recency**: Uses 60-minute window for active spec. Increase if you write specs early.
- **Exclusions**: Both scripts skip test/config/infra files. Add project-specific patterns as needed.

## Gotchas

- **Spec location**: Both scripts search from `git rev-parse --show-toplevel`. Keep specs in the repo.
- **Multiple specs**: `scope-guard.sh` picks the most recently modified `.spec.md`. Archive old specs
  when starting new work to avoid ambiguity.
- **Partial path matching**: Declared file `auth.service.ts` matches `src/auth/auth.service.ts` but
  also `old/auth.service.ts`. Use specific paths in your spec.
- **Non-blocking by design**: Neither hook blocks Claude. They are reminders. For hard enforcement,
  change exit codes to `2` in `plan-gate.sh`.
- **Git dependency**: `scope-guard.sh` relies on `git diff`. Fresh repos with no commits produce no
  output, so the guard stays silent.
- **CLAUDE_TOOL_INPUT_FILE**: Set by Claude Code automatically. For manual testing, export it yourself.

## Pairing With Other Skills

- Use `/cf-tdd-gate` alongside Plan Gate for spec + test-first enforcement
- Use `/cf-workflow-auto` to auto-generate `.spec.md` templates from issue descriptions
- Use `/cf-scqa` to structure the spec's goal and context sections

Files in this skill

  • SKILL.md4.4 KB
  • scripts/plan-gate.sh2.5 KB
  • scripts/scope-guard.sh4.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in documentation →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.