Skip to content

[Feature]: hermes update should show what changed (skill names, config migration details, offer to reset user-modified skills) #18402

@Hubedge

Description

@Hubedge

Problem or Use Case

Currently hermes update output is too terse — it hides critical information behind aggregate counts:

→ Syncing bundled skills...
  ~ 2 user-modified (kept)
  ✓ Skills are up to date

→ Syncing bundled skills to other profiles...
  default: ~1 user-modified

Config version: 22 → 23

As a user, I can't tell:

  1. Which skills changed — only counts are shown (+3 new, ↑2 updated, ~2 user-modified), not names. I have to manually diff manifests to find which skills were affected.

  2. Whether to follow upstream for user-modified skills — when the bundled version has improvements but my local copy is "kept", I'm never asked whether I want to discard my changes to get upstream updates. The current behavior silently skips forever.

  3. What config changed — when Config version: 22 → 23 appears, I get zero information about what was added, removed, or changed. I have to read the source code (hermes_cli/config.py: migrate_config) to understand the migration.

This matters more with multiple profiles — each profile may have different user-modified skills, and the single-line default: ~1 user-modified aggregates away the per-profile details.

Proposed Solution

Three improvements to hermes update output:

1. Show skill names, not just counts

→ Syncing bundled skills...
  + 3 new: skill-a, skill-b, skill-c
  ↑ 2 updated: github-pr-workflow, systematic-debugging
  ~ 2 user-modified (kept): hermes-agent, debugging-hermes-tui-commands

The names should be shown by default — there are rarely more than a handful per category. If a category has >10 items, truncate with …and N more.

2. Offer to discard local changes for user-modified skills (with "no" as default)

After showing user-modified skills:

~ 2 user-modified (kept): hermes-agent, debugging-hermes-tui-commands

Some of these skills have upstream updates. Review changes?
[1] Keep all (default)
[2] Show what changed for each skill
[3] Reset specific skills to bundled versions
[4] Reset all to bundled versions

Default (Enter / timeout) = keep all (current behavior). This should be interactive only when running in a terminal; in non-interactive mode, silently keep (as now).

3. Config version migration changelog

When config version increases, show what the migration did:

Config version: 22 → 23
  + curator                   (new section: enabled, interval_hours, stale_after_days, archive_after_days)
  + auxiliary.curator         (new aux task slot: provider, model, base_url, timeout)
  + logs/curator/             (new directory for curator logs)

The migrate_config() function already collects results["config_added"] and results["env_added"] — this data should be surfaced to the user during update, not discarded. Each entry should show:

  • Added: new keys/sections with their key names
  • Changed: enum value changes or default value changes for existing keys
  • Removed: keys that were deprecated

Per-profile display

Profile sync output should be consistent with the main profile output:

→ Syncing bundled skills to other profiles...
  default: +0 new, ↑0 updated, ~1 user-modified (hermes-agent)
  other-profile: +2 new (skill-x, skill-y)

Alternatives Considered

  1. hermes update --verbose flag — add a flag to show names. Rejected because the current output is already too sparse; showing names is basic UX, not extra verbosity. A quiet mode (--quiet) could suppress names for scripting.

  2. Separate hermes skills diff command — punt the problem to a separate command. Rejected because the relevant information exists at update time; forcing users to run two commands adds friction.

  3. Config changelog as a separate doc — publish a changelog file. Rejected because the migration code already has the information; duplicating it in a manual doc adds maintenance burden and drift risk.

Feature Type

CLI improvement

Scope

Medium (few files, < 300 lines) — primarily hermes_cli/main.py (update output formatting) and tools/skills_sync.py (return structured data for display).

Additional Context

Related existing issues:

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Low — cosmetic, nice to havearea/configConfig system, migrations, profilescomp/cliCLI entry point, hermes_cli/, setup wizardtype/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