Skill Promotion and Dedup (Hermes)
Use this when users import many custom skills (e.g. under ~/.hermes/skills/imported-codex) and want better discoverability/reliability.
When to use
- User says imported skills are hard to trigger/find.
- Same skill names exist in multiple categories (imported + official), causing inconsistent selection.
- User wants to keep imported originals, but use promoted copies as active skills.
Core idea
- Promote imported skills to first-class categories (social-media, research, media, etc.).
- Keep imported originals as archive.
- Disable duplicate active entries in archive (avoid two
SKILL.mdfiles with samename:).
Procedure
- Inventory and mapping
- Enumerate source skills under
~/.hermes/skills/imported-codex/*/SKILL.md. - Create an explicit mapping:
skill_name -> target_category. - Do not proceed with unmapped skills.
- Backup and promote
- Create backup root:
~/.hermes/skill-promotions/<timestamp>/. - For each skill:
- If target exists, backup existing target first.
- Copy imported skill folder to target category path.
- Save a manifest:
promotion-manifest.jsonwith source/target/backups.
- Configure defaults where needed
- If there are competing skills for same domain, clarify routing in descriptions.
- Example used successfully:
bird-twitter: default for read-only Twitter via browser login.xitter: official API / write actions.
- Deduplicate active discovery
- In archive category (
imported-codex), renameSKILL.md->SKILL.imported.md. - Keep scripts/assets/references intact.
- Optionally add
imported-codex/DESCRIPTION.mdstating this is archive-only. - Important: if duplicate active definitions remain,
skills_listmay surface unstable/partial results (some promoted skills appear missing by category). Disable archiveSKILL.mdfirst, then re-check.
4b) Optional deletion mode (when user wants no archive)
- Create a one-file archive first (safety):
tar -czf ~/.hermes/skill-promotions/archive-before-delete/imported-codex-<ts>.tgz -C ~/.hermes/skills imported-codex
- Delete archive directory:
rm -rf ~/.hermes/skills/imported-codex
- Verify:
skills_list(category='imported-codex')returns empty
- If user asks for zero backup retention, delete the tarball too.
- Verify
skills_list(category=...)for all target categories.skills_list(category='imported-codex')should be empty or non-active.skill_view(<key_skill>)resolves to promoted category path.- Smoke-check critical runtime tools (e.g.
bird check --plain).
- Rollback support
- Generate rollback script from manifest:
- Restore archive
SKILL.mdfromSKILL.imported.md. - Remove promoted target copies.
- Restore archive
- Store script under
~/.hermes/skill-promotions/rollback-*.sh.
Pitfalls
- Duplicate skill names across categories cause non-deterministic discoverability.
- Moving without backups risks losing custom local edits in existing targets.
- Forgetting to disable archive copies keeps the conflict alive.
Success criteria
- User’s common skills appear in expected first-class categories.
- Archive remains preserved and recoverable.
- No duplicate active definitions for same skill name.
- A documented rollback path exists.