mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-04-25 00:51:20 +00:00
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>
51 lines
2.1 KiB
Markdown
51 lines
2.1 KiB
Markdown
# 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](https://github.com/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
|