feat(skills): notify when installed skills have updates

Depends on !3335 (merged) (add-whatsnew-command). Bundled-skill check hooks into the post-upgrade banner introduced there.

Summary

Adds glab skills update [name|--all] and two passive notification surfaces that flag when an installed agent skill (bundled or remote) has diverged from its source.

How it works

Detection is manifest-free: internal/commands/skills/installed/ walks the two well-known install locations and matches each subdirectory against the bundled + remote registries. Each installed skill gets a skill.ContentHash (sha256 over the file tree) so we can compare on-disk content to source-of-truth.

Trade-off: we can't distinguish user-edited from stale — both look 'diverged.'

Notifications: bundled checks fire from MaybeShowPostUpgradeBanner (post-glab-upgrade only). Remote checks fire from CheckUpdate (24h cadence).

Action: glab skills update [name] re-fetches via the registry and overwrites every installed copy. --all does all installed skills.

Config

  • notify_skill_updates (default true) — opt out
  • GLAB_NOTIFY_SKILL_UPDATES=false — env override

Test plan

  • glab skills update --help renders
  • Install glab, edit SKILL.md, run update glab → overwrites
  • Up-to-date skill → reports 'already up to date'
  • update notreal → 'not installed' error
  • update with no args/--all → flag-required error
  • Post-upgrade banner shows bundled-skill line when divergent
  • check-update shows remote-skill line when divergent
  • notify_skill_updates=false and GLAB_NOTIFY_SKILL_UPDATES=false suppress both

Merge request reports

Loading