Hermes estate — what exists, what it costs, what to cut

Read-only survey of ~/.hermes, its cron store, skills, units, containers and ports. Nothing was changed. Sizes in MB unless stated.

Headline

ThingCountNote
Disk under ~/.hermes23.3 GBof which 13.0 GB is backups
Cron jobs112102 enabled, 10 disabled, 0 with a missing script
— script jobs (no_agent)108the intended shape
— agent jobs (LLM every run)3 enabled~9 model runs/day
Skills108no duplicate names
Containers481 exited
Listening ports103
Workspace markdown154 files391 KB total — clutter, not weight

Where the 23 GB actually is

PathMBVerdict
backups/homelab7,6932.9 GB is pure duplication (see A)
backups/pre-update-2026-10-22-103951.zip1,334three weeks old, one pre-update snapshot
backups/hermes912live, recent (today)
backups/mnemosyne799live, recent (today)
backups/simplification-20261030545project close-out copy
cache/uv1,018rebuildable package cache
hermes-agent2,824the install itself
tools1,693ffmpeg, python, chromium, node — all in use
state716289 MB of it is one repair scratch dir
state.db660session database
mnemosyne657memory database
trash396one corrupt-checkpoint copy from 22 Oct
checkpoints174live
logs120

A. Duplication worth removing now — 2.9 GB, zero risk

backups/homelab/immich_model-cache-*.tar.gz exists three times, and sha256sum proves all three are the same file (1ad0f6bb13823ae3…, 1,521,032,088 bytes each): 18 Oct, 26 Oct, 1 Nov. It is an Immich model cache — a download, not data. Keeping one and deleting the other two frees 2.9 GB and loses nothing that is not re-downloadable.

B. Scratch and one-offs — about 900 MB

PathMBWhat it is
trash/checkpoints-corrupt-20261022396a checkpoint set known to be corrupt, kept “just in case”
state/memory-repair-202611012891 Nov repair scratch: clean-rebuild, staging, two restore-test DBs
state/kuma.db.bak-20261026105pre-repair copy of the Uptime Kuma DB
state/todo-improvement-2026110373the 3 Nov Todo project workspace
state/mnemosyne.db.bak-2026102629pre-repair copy
state/mnemosyne-pre-purge-20261020-091409.db27pre-purge copy

Each of these is a copy of something that still exists, or a test artefact. Deleting them costs a re-download or a re-run, not data.

C. Rebuildable cache — 1.0 GB

cache/uv (1,018 MB) is the uv package cache. uv cache prune or deleting it costs re-downloads and nothing else. cache/fastembed (129 MB) is the local embedding model — keep, it is in use.

D. Cron — 112 jobs, and the three that spend money

108 jobs are no_agent scripts, which is the house rule. Three enabled jobs are agent jobs, i.e. they call a model on every run:

JobScheduleRuns/day
cron-failure-triage0 */4 * * *6
email-draft-preparer30 12,18 * * *2
WhatsApp — morning reply drafts0 8 * * *1

That is roughly nine model runs a day that are not scripts. Worth deciding deliberately rather than by accretion — cron-failure-triage at six runs a day is the expensive one, and it only has something to do when a job fails.

Ten jobs are disabled, of which four are spent one-shots with dates in the past:

  • stabilisation-b2-verify — once, 31 Oct
  • todo-deepseek-review-20261103 — once, 3 Nov
  • todo-sol-review-20261103 — once, 3 Nov
  • Sol All-view review (retry after quota) — once, 3 Nov
  • reminder-call-dave — once, 5 Nov

and six that were switched off on purpose or by accident:

  • tracker-intake-merge — every 30m
  • mnemosyne-sleep — daily 03:00
  • daily-fact-extraction — daily 03:00
  • WhatsApp — awaiting reply — every 15m
  • WhatsApp — admin triage — every 30m

Worth a look: mnemosyne-sleep and daily-fact-extraction are both off. Those are the two steps that turn conversations into durable memory. If that is deliberate, fine; if it happened during a repair, memory has been collecting without being distilled.

E. Everything else is healthy

  • No cron job points at a missing script.
  • No duplicate job names.
  • No duplicate skill names; 108 skills, smallest are the templates.
  • One exited container (tei-embeddings) — a stopped embedding server, not an error.
  • 103 listening ports across the estate; nothing obviously orphaned.

Proposed order of work

  1. Delete two duplicate Immich tarballs — 2.9 GB, provably identical.
  2. Prune the uv cache — 1.0 GB, rebuildable.
  3. Clear scratch and one-offs (section B) — ~0.9 GB.
  4. Retire the five spent one-shot cron jobs — clutter in the job list, no function.
  5. Decide on the pre-update zip (1.3 GB) — it is the only pre-22-Oct snapshot; if the Oct 22 update is comfortably behind us, it goes.
  6. Review the three agent cron jobs — cost, not disk.
  7. Check whether mnemosyne-sleep and daily-fact-extraction should be running.

Steps 1–4 are safe and reversible in the sense that nothing unique is destroyed. Step 5 is a judgement on how far back you want to be able to restore.