hermes - ✅(Solved) Fix Curator status/lifecycle ignores skill edit activity [1 pull requests, 1 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
NousResearch/hermes-agent#17952Fetched 2026-05-01 05:54:49
View on GitHub
Comments
0
Participants
1
Timeline
5
Reactions
0
Author
Participants
Timeline (top)
labeled ×3closed ×1cross-referenced ×1

Root Cause

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.

Fix Action

Fix / Workaround

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.

  1. Have an agent-created skill in ~/.hermes/skills/.
  2. Edit it with skill_manage(action="patch") or otherwise create a record with a recent last_patched_at but no last_used_at.
  3. Inspect ~/.hermes/skills/.usage.json and observe that last_patched_at was updated, while last_used_at may still be null.
  4. Run:
  • last_used_at
  • last_viewed_at
  • last_patched_at

PR fix notes

PR #17953: fix: use skill activity in curator status

Description (problem / solution / changelog)

Summary

  • Derive last_activity_at and activity_count from skill use/view/patch telemetry.
  • Use last_activity_at for curator automatic lifecycle transitions, so recently viewed or patched skills are not falsely marked stale.
  • Update hermes curator status and curator candidate rendering to show activity instead of only last_used_at.
  • Add regression coverage for activity derivation, false stale prevention, and CLI status output.

Test Plan

  • /Users/areslee/.hermes/hermes-agent/venv/bin/python -m pytest tests/tools/test_skill_usage.py tests/agent/test_curator_activity.py tests/hermes_cli/test_curator_status.py -q
    • 38 passed
  • /Users/areslee/.hermes/hermes-agent/venv/bin/python -m py_compile tools/skill_usage.py agent/curator.py hermes_cli/curator.py
  • git diff --check
  • Added-lines static scan for secrets/shell/eval/pickle/debugger: no findings
  • Independent review agent: passed, no security concerns or logic errors

Refs #17782 Refs #7816

Fixes #17952

Changed files

  • agent/curator.py (modified, +9/-8)
  • hermes_cli/curator.py (modified, +14/-5)
  • tests/agent/test_curator_activity.py (added, +56/-0)
  • tests/hermes_cli/test_curator_status.py (added, +43/-0)
  • tests/tools/test_skill_usage.py (modified, +20/-0)
  • tools/skill_usage.py (modified, +51/-3)

Code Example

hermes curator status
RAW_BUFFERClick to expand / collapse

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

  1. Have an agent-created skill in ~/.hermes/skills/.
  2. Edit it with skill_manage(action="patch") or otherwise create a record with a recent last_patched_at but no last_used_at.
  3. Inspect ~/.hermes/skills/.usage.json and observe that last_patched_at was updated, while last_used_at may still be null.
  4. Run:
hermes curator status

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

  • Related/partial prior fix: #17782 wired skill_view() into bump_use().
  • Broader lifecycle tracking umbrella: #7816.

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

extent analysis

TL;DR

Derive a unified last_activity_at timestamp and use it for curator status and lifecycle decisions to accurately reflect skill activity.

Guidance

  • Update tools.skill_usage.agent_created_report() to calculate last_activity_at as the maximum of last_used_at, last_viewed_at, and last_patched_at.
  • Introduce an activity_count variable that sums use_count, view_count, and patch_count to provide a comprehensive activity metric.
  • Modify hermes curator status to sort and display skills based on last_activity_at instead of last_used_at.
  • Adjust automatic stale/archive/reactivation transitions to rely on last_activity_at for more accurate lifecycle decisions.

Example

def agent_created_report():
    # ...
    last_activity_at = max(last_used_at, last_viewed_at, last_patched_at)
    activity_count = use_count + view_count + patch_count
    # ...

Notes

This fix assumes that the last_used_at, last_viewed_at, and last_patched_at timestamps are correctly updated in the skill_manage() and skill_view() functions. Additional testing may be necessary to ensure that these timestamps are accurately recorded.

Recommendation

Apply the proposed fix to derive last_activity_at and use it for curator status and lifecycle decisions, as this will provide a more accurate representation of skill activity and improve the overall functionality of the curator.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

hermes - ✅(Solved) Fix Curator status/lifecycle ignores skill edit activity [1 pull requests, 1 participants]