Skip to main content

Module skills_control

Module skills_control 

Source
Expand description

Controlled-tier skills (Domain 11, concept 15) — install and remove, each through the door the harness itself publishes.

Charter (docs/plans/orchestration-domain-11-2026-09-02.md §0.4): supercode never runs a skill registry, never resolves a slug, never unpacks an archive. Every mutation is the harness’s own door:

  • Hermeshermes skills install <identifier> --yes / hermes skills uninstall <name> --yes, with HERMES_HOME in the environment. The pinned help (parity/fixtures/hermes-help.txt, re-checked against the installed 0.21.0) says the positional is a registry identifier or a direct HTTP(S) URL to a SKILL.md; hermes publishes NO local-directory install form, so a local path is refused rather than handed to a verb that cannot take it.
  • OpenClawopenclaw skills install <skill-ref> (@owner/slug, git:<repo>, or a local skill directory; --global for the shared managed directory, --as <slug> to name it). At the pin there is NO openclaw skills remove, so remove is refused with UnsupportedAction — supercode does not delete files behind the harness’s back.
  • Claude Code, Codex, opencode, pi — the door IS the directory. These four have no skills CLI at all; a skill is installed by placing its package at the root the harness’s own loader reads (crate::skills::writable_skill_roots, transcribed from the same inventories ORCH-11 reads), and removed by deleting that directory. Both operations are confined to those roots: a name that would escape one, or a package the loader does not recognize, is refused.
  • supercode itself — refused: it has no skills root of its own (crate::skills::SKILL_HARNESSES names the six harnesses it reads).

The three ORCH-18 rules are inherited verbatim:

  1. The harness’s answer is the answer. After the door succeeds the row is re-read through the ORCH-11 loader (crate::skills::list_skills) and returned; a remove that leaves the row behind is a failure. Note that hermes skills install exits 0 on a fetch failure, so the re-read — not the exit status — is what decides.
  2. The door is narrated. Every outcome carries ran: the harness command that was executed, or the directory operation in its shell spelling (cp -R <source> <dest>, rm -r <dest>).
  3. A door the harness does not have is refused (SkillControlError::UnsupportedUnsupportedAction), never a silent no-op and never a file supercode writes on its own authority.

Structs§

SkillMutation
One mutating request, in the uniform Domain 11 vocabulary.
SkillMutationOutcome
What one mutation did, with the harness’s own row read back afterwards.

Enums§

SkillControlError
Why a mutation could not be performed.
SkillVerb
One uniform mutating verb.

Constants§

CONTROLLED_SKILL_HARNESSES
Harnesses whose installed skills supercode can MUTATE through a door the harness publishes. Identical to SKILL_HARNESSES today: the two CLI harnesses have a verb, the core four have their loader’s directory.
OPENCLAW_REMOVE_REFUSAL
Why remove is refused on OpenClaw at the pinned version.
SUPERCODE_REFUSAL
Why supercode refuses to install a skill into itself.

Functions§

mutate_skill
Perform one mutation through the harness’s own door, then re-read the row.
supports_skill_control
Whether harness has any skills door supercode can drive.