
Claude Skills Troubleshooting
- 698 installs
- 1.3k repo stars
- Updated August 4, 2026
- daymade/claude-code-skills
claude-skills-troubleshooting is a debugging agent skill that systematically diagnoses and fixes failures when Claude Code, Cursor, or custom agent skills stop working for developers maintaining agent skill installations
About
claude-skills-troubleshooting is a daymade/claude-code-skills agent skill with 524 installs listed on skills.sh that guides systematic diagnosis when Claude Code, Cursor, or custom agent skills fail to load, trigger, or execute correctly. Developers reach for claude-skills-troubleshooting after skill manifests, paths, hooks, or agent configurations break following upgrades or repo changes. The skill focuses on reproducible troubleshooting steps across agent environments rather than rewriting skill content from scratch. Use it when skills silently stop activating, commands error on invocation, or IDE agent integrations regress after configuration edits.
- Diagnoses common Claude Code and Cursor agent failures
- Provides step-by-step troubleshooting workflows
- Covers permission, context, and output parsing issues
- Works across multiple agent environments and skill types
- Includes recovery commands and configuration fixes
Claude Skills Troubleshooting by the numbers
- 698 all-time installs (skills.sh)
- Ranked #1,432 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/daymade/claude-code-skills --skill claude-skills-troubleshootingAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 698 |
|---|---|
| repo stars | ★ 1.3k |
| Last updated | August 4, 2026 |
| Repository | daymade/claude-code-skills ↗ |
Why do Claude Code agent skills stop working?
Systematically diagnose and fix failures when Claude Code, Cursor, or custom agent skills stop working.
Who is it for?
Developers maintaining Claude Code or Cursor skill libraries who hit sudden skill load, trigger, or execution failures.
Skip if: Skip claude-skills-troubleshooting when authoring brand-new skill content from scratch with no runtime or installation errors present.
When should I use this skill?
Trigger when Claude Code, Cursor, or custom agent skills fail to load, trigger incorrectly, or error after configuration or install changes.
What you get
Identified root cause, corrected skill manifest or path fixes, and restored agent skill trigger behavior.
- root cause diagnosis
- corrected skill configuration steps
By the numbers
- Listed with 524 installs on skills.sh
Files
Claude Skills Troubleshooting
Overview
Diagnose and resolve common Claude Code plugin and skill configuration issues. This skill provides systematic debugging workflows for plugin installation, enablement, and activation problems.
Quick Diagnosis
Run the diagnostic script to identify common issues:
python3 scripts/diagnose_plugins.pyThe script checks:
- Installed vs enabled plugins mismatch
- Missing enabledPlugins entries in settings.json
- Stale marketplace cache
- Invalid plugin configurations
Common Issues
Issue 1: Plugin Installed But Not Showing in Available Skills
Symptoms:
/pluginshows plugin as installed- Skill not appearing in Skill tool's available list
- Plugin metadata exists in
installed_plugins.json
Root Cause: Known bug (GitHub #17832) - plugins are added to installed_plugins.json but NOT automatically added to enabledPlugins in settings.json.
Diagnosis:
# Check if plugin is in installed_plugins.json
cat ~/.claude/plugins/installed_plugins.json | grep "plugin-name"
# Check if plugin is enabled in settings.json
cat ~/.claude/settings.json | grep "plugin-name"Solution:
# Option 1: Use CLI to enable
claude plugin enable plugin-name@marketplace-name
# Option 2: Manually edit settings.json
# Add to enabledPlugins section:
# "plugin-name@marketplace-name": trueIssue 2: Understanding Plugin State Architecture
Key files:
| File | Purpose |
|---|---|
~/.claude/plugins/installed_plugins.json | Registry of ALL plugins (installed + disabled) |
~/.claude/settings.json → enabledPlugins | Controls which plugins are ACTIVE |
~/.claude/plugins/known_marketplaces.json | Registered marketplace sources |
~/.claude/plugins/cache/ | Actual plugin files |
A plugin is active ONLY when: 1. Exists in installed_plugins.json (registered) 2. Listed in settings.json → enabledPlugins with value true
Issue 3: Marketplace Cache Stale
Symptoms:
- GitHub has latest changes
- Install finds plugin but gets old version
- Newly added plugins not visible
Solution:
# Update marketplace cache
claude plugin marketplace update marketplace-name
# Or clear and re-fetch
rm -rf ~/.claude/plugins/cache/marketplace-name
claude plugin marketplace update marketplace-nameIssue 4: Plugin Not Found in Marketplace
Common causes (in order of likelihood):
1. Local changes not pushed to GitHub - Most common!
git status
git push
claude plugin marketplace update marketplace-name2. marketplace.json configuration error
python3 -m json.tool .claude-plugin/marketplace.json3. Skill directory missing
ls -la skill-name/SKILL.mdDiagnostic Commands Reference
| Purpose | Command |
|---|---|
| List marketplaces | claude plugin marketplace list |
| Update marketplace | claude plugin marketplace update {name} |
| Install plugin | claude plugin install {plugin}@{marketplace} |
| Enable plugin | claude plugin enable {plugin}@{marketplace} |
| Disable plugin | claude plugin disable {plugin}@{marketplace} |
| Uninstall plugin | claude plugin uninstall {plugin}@{marketplace} |
| Check installed | `cat ~/.claude/plugins/installed_plugins.json \ |
| Check enabled | `cat ~/.claude/settings.json \ |
Batch Enable Missing Plugins
To enable all installed but disabled plugins from a marketplace:
python3 scripts/enable_all_plugins.py marketplace-nameSkills vs Commands Architecture
Claude Code has two types of user-invocable extensions:
1. Skills (in skills/ directory)
- Auto-activated based on description matching
- Loaded when user request matches skill description
2. Commands (in commands/ directory)
- Explicitly invocable via
/command-name - Appears in Skill tool's available list
- Requires command file (e.g.,
commands/seer.md)
If a skill should be explicitly invocable, add a corresponding command file.
References
- See
references/known_issues.mdfor GitHub issue tracking - See
references/architecture.mdfor detailed plugin architecture
Security scan passed
Scanned at: 2026-06-13T19:44:41.523095
Tool: gitleaks + pattern-based validation
Content hash: 04643e1b42c98c7ba15c5d9a99588542f12a0eb32b3526fd0318b54f7276bfaf
Claude Code Plugin Architecture
Directory Structure
~/.claude/
├── settings.json # User settings including enabledPlugins
├── plugins/
│ ├── installed_plugins.json # Registry of ALL plugins (enabled + disabled)
│ ├── known_marketplaces.json # Registered marketplace sources
│ ├── marketplaces/ # Marketplace git clones
│ │ ├── marketplace-name/
│ │ │ └── .claude-plugin/
│ │ │ └── marketplace.json # Plugin definitions
│ │ └── ...
│ └── cache/ # Installed plugin files
│ └── marketplace-name/
│ └── plugin-name/
│ └── version/
│ └── skill-name/
│ ├── SKILL.md
│ ├── scripts/
│ └── references/
└── skills/ # Personal skills (not from marketplace)Plugin Lifecycle
Installation Flow
1. User runs: claude plugin install plugin@marketplace
↓
2. CLI reads marketplace.json from marketplace directory
↓
3. Plugin files copied to cache:
~/.claude/plugins/cache/marketplace/plugin/version/
↓
4. Entry added to installed_plugins.json:
{ "plugin@marketplace": [{ "version": "1.0.0", ... }] }
↓
5. ⚠️ BUG: Entry NOT automatically added to settings.json enabledPlugins
↓
6. User must manually enable:
claude plugin enable plugin@marketplace
↓
7. Entry added to settings.json:
{ "enabledPlugins": { "plugin@marketplace": true } }Activation Flow
1. Claude Code starts
↓
2. Reads settings.json → enabledPlugins
↓
3. For each enabled plugin:
- Loads skill metadata (name + description)
- Metadata added to system prompt
↓
4. User sends message
↓
5. Claude matches message against skill descriptions
↓
6. Matching skill's SKILL.md loaded into context
↓
7. Claude uses skill instructions to respondKey Files Explained
installed_plugins.json
Purpose: Registry of all plugins ever installed (NOT just active ones).
Structure:
{
"version": 2,
"plugins": {
"plugin-name@marketplace": [
{
"scope": "user",
"installPath": "~/.claude/plugins/cache/...",
"version": "1.0.0",
"installedAt": "2025-01-01T00:00:00.000Z"
}
]
}
}Note: A plugin listed here is NOT necessarily active. Check settings.json for actual enabled state.
settings.json
Purpose: User preferences and enabled plugins.
Relevant section:
{
"enabledPlugins": {
"plugin-name@marketplace": true,
"another-plugin@marketplace": true
}
}Important: Only plugins with true value are loaded at startup.
known_marketplaces.json
Purpose: Registry of marketplace sources.
Structure:
{
"marketplace-name": {
"source": {
"source": "github",
"repo": "owner/repo"
},
"installLocation": "~/.claude/plugins/marketplaces/marketplace-name",
"lastUpdated": "2025-01-01T00:00:00.000Z"
}
}marketplace.json (in marketplace repo)
Purpose: Defines available plugins in a marketplace.
Location: .claude-plugin/marketplace.json
Structure:
{
"name": "marketplace-name",
"metadata": {
"version": "1.0.0",
"description": "..."
},
"plugins": [
{
"name": "plugin-name",
"description": "...",
"source": "./skill-directory",
"version": "1.0.0"
}
]
}Plugin vs Skill vs Command
Plugin
- Distribution unit that packages one or more skills
- Defined in marketplace.json
- Installed via
claude plugin install
Skill
- Functional unit with SKILL.md and optional resources
- Auto-activates based on description matching
- Located in
skills/directory
Command
- Explicit slash command (e.g.,
/seer) - Defined in
commands/directory - Appears in Skill tool's available list
- Must be explicitly invoked by user
Scopes
Plugins can be installed in different scopes:
| Scope | Location | Visibility |
|---|---|---|
| user | ~/.claude/settings.json | All projects for current user |
| project | .claude/settings.json | Team members via git |
| local | .claude/settings.local.json | Only local machine |
Common Misconceptions
1. installed_plugins.json = active plugins
- Reality: It's a registry of ALL plugins, including disabled ones
2. Plugins auto-enable after install
- Reality: Bug prevents auto-enable; manual step required
3. Updating local files updates the plugin
- Reality: Must push to GitHub, then update marketplace cache
4. Cache is just for performance
- Reality: Cache IS where plugins live; deleting it uninstalls plugins
Known Claude Code Plugin Issues
This document tracks known bugs and issues related to Claude Code plugins.
Open Issues
GitHub #17832 - Plugins Not Auto-Enabled After Install
Status: OPEN URL: https://github.com/anthropics/claude-code/issues/17832
Problem: When installing a plugin from a marketplace, Claude Code adds the plugin to installed_plugins.json but does NOT add it to settings.json enabledPlugins.
Impact: Plugins appear "installed" but don't function. Skills silently fail to load.
Workaround: Manually enable via CLI or edit settings.json:
claude plugin enable plugin-name@marketplace---
GitHub #19696 - installed_plugins.json Naming Misleading
Status: OPEN URL: https://github.com/anthropics/claude-code/issues/19696
Problem: The file installed_plugins.json contains ALL plugins ever registered, including disabled ones. The actual enabled state is tracked separately in settings.json.
Impact: Confusing for developers - file shows many plugins but only some are active.
Note: This is a naming/documentation issue, not a functional bug.
---
GitHub #17089 - Local Plugins Breaking After 2.1.x Update
Status: Reported URL: https://github.com/anthropics/claude-code/issues/17089
Problem: Local plugins no longer persist after the 2.1.x update.
Workaround: Create a marketplace wrapper structure for local plugins.
---
GitHub #13543 - MCP Servers from Marketplace Not Available
Status: Reported URL: https://github.com/anthropics/claude-code/issues/13543
Problem: After updating to Claude Code 2.0.64, MCP servers defined in marketplace plugins were no longer available.
---
GitHub #16260 - Contradictory Scope Error Messages
Status: Reported URL: https://github.com/anthropics/claude-code/issues/16260
Problem: CLI gives contradictory error messages about plugin scope.
Workaround: Manually edit settings.json to fix scope issues.
Resolved Issues
(Add resolved issues here as they are fixed)
Related Documentation
#!/usr/bin/env python3
"""
Diagnose Claude Code plugin and skill configuration issues.
This script checks for common problems:
- Installed plugins not enabled in settings.json
- Stale marketplace cache
- Missing plugin files
- Configuration inconsistencies
"""
import json
import os
from pathlib import Path
from datetime import datetime
def get_claude_dir():
"""Get the Claude configuration directory."""
return Path.home() / ".claude"
def load_json_file(path):
"""Load a JSON file, return None if not found."""
try:
with open(path, 'r') as f:
return json.load(f)
except (FileNotFoundError, json.JSONDecodeError) as e:
return None
def check_installed_plugins():
"""Check installed_plugins.json."""
claude_dir = get_claude_dir()
installed_path = claude_dir / "plugins" / "installed_plugins.json"
data = load_json_file(installed_path)
if not data:
print("❌ Cannot read installed_plugins.json")
return {}
plugins = data.get("plugins", {})
print(f"📦 Found {len(plugins)} registered plugins in installed_plugins.json")
return plugins
def check_enabled_plugins():
"""Check enabledPlugins in settings.json."""
claude_dir = get_claude_dir()
settings_path = claude_dir / "settings.json"
data = load_json_file(settings_path)
if not data:
print("❌ Cannot read settings.json")
return {}
enabled = data.get("enabledPlugins", {})
enabled_count = sum(1 for v in enabled.values() if v)
print(f"✅ Found {enabled_count} enabled plugins in settings.json")
return enabled
def check_marketplaces():
"""Check registered marketplaces."""
claude_dir = get_claude_dir()
marketplaces_path = claude_dir / "plugins" / "known_marketplaces.json"
data = load_json_file(marketplaces_path)
if not data:
print("❌ Cannot read known_marketplaces.json")
return {}
print(f"🏪 Found {len(data)} registered marketplaces:")
for name, info in data.items():
last_updated = info.get("lastUpdated", "unknown")
print(f" - {name} (updated: {last_updated[:10] if len(last_updated) > 10 else last_updated})")
return data
def find_missing_enabled(installed, enabled):
"""Find plugins that are installed but not enabled."""
missing = []
for plugin_name in installed.keys():
if plugin_name not in enabled or not enabled.get(plugin_name):
missing.append(plugin_name)
return missing
def check_cache_freshness(marketplaces):
"""Check if marketplace caches are stale."""
claude_dir = get_claude_dir()
cache_dir = claude_dir / "plugins" / "cache"
stale = []
for name, info in marketplaces.items():
marketplace_cache = cache_dir / name
if marketplace_cache.exists():
# Check modification time
mtime = datetime.fromtimestamp(marketplace_cache.stat().st_mtime)
age_days = (datetime.now() - mtime).days
if age_days > 7:
stale.append((name, age_days))
return stale
def main():
print("=" * 60)
print("Claude Code Plugin Diagnostics")
print("=" * 60)
print()
# Check installed plugins
installed = check_installed_plugins()
print()
# Check enabled plugins
enabled = check_enabled_plugins()
print()
# Check marketplaces
marketplaces = check_marketplaces()
print()
# Find missing enabled
missing = find_missing_enabled(installed, enabled)
if missing:
print("=" * 60)
print(f"⚠️ WARNING: {len(missing)} plugins installed but NOT enabled!")
print("=" * 60)
print()
print("These plugins exist in installed_plugins.json but are missing")
print("from enabledPlugins in settings.json:")
print()
for plugin in sorted(missing):
print(f" - {plugin}")
print()
print("To enable, run:")
print(" claude plugin enable <plugin-name>")
print()
print("Or add to ~/.claude/settings.json under enabledPlugins:")
print(' "plugin-name@marketplace": true')
print()
else:
print("✅ All installed plugins are enabled!")
print()
# Check cache freshness
stale = check_cache_freshness(marketplaces)
if stale:
print("=" * 60)
print("⚠️ Stale marketplace caches detected:")
print("=" * 60)
for name, days in stale:
print(f" - {name}: {days} days old")
print()
print("To update, run:")
print(" claude plugin marketplace update <marketplace-name>")
print()
# Summary
print("=" * 60)
print("Summary")
print("=" * 60)
print(f" Registered plugins: {len(installed)}")
print(f" Enabled plugins: {sum(1 for v in enabled.values() if v)}")
print(f" Missing enabled: {len(missing)}")
print(f" Marketplaces: {len(marketplaces)}")
print()
if missing:
print("🔧 Action needed: Enable missing plugins to make them available")
return 1
else:
print("✅ No issues detected!")
return 0
if __name__ == "__main__":
exit(main())
#!/usr/bin/env python3
"""
Enable all installed but disabled plugins from a specific marketplace.
Usage:
python3 enable_all_plugins.py <marketplace-name>
Example:
python3 enable_all_plugins.py daymade-skills
"""
import json
import sys
from pathlib import Path
def get_claude_dir():
"""Get the Claude configuration directory."""
return Path.home() / ".claude"
def load_json_file(path):
"""Load a JSON file."""
with open(path, 'r') as f:
return json.load(f)
def save_json_file(path, data):
"""Save data to a JSON file."""
with open(path, 'w') as f:
json.dump(data, f, indent=2)
def main():
if len(sys.argv) < 2:
print("Usage: python3 enable_all_plugins.py <marketplace-name>")
print("Example: python3 enable_all_plugins.py daymade-skills")
return 1
marketplace = sys.argv[1]
claude_dir = get_claude_dir()
# Load installed plugins
installed_path = claude_dir / "plugins" / "installed_plugins.json"
try:
installed_data = load_json_file(installed_path)
except FileNotFoundError:
print(f"❌ Cannot find {installed_path}")
return 1
# Load settings
settings_path = claude_dir / "settings.json"
try:
settings = load_json_file(settings_path)
except FileNotFoundError:
print(f"❌ Cannot find {settings_path}")
return 1
# Get current enabled plugins
enabled = settings.get("enabledPlugins", {})
# Find plugins from the specified marketplace
plugins_to_enable = []
for plugin_name in installed_data.get("plugins", {}).keys():
if plugin_name.endswith(f"@{marketplace}"):
if plugin_name not in enabled or not enabled[plugin_name]:
plugins_to_enable.append(plugin_name)
if not plugins_to_enable:
print(f"✅ All plugins from {marketplace} are already enabled!")
return 0
print(f"Found {len(plugins_to_enable)} plugins to enable from {marketplace}:")
for plugin in sorted(plugins_to_enable):
print(f" - {plugin}")
# Confirm
print()
response = input("Enable all these plugins? [y/N] ")
if response.lower() != 'y':
print("Cancelled.")
return 0
# Enable plugins
if "enabledPlugins" not in settings:
settings["enabledPlugins"] = {}
for plugin in plugins_to_enable:
settings["enabledPlugins"][plugin] = True
# Save settings
save_json_file(settings_path, settings)
print()
print(f"✅ Enabled {len(plugins_to_enable)} plugins!")
print()
print("⚠️ Restart Claude Code for changes to take effect.")
return 0
if __name__ == "__main__":
exit(main())
Related skills
How it compares
Use claude-skills-troubleshooting for broken skill runtime diagnosis rather than skill authoring generators or feature documentation skills.
FAQ
Which agents does claude-skills-troubleshooting support?
claude-skills-troubleshooting supports Claude Code, Cursor, and custom agent skill setups, providing systematic diagnosis when skills stop loading, triggering, or executing after configuration changes.
How popular is claude-skills-troubleshooting?
claude-skills-troubleshooting is published in daymade/claude-code-skills and is listed on skills.sh with 524 installs, indicating community use for agent skill failure diagnosis.