Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Guided spec creation through 9 phases from discovery to testing strategy. Supports spec types: library, feature, change. Produces a complete specification document with requirements, architecture, constraints, and YAML test data. Interactive or autonomous modes. Triggers on: "create spec", "write spec", "spec out", "specification", "design document"
.claude/skills/miosa-osa-create-spec/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | -22% | 0% |
| case-01 | ✗→✓ | ▲ Improved | -23% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -48% | 0% |
| case-11 | ✗→✓ | ▲ Improved | -27% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 14% | 0% |
> Guided specification creation through 9 structured phases.
Create a complete, implementation-ready specification document by walking through 9 phases: discovery, context gathering, requirements, constraints, architecture, interfaces, error handling, testing strategy, and final assembly. Supports three spec types (library, feature, change) with type-specific templates. Produces YAML test data alongside the spec for immediate TDD usage.
bash# Interactive guided mode (asks questions at each phase) /create-spec --type feature # Autonomous mode with initial description /create-spec --type library --description "HTTP client with retry and circuit breaking" # Create a change spec for an existing system /create-spec --type change --scope lib/auth/ --description "Add OAuth2 PKCE flow" # Resume an in-progress spec /create-spec --resume # Generate only the test data from an existing spec /create-spec --tests-only --from specs/auth-spec.md
| Flag | Type | Default | Description | |------|------|---------|-------------| | --type | enum | feature | Spec type: library, feature, change | | --description | string | — | Initial description (skips discovery questions) | | --scope | string | . | Files or directories the spec covers | | --interactive | flag | true | Ask clarifying questions at each phase | | --resume | flag | false | Resume an in-progress spec session | | --output | string | specs/<name>-spec.md | Output path for the spec document | | --tests-only | flag | false | Generate YAML test data from an existing spec | | --from | string | — | Path to existing spec (for --tests-only) | | --format | enum | markdown | Output format: markdown, json |
Understand what is being built. Clarify the problem statement, who it serves, and what success looks like. Output: problem statement + success criteria.
Read existing codebase, related specs, and documentation. Identify prior art, patterns in use, and conventions to follow. Output: context summary + relevant file list.
Extract functional and non-functional requirements. Number each requirement. Mark as MUST, SHOULD, or MAY (RFC 2119). Output: numbered requirements list.
Define what is explicitly out of scope, what cannot change, performance budgets, and compatibility requirements. Output: constraints list.
Design the high-level structure. Module boundaries, data flow, state management, external dependencies. Diagrams where helpful. Output: architecture section with module list.
Define public APIs, function signatures, message formats, and protocols. Include types and example payloads. Output: interface definitions.
Enumerate failure modes, error types, recovery strategies, and degradation behavior. Output: error catalogue with handling strategy for each.
Define test categories (unit, integration, e2e), coverage targets, and generate YAML test data with inputs, expected outputs, and edge cases. Output: test plan + YAML test data file.
Compile all phases into a single spec document. Add table of contents, cross-references, and review checklist. Output: final spec file.
/create-spec --type feature --description "Real-time notification system with WebSocket delivery"
## Spec — Real-time Notification System
### Phase 1: Discovery
- Problem: Users miss time-sensitive updates because they rely on polling
- Success: Notifications delivered within 500ms of event, 99.9% delivery rate
### Phase 3: Requirements
1. [MUST] Deliver notifications via WebSocket to connected clients
2. [MUST] Queue notifications for offline users, deliver on reconnect
3. [SHOULD] Support notification preferences (mute, channels)
4. [MAY] Support push notifications as fallback channel
...
### Phase 8: Test Data (tests/notification_spec_data.yaml)scenarios:
setup: { user: "u1", connected: true } input: { event: "message.new", payload: { from: "u2", text: "hello" } } expected: { delivered: true, latency_ms: "<500", channel: "websocket" }
setup: { user: "u1", connected: false, queue: ] } input: { event: "message.new", payload: { from: "u2", text: "hello" } } then: { action: "reconnect", user: "u1" } expected: { delivered: true, queue_size: 0 }
## Output
## Dependencies
- File system access to read existing code and write spec output
- `/test` — Optional integration for running generated test data
- `/tdd` — Companion skill for implementing against the spec
- Project guidelines for convention detection (Phase 2)| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-02 | fail→fail | 26,131 | 6,230 | -76% | 1 | 1 | 0% | 3,960 | 1,835 | -54% | 0 | 0 | — |
case-08 | fail→pass | 12,327 | 1,981 | -84% | 1 | 1 | 0% | 2,049 | 1,594 | -22% | 0 | 0 | — |
case-01 | fail→pass | 44,028 | 26,112 | -41% | 1 | 1 | 0% | 7,935 | 6,142 | -23% | 0 | 0 | — |
case-03 | fail→fail | 25,013 | 4,439 | -82% | 1 | 1 | 0% | 4,412 | 1,535 | -65% | 0 | 0 | — |
case-04 | pass→pass | 17,178 | 18,399 | +7% | 1 | 1 | 0% | 2,847 | 4,080 | +43% | 0 | 0 | — |
case-05 | pass→pass | 4,168 | 10,531 | +153% | 1 | 1 | 0% | 674 | 2,855 | +324% | 0 | 0 | — |
case-06 | pass→pass | 9,850 | 10,562 | +7% | 1 | 1 | 0% | 1,734 | 2,952 | +70% | 0 | 0 | — |
case-07 | pass→pass | 13,860 | 2,721 | -80% | 1 | 1 | 0% | 2,467 | 1,685 | -32% | 0 | 0 | — |
case-09 | fail→pass | 17,627 | 1,300 | -93% | 1 | 1 | 0% | 2,844 | 1,490 | -48% | 0 | 0 | — |
case-10 | pass→pass | 14,595 | 2,113 | -86% | 1 | 1 | 0% | 2,418 | 1,610 | -33% | 0 | 0 | — |
case-11 | fail→pass | 14,934 | 2,250 | -85% | 1 | 1 | 0% | 2,212 | 1,607 | -27% | 0 | 0 | — |
case-12 | pass→pass | 10,110 | 2,524 | -75% | 1 | 1 | 0% | 1,366 | 1,690 | +24% | 0 | 0 | — |
case-18 | fail→pass | 8,928 | 2,411 | -73% | 1 | 1 | 0% | 1,412 | 1,611 | +14% | 0 | 0 | — |
case-13 | pass→pass | 11,601 | 9,804 | -15% | 1 | 1 | 0% | 1,733 | 2,097 | +21% | 0 | 0 | — |
case-14 | fail→pass | 11,513 | 2,342 | -80% | 1 | 1 | 0% | 1,679 | 1,747 | +4% | 0 | 0 | — |
case-15 | fail→pass | 13,717 | 2,042 | -85% | 1 | 1 | 0% | 2,070 | 1,653 | -20% | 0 | 0 | — |
case-16 | fail→pass | 10,498 | 3,903 | -63% | 1 | 1 | 0% | 1,691 | 1,805 | +7% | 0 | 0 | — |
case-17 | pass→pass | 8,211 | 1,530 | -81% | 1 | 1 | 0% | 1,117 | 1,518 | +36% | 0 | 0 | — |
case-19 | fail→pass | 18,990 | 2,136 | -89% | 1 | 1 | 0% | 1,347 | 1,572 | +17% | 0 | 0 | — |
case-20 | fail→pass | 7,864 | 1,591 | -80% | 1 | 1 | 0% | 1,122 | 1,536 | +37% | 0 | 0 | — |
case-21 | fail→pass | 14,604 | 2,553 | -83% | 1 | 1 | 0% | 2,103 | 1,669 | -21% | 0 | 0 | — |
case-22 | pass→pass | 13,662 | 9,394 | -31% | 1 | 1 | 0% | 2,220 | 2,717 | +22% | 0 | 0 | — |
case-23 | fail→pass | 12,707 | 2,269 | -82% | 1 | 1 | 0% | 1,982 | 1,667 | -16% | 0 | 0 | — |
case-24 | pass→pass | 8,240 | 2,732 | -67% | 1 | 1 | 0% | 1,313 | 1,751 | +33% | 0 | 0 | — |
case-25 | fail→pass | 6,774 | 2,622 | -61% | 1 | 1 | 0% | 1,067 | 1,673 | +57% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 25 cases were attempted, and 24 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +52 percentage points is the difference between those two pass rates over the 24 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.