cli/cli · error

could not list skill files: %w

Error message

could not list skill files: %w

What it means

Error "could not list skill files: %w" thrown in cli/cli.

Source

Thrown at internal/skills/installer/installer.go:260

				return fmt.Errorf("could not inject metadata: %w", injectErr)
			}
			content = []byte(injected)
		}

		return os.WriteFile(destPath, content, 0o644)
	})
}

func installSkill(opts *Options, skill discovery.Skill, baseDir string) error {
	// Use skill.Name (not InstallName) for a flat directory layout.
	skillDir := filepath.Join(baseDir, skill.Name)
	if err := os.MkdirAll(skillDir, 0o755); err != nil {
		return fmt.Errorf("could not create directory %s: %w", skillDir, err)
	}

	files, err := discovery.DiscoverSkillFiles(opts.Client, opts.Host, opts.Owner, opts.Repo, skill.TreeSHA, skill.Path)
	if err != nil {
		return fmt.Errorf("could not list skill files: %w", err)
	}

	safeSkillDir, err := safepaths.ParseAbsolute(skillDir)
	if err != nil {
		return fmt.Errorf("could not resolve skill directory path: %w", err)
	}

	for _, file := range files {
		fetchedContent, err := discovery.FetchBlob(opts.Client, opts.Host, opts.Owner, opts.Repo, file.SHA)
		if err != nil {
			return fmt.Errorf("could not fetch %s: %w", file.Path, err)
		}

		// Install path: the blob is written to disk verbatim, so the raw bytes
		// must be preserved.
		content := fetchedContent.Raw()

		relPath := strings.TrimPrefix(file.Path, skill.Path+"/")

View on GitHub (pinned to 0eeec0b92e)

Solutions

  1. Check that the skill directory exists and is readable, then retry.

When it happens

Trigger: Thrown at internal/skills/installer/installer.go:260 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of cli/cli@0eeec0b92e (2026-08-15). Data as JSON: /api/errors/05a89a3a5b9cdc7a. Report an issue: GitHub.