5.0 KiB
5.0 KiB
name, description
| name | description |
|---|---|
| compact-memory | Audit and compact memory/MEMORY.md by removing superseded, duplicated, overly detailed, or ephemeral entries, and merging related items within a subsection. Runs interactively by default; use auto mode for unattended execution. |
compact-memory
Compact memory/MEMORY.md when it grows too large or stale. The skill reads memory/MEMORY.md plus USER.md, SOUL.md, and keep.md (all three in the workspace root) to detect duplicates and outdated context, but only edits memory/MEMORY.md.
When to use
- User says "compact memory", "clean up MEMORY.md", "memory audit", or similar.
MEMORY.mdexceeds ~250 lines.- There are obvious duplicates between
MEMORY.mdand other memory files. - Old project notes, ephemeral debugging details, or superseded facts accumulate.
The line threshold is only a proactive trigger. When the user invokes the skill explicitly, run the full audit regardless of line count.
Modes
Interactive mode (default)
- Read
memory/MEMORY.md, and — for duplicate detection — alsoUSER.md,SOUL.md, andkeep.md(all three in the workspace root). - Count total lines (
wc -l memory/MEMORY.md). If the skill was not invoked explicitly by the user, the file is ≤ 250 lines, and there is no obvious staleness, report "nothing to clean up" and stop. When invoked explicitly, always continue to the audit. - Audit the WHOLE file in a single pass. Walk every
##section and every###subsection in order, top to bottom, and evaluate every bullet. Do not stop after the first few findings — the proposal in step 5 must cover the entire file at once. Re-running the skill should find nothing left, not "the next batch". - Identify candidates:
- superseded — replaced by newer facts, completed work, or no longer relevant.
- detail — concrete commands, flags, paths, measurements, or code references (e.g.
telegram.py:384, script paths, DB paths) that belong in a skill, in code, or in aresults/file. - duplicate — same fact already present in
USER.md,SOUL.md, orkeep.md. - ephemeral — one-off debugging, temporary state, resolved incidents, or transient build/run progress (counts, task-failure notes, in-flight status).
- stale section — an entire
##/###section whose contents are all superseded or ephemeral (e.g. a finished project, a one-off task log, transient system state). Propose removing the whole block at once, not bullet by bullet.
- Identify merge candidates within the same
###subsection — related bullets that can be combined into one concise bullet. - Present a single numbered proposal in chat that covers the entire file:
- list each delete with reason and original text (use
[stale section]and cite the heading for whole-section removals); - list each merge with merged text.
- Kept items are not listed.
- list each delete with reason and original text (use
- Wait for user approval. Accept commands like:
apply/ok/yes— apply all proposed changes.keep 3, 7, 12— keep listed items, apply the rest.delete 2, 5— delete only listed items.cancel— abort.
- Apply approved changes to
memory/MEMORY.md. - Append deleted items to
log/memory-clean.logwith timestampYYYY-MM-DD HH:MM(create the file if it does not exist). - Report summary.
Auto mode
Triggered by the user saying "memory-compact auto" or an equivalent with explicit auto intent.
- Perform the same audit as interactive mode.
- Before deleting anything, write a full snapshot of
MEMORY.mdtobackup/<YYYY-MM-DD_HHMM>_memory.backup.md. - Apply changes immediately without waiting for approval.
- Print a detailed list of changes.
- Append deleted items to
log/memory-clean.log(create the file if it does not exist).
Rules
- Only edit
memory/MEMORY.md. - Do not touch
SOUL.md,USER.md, orkeep.md. - In interactive mode do not create backups of
MEMORY.md; rely onlog/memory-clean.logfor traceability. Auto mode always writes a full snapshot tobackup/before deleting. - Merge only within the same
###subsection (never across##sections or across different###subsections). - Preserve active project context, user preferences, and durable infrastructure facts.
- Be exhaustive: propose every qualifying candidate in one pass, not a handful. The user prunes via
keep/delete, so in interactive mode propose generously and flag borderline items rather than silently keeping them. - In auto mode only, when in doubt keep it (no user is there to prune); list the borderline items you kept in the report.
Output format
Interactive proposal:
Found X candidates to change in MEMORY.md:
Delete:
1. [superseded] <text>
2. [detail] <text>
3. [stale section] ## <heading> (N bullets) — <reason>
...
Merge:
5 + 6: <merged text>
...
Commands: apply | keep <numbers> | delete <numbers> | cancel
Auto mode report:
Memory compact (auto):
- deleted: X
- merged: Y
- unchanged: Z
Details:
...
Example
User: compact memory
Agent: reads files, counts lines, proposes changes, waits for apply.