multica-ai/multica · error
create skills dir: %w
Error message
create skills dir: %w
What it means
Error "create skills dir: %w" thrown in multica-ai/multica.
Source
Thrown at server/internal/daemon/execenv/context.go:940
// writeSkillFiles writes skill directories into the given parent directory.
// Each skill gets its own subdirectory containing SKILL.md and supporting
// files. manifest, when non-nil, is populated with every newly-created
// directory and file so CleanupSidecars can remove them on
// local_directory teardown without touching user-owned skill directories
// that happen to live alongside ours under the same skills/ parent.
//
// When a Multica skill's natural slug collides with a user-installed
// skill at the same path, we allocate a collision-free sibling slug
// (e.g. `issue-review-multica`) and write there instead. Provider-native
// discovery still picks it up because every subdir under skillsDir is a
// distinct skill; the user's original directory stays bit-for-bit
// intact. Without this fallback writeSkillFiles would have to either
// overwrite user bytes (the bug PR #3444 review caught) or skip the
// skill entirely (which would silently drop a Multica skill the agent
// expects to see).
func writeSkillFiles(skillsDir string, skills []SkillContextForEnv, manifest *sidecarManifest) error {
if err := recordMkdirAll(skillsDir, 0o755, manifest); err != nil {
return fmt.Errorf("create skills dir: %w", err)
}
// resolveSkillSlugs deduplicates within the batch first, so two skills whose
// names sanitize alike ("A B" / "A-B") get distinct bases here instead of
// racing for the same directory. The listings derive from the same function,
// which is what keeps them naming the directories this loop creates.
// allocateCollisionFreeSkillDir still runs on top, for collisions against
// directories we did not write (user-installed skills).
batchSlugs := resolveSkillSlugs(skills)
for i, skill := range skills {
slug, dir, err := allocateCollisionFreeSkillDir(skillsDir, batchSlugs[i])
if err != nil {
return fmt.Errorf("allocate skill dir for %q: %w", skill.Name, err)
}
if err := recordMkdirAll(dir, 0o755, manifest); err != nil {
return err
}View on GitHub (pinned to 2c0912b6ec)
Solutions
- Check permissions to create the skills directory.
When it happens
Trigger: Thrown at server/internal/daemon/execenv/context.go:940 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of multica-ai/multica@2c0912b6ec (2026-08-15).
Data as JSON: /api/errors/3b630ece3d074b26.
Report an issue: GitHub.