Skip to main content
skill CX Codex

openspec-archive-change · lis186 — Claude Code skill: archive a finished change

This skill finalises a completed change in the experimental OpenSpec workflow: it checks artifacts and tasks, syncs delta specs, then moves the change folder into the archive.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add lis186/ccxray --skill openspec-archive-change -a claude-code
Open on GitHub

What openspec-archive-change does

The skill drives the openspec CLI. When no change name is given, it runs openspec list --json, lists the active changes and asks you to pick one through AskUserQuestion — it will not auto-select. Then openspec status --change "<name>" --json reports which artifacts are not yet done, and tasks.md is scanned for unchecked - [ ] items. Incomplete work does not stop the archive: you get a warning and a confirmation prompt.

Before moving anything, the skill looks at delta specs under openspec/changes/<name>/specs/ and diffs them against the main specs in openspec/specs/<capability>/spec.md. If they diverge, you choose between syncing first and archiving as is. Sync hands the job to a subagent that invokes the openspec-sync-specs skill. The archive directory comes from mkdir -p openspec/changes/archive, and the folder lands in openspec/changes/archive/YYYY-MM-DD-<name>. The .openspec.yaml file travels with it.

No openspec CLI on the machine means the skill has nothing to call — that is the one prerequisite it states. If the dated target already exists, the move fails and you have to rename the old archive entry or pick another date.

What it helps with

  • finalise a finished change and drop it from the active list
  • verify that every artifact and task is closed out
  • sync delta specs with the main specs before archiving
  • move the change folder into the archive with a date prefix
  • flag unchecked tasks.md items before finalising

Example prompts for the agent

  • Archive the add-user-auth change
  • List the active changes and let me pick one to archive
  • Check artifact and task status for add-user-auth, then archive it

How to install openspec-archive-change

1Skills CLI (Vercel)

npx skills add lis186/ccxray --skill openspec-archive-change -a claude-code

2Manually: put the files in place

~/.claude/skills/openspec-archive-change/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/openspec-archive-change/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about openspec-archive-change

How do I install openspec-archive-change in Claude Code?

Run npx skills add lis186/ccxray --skill openspec-archive-change -a claude-code. The skill is placed at ~/.claude/skills/openspec-archive-change/SKILL.md.

What does openspec-archive-change do?

It walks a change through finalisation: artifact and task checks, a delta spec assessment, and a move of the change folder into openspec/changes/archive/ under a dated name.

What does the skill need to run?

An installed openspec CLI. The skill relies on its openspec list and openspec status commands.

Source text

SKILL.md · MIT
---
name: openspec-archive-change
description: Archive a completed change in the experimental workflow. Use when the user wants to finalize and archive a change after implementation is complete.
license: MIT
compatibility: Requires openspec CLI.
metadata:
  author: openspec
  version: "1.0"
  generatedBy: "1.2.0"
---

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**

1. **If no change name provided, prompt for selection**

   Run `openspec list --json` to 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.

2. **Check artifact completion status**

   Run `openspec status --change "<name>" --json` to check artifact completion.

   Parse the JSON to understand:
   - `schemaName`: The workflow being used
   - `artifacts`: List of artifacts with their status (`done` or other)

   **If any artifacts are not `done`:**
   - Display warning listing incomplete artifacts
   - Use **AskUserQuestion tool** to confirm user wants to proceed
   - Proceed if user confirms

3. **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:**
   - Display warning showing count of incomplete tasks
   - Use **AskUserQuestion tool** to confirm user wants to proceed
   - Proceed if user confirms

   **If no tasks file exists:** Proceed without task-related warning.

4. **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:**
   - 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

   **Prompt options:**
   - If changes needed: "Sync now (recommended)", "Archive without syncing"
   - If already synced: "Archive now", "Sync anyway", "Cancel"

   If user chooses sync, use Task tool (subagent_type: "general-purpose", prompt: "Use Skill tool to invoke openspec-sync-specs for change '<name>'. Delta spec analysis: <include the analyzed delta spec summary>"). Proceed to archive regardless of choice.

5. **Perform the archive**

   Create the archive directory if it doesn't exist:
   ```bash
   mkdir -p openspec/changes/archive
   ```

   Generate target name using current date: `YYYY-MM-DD-<change-name>`

   **Check if target already exists:**
   - If yes: Fail with error, suggest renaming existing archive or using different date
   - If no: Move the change directory to archive

   ```bash
   mv openspec/changes/<name> openspec/changes/archive/YYYY-MM-DD-<name>
   ```

6. **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

© openspec · MIT · lis186/ccxray

Similar skills

All skills for Agent setup: memory, context, orchestration →

openspec-archive-change by other authors comes first.

From the same set2

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor