@jamiefutch/pi-hermes-memory-cleanup
Pi package: utility for cleaning up and optimizing Hermes persistent memory storage used by the Pi coding agent.
Package details
Install @jamiefutch/pi-hermes-memory-cleanup from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@jamiefutch/pi-hermes-memory-cleanup- Package
@jamiefutch/pi-hermes-memory-cleanup- Version
0.1.6- Published
- Aug 19, 2026
- Downloads
- 842/mo · 842/wk
- Author
- jamiefutch
- License
- MIT
- Types
- extension
- Size
- 51.2 KB
- Dependencies
- 1 dependency · 1 peer
Pi manifest JSON
{
"extensions": [
"./extensions"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-hermes-memory-cleanup
A utility project for cleaning up and optimizing Hermes persistent memory storage used by the Pi coding agent.
Why
Hermes stores persistent memory as markdown files plus SQLite databases. Over time this accumulates:
- Duplicate memory entries
- Outdated recovery/retired backup files
- Bloated
failures.mdandMEMORY.mdfiles - Sessions database growth
This project provides scripts, tests, and guidance to safely audit and clean Hermes memory.
Reference Source
The canonical Hermes source is cloned at:
/projects/cloned/pi-hermes-memory
Use this as the source of truth for how Hermes stores, consolidates, and loads memory.
Project Structure
| Path | Purpose |
|---|---|
.pi/agents.md |
Development guidelines for this agent |
.pi/locations.md |
Where files, source, and docs live |
src/ |
Implementation (analyze.ts storage stats, parse.ts entry parser, dupes.ts duplicate detection, superseded.ts supersession detection, prune.ts recovery pruning, dedupe.ts entry removal, limits.ts injection caps, trim.ts entry picker planning, cli.ts report) |
test/ |
Vitest tests |
planning/ |
Notes and task lists |
Development
# Read-only report against ~/.pi/agent/pi-hermes-memory
npm start
# Configured injection caps vs actual usage
npx tsx src/cli.ts limits
# Pick specific entries to stop injecting (dry-run default)
npx tsx src/cli.ts trim --confirm --remove MEMORY.md#3 --remove USER.md#1
# Preview recovery-file pruning (keeps newest 10 per file)
npm run prune
# Actually prune (dry-run is the default; --confirm mutates)
npx tsx src/cli.ts prune --confirm --keep 5
# Preview duplicate/superseded entry removal
npm run dedupe
# Apply removal (backs up affected files first)
npx tsx src/cli.ts dedupe --confirm
# Run tests
npm test
# Type check
npm run typecheck
Safety
All mutating commands are dry-run by default and require --confirm. dedupe --confirm copies affected markdown files to ~/.pi/agent/pi-hermes-memory/.cleanup-backups/<timestamp>/ before rewriting, and never empties a file entirely. prune only touches .recovery-* files and always keeps the newest N per base file. Every command prints a before/after summary with bytes freed.
Report Output
npm start (read-only) prints:
- Storage stats — sizes of
MEMORY.md,USER.md,failures.md, recovery/retired backup files, and the SQLite databases - Per-request injection — what the model actually receives every request, computed from your Hermes mode:
policy-onlyinjects just the policy prompt + standing instructions (markdown files are tool-searchable, zero per-request cost);legacy-injectinjects full file contents - Memory files on disk — per-file entry counts, bytes, and estimated tokens, labeled injected vs. tool-searchable per your mode
- Stalest entries — the five entries with the oldest
last=activity dates - Largest entries — the five entries with the highest estimated token cost
- Duplicates — exact duplicates (identical normalized text) and near-duplicates (Jaccard/overlap similarity ≥ 0.6 with ≥ 5 shared tokens)
- Superseded entries — older entries whose content is largely contained (overlap ≥ 0.7) in a strictly newer, larger entry; candidates for retirement
limits shows Hermes injection configuration (~/.pi/agent/hermes-memory-config.json): memoryMode, memoryPolicyStyle, per-file char caps vs actual usage with near-cap warnings, and the failures.md injection filters (max age / max entries).
Entries are parsed from the standard Hermes markdown format: text blocks separated by § lines, with optional <!-- created=YYYY-MM-DD, last=YYYY-MM-DD --> metadata trailers.
Pi Extension
Install the package (or keep the local path in settings.json) and use inside pi:
The menu tags each operation by blast radius: ⚡ affects injected context (trim, dedupe), 💽 disk only (prune), untagged entries are read-only views.
/memory-cleanup interactive menu (report / limits / trim / dedupe / prune)
/memory-cleanup report show the full report in the TUI
/memory-cleanup limits injection caps vs usage
/memory-cleanup trim --confirm --remove MEMORY.md#3
remove specific entries (backs up first)
/memory-cleanup dedupe --confirm back up + remove duplicate/superseded entries
/memory-cleanup prune --confirm delete old recovery files
License
MIT