Curator status/lifecycle ignores skill edit activity
Bug Description
hermes curator status and curator automatic lifecycle transitions still key off last_used_at instead of a unified activity timestamp.
A recent partial fix (#17782) wired skill_view() into bump_use(), so new skill loads now update last_used_at. However, skill_manage() still records maintenance under patch_count / last_patched_at, and historical telemetry may contain last_viewed_at values from before #17782. Curator ignores those activity timestamps when sorting "least recently used" skills and when deciding stale/archive transitions.
The result is that actively maintained skills can appear stale or last_used=never if they were edited/maintained but not loaded through a code path that bumps last_used_at.
Steps to Reproduce
- Have an agent-created skill in
~/.hermes/skills/.
- Edit it with
skill_manage(action="patch") or otherwise create a record with a recent last_patched_at but no last_used_at.
- Inspect
~/.hermes/skills/.usage.json and observe that last_patched_at was updated, while last_used_at may still be null.
- Run:
Expected Behavior
Curator reporting and lifecycle transitions should treat the latest actual activity timestamp as the most recent of:
last_used_at
last_viewed_at
last_patched_at
A recently viewed or patched skill should not be displayed as last_used=never, nor should it be marked stale/archived solely because last_used_at is unset.
Actual Behavior
Curator status sorts by last_used_at and displays last_used=never for skills that have nonzero view_count or patch_count and recent last_viewed_at / last_patched_at values.
This makes actively maintained skills appear unused and can make curator lifecycle decisions misleading.
Example Evidence
From a local profile before this fix, several skills had recent view/patch activity but use_count=0 and last_used_at=None, including one with view=23, patch=32, and recent last_patched_at. hermes curator status still listed it as last_used=never.
Even after #17782, patch/edit activity remains separate from use activity, so last_patched_at is still not reflected in curator status or lifecycle decisions.
Related Issues
Proposed Fix
Derive last_activity_at and activity_count in tools.skill_usage.agent_created_report():
last_activity_at = max(last_used_at, last_viewed_at, last_patched_at)
activity_count = use_count + view_count + patch_count
Then use last_activity_at for:
hermes curator status sorting and display
- automatic stale/archive/reactivation transitions
- curator review candidate rendering
Environment
- Repo:
NousResearch/hermes-agent
- Observed on current
main clone at commit 9a145406
- Python: 3.11
- Platform: macOS
Curator status/lifecycle ignores skill edit activity
Bug Description
hermes curator statusand curator automatic lifecycle transitions still key offlast_used_atinstead of a unified activity timestamp.A recent partial fix (#17782) wired
skill_view()intobump_use(), so new skill loads now updatelast_used_at. However,skill_manage()still records maintenance underpatch_count/last_patched_at, and historical telemetry may containlast_viewed_atvalues from before #17782. Curator ignores those activity timestamps when sorting "least recently used" skills and when deciding stale/archive transitions.The result is that actively maintained skills can appear stale or
last_used=neverif they were edited/maintained but not loaded through a code path that bumpslast_used_at.Steps to Reproduce
~/.hermes/skills/.skill_manage(action="patch")or otherwise create a record with a recentlast_patched_atbut nolast_used_at.~/.hermes/skills/.usage.jsonand observe thatlast_patched_atwas updated, whilelast_used_atmay still benull.Expected Behavior
Curator reporting and lifecycle transitions should treat the latest actual activity timestamp as the most recent of:
last_used_atlast_viewed_atlast_patched_atA recently viewed or patched skill should not be displayed as
last_used=never, nor should it be marked stale/archived solely becauselast_used_atis unset.Actual Behavior
Curator status sorts by
last_used_atand displayslast_used=neverfor skills that have nonzeroview_countorpatch_countand recentlast_viewed_at/last_patched_atvalues.This makes actively maintained skills appear unused and can make curator lifecycle decisions misleading.
Example Evidence
From a local profile before this fix, several skills had recent view/patch activity but
use_count=0andlast_used_at=None, including one withview=23,patch=32, and recentlast_patched_at.hermes curator statusstill listed it aslast_used=never.Even after #17782, patch/edit activity remains separate from use activity, so
last_patched_atis still not reflected in curator status or lifecycle decisions.Related Issues
bump_use()has zero production call sites —use_countalways 0 #17782 wiredskill_view()intobump_use().Proposed Fix
Derive
last_activity_atandactivity_countintools.skill_usage.agent_created_report():last_activity_at = max(last_used_at, last_viewed_at, last_patched_at)activity_count = use_count + view_count + patch_countThen use
last_activity_atfor:hermes curator statussorting and displayEnvironment
NousResearch/hermes-agentmainclone at commit9a145406