{"record":{"id":"767f12e7eba88777","repo":"coleam00/Archon","slug":"claude-skills-unresolved","errorCode":"claude_skills_unresolved","errorMessage":"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.","messagePattern":"Claude skill(.+?) not found on disk: (.+?)\\. 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\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"packages/providers/src/claude/provider.ts","lineNumber":563,"sourceCode":"          const containerNote = skillSearch.isContainer\n            ? ' Container workflows cannot use host user-global skills.'\n            : '';\n          getLog().error(\n            { nodeId: nodeConfig.nodeId, unreachable, skillSearch },\n            'claude.declared_skills_unreachable'\n          );\n          throw new Error(\n            `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}`\n          );\n        }\n\n        getLog().warn(\n          { nodeId: nodeConfig.nodeId, missing, skillSearch },\n          'claude.declared_skills_unresolved'\n        );\n        warnings.push({\n          code: 'claude_skills_unresolved',\n          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.`,\n        });\n      }\n    }\n  }\n\n  // allowed_tools → tools. `Skill` is re-added only on the workflow path, which\n  // is the only one that narrows `options.skills`; adding it for a non-workflow\n  // caller would expose the ambient catalog instead of a declared subset.\n  const selectsSkills = isWorkflowNode && (nodeConfig.skills?.length ?? 0) > 0;\n  if (nodeConfig.allowed_tools !== undefined) {\n    options.tools = selectsSkills\n      ? [...new Set([...nodeConfig.allowed_tools, 'Skill'])]\n      : nodeConfig.allowed_tools;\n  }\n\n  // denied_tools → disallowedTools\n  if (nodeConfig.denied_tools !== undefined) {\n    options.disallowedTools = nodeConfig.denied_tools;","sourceCodeStart":545,"sourceCodeEnd":581,"githubUrl":"https://github.com/coleam00/Archon/blob/0773b9745896ef0612e709c80845a0f7db315b19/packages/providers/src/claude/provider.ts#L545-L581","documentation":"applyNodeConfig distinguishes declared skills that exist in enabled directories (hard error 605) from names it cannot find on disk (soft warning, code claude_skills_unresolved). Unresolved names are expected for Claude built-in skills and plugin-qualified names (plugin:skill) that the SDK resolves itself; for genuinely unknown names the SDK would silently ignore them, hence the warning.","triggerScenarios":"A node declares a skill name that matches no file on disk: a built-in Claude skill, a `plugin:skill` qualified name, or a plain typo of an installed skill.","commonSituations":"Using built-in skill names in the YAML; referencing plugin skills that only the SDK resolves; typos like 'code-reviewr'.","solutions":["Verify the exact skill name; fix typos for installed skills.","If it is a built-in or plugin skill, no action needed — the SDK resolves it; remove it from the declared list if you want a clean log.","Install the skill under an enabled directory if it was supposed to be a local skill."],"exampleFix":"// before\nskills: [code-review, contianerize]\n// warning: 'contianerize' not found on disk\n// after\nskills: [code-review, containerize]","handlingStrategy":"validation","validationCode":"const onDisk = new Set(listInstalledSkillNames());\nconst unknown = (node.skills ?? []).filter(s => !s.includes(':') && !onDisk.has(s));\nif (unknown.length) console.warn(`typo? not on disk and not plugin-qualified: ${unknown}`);","typeGuard":null,"tryCatchPattern":"const result = await provider.sendQuery(...);\nfor (const w of result.warnings) {\n  if (w.code === 'claude_skills_unresolved') {\n    // built-ins/plugin skills are fine; otherwise fix the name\n  }\n}","preventionTips":["Copy skill names exactly from the installed skills directory.","Treat warnings with code claude_skills_unresolved as review items, not noise.","Use plugin-qualified names only for skills you know the SDK resolves."],"tags":["claude","skills","provider","typo"],"backgroundTag":"declared-skill-unresolved","analyzedSha":"0773b9745896ef0612e709c80845a0f7db315b19","analyzedAt":"2026-09-01T02:28:07.064Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}