MCPInstall

tlc-spec-driven

Feature planning and implementation with 4 adaptive phases (Specify, Design, Tasks, Execute). Auto-sizes depth by complexity. Asks every product decision before the spec is approved, writes testable requirements in EARS notation, atomic tasks with a gate and a commit each, and one check per criterion with the test that proves it. Captures that come with the request bind, and each screen is judged against them. Ships deterministic Python scripts so the gates are enforced by code, not memory; the proofs run once at the end, and an independent Verifier (author != verifier) spends its time on mutations and judgement. Use when (1) planning features, (2) implementing with verification and atomic commits, (3) validating an implementation against a spec. Triggers on "specify feature", "discuss feature", "design", "tasks", "implement", "validate", "verify work", "UAT", "record decision", "pause work", "resume work". Do NOT use for pure architecture decomposition analysis or standalone technical

Installs
1.2K
Last 24h
+12
Trending rank
#7814
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/tech-leads-club/agent-skills --skill tlc-spec-driven
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads tlc-spec-driven automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

Tech Lead's Club - Spec-Driven Development

Plan and implement features with precision. Granular tasks. Clear dependencies. Right tools. Zero ceremony.

┌──────────┐   ┌──────────┐   ┌─────────┐   ┌─────────┐
│ SPECIFY  │ → │  DESIGN  │ → │  TASKS  │ → │ EXECUTE │
└──────────┘   └──────────┘   └─────────┘   └─────────┘
   required      optional*      optional*     required

* Agent auto-skips when scope doesn't need it

Critical Rules (read before acting)

Loading this skill's files. Reference files live under references/ in this skill's own directory (where this SKILL.md resides). Resolve them relative to the skill directory, never the workspace root. When a step tells you to read a reference, read it to the end before acting.

Running this skill's scripts. Every scripts/*.py lives under that same skill directory: run python3 <skill-dir>/scripts/<name>.py ..., never python3 scripts/... from the project root. Project data under .specs/ is read and written relative to the project root (pass --root when the cwd is elsewhere). Run a script rather than read it: its messages say what to change.

Execution contract - every task, non-negotiable (holds even if you do not open the reference files):

  1. Ask, then stop for approval. Every gray area that is the user's - scope, product behaviour, a departure from a binding source - is asked before the spec is presented; an assumption never stands in for one. Approving the spec and approving the tasks are the two stops for a human. When nobody is there to answer, end your turn with the questions. Each approval is written as **Approved**: <date> - user: "<their words>" in spec.md and tasks.md; one the user did not give is never written. Every answer goes into its file in the turn it arrives - the chat does not survive a compaction.
  2. Tests derive from the spec's acceptance criteria and assert spec-defined outcomes - they never mirror the implementation.
  3. The gate must pass before a task is done - the test runner decides, not self-assessment. One atomic commit per task, with tasks.md marked complete before it - and inside it when the repo tracks .specs/; where the repo ignores .specs/, the commit holds only the code and its tests, and never forces them in. Never batch tasks; never weaken, skip, or delete tests to make them pass.
  4. Every criterion has a check, and every check a proof. tasks.md ## Checks holds one claim per criterion with the test command that selects its test. After the LAST task, check_proofs.py runs them all once at HEAD, with the build; then a fresh Verifier (author ≠ verifier) runs always, never prompted - **Mutations**: N mutations (3 by default) wherever a rule would stay green, examples nobody named, assertions looser than their criterion. Done means every finding is closed by a commit and validate_verification.py exits 0.
  5. A screen is held to its design. A capture that comes with the request binds unless the user called it inspiration; its criterion cites the capture file. Each state a capture draws is saved as captures/<capture>.running.png from a browser window at the capture's size - an image resized afterwards shows another layout - and a fresh screens sub-agent retakes and judges it (verify-screens.md).
  6. Where rules run. Every rule that changes what a user sees - including filtering, searching, sorting and counting - runs in a layer the repo's tests reach.
  7. Blast radius: approving a spec or tasks authorizes local implementation and local commits only. git push, force-push, deploy, production DB changes, and other remote or destructive operations need an explicit go-ahead for that action.

