**Status:** Draft | In Review | Approved | In Progress | Complete
Generates structured technical specification documents for features using a comprehensive template.
/plugin marketplace add nijikokun/write-spec-skill/plugin install nijikokun-writing-specs@nijikokun/write-spec-skillskills/writing-specs/templates/Status: Draft | In Review | Approved | In Progress | Complete
Author: [Name]
Created: [Date]
Target: [Quarter/Date]
One sentence describing what we're building and the key value proposition.
What's broken or missing today:
User Feedback:
"Direct quote from user or customer that captures the real need."
"Another quote if available - these justify design decisions."
Who is affected: [User segment, persona, or use case]
Explicitly state what we're NOT doing to prevent scope creep:
Define any domain terms or concepts the reader needs to understand.
Define the public API data structures in JSON schema format (not internal implementation like protobuf):
{
"id": "string (prefix_ format)",
"uri": "string (API resource URL)",
"field": "type (description)"
}
| Method | Path | Description |
|---|---|---|
| GET | /resource/{id} | Get by ID |
| GET | /resource | List all |
Describe how it works, edge cases, error handling.
Include this section when the spec involves public-facing API endpoints.
Request:
[METHOD] /path/{id}
Response:
{
"id": "example_id",
"uri": "https://api.ngrok.com/resource/example_id",
"field": "value"
}
Request:
[METHOD] /path?param=value
Response:
{
"items": [],
"uri": "https://api.ngrok.com/resource",
"next_page_uri": null
}
Error codes are iota-based and assigned during implementation. Describe the conditions and messages here.
| Condition | Status | Message |
|---|---|---|
| Resource not found | 404 | "[Resource] not found" |
| User lacks permission | 403 | "You do not have permission to [action]" |
| Invalid input | 400 | "[Field] is invalid: [reason]" |
Notes:
State the key insight that drives the design:
Principle: [e.g., "Passthrough, not translation" or "Fail fast, recover gracefully"]
Why this principle matters for this feature.
| Component | Change Type | Description |
|---|---|---|
path/to/file.go | Modify | Add X handling |
path/to/new.go | New | Implements Y |
config/thing.yaml | Modify | Add Z field |
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Input │────▶│ Process │────▶│ Output │
└─────────┘ └─────────┘ └─────────┘
| Aspect | Changes? | Notes |
|---|---|---|
| Thing A | ❌ No | Unchanged |
| Thing B | ✅ Yes | New behavior |
| Thing C | ⚠️ Minimal | Only X modified |
Show how users configure this feature:
# Example configuration
feature:
enabled: true
option: "value"
Backward compatibility: [Describe impact on existing configs]
metric.name - DescriptionWhat must be true for this feature to be considered complete:
| Scenario | Expected Behavior |
|---|---|
| Edge case 1 | How the system should respond |
| Edge case 2 | How the system should respond |
Question: [Describe the decision to be made]
Question: [Another decision]
How we know this shipped successfully:
| Section | Purpose |
|---|---|
| Summary | Elevator pitch - what and why in one sentence |
| Problem | Justify why this matters with evidence |
| Goals | Scope in - what we WILL do |
| Non-Goals | Scope out - prevent creep |
| Technical Spec | Reference for engineers |
| Architecture | Principles first, then implementation |
| What Changes | Build trust by showing minimal footprint |
| Acceptance Criteria | Define done, capture edge cases |
| Open Questions | Show you've thought about tradeoffs |