Curating Memories
Active curation keeps the knowledge base accurate. A memory that is fully resolved or historical but still reads as live guidance forces a fresh agent to read past archaeology to reach current truth, and outdated content pollutes every search that touches it.
This skill owns in-file supersession markers on .serena/memories/**. It never
merges or deletes Serena files and never edits Serena index files. Use
memory-consolidate for cross-file Serena merges, deletions, and index cleanup, and
memory-maintenance for health, token, and size checks.
Triggers
| Trigger Phrase | Operation |
|---|---|
how do I mark a memory obsolete |
Strike the obsolete content, add a dated banner |
how do I supersede a memory |
Apply the healthy-supersession shape below |
how do I clean up stale memories |
Run the sweep, then verify each proposal |
run the supersession sweep |
Scripts section below |
Scope
Serena memories are markdown files, not records in a store. There is no soft-delete, no obsolete flag, and no link table to write. Curation is an edit to the file's own text, and history survives because the file keeps it visible rather than because a backend hides it.
| In scope | Out of scope |
|---|---|
| Strike-through and dated banners inside one memory file | Merging two Serena memory files (memory-consolidate) |
| Collapsing a resolved investigation to a changelog footer | Deleting a memory file (memory-consolidate) |
| Adding a dated-snapshot banner to a point-in-time doc | Editing memory-index.md (memory-consolidate) |
| Running and verifying the supersession sweep | Store health, token, and size checks (memory-maintenance) |
When to Supersede
Supersede content when:
- Newer information contradicts it.
- A decision has been reversed or replaced.
- The code, script, workflow, or artifact it references no longer exists.
- The file records a resolved investigation but still reads as an open one.
- A dated point-in-time snapshot is framed as current state.
Do not supersede on style, length, or strikethrough density. A file that already carries struck-through history with current truth visible is the target shape, not a rot signal.
Scripts: Supersession Sweep
The append-never-delete pattern is the failure this sweep targets: a memory that is fully resolved or historical but still reads as live guidance, so a fresh agent has to read past archaeology to reach current truth. Run the sweep to surface those files. It proposes a disposition per file and edits nothing; ratification is a separate, confirmed step.
uv run python "${COPILOT_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-.claude}}/skills/curating-memories/scripts/supersession_sweep.py"
Add --json for machine-readable output, or --root <dir> to scan a
directory other than .serena/memories.
The four buckets
| Bucket | Signal | Action |
|---|---|---|
live |
No supersession markers | Leave alone |
healthy-supersession |
Struck-through obsolete content plus a dated banner, current truth visible | Leave alone; this is the target shape |
resolved-or-historical-but-present |
Status: RESOLVED/BLOCKING co-present with references to removed artifacts or per-section (Historical) tags |
Propose archive, or collapse to a one-line changelog footer |
temporal-snapshot-as-live |
A dated point-in-time doc framed as current state | Propose a dated-snapshot banner |
The constraint (non-negotiable)
The sweep is a generator self-report, which is the closed-loop-validator trap. The classification is a routing signal into verification, never a verdict:
- The sweep proposes a disposition. It does not edit or delete.
- Ratify with the doc-accuracy code-as-source-of-truth discipline: archive a memory only after confirming the artifacts it references are actually gone and no live path depends on it.
- A human or a second independent check confirms before any content is removed. A mis-flag on a load-bearing entry is the exact loss this proposal-only design prevents.
The healthy-supersession target shape
When you collapse a resolved-or-historical-but-present file, do not bury
it. Strike through the obsolete content, add a dated banner explaining why,
and keep current truth visible inline. cost/cost-summary-reference.md is
the exemplar: obsolete rows struck through, a dated IMPORTANT banner,
history preserved, nothing hidden. Strikethrough density alone is a
healthy-supersession signal, never a rot signal; the sweep will not propose
archiving a file on strikethrough count.
Process
- Run the sweep, or open the memory the user named.
- Read the file and classify it against the four buckets.
- Verify the proposal against the code: confirm the artifacts the file references are actually gone before treating it as historical.
- Present the disposition to the user and wait for confirmation.
- Edit the file to the healthy-supersession shape, keeping history visible.
- Re-read the edited file and confirm current truth is reachable without reading the struck-through content.
Anti-Patterns
| Avoid | Why | Instead |
|---|---|---|
| Deleting obsolete content outright | Loses the audit trail and the reason the position changed | Strike it through under a dated banner |
| Treating a sweep bucket as a verdict | The sweep is a self-report; a mis-flag on a load-bearing memory is unrecoverable | Verify against the code, then confirm with the user |
| Archiving on strikethrough density | That is the healthy shape, not rot | Check for removed-artifact references and a resolved status |
Editing memory-index.md from here |
Index cleanup belongs to a different owner and the two passes conflict | Route to memory-consolidate |
| Burying superseded content in a collapsed footer with no date | A future reader cannot tell what changed or when | Date the banner and say why the content was superseded |
Verification
After curation operations:
- Reconciliation: paste the sweep output line for each file you acted on, showing its bucket (not a claim about it)
- Every artifact a superseded file references was confirmed gone by an actual lookup, quoted in the output
- Each edited file still shows current truth inline without reading the struck-through content
- Every supersession carries a date and a one-line reason
- Curation changes were confirmed by the user before execution
- No memory file was merged, deleted, or removed from
memory-index.mdby this skill
References
| Artifact | Relationship |
|---|---|
.claude/skills/memory-consolidate/SKILL.md |
Owns cross-file merges, deletions, and index cleanup |
.claude/skills/memory-maintenance/SKILL.md |
Owns store health, token, and size checks |
.claude/skills/doc-accuracy/SKILL.md |
Code-as-source-of-truth discipline used to ratify a proposal |
.claude/skills/curating-memories/scripts/supersession_sweep.py |
The proposal-only classifier this skill drives |