Hmbown/CodeWhale · error · anyhow::Error

skill '{name}' exists only in a compatible external root; im

Error message

skill '{name}' exists only in a compatible external root; import it with /skills (refusing to write external harness directories)

What it means

resolve_owned_skill_by_name found no match in CodeWhale-owned project/global roots, then ran a Compatible-mode scan and discovered the name exists only in a compatible external (harness-managed) root. Because CodeWhale refuses to write into external harness directories, the mutation is refused with guidance to import the skill into an owned root first. The external-only skill name is the input at fault.

Source

Thrown at crates/tui/src/skills/mutation.rs:493

        };
        matches.retain(|s| s.root.kind == want);
    }

    match matches.as_slice() {
        [] => {
            // If the name only exists externally, tell the user to import.
            let compatible = scan_with_configured(
                ctx.workspace,
                ctx.home,
                ctx.configured_skills_dir,
                SkillAuditMode::Compatible,
                None,
            );
            if compatible.skills.iter().any(|s| {
                s.id.canonical_name == canonical
                    && s.source_kind == SkillSourceKind::CompatibleExternal
            }) {
                bail!(
                    "skill '{name}' exists only in a compatible external root; \
                     import it with /skills (refusing to write external harness directories)"
                );
            }
            bail!("skill '{name}' not found in CodeWhale-owned project/global roots");
        }
        [only] => {
            let DigestState::Known(digest) = &only.digest else {
                bail!("skill '{name}' has unknown package digest; refusing mutation");
            };
            Ok(ResolvedOwnedSkill {
                id: only.id.clone(),
                digest: digest.clone(),
            })
        }
        _ => bail!(
            "skill '{name}' exists in both project and global CodeWhale roots; \
             specify --project or --global"

View on GitHub (pinned to 0c42157ee5)

Solutions

  1. Import the skill into a CodeWhale-owned root with /skills, then retry the mutation
  2. Operate on the external skill with the external harness's own tooling
  3. Verify the intended scope if the skill also exists in an owned root under a different name
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at crates/tui/src/skills/mutation.rs:493 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of Hmbown/CodeWhale@0c42157ee5 (2026-08-20). Data as JSON: /api/errors/5df505992bd2629d. Report an issue: GitHub.