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.
68
82%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Propose a new change - create the change and generate all artifacts in one step.
I'll create a change with artifacts:
When ready to implement, do NOT run /opsx:apply — worktrail's own orchestrator replaces it (running apply would execute the change a second time). Continue per the calling worktrail-sdd-workflow pipeline instead.
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). 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: 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 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>" --jsonParse the JSON to get:
applyRequires: array of artifact IDs needed before implementation (e.g., ["tasks"])artifacts: list of all artifacts with their status and dependenciesplanningHome, 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):
openspec instructions <artifact-id> --change "<name>" --jsoncontext: Project background (constraints for you - do NOT include in output)rules: Artifact-specific rules (constraints for you - do NOT include in output)template: The structure to use for your output fileinstruction: Schema-specific guidance for this artifact typeresolvedOutputPath: Resolved path or pattern to write the artifactdependencies: Completed artifacts to read for contexttemplate as the structure and write it to resolvedOutputPathcontext and rules as constraints - but do NOT copy them into the file<artifact-id> is tasks, worktrail's own orchestrator (not OpenSpec) compiles
tasks.md into a per-task file-scope plan afterward (worktrail-compile) — get it right
on the first pass instead of relying on that later compile step to catch it. OpenSpec's
checklist schema carries no dedicated field for file scope, but worktrail-compile
recognizes an optional indented files: continuation line immediately under a task line
as an inline declaration of that task's create-or-modify paths:
- [ ] 2.3 Add the `files:` parser to `parse_tasks_md` (Requirement: Inline file-scope declaration parsing)
files: src/worktrail/taskformats/openspec/tasks_md.py tests/taskformats/test_tasks_md.pytasks.md where every task carries a
files: declaration compiles into a RunPlan without a model call at all. Tasks that omit
it still compile fine — the compile step infers their file scope from context, same as
today.
specs/**/spec.md (### Requirement: <Name> under ## ADDED Requirements /
## MODIFIED Requirements), make the exact requirement name appear somewhere in
tasks.md — append (Requirement: <exact title>) to the task line that implements it.worktrail-compile rejects it for having no file scope: [e2e] for verification-only
tasks, [cleanup] for cleanup-only tasks — e.g. - [ ] 3.1 [e2e] Run the full test suite and confirm it passes. Any other kind tag, including [docs], does NOT exempt a
task from file scope — a [docs]-tagged task still needs a real file (the doc it
updates).##
phase in tasks.md, bias decomposition so it is owned by at most one task per phase —
do not let two tasks within the same phase both list it in their file scope. A hot file
that already recurs across phases just from the shape of the work is fine; the bias
only applies to collapsing multiple same-phase tasks onto it.worktrail-compile's
grouping-time shared-file lane folding (serializing tasks that collide on a file into
the same lane) still applies unchanged and remains the backstop. This guidance is a
decomposition-time reduction of how often that backstop has to fire, not a replacement
for it.files: MUST
include every existing test file asserting behavior the task changes, plus any new
test file it adds. Never split a task's implementation and its tests into separate
tasks.review: skip for mechanical tasks: a mechanical or docs-only task (a config key,
a prose edit, a single constant) carries an indented review: skip continuation line,
the same way files: is declared above. A task producing executable behavior never
carries review: skip.b. Continue until all applyRequires artifacts are complete
openspec status --change "<name>" --jsonapplyRequires has status: "done" in the artifacts arrayapplyRequires artifacts are donec. If an artifact requires user input (unclear context):
Show final status
openspec status --change "<name>"Output
After completing all artifacts, summarize:
/opsx:apply (worktrail's
orchestrator replaces it). Standalone use only: ask the user whether to
implement now.Artifact Creation Guidelines
instruction field from openspec instructions for each artifact typetemplate as the structure for your output file - fill in its sectionscontext and rules are constraints for YOU, not content for the file
<context>, <rules>, <project_context> blocks into the artifactGuardrails
apply.requires)tasks.md against the requirement-coverage,
file-less-task, task-sizing, test-co-scoping, and review: skip rules above — every declared
requirement's exact name must appear somewhere in the file, every task with no file changes
must carry [e2e] or [cleanup], every implementation task is sized per module per phase with
its changed tests co-scoped in files:, and every mechanical/docs-only task carries
review: skipca98247
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.