Deterministic gates run before human review - not from memory. A non-zero exit means STOP and fix:

WhenCommand
Before presenting the specvalidate_spec.py <feature> - EARS criteria, filled assumptions, requirement IDs, and with captures: binding or quoted, cited, shown, departures approved
Before presenting the tasksvalidate_tasks.py <feature> - granularity, dependencies, Tests and Gate per task, ## Checks with a proof each, **Build**:, **Mutations**:
Before the first taskvalidate_tasks.py <feature> --execute - the same checks, and the spec and tasks each approved in the user's words
Before each commitcheck_commit.py --message "<msg>"
After the last task, and after the fixcheck_proofs.py <feature> [--mutations <mutations.json>] - writes proofs.md
Before declaring the feature donevalidate_verification.py <feature> - proofs green at HEAD, clean tree, mutations killed, findings closed, pictures judged in round 1 or 2, walk logged, both approvals written
After editing a script or a templateselftest.py

Skip a script only when no code-execution tool is available; then perform the same checks by reading the artifact.

Before Execute: read implement.md completely and run validate_tasks.py <feature> --execute, which also requires both approvals in the user's words; if a formal tasks.md packs into more than one task-budgeted batch (> ~8 tasks), present the sub-agent offer first (see Sub-Agent Delegation).

Auto-Sizing: The Core Principle

The complexity determines the depth, not a fixed pipeline. Before starting any feature, assess its scope and apply only what's needed:

ScopeWhatSpecifyDesignTasksExecute
Small≤3 files, one sentenceOne-liner spec (inline)SkipSkipImplement + verify inline
MediumClear feature, <10 tasksSpec (brief)Skip - design inlineSkip - tasks implicitImplement + verify
LargeMulti-component featureFull spec + requirement IDsArchitecture + componentsFull breakdown + dependenciesImplement + verify per task
ComplexAmbiguity, new domainFull spec + discuss gray areasResearch + architectureBreakdown + phase planImplement + interactive UAT

Rules:

  • Specify and Execute are always required - you always need to know WHAT and DO it
  • Design is skipped when the change is straightforward (no architectural decisions, no new patterns)
  • Tasks is skipped when there are ≤3 obvious steps (they become implicit in Execute); the checks then go in a ## Checks section at the end of spec.md
  • Discuss is triggered within Specify when the agent detects gray areas that need user input, or when the feature has any implicit-requirement dimension present (persistence/state, external calls, auth, payments, concurrency, state transitions)
  • Interactive UAT is triggered within Execute only for user-facing features with complex behavior

Safety valve: Even when Tasks is skipped, Execute ALWAYS starts by listing atomic steps inline (see implement.md). If that listing reveals >5 steps or complex dependencies, STOP and create a formal tasks.md - the Tasks phase was wrongly skipped.

.specs Structure

.specs/
├── STATE.md            # Project memory: Decisions log (AD-NNN) + Handoff snapshot
├── LESSONS.md          # Self-improving lessons playbook (rendered by scripts/lessons.py - do not hand-edit)
├── lessons.json        # Canonical lessons state (machine-owned)
└── features/
    └── [feature]/
        ├── spec.md          # Requirements with traceable IDs, Differences from the source, Sources
        ├── captures/        # binding design files, and <capture>.running.png pictures
        ├── context.md       # User decisions for gray areas (only when discuss is triggered)
        ├── design.md        # Architecture & components (only for Large/Complex)
        ├── tasks.md         # Atomic tasks, ## Checks with a proof each, ## Handoff
        ├── proofs.md        # written by check_proofs.py: every proof and mutation at HEAD
        ├── mutations.json   # the Verifier's mutations, re-run after the fix
        ├── screens.md       # the screens sub-agent's inventory and verdict, per picture
        └── verification.md  # the Verifier's findings, each closed by a commit

Create artifacts lazily. Write each file only when its phase produces content - never scaffold empty context.md, design.md, or tasks.md up front. Absence is the correct state for a skipped phase.

Workflow

