Skip to content

/openspec-sync-specs

Sync delta specs from a change to main specs. Use when the user wants to update main specs with changes from a delta spec, without archiving the change.

From plugin
signum
186 skills5 agents23 commands

Claude Code

$ npx -y skills add heurema/signum --skill openspec-sync-specs --agent claude-code

SKILL.md

openspec-sync-specs.SKILL.md
name: openspec-sync-specs
description: Sync delta specs from a change to main specs. Use when the user wants to update main specs with changes from a delta spec, without archiving the change.
allowed-tools: Bash(openspec:*)
license: MIT
compatibility: Requires openspec CLI.
metadata:
  author: openspec
  version: "1.0"
  generatedBy: "1.6.0"

Sync delta specs from a change to main specs.

This is an **agent-driven** operation - you will read delta specs and directly edit main specs to apply the changes. This allows intelligent merging (e.g., adding a scenario without copying the entire requirement).

**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**: 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 changes that have delta specs (under `specs/` directory).

**IMPORTANT**: Do NOT guess or auto-select a change. Always let the user choose.

2. **Resolve change context**

Run:

   openspec status --change "<name>" --json

3. **Find delta specs**

Use `artifactPaths.specs.existingOutputPaths` from the status JSON as the list of delta spec files.

Each delta spec file contains sections like:

  • `## ADDED Requirements` - New requirements to add
  • `## MODIFIED Requirements` - Changes to existing requirements
  • `## REMOVED Requirements` - Requirements to remove
  • `## RENAMED Requirements` - Requirements to rename (FROM:/TO: format)

If no delta specs found, inform user and stop.

4. **For each delta spec, apply changes to main specs**

For each repo-local capability delta spec path returned by the CLI:

a. **Read the delta spec** to understand the intended changes

b. **Read the main spec** at `openspec/specs/<capability>/spec.md` (may not exist yet)

c. **Apply changes intelligently**:

**ADDED Requirements:**

  • If requirement doesn't exist in main spec → add it
  • If requirement already exists → update it to match (treat as implicit MODIFIED)

**MODIFIED Requirements:**

  • Find the requirement in main spec
  • Apply the changes - this can be:
  • Adding new scenarios (don't need to copy existing ones)
  • Modifying existing scenarios
  • Changing the requirement description
  • Preserve scenarios/content not mentioned in the delta

**REMOVED Requirements:**

  • Remove the entire requirement block from main spec

**RENAMED Requirements:**

  • Find the FROM requirement, rename to TO

d. **Create new main spec** if capability doesn't exist yet:

  • Create `openspec/specs/<capability>/spec.md`
  • Add Purpose section (can be brief, mark as TBD)
  • Add Requirements section with the ADDED requirements

5. **Show summary**

After applying all changes, summarize:

  • Which capabilities were updated
  • What changes were made (requirements added/modified/removed/renamed)

**Delta Spec Format Reference**

## ADDED Requirements

### Requirement: New Feature
The system SHALL do something new.

#### Scenario: Basic case
- **WHEN** user does X
- **THEN** system does Y

## MODIFIED Requirements

### Requirement: Existing Feature
#### Scenario: New scenario to add
- **WHEN** user does A
- **THEN** system does B

## REMOVED Requirements

### Requirement: Deprecated Feature

## RENAMED Requirements

- FROM: `### Requirement: Old Name`
- TO: `### Requirement: New Name`

**Key Principle: Intelligent Merging**

Unlike programmatic merging, you can apply **partial updates**:

  • To add a scenario, just include that scenario under MODIFIED - don't copy existing scenarios
  • The delta represents *intent*, not a wholesale replacement
  • Use your judgment to merge changes sensibly

**Output On Success**

## Specs Synced: <change-name>

Updated main specs:

**<capability-1>**:
- Added requirement: "New Feature"
- Modified requirement: "Existing Feature" (added 1 scenario)

**<capability-2>**:
- Created new spec file
- Added requirement: "Another Feature"

Main specs are now updated. The change remains active - archive when implementation is complete.

**Guardrails**

  • Read both delta and main specs before making changes
  • Preserve existing content not mentioned in delta
  • If something is unclear, ask for clarification
  • Show what you're changing as you go
  • The operation should be idempotent - running twice should give same result
Read more
@heurema
Ships withsignum

Signum is a contract-first proof gate for agentic software changes: it turns a task into a reviewed contract, executes against that contract, audits the result, and packages evidence that humans and CI can inspect.

Stars on GitHub

Momentum

stars in total
18
Star history of heurema/signum on GitHub, a chart by star-history.com

Other skills on signum.

openspec-apply-change
Auto-invoked

openspec-apply-change

Implement tasks from an OpenSpec change. Use when the user wants to start implementing, continue implementation, or work through…

@heurema@heuremaInstall Skill
openspec-archive-change
Auto-invoked

openspec-archive-chang…

Archive a completed change in the experimental workflow. Use when the user wants to finalize and archive a change after…

@heurema@heuremaInstall Skill
openspec-explore
Auto-invoked

openspec-explore

Enter explore mode - a thinking partner for exploring ideas, investigating problems, and clarifying requirements. Use when the…

@heurema@heuremaInstall Skill
openspec-propose
Auto-invoked

openspec-propose

Propose a new change with all artifacts generated in one step. Use when the user wants to quickly describe what they want to…

@heurema@heuremaInstall Skill
openspec-update-change
Auto-invoked

openspec-update-change

Update an OpenSpec change by revising its existing planning artifacts and keeping them coherent with one another. Use when the…

@heurema@heuremaInstall Skill

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills11d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc12d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react1d252k
@facebook@facebookInstall Skill

Questions about openspec-sync-specs.

Which coding agents can use openspec-sync-specs?
openspec-sync-specs installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.