Spec Driven DevelopmentSAFE
Production-grade engineering skills for AI coding agents.
Overview
Production-grade engineering skills for AI coding agents.
9be8f7674e77OBSERVED · 2026-09-29What it tells the agent
The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.
--- name: spec-driven-development description: Creates specs before coding. Use when starting a new project, feature, or significant change and no specification exists yet. Use when drafting a PRD or requirements document with objectives and scope, or when requirements are unclear, ambiguous, or only exist as a vague idea. Use when a single requirement spans several independently testable capabilities and needs decomposing into a capability map of modules before specifying. --- # Spec-Driven Development ## Overview Write a structured specification before writing any code. The spec is the shared source of truth between you and the human engineer — it defines what we're building, why, and how we'll know it's done. Code without a spec is guessing. ## When to Use - Starting a new project or feature - Requirements are ambiguous or incomplete - The change touches multiple files or modules - You're about to make an architectural decision - The task would take more than 30 minutes to implement **When NOT to use:** Single-line fixes, typo corrections, or changes where requirements are unambiguous and self-contained. ## The Gated Workflow Spec-driven development has four phases, preceded by a scope check (Phase 0) that activates only when one request bundles several independently testable capabilities. Do not advance to the next phase until the current one is validated. ``` SPECIFY ──→ PLAN ──→ TASKS ──→ IMPLEMENT │ │ │ │ ▼ ▼ ▼ ▼ Human Human Human Human reviews reviews reviews reviews ``` ### Phase 0: Scope Check Most requests describe one capability. If this one does, skip this phase and go straight to Specify — Phase 0 exists for the exception, not the rule, and it puts no hierarchy on single-capability features. **Detection.** Decompose before specifying when a single requirement bundles several independently testable capabilities: - The requirement names distinct capabilities with their own consumers or data (e.g. identity, billing, notifications, reporting) - Acceptance criteria cluster into groups that could ship and be verified separately - One capability could be cut or replaced without rewriting the others' requirements **Propose a capability map before writing any spec.** Small and reviewable — a module table plus a build order, not a project plan: ```markdown # Capability Map: [Initiative Name] | Module id | Responsibility | Depends on | |---|---|---| | identity | Accounts, sessions, SSO | — | | billing | Plans, invoices, payments | identity | | notifications | Email and webhook fan-out | identity | | reporting | Usage dashboards | billing, notifications | Build order: identity → billing, notifications → reporting ``` - **Stable module ids.** Kebab-case, chosen once, never renamed mid-initiative. Specs, plans, and downstream commands select work by these ids instead of guessing which spec is active. - **Dependency direction, no cycles.** Arrows point one way. If two modules each need the other, they are one module. - **Interfaces live at the boundary.** The map records that `billing` depends on `identity`; the contract between them belongs in the provider module's spec (see `api-and-interface-design` for designing it). **The map is gated like every phase.** The human reviews module boundaries, dependency direction, and build order before any module spec is written. Getting the map wrong is expensive; reviewing ten lines is not. **Then recurse per module.** Run Specify → Plan → Tasks → Implement for each module in dependency order. Each module gets its own spec, scoped to that module's objective, boundaries, and success criteria. Save the approved map at the project root and each module's spec alongside it, named by module id (`SPEC-identity.md`, `SPEC-billing.md`) — the map, not filename guessing, is the index of what exists. ### Phase 1: Specify Start with a high-level vision. Ask the human clarifying questions until requirements are concrete. **Surface assumptions immediately.** Before writing any spec content, list what you're assuming: ``` ASSUMPTIONS I'M MAKING: 1. This is a web application (not native mobile) 2. Authentication uses session-based cookies (not JWT) 3. The database is PostgreSQL (based on existing Prisma schema) 4. We're targeting modern browsers only (no IE11) → Correct me now or I'll proceed with these. ``` Don't silently fill in ambiguous requirements. The spec's entire purpose is to surface misunderstandings *before* code gets written — assumptions are the most dangerous form of misunderstanding. **Write a spec document covering these six core areas:** 1. **Objective** — What are we building and why? Who is the user? What does success look like? 2. **Commands** — Full executable commands with flags, not just tool names. ``` Build: npm run build Test: npm test -- --coverage Lint: npm run lint --fix Dev: npm run dev ``` 3. **Project Structure** — Where source code lives, where tests go, where docs belong. ``` src/ → Application source code src/components → React components src/lib → Shared utilities tests/ → Unit and integration tests e2e/ → End-to-end tests docs/ → Documentation ``` 4. **Code Style** — One real code snippet showing your style beats three paragraphs describing it. Include naming conventions, formatting rules, and examples of good output. 5. **Testing Strategy** — What framework, where tests live, coverage expectations, which test levels for which concerns. 6. **Boundaries** — Three-tier system: - **Always do:** Run tests before commits, follow naming conventions, validate inputs - **Ask first:** Database schema changes, adding dependencies, changing CI config - **Never do:** Commit secrets, edit vendor directories, remove failing tests without approval **Spec template:** ```markdown # Spec: [Project/Feature Name] ## Objective [What we're buildi
Trust audit
SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | WARN |
| L1 | Static analysis of the code | NA |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- none-observed
- Network
- none-observed
- Shell
- none-observed
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (1)
.opencode/skills
Gates applied: no_behavioural_pass.
9be8f7674e77full audit observations/trust-audit/skill/addyosmani__spec-driven-development.json · Report an issue / request a re-scanAudit history
Every audit this skill has had.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-09-29 | 9be8f7674e77 | SAFE | B | 89 | first audit |
Questions
What does the Spec Driven Development skill do?
Production-grade engineering skills for AI coding agents.
Is Spec Driven Development safe to install?
The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean skill reads B.
What can Spec Driven Development access on my machine?
The audit observed no filesystem, network or shell use at all in its source.
What do I need installed to use Spec Driven Development?
Its own instructions reference identity. Dependencies are pinned to exact versions.
How current is this page?
The grade is for one exact copy of the source (9be8f7674e77), read on 2026-09-29. The repository is watched, and a new audit runs when it changes — this is the first audit.