Skip to content

Commit 96dd776

Browse files
zparnoldclaude
andcommitted
Support microagents/ directory in load_org_skills for backwards compat
The existing openhands-config repo uses microagents/ directory. Update load_org_skills() to check both skills/ (preferred) and microagents/ (legacy), matching the agent-server's load_org_skills_from_url() behavior. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent e1fd801 commit 96dd776

File tree

1 file changed

+39
-29
lines changed
  • openhands-sdk/openhands/sdk/context/skills

1 file changed

+39
-29
lines changed

openhands-sdk/openhands/sdk/context/skills/skill.py

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -934,37 +934,47 @@ def load_org_skills(
934934
logger.warning("Failed to access org skills repository")
935935
return all_skills
936936

937-
# Load skills from the local repository
938-
skills_dir = repo_path / "skills"
939-
if not skills_dir.exists():
940-
logger.warning(
941-
f"Skills directory not found in org repository: {skills_dir}"
942-
)
943-
return all_skills
944-
945-
# Find SKILL.md directories (AgentSkills format) and regular .md files
946-
skill_md_files = find_skill_md_directories(skills_dir)
947-
skill_md_dirs = {skill_md.parent for skill_md in skill_md_files}
948-
regular_md_files = find_regular_md_files(skills_dir, skill_md_dirs)
949-
950-
all_skill_files = list(skill_md_files) + list(regular_md_files)
951-
logger.info(
952-
f"Found {len(all_skill_files)} skill files in org skills repository"
953-
)
937+
# Load skills from skills/ (preferred) and microagents/ (legacy)
938+
for dir_name in ("skills", "microagents"):
939+
search_dir = repo_path / dir_name
940+
if not search_dir.exists():
941+
continue
954942

955-
for skill_file in all_skill_files:
956-
try:
957-
skill = Skill.load(
958-
path=skill_file,
959-
skill_base_dir=repo_path,
960-
)
961-
if skill is None:
943+
skill_md_files = find_skill_md_directories(search_dir)
944+
skill_md_dirs = {skill_md.parent for skill_md in skill_md_files}
945+
regular_md_files = find_regular_md_files(search_dir, skill_md_dirs)
946+
947+
all_skill_files = list(skill_md_files) + list(regular_md_files)
948+
logger.info(f"Found {len(all_skill_files)} skill files in org {dir_name}/")
949+
950+
existing_names = {s.name for s in all_skills}
951+
for skill_file in all_skill_files:
952+
try:
953+
skill = Skill.load(
954+
path=skill_file,
955+
skill_base_dir=repo_path,
956+
)
957+
if skill is None:
958+
continue
959+
if skill.name in existing_names:
960+
logger.debug(
961+
f"Skipping duplicate org skill '{skill.name}' "
962+
f"from {dir_name}/"
963+
)
964+
continue
965+
all_skills.append(skill)
966+
existing_names.add(skill.name)
967+
logger.debug(f"Loaded org skill: {skill.name}")
968+
except Exception as e:
969+
logger.warning(
970+
f"Failed to load skill from {skill_file.name}: {str(e)}"
971+
)
962972
continue
963-
all_skills.append(skill)
964-
logger.debug(f"Loaded org skill: {skill.name}")
965-
except Exception as e:
966-
logger.warning(f"Failed to load skill from {skill_file.name}: {str(e)}")
967-
continue
973+
974+
if not all_skills:
975+
logger.warning(
976+
"No skills/ or microagents/ directory found in org repository"
977+
)
968978

969979
except Exception as e:
970980
logger.warning(f"Failed to load org skills from {repo_url}: {str(e)}")

0 commit comments

Comments
 (0)