Expand description
ORCH-11 (observed tier): read-only enumeration of the skill packages each harness has installed.
supercode never installs, removes, or edits a skill here — it opens the directories the harness’s own loader opens and reports what is there. The roots below are transcribed from each harness’s documented/primary source:
- Claude Code — enterprise (managed) > personal
~/.claude/skills/> project.claude/skills/, nested.claude/skills/in subdirectories, plugin skills namespacedplugin:skill(docs/composable-harness/inventory/claude-code.md“Skill locations & precedence”;docs:skills#where-skills-live). - Codex — repo
.agents/skillsfrom cwd to the repo root, user~/.agents/skills(plus the deprecated$CODEX_HOME/skills), admin/etc/codex/skills, and the bundled cache$CODEX_HOME/skills/.system(inventory/codex.md§7 Skills;codex-rs/core-skills/src/loader.rs).[skills]in$CODEX_HOME/config.tomlis an enable/disable overlay (SkillConfig { path, name, enabled }), not an extra root, so it is read forenabledonly (codex-rs/config/src/skills_config.rs:12-36at the pinned commit1f0566d3). - opencode —
{skill,skills}/**/SKILL.mdunder every.opencodedir plus the global config dir (inventory/opencode.md§7 Skills,packages/opencode/src/skill/index.ts:23-25). - pi —
~/.pi/agent/skills/,~/.agents/skills/, project.pi/skills/and.agents/skills/in cwd and its ancestors (inventory/pi.md§2 Skills,src:core/skills.ts). - Hermes 0.21.0 —
HERMES_HOME/skills(get_skills_dir()=get_hermes_home() / "skills",hermes_constants.py:1195-1197), and because profile mode setsHERMES_HOMEto<root>/profiles/<name>(hermes_constants.py:160-190),<root>/profiles/<name>/skillstoo. Hermes groups skills by category, so a root is walked, not listed. - OpenClaw 2026.7.1-2 — managed
<config>/skills, plugin<config>/plugin-skills, workspace<workspace>/skillsand<workspace>/.agents/skills, personal~/.agents/skills(src/skills/loading/workspace.ts:1155-1215at tagv2026.7.1-2).
enabled is None wherever the harness’s own source does not say; only
Codex’s [skills] overlay and a skill’s own frontmatter produce a bool.
Structs§
- Loop
Skill - One SKILL.md package the supercode loop itself will load.
- Shell
Injection - The authorization a
!`cmd`expansion runs under — built from a resolvedcrate::Config, never assembled ad hoc at a call site. - Skill
Homes - Config homes the skill roots hang off. Defaults follow each harness’s own environment contract; a caller may override any of them (tests, probes).
- Skill
Row - One installed skill package, as one harness holds it.
- Skills
Query harness.v1.skills.listrequest.
Enums§
- Skill
Scope - Where a skill package was found, in the vocabulary shared by all six harnesses.
Constants§
- MAX_
SKILL_ BODY_ BYTES - Ceiling on the bytes of a skill body handed to the model in one load.
- SKILL_
HARNESSES - Every harness that has a skills root, in product order.
Functions§
- declared_
skill_ name - A skill package’s own declared name:
SKILL.mdfrontmattername, else the directory’s own name — exactly the rulelist_skillsapplies, so a row installed here is found again by the name the loader will report. - find_
skill - Resolve one invocation name against a discovered set: exact, then
case-insensitively, then the unqualified leaf of a
dir:skill/plugin:skillname when exactly one skill owns that leaf. A leading/or$sigil is stripped first, so the same resolver serves the slash command, the mention, and theskilltool — one name, one answer. - implicit_
skill_ match - BP-6 (cx§7 “implicit (description-matched) invocation”): the single
best skill a message DESCRIBES, or
None. - list_
skills - List every installed skill package the query selects.
- load_
for_ config - The loop’s skill set for a resolved
crate::Config— empty unless[core.skills] enabledis on AND the config names a harness whose root table to read, so a config that says nothing about skills discovers nothing (byte-identical to the pre-BP-6 loop). - load_
loop_ skills - Discover every SKILL.md package the loop will load, in PRECEDENCE order:
the config’s own extra roots first (a root a config names is more
specific than a discovered one), then the named harness’s own documented
root table in its own order, then — for Claude Code — nested
<subdir>/.claude/skillspackages undercwd, qualifieddir:skill. - render_
skill - The envelope a loaded body arrives in, identical whichever door invoked
it (
skilltool result,/nameexpansion,$slugmention), so a transcript reads the same way in all three. - skill_
roots - Every
(scope, root)a harness’s own loader would consult, restricted to the roots that exist right now. - writable_
skill_ roots - The roots supercode may WRITE a skill package into, in the harness’s own
precedence order — the same table
skill_rootsreads, narrowed to the two scopes a client may address and NOT filtered by existence (an install creates the root the harness’s loader would then read).