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

  1. 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.