| name | openspec-propose |
| description | Propose a new change with all artifacts generated in one step. Use when the user wants to quickly describe what they want to build and get a complete proposal with design, specs, and tasks ready for implementation. |
| license | MIT |
| compatibility | Requires openspec CLI. |
| metadata | {"author":"openspec","version":"1.1","generatedBy":"opsx"} |
Propose a new change - create the change and generate all artifacts in one step.
Branch guard (mandatory). This skill MUST run on the integration branch (develop, configured as git.integration_branch in workflow.yaml). It MUST NOT run on a feature branch or inside a git worktree. OpenSpec's conflict detection needs the full view of every other in-flight change and the authoritative openspec/specs/; running from a worktree branch would blind it to that context and silently allow conflicting specs.
I'll create a change with artifacts:
- proposal.md (what & why)
- design.md (how)
- tasks.md (implementation steps)
- delta specs (ADDED / MODIFIED / REMOVED requirements)
When ready to implement, run /work — it builds the change in a worktree (apply + verify), fanning out across SubAgents when there are several changes.
Input: The user's request should include a change name (kebab-case) OR a description of what they want to build.
Steps
-
Branch guard
git branch --show-current
git worktree list
- Read
git.integration_branch from workflow.yaml.
- If the current branch is not the integration branch, refuse and tell the user to
git checkout <integration_branch> first.
- If
git worktree list shows the working dir is inside a worktree, refuse and tell the user to run this from the main checkout.
-
If no clear input provided, ask what they want to build
Use the AskUserQuestion tool (open-ended, no preset options) to ask:
"What change do you want to work on? Describe what you want to build or fix."
From their description, derive a kebab-case name (e.g., "add user authentication" → add-user-auth).
IMPORTANT: Do NOT proceed without understanding what the user wants to build.
-
Create the change directory
openspec new change "<name>"
This creates a scaffolded change in the planning home resolved by the CLI with .openspec.yaml.
-
Get the artifact build order
openspec status --change "<name>" --json
Parse the JSON to get:
applyRequires: array of artifact IDs needed before implementation (e.g., ["tasks"])
artifacts: list of all artifacts with their status and dependencies
planningHome, changeRoot, artifactPaths, and actionContext: path and scope context. Use these instead of assuming repo-local paths.
-
Create artifacts in sequence until apply-ready
Use the TodoWrite tool to track progress through the artifacts.
Loop through artifacts in dependency order (artifacts with no pending dependencies first):
a. For each artifact that is ready (dependencies satisfied):
b. Continue until all applyRequires artifacts are complete
- After creating each artifact, re-run
openspec status --change "<name>" --json
- Check if every artifact ID in
applyRequires has status: "done" in the artifacts array
- Stop when all
applyRequires artifacts are done
c. If an artifact requires user input (unclear context):
- Use AskUserQuestion tool to clarify
- Then continue with creation
-
Stage changes and suggest /git-commit (no auto-commit)
Never run git commit automatically. All commits in this project are user-driven. After writing the artifacts, stage them so the user can see them in git status, then suggest /git-commit and stop.
git add <change dir>
The commit groups all artifacts (proposal, design, tasks, delta specs) into one recovery point. The user runs /git-commit to review the message and finalize it.
-
Show final status
openspec status --change "<name>"
git status --short
If git status --short still shows unstaged files, mention them; do not commit on the user's behalf — just suggest /git-commit again so the user can stage and finalize.
Output
After completing all artifacts, summarize:
- Change name and location
- List of artifacts created with brief descriptions
- Note that the artifacts are staged and ready for commit by the user (the LLM does not commit)
- What's ready: "All artifacts created and staged on <integration_branch>. Run
/git-commit to review and commit."
- Suggested next step: "Run
/git-commit to create the recovery-point commit, then /work to build this change."
Artifact Creation Guidelines
- Follow the
instruction field from openspec instructions for each artifact type
- The schema defines what each artifact should contain - follow it
- Read dependency artifacts for context before creating new ones
- Use
template as the structure for your output file - fill in its sections
- IMPORTANT:
context and rules are constraints for YOU, not content for the file
- Do NOT copy
<context>, <rules>, <project_context> blocks into the artifact
- These guide what you write, but should never appear in the output
Guardrails
- Always run the branch guard first. Refuse and exit if the working branch or working dir is wrong.
- Create ALL artifacts needed for implementation (as defined by schema's
apply.requires)
- Always read dependency artifacts before creating a new one
- If context is critically unclear, ask the user - but prefer making reasonable decisions to keep momentum
- If a change with that name already exists, ask if user wants to continue it or create a new one
- Verify each artifact file exists after writing before proceeding to next
- Never run
git commit — stage the artifacts and suggest /git-commit for the user to finalize