| 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.0","generatedBy":"1.2.0"} |
Propose a new change - create the change and generate all artifacts in one step.
I'll create a change with artifacts:
- proposal.md (what & why)
- design.md (how)
- tasks.md (implementation steps)
When ready to implement, run /uf.unleash (autonomous) or /opsx-apply (sequential)
Input: The user's request should include a change name (kebab-case) OR a description of what they want to build.
Steps
-
If no clear input provided, ask what they want to build
Use the question 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 at openspec/changes/<name>/ with .openspec.yaml.
-
Create and checkout a branch
git checkout -b opsx/<name>
Guard: Before creating the branch, perform these
checks in order:
a. Dirty working tree check: Run git status --short.
If there are uncommitted changes (staged, unstaged,
or untracked files that appear related to work),
switching branches may cause those changes to appear
on the wrong branch. The agent MUST confirm with the
user before proceeding — never silently switch
branches with uncommitted work, even if the user
explicitly requested a new change in the same message
(e.g., /opsx:propose fix-typos).
When git status --short output is non-empty, the
agent MUST invoke the question tool with:
- Question: Include the full
git status --short
output, the target branch name (opsx/<name>), and
a warning that switching branches with uncommitted
changes may cause changes to appear on the wrong
branch.
- Options (exactly two):
- "Stash changes and continue"
- "Abort — keep changes as-is"
The agent MUST NOT run git checkout -b until the
user responds.
- If the user selects "Abort — keep changes as-is":
stop the workflow and report that the propose was
aborted due to uncommitted changes.
- If the user selects "Stash changes and continue":
- Run
git stash.
- If
git stash exits with a non-zero exit code,
abort and report the stash failure.
- Run
git status --short again to verify the
working tree is clean.
- If the output is still non-empty, abort and
report the remaining uncommitted changes.
- Only when the working tree is confirmed clean,
proceed to branch creation.
b. Branch check: Check the current branch:
- If already on
opsx/<name> (exact match): skip
branch creation, proceed.
- If on a different
opsx/* branch: STOP with
error: "Already on branch opsx/<other> --
finish or archive that change first."
- If on
main or any non-opsx branch: create and
checkout opsx/<name>.
Retrieve Context from Dewey (optional)
Before drafting the proposal, query Dewey for relevant context:
dewey_semantic_search with the change description to find
related specs, past proposals, and similar changes
dewey_semantic_search_filtered with source_type: "github"
to find related issues across the organization
dewey_traverse on any discovered related specs to understand
dependencies
Use the retrieved context to inform the proposal's scope,
identify potential conflicts with existing work, and reference
relevant prior decisions.
If Dewey is unavailable, proceed without cross-repo context —
use direct file reads of local specs and backlog items instead.
Dewey Availability Tiers
Adjust context retrieval based on Dewey availability:
Tier 3 (Full Dewey): Use dewey_semantic_search,
dewey_search, dewey_traverse, and
dewey_semantic_search_filtered for comprehensive cross-repo
and toolstack context.
Tier 2 (Graph-only, no embedding model): Use
dewey_search and dewey_traverse for keyword-based and
structural queries. Semantic search is unavailable.
Tier 1 (No Dewey): Fall back to direct file operations:
- Use the Read tool to read local specs, backlog items, and
convention packs
- Use the Grep tool for keyword search across the codebase
- Reference
.opencode/uf/packs/ for coding standards
All tiers produce valid results. Higher tiers provide richer
cross-repo context but are never required.
-
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
-
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):
STOP HERE. Do NOT proceed to implementation.
Your job is done. Report the results and prompt the
user. The user will invoke a separate command
(/uf.unleash, /uf.cobalt-crush, or /opsx-apply) when they
are ready to implement.
Output
After completing all artifacts, summarize:
- Change name and location
- List of artifacts created with brief descriptions
- What's ready: "All artifacts created! Ready for implementation."
- Prompt: "Run
/uf.unleash for autonomous pipeline execution, /opsx-apply for sequential implementation, or /uf.cobalt-crush for direct coding. /uf.unleash is recommended when the change has multiple independent task groups."
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
- Create ALL artifacts needed for implementation (as defined by schema's
apply.requires).
The user needs to review the plan before
implementation begins. Implementing without review
defeats the purpose of the spec-first workflow.
- 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 implement code changes — this command
creates artifacts ONLY. The user needs to review
the plan before implementation begins.
- NEVER commit, push, or create PRs
- NEVER run /uf.unleash, /opsx-apply, or /uf.cobalt-crush
- After artifacts are complete, STOP and prompt the
user.