ss-write-spec
Generates or updates OpenSpec delta specs under openspec/changes/<change-id>/ from a proposal, PRD, or plain-language requirement, bootstrapping the openspec/ skeleton first if the project doesn't hav
Files1
View on GitHubSKILL.mdskills/ss-write-spec/SKILL.md
GitHubWrite OpenSpec Delta
Generate OpenSpec-compatible delta specs under openspec/changes/<change-id>/. Read delta timing. Feature/semantic
change workflows prepare and validate this delta with the proposal BEFORE the gate,
using a protected external staged validation mirror when prebranch mutation is
not allowed. Keep one stable change-id and materialize identical approved bytes
after the gate. Planning references this delta and never regenerates it.
When To Use
- You need to align capability specs with reviewers before writing a full execution plan.
- You need to adjust delta specs without regenerating the plan.
- Pre-review preparation reported missing or invalid delta specs; return to the affected gate if semantics or current approved bytes changed.
Inputs
| Input | Handling |
|---|---|
| A URL to a hosted doc (wiki, Confluence, Google Docs, etc.) | Fetch it with your document-reading tool, or an available doc-integration skill, and convert it to markdown |
| A local markdown file | Read the file directly |
| Plain text | Treat it as the requirement source |
If none of these is available, ask the user for the proposal, PRD, or requirement text before continuing.
Language of the deltas: write requirement and scenario prose in the same language as
the input document (or the project's existing docs, if that's a clearer signal); default
to English when neither gives a signal. SHALL/MUST keywords, code identifiers, and
file paths always stay in English.
Step 0: Ensure the OpenSpec Skeleton Exists
Check whether openspec/specs/ and openspec/changes/ already exist. If this repository
has no OpenSpec structure yet and bootstrap mutation is authorized, create it by following
../ss-references/openspec-skeleton.md, then continue with Step 1 below.
Process
Step 1: Read Context
Read:
openspec/config.yaml, if present- all existing
openspec/specs/*/spec.md - active deltas under
openspec/changes/*/specs/*/spec.md, excludingarchive/ - relevant OpenAPI definitions, if API paths are mentioned
- project guidance files (e.g.,
AGENTS.md/CLAUDE.md), if present
Step 2: Derive Change ID
Preserve the already approved stable change-id. Use an explicit --change-id
only when establishing a new change, consuming its value before parsing flags. Otherwise derive a kebab-case id from, in order:
- the current branch name, stripped of its type prefix, or
- the proposal title, or
- the first meaningful requirement sentence.
The id must contain only lowercase letters, digits, and hyphens.
Step 3: Decide Capability Ownership
For each requirement:
- Prefer an existing capability under
openspec/specs/. - Create a new capability only when no existing capability owns the behavior.
- Capability names are kebab-case business noun phrases.
- If ownership is ambiguous, stop and ask the user to confirm. Do not guess.
Step 4: Generate Delta Files
Write one file per capability:
openspec/changes/<change-id>/
├── proposal.md
└── specs/
└── <capability>/
└── spec.md
Allowed section headings are exactly:
## ADDED Requirements## MODIFIED Requirements## REMOVED Requirements## RENAMED Requirements
Requirement format:
### Requirement: <name>
The system SHALL ...
#### Scenario: <name>
- **WHEN** ...
- **THEN** ...
- **AND** ...
Rules:
- Every Requirement MUST have at least one Scenario.
- Scenario headings MUST be
#### Scenario:. MODIFIEDMUST copy the original Requirement in full, then edit it — don't write a partial diff.REMOVEDMUST include a Reason and a Migration note.RENAMEDusesFROM: <old> → TO: <new>.- Do not write implementation details. Specs describe observable behavior only.
Step 5: Self-Review
Verify:
- every source requirement is represented
- existing capabilities were reused where appropriate
- no placeholder text remains
- every
MODIFIEDentry is complete - every
REMOVEDentry has a Migration note - OpenAPI paths mentioned in specs match available OpenAPI definitions, when present
Output
Report:
- the
change-id - files written
- capabilities touched
- ADDED / MODIFIED / REMOVED / RENAMED counts
- any user decisions still pending
Suggest the next step: run the ss-plan skill with the same input to generate the
execution plan.
Workflow output honors the supplied external checkpoint/path and preserves flags, gates, scope and workspace. No-delta restoration requires documented unchanged promise/spec and evidence; new semantics need a scope decision. Validate using the project's available strict OpenSpec command, retaining actual output or explicit unavailability. A structural checklist alone is not native validation proof.