Skip to content

Feature: policy-driven local skill overlays and profile sync preflight #29714

@hehehe0803

Description

@hehehe0803

Feature request

Add first-class support for policy-driven local skill overlays and profile skill sync preflight.

This is related to, but more focused than, broader skill lifecycle/status work. It covers the operational gap for users who run multiple Hermes profiles and need a safe way to keep selected shared skills consistent without losing local customizations or accidentally shadowing delegated skill directories.

Motivation

Multi-profile Hermes setups can have several legitimate skill layers:

  1. Bundled/upstream skills shipped by Hermes
  2. User-authored local skills
  3. Local overlays/pins for update-sensitive customizations
  4. Profile-local skill copies or forks
  5. External skill dirs shared across profiles
  6. Disabled/absorbed skills that should stay present but not load

Today, it is difficult to answer these questions before an update or profile sync:

  • Is this skill bundled, user-authored, locally modified, overlaid, profile-copied, or profile-forked?
  • Will hermes update skip upstream improvements because a bundled skill was locally edited?
  • Which profile copies have drifted from the intended canonical skill?
  • Which differences are intentional forks vs stale copies?
  • Will syncing bundled skills into a profile collide with skills.external_dirs and create duplicate skill names?
  • Can I check this in CI/watchdog mode without mutating anything?

Proposed shape

1. Explicit local overlay layer

Add a supported local overlay/pin mechanism, for example:

skills:
  overlay_dirs:
    - ~/.hermes/skill-overlays

Desired semantics:

  • overlays are explicit and visible, not silent hand-edits to bundled skills;
  • overlays survive hermes update;
  • if upstream changes a bundled skill that has an overlay, Hermes reports the conflict and offers inspect/merge/keep-local/accept-upstream flows;
  • overlays are for deliberate local pins/customizations, not a replacement for normal bundled skill updates.

2. Policy-driven profile skill sync

Support an optional profile skill sync policy file, conceptually:

canonical_skill_root: ~/.hermes/skills
profile_root: ~/.hermes/profiles
overlay_skill_root: ~/.hermes/skill-overlays
sync_profiles:
  - dev
  - reviewer
sync_skills:
  - github-pr-workflow
  - requesting-code-review
never_sync_skills:
  - project-specific-review
profile_disabled:
  reviewer:
    - some-noisy-skill
disabled_everywhere:
  - superseded-skill

Core requirements:

  • sync must be allowlisted, not wholesale mirroring;
  • compare full skill directories, not just SKILL.md;
  • preserve deliberate profile forks via never_sync_skills or equivalent;
  • back up before mutation;
  • prefer reversible disablement over deleting skills;
  • detect skills.external_dirs collision risk before writing profile-local shadow copies.

3. CLI modes: check/apply/verify

Expose non-mutating and mutating modes:

hermes skills sync --check
hermes skills sync --apply
hermes skills sync --verify

Expected behavior:

  • --check: report drift/collisions and exit nonzero; no writes
  • --apply: apply reviewed allowlisted changes with backups
  • --verify: assert clean post-sync state

This enables quiet cron/CI watchdogs that alert on drift without auto-overwriting user files.

4. Integrate with lifecycle visibility

This should interoperate with the broader skill lifecycle/status surface:

hermes skills status
hermes skills diff <skill>

Useful status states might include:

  • bundled/up-to-date
  • bundled/user-modified
  • bundled/overlaid
  • local-only
  • profile-copy/in-sync
  • profile-copy/drifted
  • profile-fork/ignored
  • shadowed-by-external-dir
  • deprecated-upstream

Related issues / PRs

Non-goals

  • Do not auto-merge arbitrary Markdown skill conflicts with no review.
  • Do not make every profile mirror the default profile's full skill library.
  • Do not erase profile-local forks silently.
  • Do not solve all skill lifecycle UX in one PR; this can build on status/diff incrementally.

Why this matters

Hermes' skill system is powerful because it learns and adapts locally. But once users run multiple profiles or customize bundled skills, the lifecycle model needs guardrails similar to package managers and config management:

  • visible provenance;
  • explicit overlays;
  • drift detection;
  • safe preflight;
  • backups;
  • review before mutation.

A minimal first version could be just status/diff plus overlay detection. A later version could add policy-driven sync --check/apply/verify for advanced multi-profile setups.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Low — cosmetic, nice to havetool/skillsSkills system (list, view, manage)type/featureNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions