hermes-agent/plugins/disk-guardian
Teknium 1386e277e5 feat(plugins): convert disk-guardian skill into a bundled plugin
Rewires @LVT382009's disk-guardian (PR #12212) from a skill-plus-script
into a plugin that runs entirely via hooks — no agent compliance needed.

- post_tool_call hook auto-tracks files created by write_file / terminal
  / patch when they match test_/tmp_/*.test.* patterns under HERMES_HOME
- on_session_end hook runs cmd_quick cleanup when test files were
  auto-tracked during the turn; stays quiet otherwise
- /disk-guardian slash command keeps status / dry-run / quick / deep /
  track / forget for manual use
- Deterministic cleanup rules, path safety, atomic writes, and audit
  logging preserved from the original contribution
- Protect well-known top-level state dirs (logs/, memories/, sessions/,
  cron/, cache/, etc.) from empty-dir removal so fresh installs don't
  get gutted on first session end

The plugin system gains a bundled-plugin discovery path (<repo>/plugins/
<name>/) alongside user/project/entry-point sources. Memory and
context_engine subdirs are skipped — they keep their own discovery
paths. HERMES_DISABLE_BUNDLED_PLUGINS=1 suppresses the scan; the test
conftest sets it by default so existing plugin tests stay clean.

Co-authored-by: LVT382009 <levantam.98.2324@gmail.com>
2026-04-20 04:46:45 -07:00
..
__init__.py feat(plugins): convert disk-guardian skill into a bundled plugin 2026-04-20 04:46:45 -07:00
disk_guardian.py feat(plugins): convert disk-guardian skill into a bundled plugin 2026-04-20 04:46:45 -07:00
plugin.yaml feat(plugins): convert disk-guardian skill into a bundled plugin 2026-04-20 04:46:45 -07:00
README.md feat(plugins): convert disk-guardian skill into a bundled plugin 2026-04-20 04:46:45 -07:00

disk-guardian

Auto-tracks and cleans up ephemeral files created during Hermes Agent sessions — test scripts, temp outputs, cron logs, stale chrome profiles. Scoped strictly to $HERMES_HOME and /tmp/hermes-*.

Originally contributed by @LVT382009 as a skill in PR #12212. Ported to the plugin system so the behaviour runs automatically via post_tool_call and on_session_end hooks — the agent never needs to remember to call a tool.

How it works

Hook Behaviour
post_tool_call When write_file / terminal / patch creates a file matching test_*, tmp_*, or *.test.* inside HERMES_HOME, track it silently as test / temp / cron-output.
on_session_end If any test files were auto-tracked during this turn, run quick cleanup (no prompts).

Deletion rules (same as the original PR):

Category Threshold Confirmation
test every session end Never
temp >7 days since tracked Never
cron-output >14 days since tracked Never
empty dirs under HERMES_HOME always Never
research >30 days, beyond 10 newest Always (deep only)
chrome-profile >14 days since tracked Always (deep only)
files >500 MB never auto Always (deep only)

Slash command

/disk-guardian status                     # breakdown + top-10 largest
/disk-guardian dry-run                    # preview without deleting
/disk-guardian quick                      # run safe cleanup now
/disk-guardian deep                       # quick + list items needing prompt
/disk-guardian track <path> <category>    # manual tracking
/disk-guardian forget <path>              # stop tracking

Safety

  • is_safe_path() rejects anything outside HERMES_HOME or /tmp/hermes-*
  • Windows mounts (/mnt/c etc.) are rejected
  • The state directory $HERMES_HOME/disk-guardian/ is itself excluded
  • $HERMES_HOME/logs/, memories/, sessions/, skills/, plugins/, and config files are never tracked
  • Backup/restore is scoped to tracked.json — the plugin never touches agent logs
  • Atomic writes: .tmp → backup → rename