New feature:

  1. Specify → (Design) → (Tasks) → Execute (depth auto-sized)

Resume work - a new session, or after a compaction:

  1. Re-read this file, then the reference for the phase the files show. A summary keeps the task, not these rules.
  2. Read .specs/STATE.md Decisions and the feature's files - spec.md and tasks.md (their **Approved**: lines, marks and ## Handoff), proofs.md, verification.md, screens.md - and reconcile them against git: evidence wins over a note. Where each file puts you: memory.md.
  3. After a compaction in the middle of a run, continue when the files and git agree; stop only on a conflict. In a new session, propose the reconciled next step before writing code.

Context Loading Strategy

Load only what the current step needs:

  • .specs/STATE.md - Decisions section (read at Specify and Design, re-read on resume); Handoff section (read on resume only)
  • confirmed lessons - load at Specify and Design via python3 <skill-dir>/scripts/lessons.py list --status confirmed (lessons.md); confirmed only, never candidates
  • spec.md, context.md, design.md, tasks.md - when the step works from them

Never load several feature specs or several architecture docs at once.

Sub-Agent Delegation

Trigger: count total tasks. If the feature packs into more than one task-budgeted batch (> ~8 tasks) → offer sub-agents; if it fits a single batch (≤ ~8 tasks) → execute inline.

Offer-then-confirm - never auto-spawn. The user must accept before any batch worker is dispatched.

One worker per task-budgeted batch (~7 tasks, whole phases): Phases stay the semantic/dependency unit; a batch is the execution unit - one or more consecutive whole phases packed to ~7 tasks. Walk phases in order, accumulate whole phases into the current batch until it reaches the budget, then start the next - never split a phase across workers. Each worker executes all its tasks in order (implement → gate → atomic commit), then reports a compact summary (tasks done, commit hashes, test counts, deviations). Batches run sequentially. Workers never spawn further sub-agents.

Verifier and screens sub-agent (always-on, never prompted): after the final task, the orchestrator runs check_proofs.py, then dispatches both in parallel over the same HEAD - the Verifier with validate.md, the screens sub-agent with verify-screens.md when a criterion cites a capture. Each dispatch - batch workers included - is written on the **Dispatched:** line of tasks.md ## Handoff before it is sent, so a compacted orchestrator waits instead of sending a second. Every finding is fixed in one pass; round 2 is check_proofs.py --mutations and the screens sub-agent on the rows that differed, with **Round**: 2 in screens.md. No second Verifier and no third round; what still fails goes to the user. Then the gate, then lessons (lessons.md).

Model tier per role (only if the harness supports choosing a model per sub-agent): mechanical batches on a faster tier, core-domain batches and Design on a high-reasoning tier, the Verifier mid-to-high. Rubric in sub-agents.md.

Standalone fallback: without sub-agents, run validate.md and verify-screens.md each in a new session after the final commit and write self-verified in the report; the gate warns.

Commands

Feature-level (auto-sized):

Trigger PatternReference
Specify feature, define requirementsspecify.md
Discuss feature, capture context, how should this workdiscuss.md
Design feature, architecturedesign.md
Break into tasks, create taskstasks.md
Implement task, build, executeimplement.md
Validate, verify, test, UAT, walk me through itvalidate.md
Judge the screens against the designverify-screens.md

Memory:

Trigger PatternReference
Record decision, this is a project-level decisionmemory.md
Pause work, end session, I need to stopmemory.md
Resume work, continue, pick up where we left offmemory.md
Load lessons, what have we learned, apply past lessonslessons.md
Record lesson, distill lessons (runs after the gate)lessons.md

Knowledge

Facts you look up, decisions you ask. Look in the codebase and its conventions first, then the project docs and .specs/STATE.md, then library documentation, then the web. Never invent an API, a pattern or a behaviour: "I could not find documentation for this" beats a plausible fabrication, and anything you could not confirm is said to be uncertain.

Requires

