| name | prune-memory |
| description | Audit the current project's memory store (`~/.claude/projects/<encoded-cwd>/memory/`) and prune memories that no longer match the project state โ dead file/function/flag references, past-dated project memories, orphaned index entries, and duplicates. Suggests candidates with rationale and requires per-item confirmation before deleting; does not edit memory bodies. Use when the user says "prune memory", "clean up memory", "audit memory", "memory is stale", "remove old memories", or invokes /prune-memory. |
| model | inherit |
| allowed-tools | ["Bash","Read","Edit","Grep","Glob"] |
| user-invocable | true |
Prune Memory
Audit the per-project memory directory and remove entries that no longer reflect reality. Suggest-only: surface candidates with reasons, confirm before touching files, never rewrite memory bodies.
Locate the memory directory
Derive from the current working directory: replace every / with -, prepend ~/.claude/projects/, append /memory/. Example: /Users/jenc/code/agent-skills โ ~/.claude/projects/-Users-jenc-code-agent-skills/memory/.
If the directory is missing or empty, report and stop. If MEMORY.md is absent but memory files exist, flag the index drift first.
Workflow
- Inventory. List
*.md files in the memory dir and read MEMORY.md. Read every memory file in full โ they are small.
- Classify each memory by frontmatter
metadata.type (user, feedback, project, reference). Different types decay at different rates (see Bias by type below).
- Extract concrete claims from each memory body โ file paths in backticks, function/symbol names, flag/env-var names, dates (
YYYY-MM-DD), external URLs, person names, ticket IDs.
- Verify against current state using one tool call per claim type:
- File path โ
Read or ls; gone โ stale.
- Symbol / flag โ
Grep across the repo; zero hits โ stale.
- Date โ compare to today; past โ stale if the memory's premise was the date.
- URL โ leave alone (not the agent's job to fetch).
- Cross-check the index. Files not listed in
MEMORY.md โ orphaned file. MEMORY.md entries pointing at missing files โ orphaned link.
- Find duplicates by frontmatter
description overlap and body subject. Two memories on the same rule โ propose keeping the more specific / more recent one.
- Group findings into a single report:
dead-reference โ cites artifact that no longer exists
past-dated โ project memory whose premise (deadline, freeze, sprint) has passed
orphaned โ file โ index mismatch
duplicate โ overlapping subject with another memory
contradicted โ body claims X, current code does not-X (only flag when confidence is high)
- Confirm per item. Present each candidate with: path, type, one-line rationale, suggested action (delete / unlink from index / keep). Ask the user to approve, skip, or batch-approve a category. Default action on skip is keep.
- Apply approved actions. For deletes: remove the file and the matching line in
MEMORY.md. For index repairs: Edit MEMORY.md to add or remove the pointer. Never rewrite memory bodies โ that is out of scope.
- Report.
Reviewed N, pruned M, kept N-M. <one line per pruned file>.
Bias by type
feedback and user memories are durable โ only prune on dead-reference or duplicate. Personal preferences and rules do not expire just because a file moved.
project memories decay fast โ past-dated, contradicted, and dead-reference all apply. Most pruning targets live here.
reference memories โ verify URLs/paths still resolve in name only (does the file/dir exist); do not fetch.
What you must NOT do
- Do not edit memory bodies. If a memory needs an update, flag it for the user; auto-save will fix it next time the underlying fact is observed.
- Do not delete
MEMORY.md itself, even if empty.
- Do not prune memories that reference external projects or systems just because they are not in the current repo โ
reference memories often point off-repo on purpose.
- Do not consolidate by merging two memories into one; that is rewriting.
- Do not act without per-item confirmation, except for the bulk-approve path the user explicitly chooses.
Final assistant-message summary
Memory pruned: <M>/<N> reviewed.
- <path>: <category> โ <one-line reason>
- <path>: <category> โ <one-line reason>
Index updated: MEMORY.md (<+a/-b> lines).
Kept: <N-M> (no action needed or user declined).
If nothing was prunable, say so and list the categories you checked.