Hermes ↔ Envit Skill Integration — Current State (2026-09-20)

Read-only boundary. This is the current-state characterization of the seam between Hermes' skill loader and envit's materialized skill store. Updated after user discovery that all 4 "missing" Hermes-native skills were actually installed in nested subdirs.

Audience: operator setting up a fresh Hermes agent on school-core. Depth: what is and isn't wired today — not a fix plan.


The seam (unchanged — still the core architectural fact)

LayerWhere it livesWhat it does
Hermes skill loader~/.hermes/skills/<skill>/SKILL.md (flat AND nested subdirs)Loads skill context into agent prompts at session start / tool use
envit 0.1.0 (sync)~/.envit/store/checkouts/<repo>/<commit>/skills/<skill>/SKILL.mdMaterializes declared skill SETS from git at pinned commits into a global store
Integration layerDOES NOT EXIST (no auto-scan)Nothing bridges the two automatically. The bridge_envit_to_hermes.sh script provides a manual symlink bridge for plannotator skills only.

A Hermes agent pointed at school-core has NO automatic access to the 8 plannotator SKILL.md files that envit sync materialized — unless the operator runs the bridge script or teaches Hermes to scan ~/.envit/store/.


What IS wired today

Plannotator skills (envit-managed, in ~/.envit/store/)

Skill SETRepoCommitSKILL.md files
effective-htmlplannotator/effective-htmld95debbaef15html, html-plan, html-diagram, html-wireframe, html-prototype, design-artifact
guidesplannotator/guidesda10932bcb86plannotator-guide
herdr-annotateplannotator/herdr-annotate7c8f5a177b82plannotator-tui

Materialized and readable on disk. ripwire scans them fine. NOT loadable by Hermes without the bridge script.

Hermes-native skills (Hermes-managed, in ~/.hermes/skills/)

All 8 are installed and loadable. The "4 missing" claim was stale — written before these were installed or when the flat ls search was too shallow to catch subdir nesting.

StatusSkillLocationNotes
INSTALLEDpr-verification-gate~/.hermes/skills/pr-verification-gate/ (flat)SKILL.md, references/
INSTALLEDbuild-verification~/.hermes/skills/build-verification/ (flat)SKILL.md
INSTALLEDbounded-adversarial-plan-review~/.hermes/skills/bounded-adversarial-plan-review/ (flat)SKILL.md, references/, assets/
INSTALLEDworst-day-ever~/.hermes/skills/worst-day-ever/ (flat)SKILL.md, assets/
INSTALLEDgithub-pr-workflow~/.hermes/skills/github/github-pr-workflow/ (nested)SKILL.md, references/ (2 files), modified 2026-08-15
INSTALLEDgithub-pr-gates~/.hermes/skills/github/github-pr-gates/ (nested)SKILL.md (39KB), references/ (6 files), scripts/ (1), modified 2026-08-13
INSTALLEDpr-merge-readiness~/.hermes/skills/github/pr-merge-readiness/ (nested)SKILL.md (22KB), references/ (2 files), scripts/ (1), modified 2026-09-17
INSTALLEDgithub-pr-checks-truth~/.hermes/skills/github-ops/github-pr-checks-truth/ (nested)SKILL.md (3.5KB), modified 2026-07-14

None are missing. The flat ls ~/.hermes/skills/ lists 230 top-level dirs but does NOT show nested subdirs like github/ or github-ops/. The earlier "missing" assessment used a flat search that missed these. The correct check is recursive: find ~/.hermes/skills -name SKILL.md.


What changed in this update

Before (stale)After (corrected)
envit.json _herm-native-notes.missing listed 4 skillsEmpty — all 8 installed
envit.json _herm-native-notes.installed listed 4 flat skillsLists all 8 (4 flat + 4 nested with paths)
envit.json note: "None of these have .skill files"Note: "All 4 are SKILL.md-only… 2 have references/, 2 have scripts/"
school-core-engineering skill: "4 Hermes-native skills missing… need sourcing"Replaced with "Hermes-native skill inventory (all 8 are pre-installed)" table + descriptions
hermes-envit-integration-gap.md: "4 MISSING" tableReplaced with "All 8 installed" table with locations + last-modified dates
setup_envit.sh: "installs missing Hermes-native skills"Updated to: "the 8 Hermes-native skills are pre-installed… none need installation from a registry"

What ISN'T wired (genuine gaps, not stale claims)

GapSeverityWhat it is
Hermes has no auto-scan of ~/.envit/store/MEDIUMenvit-materialized plannotator skills (8 SKILL.md files) are invisible to Hermes without the manual bridge script. This is by design in envit 0.1.0 — no loader hook exists.
envit.lock.json pins at HEAD, not exact commitsLOWA fresh envit sync --frozen pulls today's HEAD, not the tested version. Cosmetic until drift matters.
.envit/AGENTS.md stub is unpopulated by syncLOWCosmetic — the stub says "Generated by envit sync" but envit 0.1.0 doesn't write the repo/skill index into it.

The bridge script: what it does and doesn't do

scripts/bridge_envit_to_hermes.sh closes the plannotator-side gap only:

  • Symlinks 4 unique plannotator skills into ~/.hermes/skills/: html-diagram, html-wireframe, design-artifact, plannotator-tui
  • Skips 4 identical skills (verified by diff -q): html, html-plan, html-prototype, plannotator-guide — these already exist in ~/.hermes/skills/ with identical content
  • Does NOT touch the 8 Hermes-native skills — they're already in ~/.hermes/skills/ (some nested), no bridging needed
  • Does NOT auto-run — operator runs it manually after setup_envit.sh

Files updated in this correction

FileChange
envit.json_herm-native-notes.missing → []; installed → all 8 with paths; note → corrected
school-core-engineering/SKILL.mdReplaced "4 missing" gap with inventory table + descriptions; updated setup_envit.sh description
docs/setup/hermes-envit-integration-gap.mdReplaced "4 MISSING" table with "all 8 installed" table; corrected all stale claims
Built with LogoFlowershow