Tencent/WeKnora · error

skill not found: %s

Error message

skill not found: %s

What it means

Terminal failure of LoadSkillInstructions: after checking the cache and scanning every configured skill directory via loadSkillFromDirectory, no directory contained a SKILL.md whose parsed name matches the requested skillName. It means the skill was never discovered, was renamed, or lives outside the configured skillDirs.

Source

Thrown at internal/agent/skills/loader.go:125

// Returns the cached skill if already loaded
func (l *Loader) LoadSkillInstructions(skillName string) (*Skill, error) {
	// Check cache first
	if skill, ok := l.discoveredSkills[skillName]; ok {
		if skill.Loaded {
			return skill, nil
		}
	}

	// Search for the skill in all directories
	for _, dir := range l.skillDirs {
		skill, err := l.loadSkillFromDirectory(dir, skillName)
		if err == nil {
			l.discoveredSkills[skillName] = skill
			return skill, nil
		}
	}

	return nil, fmt.Errorf("skill not found: %s", skillName)
}

// loadSkillFromDirectory attempts to load a skill from a specific directory
func (l *Loader) loadSkillFromDirectory(dir, skillName string) (*Skill, error) {
	// First, check if we can find by directory name matching skill name
	skillPath := filepath.Join(dir, skillName)
	skillFile := filepath.Join(skillPath, SkillFileName)

	if _, err := os.Stat(skillFile); err == nil {
		return l.loadSkillFile(skillPath, skillFile)
	}

	// Otherwise, scan all subdirectories to find the skill by name
	entries, err := os.ReadDir(dir)
	if err != nil {
		return nil, err
	}

View on GitHub (pinned to 988cbb0330)

Solutions

  1. Verify the skill name spelling matches the SKILL.md frontmatter name exactly
  2. Check that the skill's directory is included in the loader's skillDirs configuration
  3. Run skill discovery/Initialize first so the cache is populated
  4. Confirm the SKILL.md parses successfully (parse failures inside directories are swallowed, making the skill invisible)
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at internal/agent/skills/loader.go:125 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of Tencent/WeKnora@988cbb0330 (2026-09-02). Data as JSON: /api/errors/f5e6ddb3890ab3b7. Report an issue: GitHub.