About remove
A skill for removing OpenWolf from the current project, including project-specific files, hooks, configuration entries, and its registry entry. It preserves unrelated hooks and files, while global binary removal requires separate user approval.
Key features
- 01Removes project-level OpenWolf files
- 02Filters matching hooks from settings
- 03Removes project registry entry
- 04Optionally uninstalls global binary
- 05Verifies removal results
Use cases
- 01Remove OpenWolf from a project
- 02Clean up project hooks and rules
- 03Uninstall the global binary with approval
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ terrylica/ cc-skills --skill removeAfter installing, type/removein Claude Code to confirm it loaded.
Details
From the project READMERemove OpenWolf
Cleanly tear down openwolf for the current project (cwd at invocation). The npm package ships no uninstall command — this skill is the canonical removal path.
Self-Evolving Skill: If openwolf changes its file layout, hook substring, or registry shape — fix this file. Only for real, reproducible drift.
What gets removed (all from the current project)
.wolf/directory (data + hook scripts)- Hook entries in
.claude/settings.jsonwhosecommandincludes.wolf/hooks/— every other hook is preserved verbatim .claude/rules/openwolf.md- The 225-byte openwolf snippet at the top of
CLAUDE.md(only that block; rest of file untouched) - PM2 daemon
openwolf-$(basename "$PROJECT_ROOT")(if PM2 is installed) - Project entry in
~/.openwolf/registry.json
What does NOT get removed
- The global
openwolfnpm binary (separate decision; ask user explicitly). - Backups under
.wolf/backups/are removed with.wolf/itself — if you need them, copy out first.
Workflow
Step 1: Confirm with user
Use AskUserQuestion. List all six removal targets above. Offer:
Yes, remove openwolf from this project(default)Also uninstall the global openwolf binary(extra step, runspnpm remove -g openwolf||npm uninstall -g openwolf)Cancel— exit cleanly
Step 2: Capture project basename for PM2 daemon name
PROJECT_ROOT="$(pwd)"
PROJECT_BASE="$(basename "$PROJECT_ROOT")"
PLUGIN_DIR="$(cc-plugin-root openwolf)"
Step 3: Run the removal script
bash "$PLUGIN_DIR/scripts/openwolf-remove.sh"
The script handles all six targets with set -e + step-level error reporting. It is idempotent — every step uses || true for the "already absent" case but reports each action.
Step 4: Optional — uninstall global binary
If the user chose this in step 1:
if command -v pnpm >/dev/null; then pnpm remove -g openwolf
elif command -v bun >/dev/null; then bun remove -g openwolf
else npm uninstall -g openwolf
fi
Step 5: Verify
[ ! -d "$PROJECT_ROOT/.wolf" ] && echo " ✓ .wolf/ removed"
[ ! -f "$PROJECT_ROOT/.claude/rules/openwolf.md" ] && echo " ✓ rules file removed"
grep -q '\.wolf/hooks/' "$PROJECT_ROOT/.claude/settings.json" 2>/dev/null && echo " ✗ stray .wolf/hooks/ entry in settings.json — investigate" || echo " ✓ settings.json clean"
grep -q '@\.wolf/OPENWOLF\.md' "$PROJECT_ROOT/CLAUDE.md" 2>/dev/null && echo " ✗ snippet still in CLAUDE.md — investigate" || echo " ✓ CLAUDE.md clean"
Step 6: Report
Summarize what was removed and what (if anything) was left behind on purpose.
Post-Execution Reflection
- Locate yourself. — This SKILL.md path.
- Did the removal script error on any step? — Fix the script (
scripts/openwolf-remove.sh), not just this skill. - Did openwolf change its CLAUDE.md snippet? — Update both the script's removal pattern AND the verify regex above.
- Did the registry shape change? — Update the
nodeblock in the script.
The script scripts/openwolf-remove.sh is the load-bearing component — keep it precise.