spec-driven-development
Write a spec with objectives and scope before writing any code.
ADaddyosmani/agent-skills105k3,643 new stars in the last 7 days
Update an OpenSpec change by revising its existing planning artifacts and keeping them coherent with one another. Use when the user wants to revise a change's plan, fold new decisions into it, or reconcile its artifacts after an edit. Never edits code.
Revise a change's existing planning artifacts and keep them coherent. Never edit code.
Store selection: If the user names a store (a store is a standalone OpenSpec repo registered on this machine) or the work lives in one, run openspec store list --json to discover registered store ids, then pass --store <id> on the commands that read or write specs and changes (new change, status, instructions, list, show, validate, archive, doctor, context, view). Once selected, treat --store <id> as sticky for the rest of the workflow. Every unscoped example of those commands below is shorthand: before running it, append the flag. For example, run openspec status --change "<name>" --json --store "<id>", not the unscoped form shown below. Other commands do not take the flag. Hints printed by commands already carry the flag; keep it on follow-ups. Without a store, commands act on the nearest local openspec/ root.
Input: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.
/opsx-continue is an expanded-profile workflow and may not be installed. Before suggesting it anywhere below, verify that it is available. If it is unavailable, openspec status --change "<name>" --json shows the next artifact and openspec instructions "<artifact-id>" --change "<name>" --json explains how to create it.
Steps
Select the change
If a name is provided, use it. Otherwise:
openspec list --json to get available changes sorted by most recently modified, and ask the user to select oneWhen prompting, present the top 3-4 most recently modified changes as options, showing:
schema field if present, otherwise "spec-driven")lastModified field)Mark the most recently modified change as "(Recommended)" since it's likely what the user wants to update.
Always announce: "Using change: " and how to override (e.g., /opsx-update <other>).
Get the change's artifacts
openspec status --change "<name>" --json
Parse the JSON to understand current state. The response includes:
schemaName: The workflow schema being used (e.g., "spec-driven")artifacts: Array of artifacts with their status ("done", "skipped", "ready", "blocked")isPlanningComplete: Boolean indicating if all planning artifacts are complete. Older CLI versions expose the same value as isComplete.planningHome, changeRoot, artifactPaths, and actionContext: path and scope context. Use these instead of assuming repo-local paths.The artifact ids and paths come from the active schema - do NOT assume them, and do NOT branch on hardcoded artifact names. Custom schemas must work unchanged.
The files to edit are artifactPaths.<id>.existingOutputPaths - the concrete files that exist on disk, already glob-expanded for glob artifacts (e.g. specs/**/*.md). Do NOT write to resolvedOutputPath: for a glob artifact it is still the glob pattern, not a real file.
Understand the request
Read and reconcile
existingOutputPaths). Do NOT create artifacts that don't exist yet, and do NOT invent new files under a glob artifact - note them and point the user to /opsx-continue to create them.Confirm and apply, one artifact at a time
openspec instructions "<artifact-id>" --change "<name>" --json
Point to the next step (guidance only - NEVER act on it)
/opsx-continue to create them./opsx-apply to carry the delta into code./opsx-archive.Output
After each invocation, show:
/opsx-continue (not-yet-created artifacts or files)Guardrails
/opsx-apply.openspec status; never branch on hardcoded artifact names.existingOutputPaths; never write to a glob resolvedOutputPath./opsx-continue's job./opsx-new workflow is available. If it is, recommend starting fresh with /opsx-new (the "Update vs. Start Fresh" heuristic). If it is unavailable, ask for a distinct unused change name and recommend openspec new change "<new-change-name>" instead.Write a spec with objectives and scope before writing any code.
ADaddyosmani/agent-skills105k3,643 new stars in the last 7 days
Break requirements into small, ordered tasks, each with explicit acceptance criteria.
ADaddyosmani/agent-skills105k3,643 new stars in the last 7 days
Ask one question at a time to uncover what you actually want before any plan or code.
ADaddyosmani/agent-skills105k3,643 new stars in the last 7 days
NEnexu-io/open-design101k1,117 new stars in the last 7 days
THthedotmack/claude-mem100k3,258 new stars in the last 7 days
THthedotmack/claude-mem100k3,258 new stars in the last 7 days