Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Completely remove claude-ops plugin, all stored credentials, cached files, shell exports, and MCP registrations. Confirms each step before deletion.
.claude/skills/davepoon-uninstall/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 82% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 13% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 150% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 103% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 13% | 0% |
You are running a complete uninstall of the claude-ops plugin. This removes everything the plugin and /ops:setup created. Every deletion step requires user confirmation via AskUserQuestion — never delete silently.
Use AskUserQuestion:
This will completely remove claude-ops and all its data:
- Plugin installation and marketplace registration
- Stored preferences and project registry
- Cached plugin files
- Keychain credentials (Telegram, Slack tokens)
- Shell profile exports (CLAUDE_PLUGIN_ROOT)
- MCP server registrations (Telegram, Slack)
[Uninstall everything] [Cancel]If cancelled, stop immediately.
Scan for all claude-ops artifacts. Build a list of what's present:
bash# Preferences PREFS_DIR="${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}" ls -la "$PREFS_DIR" 2>/dev/null # Cache CACHE_DIR="$HOME/.claude/plugins/cache/ops-marketplace" ls -la "$CACHE_DIR" 2>/dev/null # Keychain entries (macOS) for key in telegram-api-id telegram-api-hash telegram-phone telegram-session slack-xoxc slack-xoxd; do security find-generic-password -s "$key" 2>/dev/null && echo "FOUND: $key" done # Shell profile exports grep -l 'CLAUDE_PLUGIN_ROOT' ~/.zshrc ~/.bashrc ~/.zprofile ~/.bash_profile 2>/dev/null # MCP registrations grep -l 'telegram\|slack-mcp' ~/.claude.json 2>/dev/null
Print a summary of what was found, then proceed to delete each category.
For each found keychain entry, ask via AskUserQuestion:
Remove keychain credential: <key-name>?
[Yes] [Skip]On Yes:
bashsecurity delete-generic-password -s "<key-name>" 2>/dev/null
Ask via AskUserQuestion:
Remove plugin data?
- Preferences: <prefs-dir>
- Cache: <cache-dir>
[Yes, delete both] [Skip]On Yes:
bashrm -rf "$PREFS_DIR" rm -rf "$CACHE_DIR"
For each shell profile file that contains CLAUDE_PLUGIN_ROOT:
Ask via AskUserQuestion:
Remove CLAUDE_PLUGIN_ROOT export from <file>?
[Yes] [Skip]On Yes, read the file and remove lines containing CLAUDE_PLUGIN_ROOT. Use sed or similar — do NOT rewrite the entire file. Only remove the specific export line.
bashsed -i '' '/CLAUDE_PLUGIN_ROOT/d' "<file>"
Check if ~/.claude.json contains MCP server entries added by the plugin (telegram, slack-mcp). For each:
Ask via AskUserQuestion:
Remove MCP server registration: <server-name> from ~/.claude.json?
[Yes] [Skip]On Yes, use jq to remove the entry:
bashjq 'del(.mcpServers["<server-name>"])' ~/.claude.json > /tmp/claude-json-tmp && mv /tmp/claude-json-tmp ~/.claude.json
The /plugin uninstall UI does not always clean up settings files. Directly remove all ops references from the JSON config files that Claude Code reads on startup.
bashINSTALLED="$HOME/.claude/plugins/installed_plugins.json" if [ -f "$INSTALLED" ] && grep -q 'ops.*marketplace' "$INSTALLED"; then python3 -c " import json, sys with open('$INSTALLED') as f: data = json.load(f) keys_to_remove = [k for k in data.get('plugins', {}) if 'ops-marketplace' in k or 'ops@ops' in k] for k in keys_to_remove: del data['plugins'][k] with open('$INSTALLED', 'w') as f: json.dump(data, f, indent=2) print(f'Removed {len(keys_to_remove)} entries from installed_plugins.json') " else echo "No ops entries in installed_plugins.json" fi
bashKNOWN="$HOME/.claude/plugins/known_marketplaces.json" if [ -f "$KNOWN" ] && grep -q 'ops-marketplace' "$KNOWN"; then python3 -c " import json with open('$KNOWN') as f: data = json.load(f) keys_to_remove = [k for k in data if 'ops-marketplace' in k or 'ops' in k.lower()] for k in keys_to_remove: del data[k] with open('$KNOWN', 'w') as f: json.dump(data, f, indent=2) print(f'Removed {len(keys_to_remove)} marketplace entries from known_marketplaces.json') " else echo "No ops marketplace in known_marketplaces.json" fi
Both ~/.claude/settings.json and ~/.claude/settings.local.json may contain enabledPlugins entries and stale permissions.allow entries referencing ops-marketplace paths.
bashfor SETTINGS_FILE in "$HOME/.claude/settings.json" "$HOME/.claude/settings.local.json"; do [ -f "$SETTINGS_FILE" ] || continue if grep -q 'ops' "$SETTINGS_FILE"; then python3 -c " import json, re with open('$SETTINGS_FILE') as f: data = json.load(f) # Remove ops from enabledPlugins ep = data.get('enabledPlugins', {}) ops_keys = [k for k in ep if 'ops' in k.lower()] for k in ops_keys: del ep[k] # Remove ops-marketplace permission entries perms = data.get('permissions', {}) if 'allow' in perms: before = len(perms['allow']) perms['allow'] = [p for p in perms['allow'] if 'ops-marketplace' not in p and 'claude-ops' not in p] removed = before - len(perms['allow']) else: removed = 0 # Remove ops from extraKnownMarketplaces ekm = data.get('extraKnownMarketplaces', {}) ekm_keys = [k for k in ekm if 'ops' in k.lower()] for k in ekm_keys: del ekm[k] with open('$SETTINGS_FILE', 'w') as f: json.dump(data, f, indent=2) print(f'Cleaned $SETTINGS_FILE: {len(ops_keys)} plugin entries, {removed} permissions, {len(ekm_keys)} extra marketplaces') " else echo "No ops references in $SETTINGS_FILE" fi done
bashrm -rf "$HOME/.claude/plugins/marketplaces/ops-marketplace" 2>/dev/null rm -rf "$HOME/.claude/plugins/cache/ops-marketplace" 2>/dev/null rm -rf "$HOME/.claude/plugins/data/ops-inline" 2>/dev/null echo "Removed marketplace, cache, and data directories"
Print:
claude-ops has been completely removed.
Keychain: <N> credentials deleted
Preferences: deleted
Cache: deleted
Shell: <N> exports removed
MCP: <N> servers removed
Settings: cleaned (installed_plugins, known_marketplaces, settings)
Directories: removed (marketplace, cache, data)
Run `/reload-plugins` then `/plugin` in Claude Code to verify ops no longer appears.
To reinstall later:
/reload-plugins
/plugin marketplace add Lifecycle-Innovations-Limited/claude-ops
/plugin install ops@lifecycle-innovations-limited-claude-ops
/reload-plugins
/ops:setup| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 13,973 | 5,961 | -57% | 1 | 1 | 0% | 848 | 2,418 | +185% | 0 | 0 | — |
case-02 | fail→fail | 10,261 | 5,703 | -44% | 1 | 1 | 0% | 1,825 | 2,329 | +28% | 0 | 0 | — |
case-03 | fail→fail | 15,639 | 5,170 | -67% | 1 | 1 | 0% | 3,427 | 2,410 | -30% | 0 | 0 | — |
case-04 | pass→pass | 5,903 | 3,588 | -39% | 1 | 1 | 0% | 1,124 | 2,760 | +146% | 0 | 0 | — |
case-05 | pass→pass | 6,963 | 5,249 | -25% | 1 | 1 | 0% | 1,603 | 3,179 | +98% | 0 | 0 | — |
case-06 | pass→pass | 7,565 | 4,083 | -46% | 1 | 1 | 0% | 1,593 | 2,837 | +78% | 0 | 0 | — |
case-07 | fail→pass | 9,581 | 4,752 | -50% | 1 | 1 | 0% | 1,643 | 2,990 | +82% | 0 | 0 | — |
case-08 | pass→pass | 8,794 | 1,997 | -77% | 1 | 1 | 0% | 1,590 | 2,352 | +48% | 0 | 0 | — |
case-09 | pass→pass | 9,377 | 4,497 | -52% | 1 | 1 | 0% | 1,813 | 2,963 | +63% | 0 | 0 | — |
case-10 | pass→pass | 8,474 | 5,752 | -32% | 1 | 1 | 0% | 1,779 | 3,351 | +88% | 0 | 0 | — |
case-11 | pass→pass | 5,039 | 5,930 | +18% | 1 | 1 | 0% | 990 | 3,251 | +228% | 0 | 0 | — |
case-12 | pass→pass | 8,484 | 3,555 | -58% | 1 | 1 | 0% | 1,837 | 2,784 | +52% | 0 | 0 | — |
case-13 | pass→pass | 12,009 | 7,304 | -39% | 1 | 1 | 0% | 2,416 | 3,572 | +48% | 0 | 0 | — |
case-14 | fail→pass | 11,502 | 2,935 | -74% | 1 | 1 | 0% | 2,264 | 2,567 | +13% | 0 | 0 | — |
case-15 | fail→pass | 6,035 | 2,146 | -64% | 1 | 1 | 0% | 935 | 2,341 | +150% | 0 | 0 | — |
case-16 | fail→pass | 7,649 | 3,404 | -55% | 1 | 1 | 0% | 1,253 | 2,540 | +103% | 0 | 0 | — |
case-17 | fail→pass | 12,636 | 2,228 | -82% | 1 | 1 | 0% | 2,165 | 2,454 | +13% | 0 | 0 | — |
case-22 | fail→pass | 31,569 | 4,749 | -85% | 1 | 1 | 0% | 6,159 | 2,345 | -62% | 0 | 0 | — |
case-18 | fail→fail | 5,111 | 1,687 | -67% | 1 | 1 | 0% | 898 | 2,260 | +152% | 0 | 0 | — |
case-19 | pass→pass | 8,477 | 4,590 | -46% | 1 | 1 | 0% | 1,669 | 2,871 | +72% | 0 | 0 | — |
case-20 | fail→pass | 7,524 | 2,401 | -68% | 1 | 1 | 0% | 1,337 | 2,552 | +91% | 0 | 0 | — |
case-21 | fail→pass | 7,565 | 1,817 | -76% | 1 | 1 | 0% | 1,405 | 2,367 | +68% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +36 percentage points is the difference between those two pass rates over the 21 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.