Archive a completed change in the experimental workflow.
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
- If no change name provided, prompt for selection Run
openspec list --jsonto get available changes. Use the AskUserQuestion tool to let the user select. Show only active changes (not already archived). Include the schema used for each change if available. IMPORTANT: Do NOT guess or auto-select a change. Always let the user choose. - Check artifact completion status Run
openspec status --change "<name>" --jsonto check artifact completion. Parse the JSON to understand: If any artifacts are notdone:
- schemaName: The workflow being used - artifacts: List of artifacts with their status (done or other) - Display warning listing incomplete artifacts - Use AskUserQuestion tool to confirm user wants to proceed - Proceed if user confirms
- Check task completion status Read the tasks file (typically
tasks.md) to check for incomplete tasks. Count tasks marked with- [](incomplete) vs- [x](complete). If incomplete tasks found: If no tasks file exists: Proceed without task-related warning.
- Display warning showing count of incomplete tasks - Use AskUserQuestion tool to confirm user wants to proceed - Proceed if user confirms
- Assess delta spec sync state Check for delta specs at
openspec/changes/<name>/specs/. If none exist, proceed without sync prompt. If delta specs exist: Prompt options: If user chooses sync, use Task tool (subagent_type: "general-purpose", prompt: "Use Skill tool to invoke openspec-sync-specs for change ''. Delta spec analysis: "). Proceed to archive regardless of choice.
- Compare each delta spec with its corresponding main spec at openspec/specs/<capability>/spec.md - Determine what changes would be applied (adds, modifications, removals, renames) - Show a combined summary before prompting - If changes needed: "Sync now (recommended)", "Archive without syncing" - If already synced: "Archive now", "Sync anyway", "Cancel"
- Perform the archive Create the archive directory if it doesn't exist:
mkdir -p openspec/changes/archiveGenerate target name using current date:YYYY-MM-DD-<change-name>Check if target already exists:mv openspec/changes/<name> openspec/changes/archive/YYYY-MM-DD-<name>
- If yes: Fail with error, suggest renaming existing archive or using different date - If no: Move the change directory to archive
- Display summary Show archive completion summary including:
- Change name - Schema that was used - Archive location - Whether specs were synced (if applicable) - Note about any warnings (incomplete artifacts/tasks)
Output On Success
## Archive Complete
**Change:** <change-name>
**Schema:** <schema-name>
**Archived to:** openspec/changes/archive/YYYY-MM-DD-<name>/
**Specs:** ✓ Synced to main specs (or "No delta specs" or "Sync skipped")
All artifacts complete. All tasks complete.Guardrails
- Always prompt for change selection if not provided
- Use artifact graph (openspec status --json) for completion checking
- Don't block archive on warnings - just inform and confirm
- Preserve.openspec.yaml when moving to archive (it moves with the directory)
- Show clear summary of what happened
- If sync is requested, use openspec-sync-specs approach (agent-driven)
- If delta specs exist, always run the sync assessment and show the combined summary before prompting