NeedsForWithout it
Python 3.8+ (standard library only)every scriptthe gates do not run; the phases still apply
gitmutate.py and check_proofs.py (HEAD, clean tree)no mutations and no HEAD check: say so in the report
sub-agentsbatch workers, the Verifier and the screens sub-agentrun inline; verify in a new session and write self-verified
a model that reads imagesbinding captures and the screens sub-agentask the user to describe each state; hand the pictures to the user
a browser the agent can drivethe walk and the pictureshand the steps to the user

Test runners: check_proofs.py groups bun, vitest, jest, pytest and go test into one run each; any other command runs alone and is judged by its exit code.

Output Behavior

Do the work; do not narrate the machinery. Produce the right artifact for the phase instead of announcing the phase. The user judges the output.

Write generated artifacts in a plain, decided voice. Specs, decisions, reports, commit messages and chat summaries follow the writing rules in coding-principles.md: lead with the verdict, state decisions definitively, cut filler and hedging. Section headings stay in English; prose follows the project; identifiers are never translated.

FAQ

What does the tlc-spec-driven skill do?

Feature planning and implementation with 4 adaptive phases (Specify, Design, Tasks, Execute). Auto-sizes depth by complexity. Asks every product decision before the spec is approved, writes testable requirements in EARS notation, atomic tasks with a gate and a commit each, and one check per criterion with the test that proves it. Captures that come with the request bind, and each screen is judged against them. Ships deterministic Python scripts so the gates are enforced by code, not memory; the proofs run once at the end, and an independent Verifier (author != verifier) spends its time on mutations and judgement. Use when (1) planning features, (2) implementing with verification and atomic commits, (3) validating an implementation against a spec. Triggers on "specify feature", "discuss feature", "design", "tasks", "implement", "validate", "verify work", "UAT", "record decision", "pause work", "resume work". Do NOT use for pure architecture decomposition analysis or standalone technical

How do I install tlc-spec-driven?

Run npx skills add https://github.com/tech-leads-club/agent-skills --skill tlc-spec-driven in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/tlc-spec-driven/ (personal) or .claude/skills/tlc-spec-driven/ (project).

Which AI agents can use tlc-spec-driven?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is tlc-spec-driven safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains tlc-spec-driven?

It is published by tech-leads-club in tech-leads-club/agent-skills. It has 1,209 recorded installs.

More from tech-leads-club/agent-skills

View all →

subagent-creator

tech-leads-club/agent-skills

Guide for creating AI subagents with isolated context for complex multi-step workflows. Use when users want to create a subagent, specialized agent, verifier, debugger, or orchestrator that requires isolated context and deep specialization. Works with any agent that supports subagent delegation. Triggers on "create subagent", "new agent", "specialized assistant", "create verifier". Do NOT use for Cursor-specific subagents (use cursor-subagent-creator instead).

AI & Agents911 installs

technical-design-doc-creator

tech-leads-club/agent-skills

Creates comprehensive Technical Design Documents (TDD) with mandatory and optional sections through interactive discovery. Use when user asks to "write a design doc", "create a TDD", "technical spec", "architecture document", "RFC", "design proposal", or needs to document a technical decision before implementation. Do NOT use for README files, API docs, or general documentation (use docs-writer instead).

Docs & Writing609 installs

security-best-practices

tech-leads-club/agent-skills

Open the skill to read its SKILL.md instructions.

domain-analysis

tech-leads-club/agent-skills

Open the skill to read its SKILL.md instructions.

AI & Agents359 installs

nestjs-modular-monolith

tech-leads-club/agent-skills

Open the skill to read its SKILL.md instructions.

AI & Agents331 installs

mermaid-studio

tech-leads-club/agent-skills

Open the skill to read its SKILL.md instructions.

Docs & Writing325 installs

Popular code quality & workflow skills

View category →

grill-me

mattpocock/skills

A relentless interview to sharpen a plan or design.

Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.

handoff

mattpocock/skills

Compact the current conversation into a handoff document for another agent to pick up.

domain-modeling

mattpocock/skills

Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a GLOSSARY.md, or recording or editing an ADR.

codebase-design

mattpocock/skills

Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.

diagnosing-bugs

mattpocock/skills

Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.