coleam00/Archon · error · Error

Claude skill not found in an enabled Claude-native skill…

Error message

Claude skill${unreachable.length === 1 ? '' : 's'} not found in an enabled Claude-native skill directory: ${unreachable.join(', ')}. Install ${unreachable.length === 1 ? 'it' : 'them'} under ${installLocation}.${containerNote}

What it means

applyNodeConfig validates that every skill explicitly declared on an AI node resolves to an enabled Claude-native skill directory. Declared skills are supposed to be node-scoped and explicitly installed; if a declared skill is not reachable, the provider throws rather than silently dropping it, because an unknown name would just be ignored by the SDK.

Solutions

  1. Install the named skill under the reported installLocation (enabled Claude-native skill directory).
  2. For container runs, install the skill into the container image — container workflows cannot use host user-global skills.
  3. Fix the skill name in the workflow YAML to match an installed skill.

Example fix

// before (workflow YAML)
skills: [code-review]
// error: skill not found in enabled directory
// after: install it first
cp -r my-skills/code-review ~/.claude/skills/
skills: [code-review]  # now resolves
Defensive patterns

Strategy: validation

Validate before calling

import { fs, path } from '...';
const dir = path.join(process.env.HOME!, '.claude', 'skills');
for (const s of node.skills ?? []) {
  if (!fs.existsSync(path.join(dir, s, 'SKILL.md'))) {
    throw new Error(`skill '${s}' not installed under ${dir}`);
  }
}

Try / catch

try {
  await provider.sendQuery(...);
} catch (e) {
  if (e.message.includes('not found in an enabled Claude-native skill directory')) {
    // install the listed skills or fix the node's skill names
  }
  throw e;
}

Prevention

When it happens

Trigger: A workflow node names a skill under `skills:` that is not installed under the enabled Claude skill directory (installLocation), or the workflow runs inside a container where only host user-global skills exist and container isolation blocks them.

Common situations: Typo in the skill name; skill installed in a project dir that is not enabled; running containerized workflows that reference host user-global skills (explicitly unsupported); skill removed after the workflow was authored.

Related errors


AI-assisted analysis of coleam00/Archon@0773b97458 (2026-09-01). Data as JSON: /api/errors/d51c77ba243f6e95. Report an issue: GitHub.

Appendix: source

Thrown at packages/providers/src/claude/provider.ts:552

        );

        if (unreachable.length > 0) {
          const enabledRoots = [
            ...(skillSearch.includeProject ? ['project-local .claude/skills/'] : []),
            ...(skillSearch.includeUser ? ['the effective Claude config directory skills/'] : []),
          ];
          const installLocation =
            enabledRoots.length > 0
              ? enabledRoots.join(' or ')
              : 'an enabled Claude setting source (effective settingSources currently enables none)';
          const containerNote = skillSearch.isContainer
            ? ' Container workflows cannot use host user-global skills.'
            : '';
          getLog().error(
            { nodeId: nodeConfig.nodeId, unreachable, skillSearch },
            'claude.declared_skills_unreachable'
          );
          throw new Error(
            `Claude skill${unreachable.length === 1 ? '' : 's'} not found in an enabled Claude-native skill directory: ${unreachable.join(', ')}. Install ${unreachable.length === 1 ? 'it' : 'them'} under ${installLocation}.${containerNote}`
          );
        }

        getLog().warn(
          { nodeId: nodeConfig.nodeId, missing, skillSearch },
          'claude.declared_skills_unresolved'
        );
        warnings.push({
          code: 'claude_skills_unresolved',
          message: `Claude skill${missing.length === 1 ? '' : 's'} not found on disk: ${missing.join(', ')}. This is expected for Claude's built-in skills and for plugin-qualified names (plugin:skill), which the SDK resolves itself. If you meant an installed skill, check the name — an unknown name is ignored rather than loaded.`,
        });
      }
    }
  }

  // allowed_tools → tools. `Skill` is re-added only on the workflow path, which
  // is the only one that narrows `options.skills`; adding it for a non-workflow

View on GitHub (pinned to 0773b97458)