Continue working on an OpenSpec change by creating the next artifact. Use when the user wants to progress their change, create the next artifact, or continue th
复制下面这句话,粘贴给 Claude Code、Codex、Cursor 等 AI 编程工具,它会读取安装说明并在你确认后完成安装。
请阅读 https://ai.atlankj.com/install/asset/gh-openspec-continue-change-48b5d3768b57 ,按照其中的说明把「openspec-continue-change」安装到你(当前 AI 工具)中。执行前先告诉我将运行的命令和写入的位置,等我确认。
查看 AI 将读取的安装说明正在读取 GitHub 原文…
内容来自 GitHub 原始文件,由原作者维护。在 GitHub 查看
Continue working on a change by creating the next artifact.
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, schemas, 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.
Project check: These steps expect a project that already uses OpenSpec. Before the first step that writes anything (new change, archive, sync specs, or authoring an artifact file), confirm the project has a root: run openspec list --json (with --store <id> when a store is selected, since the store is then the root) and read root. A root object means the project is set up. "root": null means it is not - there is no openspec/ directory here, and a write such as openspec new change would create one as a side effect. The command also exits non-zero, which is that answer rather than a broken CLI, so read the JSON instead of retrying or working around it.
One "root": null is not about setup: when a status error message starts with Declared in or Invalid store declaration in and names this project's openspec/config.yaml (or config.yml), the project does use OpenSpec through a store it declares, which this machine cannot resolve (the store is not registered, or the store: line is malformed). Do not treat it as uninitialized and skip the branches below: stop before writing and show the user that error's message and fix.
Otherwise, with no root, what happens next depends on how this workflow was reached:
openspec init), target a store they already have (--store <id>), or continue without OpenSpec for this request. Wait for their answer.In both branches, never create the root as a side effect: do not run openspec init until the user asks for it, do not hand-create openspec/ files, and do not let a command create it.
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.
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:
lastModified field)Mark the most recently modified change as "(Recommended)" since it's likely what the user wants to continue.
Always announce: "Using change: " and how to override (e.g., /openspec-continue-change <other>).
Check current status
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.Act based on status:
If all planning artifacts are complete (isPlanningComplete: true, or legacy isComplete: true):
If artifacts are ready to create (status shows artifacts with status: "ready"):
status: "ready" from the status outputopenspec instructions <artifact-id> --change "<name>" --json
Output
After each invocation, show:
Artifact Creation Guidelines
The artifact types and their purpose depend on the schema. The instruction field from the instructions output is the authoritative guidance for each artifact - follow it even when the artifact has a familiar name (proposal.md, tasks.md, etc.), since custom schemas may define different content or a different process for the same file names.
If the instruction field directs you to use a specific skill or command to create the artifact, invoke it instead of writing the artifact directly.
Guardrails
context and rules are constraints for YOU, not content for the file
<context>, <rules>, <project_context> blocks into the artifactcontext: 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 guidanceresolvedOutputPath: Resolved path or pattern to write the artifactdependencies: Completed artifacts to read for context (entries with skipped: true have no files - do not look for them)skipped/warning: present when the change declares skip_specs and this artifact must NOT be created - pick another artifactinstruction field delegates creation to a specific skill or command, invoke it to produce the artifact instead of writing the file yourself, then verify the artifact file exists at resolvedOutputPathtemplate as the structure - fill in its sectionscontext and rules as constraints when writing - but do NOT copy them into the fileresolvedOutputPath specified in instructions. If it is a glob pattern, choose the concrete file path using the schema instruction and the change's contextIf no artifacts are ready (all blocked):
After creating an artifact, show progress
openspec status --change "<name>"