davila7/claude-code-templates · warning

Warning: Error loading plugin skills:

Error message

Warning: Error loading plugin skills:

What it means

loadPluginSkills scans installed plugins for bundled skills and warns when the overall scan fails — plugin registry malformed, a plugin directory unexpectedly missing, or YAML/JSON parse errors at the plugin level. It is the plugin-skills counterpart of the directory scan and similarly returns a possibly-empty array on failure.

Source

Thrown at cli-tool/src/skill-dashboard.js:166

            }

            const skillMdPath = path.join(skillPath, 'SKILL.md');

            if (await fs.pathExists(skillMdPath)) {
              console.log(chalk.gray(`  ✓ Found plugin skill: ${skillDir} from ${marketplace}`));
              const skillData = await this.parseSkill(skillMdPath, skillPath, skillDir, 'Plugin');
              if (skillData) {
                skills.push(skillData);
                console.log(chalk.green(`  ✅ Loaded plugin skill: ${skillData.name}`));
              }
            }
          }
        }
      }

      return skills;
    } catch (error) {
      console.warn(chalk.yellow(`Warning: Error loading plugin skills:`), error.message);
      return skills;
    }
  }

  async parseSkill(skillMdPath, skillPath, skillDirName, source) {
    try {
      const content = await fs.readFile(skillMdPath, 'utf8');

      // Parse YAML frontmatter
      const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
      let frontmatter = {};
      let markdownContent = content;

      if (frontmatterMatch) {
        try {
          frontmatter = yaml.load(frontmatterMatch[1]);
          markdownContent = content.substring(frontmatterMatch[0].length).trim();
        } catch (error) {

View on GitHub (pinned to a0851ed10c)

Solutions

  1. Check the plugin registry / installed-plugins listing for entries pointing at non-existent directories and remove them
  2. Reinstall or cleanly uninstall broken plugins so manifests and folders are consistent
  3. Validate each plugin manifest (`jq .` for JSON, `yq` for YAML) in the plugins directory
  4. Re-run the skill dashboard to confirm plugin skills load

Example fix

# before
# registry lists plugins/my-plugin but folder was rm -rf'd
# after
claude plugin uninstall my-plugin   # or remove the stale registry entry
Defensive patterns

Strategy: validation

Validate before calling

async function pluginEntryOk(plugin) {
  if (!(await fs.pathExists(plugin.path))) return false;
  try { JSON.parse(await fs.readFile(path.join(plugin.path, '.claude-plugin', 'plugin.json'), 'utf8')); return true; }
  catch { return false; }
}

Try / catch

catch (error) {
  console.warn(`Plugin skills scan failed: ${error.message}`);
  return skills;
}

Prevention

When it happens

Trigger: Calling loadPluginSkills when the installed-plugins registry or a plugin's manifest is invalid JSON/YAML, when a registered plugin's directory has been deleted without uninstalling, or when a plugin's skills subfolder violates expected structure.

Common situations: Plugin uninstalled by deleting its folder manually, leaving a stale registry entry; plugin manifest edited by hand and corrupted; version change in plugin manifest schema.

Related errors


AI-assisted analysis of davila7/claude-code-templates@a0851ed10c (2026-08-28). Data as JSON: /api/errors/f4955638dde6f662. Report an issue: GitHub.