skills/spec-builder/SKILL.md
Transform vague product or feature ideas into concrete, detailed specification documents through an interactive interview process. Use when the user wants to flesh out an idea, create a spec, write requirements, plan a product/feature/prototype, or go from "I have this idea..." to a concrete document. Works for software products, physical products, services, or any concept that needs specification.
npx skillsauth add ilamanov/skills spec-builderInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Transform vague ideas into concrete, actionable spec documents through structured interviews.
First, prompt for the idea:
What's the idea you'd like to turn into a spec?
Describe it however it exists in your head right now - it can be vague.
Then ask background questions to calibrate the interview depth:
AskUserQuestion:
1. "What's your background?"
- Technical (developer/engineer)
- Semi-technical (PM, designer, technical founder)
- Non-technical (business, creative, general user)
2. "What's the goal for this spec?"
- MVP/prototype to test the idea
- Full product spec for development
- Implementation plan for an AI coding agent
- Pitch document for stakeholders
- Personal reference to clarify my thinking
Conduct the interview using AskUserQuestion with batched questions (2-4 related questions per batch).
Rules:
Question calibration by user background:
| Topic | Technical User | Non-Technical User | | ------------ | ---------------------------------- | --------------------------------------------------- | | Architecture | "REST vs GraphQL vs tRPC?" | Skip - decide yourself | | Data storage | "SQL vs NoSQL? Which DB?" | "Does it need to remember data between sessions?" | | UI framework | "React, Vue, or Svelte?" | Skip - decide yourself | | Hosting | "Serverless, containers, or VMs?" | Skip - decide yourself | | Auth | "OAuth, magic links, or password?" | "How should users log in?" (plain language options) | | Scale | "Expected concurrent users?" | "How many people might use this at once?" |
Prioritize load-bearing decisions:
Not all decisions carry equal weight. Some are cheap to revisit later; others are foundational — they shape the core architecture, UX, or physical design and are expensive or painful to redo. The interview must identify which decisions are load-bearing for this specific product, surface them, and get explicit user approval before moving on. This applies to all product types.
The test: "If we change this after launch/production, does it require significant rework, data migration, retooling, or redesign?" If yes, it's load-bearing and must be discussed upfront. If not, it can be iterated on later and doesn't need deep interview time.
What counts as load-bearing varies by product. A few examples to calibrate your judgment:
These are examples, not a checklist. For each product, think from first principles about what's "poured in concrete" vs. "rearranging furniture," and focus the interview accordingly.
For technical users, ask about load-bearing decisions directly. For non-technical users, simplify the concept but still get their approval — e.g., instead of "Should the frontend poll via request IDs or use server-sent events?", ask "When a generation takes 30 seconds, should the user see a live progress update or just get notified when it's done?"
Spend interview time proportionally to how hard a decision is to reverse. Don't deep-dive on aspects that are trivially changeable for this product unless the user raises them.
Interview domains to cover (adapt based on product type):
For software products:
For physical products:
For all products:
For all products:
Example batched question:
AskUserQuestion (batch):
1. "Who are the main users of this product?"
- Single user type (just me / general public)
- Two distinct roles (e.g., admin + regular user)
- Multiple user types (need to define each)
2. "Do users need accounts?"
- No accounts needed (Recommended for MVP)
- Simple accounts (email/password)
- Social login (Google, GitHub, etc.)
- Enterprise SSO
After covering core questions (~10-15 batches), present a draft outline:
Here's the spec outline based on our conversation so far:
## [Product Name] - Spec Outline
**Overview:** [1-2 sentences]
**Core Features:**
1. [Feature A]
2. [Feature B]
...
**User Types:** [list]
**Key Flows:** [list main workflows]
**Technical Approach:** [high-level decisions]
**Open Questions:** [things still unclear]
---
Does this capture your vision? What's missing or wrong?
Then use AskUserQuestion to get feedback:
1. "How does this outline look?"
- Looks good, continue with details
- Missing something important (I'll explain)
- Some parts are wrong (I'll clarify)
- Let's pivot direction
Based on feedback, ask detailed follow-up questions on:
Continue until confident all ambiguity is resolved.
Write the final spec to spec-<product-name>.md in the current directory.
Spec format principles:
Spec structure (adapt sections based on product type):
# [Product Name] Spec
## Overview
[2-3 sentences: what it is, who it's for, core value prop]
## Goals & Non-Goals
### Goals
- [Concrete goal 1]
- [Concrete goal 2]
### Non-Goals (explicitly out of scope)
- [What this product will NOT do]
## User Types
[Table or list of user types and their permissions/capabilities]
## Core Features
### Feature 1: [Name]
**Purpose:** [Why this feature exists]
**Behavior:**
- [Specific behavior 1]
- [Specific behavior 2]
**UI:** [Description or wireframe reference]
[Repeat for each feature]
## User Flows
### Flow 1: [Name]
1. User does X
2. System responds with Y
3. User sees Z
...
[Repeat for key flows]
## Data Model
[Tables, entities, relationships - for software]
[Components, materials - for physical products]
## Technical Decisions
[Architecture choices, technologies, integrations]
[Explicitly document every load-bearing decision (storage, async patterns, concurrency, etc.) and note that it was discussed and approved during the interview]
[For non-technical users, describe these in plain language; for physical products, skip]
## Edge Cases & Error Handling
- When X happens, the system should Y
- If Z fails, show error message: "..."
## Open Questions
[Anything that still needs resolution before building]
## Future Considerations
[Ideas mentioned but explicitly deferred]
Before finalizing the spec, ask yourself:
tools
Generally-applicable conventions for how code is written and arranged — tooling/package manager, import style, file & component naming, comments, and where files live (colocation vs. global folders). Use whenever creating, naming, moving, or importing a file, running project commands, or deciding where a new module belongs. Consult BEFORE writing the code so the conventions are baked in, not retrofitted. If a convention below matches the work, apply it — don't ask, just follow it (call out the choice in one line so the user can override).
development
Generally-applicable frontend/UI best practices. Use whenever building, modifying, or reviewing UI — adding a form/button/dialog/modal, wiring keyboard shortcuts, creating any interactive surface that submits a form, or any time TSX/JSX is being written or edited. Consult BEFORE writing the code so the patterns are baked in, not retrofitted. If a scenario described in the skill body matches the work, apply the pattern — don't ask, just follow it (call out the choice in one line so the user can override).
tools
Generally-applicable backend/data best practices. Use whenever writing or modifying backend/data code — API routes, server actions, DB writes, background jobs, agent tools, import flows, webhooks, paste handlers, or anywhere data enters the system. Consult BEFORE writing the code so the patterns are baked in, not retrofitted. If a scenario described in the skill body matches the work, apply the pattern — don't ask, just follow it (call out the choice in one line so the user can override).
development
Runs on a schedule to mine recent Codex and Claude Code conversations across configured projects, find moments where things went off plan (the user had to steer, correct, abort, or re-explain), and propose targeted improvements to the specific skills that were in use at the time. Opens one pull request per run against the skills repo, with each proposed edit annotated with the concrete steering moment that motivated it. Also analyzes its own runs (the `skills` repo is one of the configured projects) so it iteratively improves itself. Use this skill when the user asks to "analyze recent conversations", "find what went wrong", "improve skills based on past runs", or sets up a scheduled run of skill-improver. Make sure to use this skill whenever the user mentions recursive skill improvement, post-mortem analysis of agent conversations, or automating skill quality based on real usage.