Skip to content

Curator status/lifecycle ignores skill edit activity #17952

@y0shua1ee

Description

@y0shua1ee

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

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Low — cosmetic, nice to havetool/skillsSkills system (list, view, manage)type/bugSomething isn't working

    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