SpecKit Safe Update
This skill provides safe update capabilities for GitHub SpecKit installations, preserving customizations while applying template updates.
Installation: Available via plugin (/plugin marketplace add NotMyself/claude-plugins then /plugin install speckit-updater) or manual Git clone. See README.md for details.
When to Use
- You need to update or install SpecKit templates while preserving project customizations.
- You want a safe approval flow around update, rollback, or version-specific SpecKit operations.
- The task is to operate the SpecKit updater conversationally instead of running raw commands blindly.
What to do when this skill is invoked
When the user invokes /speckit-updater, you should:
Run the update orchestrator script without any flags (conversational mode):
pwsh -NoProfile -Command "& 'C:\Users\bobby\.claude\skills\speckit-updater\scripts\update-wrapper.ps1'"
Parse the output for markers:
[PROMPT_FOR_APPROVAL] - Update scenario (existing SpecKit installation)
[PROMPT_FOR_INSTALL] - Fresh installation scenario (no .specify/ directory)
For Updates ([PROMPT_FOR_APPROVAL] marker found):
- Present the Markdown summary showing:
- Current version vs. available version
- Files to update/add/remove
- Conflicts detected (if any)
- Files preserved (customized)
- Backup location
- Custom commands
- Ask the user for approval to proceed with the update
- If approved, re-run with
-Proceed flag
- If declined, inform the user the update was cancelled
For Fresh Installations ([PROMPT_FOR_INSTALL] marker found):
- Present a natural installation offer to the user, such as:
- "SpecKit is not currently installed in this project. Would you like me to install it?"
- "I can install the latest SpecKit templates for you. This will create the .specify/ directory structure and download the templates from GitHub."
- Do NOT mention the
-Proceed flag to the user (this is an implementation detail)
- If user approves (says "yes", "proceed", "install it", etc.), re-run with
-Proceed flag
- If user declines, inform them the installation was cancelled
Execute approved action by re-running with -Proceed flag:
pwsh -NoProfile -Command "& 'C:\Users\bobby\.claude\skills\speckit-updater\scripts\update-wrapper.ps1' -Proceed"
Special cases:
- If user requests
-CheckOnly: run with that flag and show the report
- If user requests
-Rollback: run with that flag and confirm restoration
- If user requests specific
-Version: include that parameter
Commands
/speckit-updater
Updates SpecKit templates, commands, and scripts while preserving customizations.
Usage:
/speckit-updater - Interactive update/install with conversational approval workflow (recommended for Claude Code)
/speckit-updater -Proceed - Proceed with update/install after approval (used by Claude after user confirms)
/speckit-updater -CheckOnly - Check for updates without applying
/speckit-updater -Version v0.0.72 - Update to specific version
/speckit-updater -Force - Force overwrite SpecKit files (preserves custom commands)
/speckit-updater -Rollback - Restore from previous backup
/speckit-updater -Auto - DEPRECATED: Use conversational workflow instead (shows warning, maps to -Proceed)
Fresh Installation (No .specify/ directory):
- First invocation shows installation offer with
[PROMPT_FOR_INSTALL] marker
- Claude Code presents natural question to user (e.g., "Would you like me to install SpecKit?")
- User approves via conversational response (e.g., "yes", "proceed", "install it")
- Claude re-invokes with
-Proceed flag automatically (implementation detail hidden from user)
- Script creates
.specify/ structure, downloads templates, creates manifest
- Exit code 0 throughout (awaiting approval is not an error)
- Consistent with update flow: both use conversational approval workflow
Process:
- Validates prerequisites (Git installed, clean Git state, write permissions)
- Loads or creates manifest (.specify/manifest.json)
- Fetches target version from GitHub Releases API
- Compares file hashes to identify customizations
- Creates timestamped backup
- Applies selective updates preserving customized files
- Opens VSCode merge editor for conflicts (Flow A: one at a time)
- Automatically invokes /speckit.constitution for constitution updates
- Updates manifest with new version
- Manages backup retention (keeps last 5)
When you invoke this command, I will:
- Execute the update-orchestrator.ps1 script
- Parse output for markers (
[PROMPT_FOR_APPROVAL] for updates, [PROMPT_FOR_INSTALL] for fresh installations)
- For updates: Present Markdown summary of proposed changes
- For installations: Ask naturally if you want to install SpecKit (without mentioning
-Proceed flag)
- Wait for your approval via chat conversation
- After approval: automatically re-invoke with
-Proceed flag to execute
- Guide you through conflict resolution one file at a time (updates only)
- Open VSCode diff/merge tools as needed (updates only)
- Report results with detailed summary
Conversational Workflow: The skill uses a two-step approval process:
- Step 1: Outputs summary → script exits → waits for approval
- Step 2: After approval, Claude re-invokes with
-Proceed → applies updates
Requirements:
- Git installed and in PATH
- Internet connection for fetching updates from GitHub
- Write permissions to .specify/ and .claude/ directories
- Clean or staged Git working directory
The script is located at: {skill_path}/scripts/update-wrapper.ps1 (entry point) and {skill_path}/scripts/update-orchestrator.ps1 (main logic)
Entry point command:
pwsh -NoProfile -Command "& '{skill_path}/scripts/update-wrapper.ps1' [parameters]"
Note: Both PowerShell-style (-CheckOnly) and Linux-style (--check-only) flags are supported via the wrapper script.
Features
- Customization Preservation: Automatically detects and preserves user customizations using normalized file hashing
- Intelligent Conflict Resolution: Guides through conflicts one-at-a-time with 4 options: merge editor, keep mine, use new, skip
- Version Tracking: Maintains
.specify/manifest.json with file hashes, version info, and backup history
- Automatic Backups: Creates timestamped backups in
.specify/backups/ with automatic retention management
- Fail-Fast with Rollback: Automatically rolls back on any error, restoring pre-update state
- Dry-Run Mode:
--check-only shows exactly what would change without applying updates
- Constitution Integration: Notifies when constitution template has updates (run
/speckit.constitution)
- Custom Command Safety: User-created commands never overwritten, even with
--force
Architecture
Modules
- HashUtils: Normalized hashing (handles line endings, trailing whitespace, BOM)
- VSCodeIntegration: Context detection, Quick Pick, diff/merge editor integration
- GitHubApiClient: GitHub Releases API interaction (unauthenticated, 60 req/hour)
- ManifestManager: Manifest CRUD operations with caching
- BackupManager: Backup creation, restoration, and retention management
- ConflictDetector: File state analysis and conflict detection
Workflow
- Prerequisites validation (critical checks must pass, warnings allow continuation)
- Manifest loading/creation (safe default: assume all files customized if no manifest)
- GitHub API query for target version
- File state analysis (6 actions: add/remove/merge/preserve/update/skip)
- User confirmation with change preview
- Backup creation (timestamped, excludes backups directory)
- Selective file updates (fail-fast with automatic rollback)
- Conflict resolution (Flow A: one-at-a-time, VSCode merge editor)
- Manifest update (version, file hashes, customization flags)
- Backup cleanup (keep 5 most recent, requires confirmation)
- Detailed summary display
Exit Codes
| Code |
Meaning |
| 0 |
Success |
| 1 |
General error |
| 2 |
Prerequisites not met |
| 3 |
Network/API error |
| 4 |
Git error |
| 5 |
User cancelled |
| 6 |
Rollback required (automatic) |
Limitations
- Use this skill only when the task clearly matches the scope described above.
- Do not treat the output as a substitute for enprojectnment-specific validation, testing, or expert review.
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
1---2name: speckit-updater3description: SpecKit Safe Update4---56# SpecKit Safe Update78This skill provides safe update capabilities for GitHub SpecKit installations, preserving customizations while applying template updates.910**Installation**: Available via plugin (`/plugin marketplace add NotMyself/claude-plugins` then `/plugin install speckit-updater`) or manual Git clone. See README.md for details.1112## When to Use13- You need to update or install SpecKit templates while preserving project customizations.14- You want a safe approval flow around update, rollback, or version-specific SpecKit operations.15- The task is to operate the SpecKit updater conversationally instead of running raw commands blindly.1617## What to do when this skill is invoked1819When the user invokes `/speckit-updater`, you should:20211. **Run the update orchestrator script** without any flags (conversational mode):22 ```powershell23 pwsh -NoProfile -Command "& 'C:\Users\bobby\.claude\skills\speckit-updater\scripts\update-wrapper.ps1'"24 ```25262. **Parse the output** for markers:27 - **`[PROMPT_FOR_APPROVAL]`** - Update scenario (existing SpecKit installation)28 - **`[PROMPT_FOR_INSTALL]`** - Fresh installation scenario (no .specify/ directory)29303. **For Updates** (`[PROMPT_FOR_APPROVAL]` marker found):31 - **Present the Markdown summary** showing:32 - Current version vs. available version33 - Files to update/add/remove34 - Conflicts detected (if any)35 - Files preserved (customized)36 - Backup location37 - Custom commands38 - **Ask the user for approval** to proceed with the update39 - **If approved**, re-run with `-Proceed` flag40 - **If declined**, inform the user the update was cancelled41424. **For Fresh Installations** (`[PROMPT_FOR_INSTALL]` marker found):43 - **Present a natural installation offer** to the user, such as:44 - "SpecKit is not currently installed in this project. Would you like me to install it?"45 - "I can install the latest SpecKit templates for you. This will create the .specify/ directory structure and download the templates from GitHub."46 - **Do NOT mention the `-Proceed` flag** to the user (this is an implementation detail)47 - **If user approves** (says "yes", "proceed", "install it", etc.), re-run with `-Proceed` flag48 - **If user declines**, inform them the installation was cancelled49505. **Execute approved action** by re-running with `-Proceed` flag:51 ```powershell52 pwsh -NoProfile -Command "& 'C:\Users\bobby\.claude\skills\speckit-updater\scripts\update-wrapper.ps1' -Proceed"53 ```5455**Special cases:**56- If user requests `-CheckOnly`: run with that flag and show the report57- If user requests `-Rollback`: run with that flag and confirm restoration58- If user requests specific `-Version`: include that parameter5960## Commands6162### /speckit-updater6364Updates SpecKit templates, commands, and scripts while preserving customizations.6566**Usage:**67- `/speckit-updater` - Interactive update/install with conversational approval workflow (recommended for Claude Code)68- `/speckit-updater -Proceed` - Proceed with update/install after approval (used by Claude after user confirms)69- `/speckit-updater -CheckOnly` - Check for updates without applying70- `/speckit-updater -Version v0.0.72` - Update to specific version71- `/speckit-updater -Force` - Force overwrite SpecKit files (preserves custom commands)72- `/speckit-updater -Rollback` - Restore from previous backup73- `/speckit-updater -Auto` - DEPRECATED: Use conversational workflow instead (shows warning, maps to -Proceed)7475**Fresh Installation (No .specify/ directory):**76- First invocation shows installation offer with `[PROMPT_FOR_INSTALL]` marker77- Claude Code presents natural question to user (e.g., "Would you like me to install SpecKit?")78- User approves via conversational response (e.g., "yes", "proceed", "install it")79- Claude re-invokes with `-Proceed` flag automatically (implementation detail hidden from user)80- Script creates `.specify/` structure, downloads templates, creates manifest81- Exit code 0 throughout (awaiting approval is not an error)82- Consistent with update flow: both use conversational approval workflow8384**Process:**851. Validates prerequisites (Git installed, clean Git state, write permissions)862. Loads or creates manifest (.specify/manifest.json)873. Fetches target version from GitHub Releases API884. Compares file hashes to identify customizations895. Creates timestamped backup906. Applies selective updates preserving customized files917. Opens VSCode merge editor for conflicts (Flow A: one at a time)928. Automatically invokes /speckit.constitution for constitution updates939. Updates manifest with new version9410. Manages backup retention (keeps last 5)9596**When you invoke this command, I will:**971. Execute the update-orchestrator.ps1 script982. Parse output for markers (`[PROMPT_FOR_APPROVAL]` for updates, `[PROMPT_FOR_INSTALL]` for fresh installations)993. **For updates**: Present Markdown summary of proposed changes1004. **For installations**: Ask naturally if you want to install SpecKit (without mentioning `-Proceed` flag)1015. Wait for your approval via chat conversation1026. After approval: automatically re-invoke with `-Proceed` flag to execute1037. Guide you through conflict resolution one file at a time (updates only)1048. Open VSCode diff/merge tools as needed (updates only)1059. Report results with detailed summary106107**Conversational Workflow:** The skill uses a two-step approval process:108- **Step 1**: Outputs summary → script exits → waits for approval109- **Step 2**: After approval, Claude re-invokes with `-Proceed` → applies updates110111**Requirements:**112- Git installed and in PATH113- Internet connection for fetching updates from GitHub114- Write permissions to .specify/ and .claude/ directories115- Clean or staged Git working directory116117**The script is located at:** `{skill_path}/scripts/update-wrapper.ps1` (entry point) and `{skill_path}/scripts/update-orchestrator.ps1` (main logic)118119**Entry point command:**120```powershell121pwsh -NoProfile -Command "& '{skill_path}/scripts/update-wrapper.ps1' [parameters]"122```123124**Note:** Both PowerShell-style (`-CheckOnly`) and Linux-style (`--check-only`) flags are supported via the wrapper script.125126## Features127128- **Customization Preservation**: Automatically detects and preserves user customizations using normalized file hashing129- **Intelligent Conflict Resolution**: Guides through conflicts one-at-a-time with 4 options: merge editor, keep mine, use new, skip130- **Version Tracking**: Maintains `.specify/manifest.json` with file hashes, version info, and backup history131- **Automatic Backups**: Creates timestamped backups in `.specify/backups/` with automatic retention management132- **Fail-Fast with Rollback**: Automatically rolls back on any error, restoring pre-update state133- **Dry-Run Mode**: `--check-only` shows exactly what would change without applying updates134- **Constitution Integration**: Notifies when constitution template has updates (run `/speckit.constitution`)135- **Custom Command Safety**: User-created commands never overwritten, even with `--force`136137## Architecture138139### Modules140- **HashUtils**: Normalized hashing (handles line endings, trailing whitespace, BOM)141- **VSCodeIntegration**: Context detection, Quick Pick, diff/merge editor integration142- **GitHubApiClient**: GitHub Releases API interaction (unauthenticated, 60 req/hour)143- **ManifestManager**: Manifest CRUD operations with caching144- **BackupManager**: Backup creation, restoration, and retention management145- **ConflictDetector**: File state analysis and conflict detection146147### Workflow1481. Prerequisites validation (critical checks must pass, warnings allow continuation)1492. Manifest loading/creation (safe default: assume all files customized if no manifest)1503. GitHub API query for target version1514. File state analysis (6 actions: add/remove/merge/preserve/update/skip)1525. User confirmation with change preview1536. Backup creation (timestamped, excludes backups directory)1547. Selective file updates (fail-fast with automatic rollback)1558. Conflict resolution (Flow A: one-at-a-time, VSCode merge editor)1569. Manifest update (version, file hashes, customization flags)15710. Backup cleanup (keep 5 most recent, requires confirmation)15811. Detailed summary display159160## Exit Codes161162| Code | Meaning |163|------|---------|164| 0 | Success |165| 1 | General error |166| 2 | Prerequisites not met |167| 3 | Network/API error |168| 4 | Git error |169| 5 | User cancelled |170| 6 | Rollback required (automatic) |171172## Limitations173- Use this skill only when the task clearly matches the scope described above.174- Do not treat the output as a substitute for enprojectnment-specific validation, testing, or expert review.175- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.