Skip to content

/memory-curator

Use at session-close when a session captured several new memories, or on-demand, to consolidate, deduplicate, prune, and structure the beads memory store. Triggers on "curate memories", "clean up memories", "memory sweep".

shell
$ npx -y skills add DollarDill/beads-superpowers --skill memory-curator --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/memory-curator
How auto-invocation works

Context preview

The summary Claude sees to decide when to auto-load this skill.

Use at session-close when a session captured several new memories, or on-demand, to consolidate, deduplicate, prune, and structure the beads memory store. Triggers on "curate memories", "clean up memories", "memory sweep".

SKILL.md

memory-curator.SKILL.md
name: memory-curator
description: Use at session-close when a session captured several new memories, or on-demand, to consolidate, deduplicate, prune, and structure the beads memory store. Triggers on "curate memories", "clean up memories", "memory sweep".

Memory Curator

Turn a session's raw `bd remember` notes into deduplicated, consolidated, well-structured memories — and prune the pile — using `bd` over text already in context. No runtime, no embeddings.

**Announce at start:** "I'm using the memory-curator skill to consolidate and structure the memory store."

When to Use

  • **Session-close** — when the session produced ~3+ new `bd remember` calls. Offered, never automatic.
  • **On-demand** — a full-store sweep: `Skill(beads-superpowers:memory-curator)`.

When NOT to Use

  • Sessions with 0–2 new memories — not worth a pass.
  • Mid-task — run at a clean stopping point, not while work is in flight.

Memory taxonomy

Two classes; **procedural** memory (how-to / workflow) lives in the **skills**, never the memory store.

  • **semantic** — durable facts that stay true.
  • **episodic** — time-bound records of what happened.

**The `@type` is the routing decision.** Classify once; the type deterministically sets store, injection, and lifecycle.

| `@type` | store | injected at session start? | lifecycle | |---|---|---|---| | `semantic:lesson` | memory | yes (salience≥4) | durable; consolidate near-dups | | `semantic:root-cause` | memory | yes (salience≥4) | durable; consolidate | | `semantic:pattern` | memory | yes (salience≥4) | durable; consolidate | | `semantic:correction` | memory | yes | durable (supersedes a wrong memory) | | `semantic:research` | **deferred knowledge-bead** | **no** | deferred bead; pointer to a research doc (`metadata.doc`); `bd supersede` on replacement | | `semantic:design` | **deferred knowledge-bead** | **no** | deferred bead; pointer to an ADR/spec (`metadata.doc`); `bd supersede` on replacement | | `semantic:decision` | **deferred knowledge-bead** | **no** | deferred bead; pointer to an ADR (`metadata.doc`); `bd supersede` on replacement | | `episodic:continuation` | memory | latest only | supersede on next | | `episodic:done` / `cleanup` / `review` | memory → retire | no | consolidate into a semantic fact, then drop; age-out (>30d) safety net |

**Crisp routing definitions (the boundary that keeps determinism honest):**

  • `research` / `design` / `decision` = a **pointer** whose detail lives in a doc/ADR you would re-open when relevant. Injecting it every session wastes context — route to a deferred knowledge-bead (§ Beads-native knowledge store).
  • `lesson` / `root-cause` / `pattern` / `correction` = a **standalone, actionable rule** you want surfaced *unprompted* so you don't repeat a mistake (e.g. "bd worktree default path is ./<name>, not .worktrees/"). Stays an injected memory.
  • **Escape hatch:** if a research/design item is genuinely a standalone reusable rule, classify it as a `lesson`/`pattern` — you change the *type*, never the store directly.

Map a non-canonical prefix to the nearest canonical subtype — e.g. `stress-test`/`plan-stress-test`→`design`, `bug`→`root-cause`, `sdd`→`lesson`, `upstream`→`research`, `docs`→`pattern`. If none fits, ask — don't invent. If an extracted "memory" is really procedural, flag it for a skill — don't store it.

Memory header

Every memory keeps its existing key and carries one greppable header line:

@type=semantic:lesson @created=2026-06-28 @salience=4 @refs=<bead-id>,<memory-key> @tags=memory,curation
<self-contained fact body>
  • `@type` — `<class>:<subtype>` from the taxonomy — the subtype sets store/injection/lifecycle per the taxonomy table above. `@created` — ISO date. `@salience` — 1–5, best-effort.

`@refs` — related bead IDs / memory keys. `@tags` — lexical filter.

The class makes the prune signal greppable (`bd memories | grep '@type=episodic:'`); `@salience`/`@tags` filter recall.

Beads-native knowledge store

Reference-class memories (`research`/`design`/`decision`) live as **deferred knowledge-beads**, not in `memory.` — a deferred bead is never auto-injected at session start, so pointers stay out of every session's context but keep persistence + Dolt sync.

  • **Bead:** `status=deferred` with a far-future `--defer 2099-01-01` — never `closed` (closed beads are GC-deleted at 90d). `issue_type` matches the subtype (`research`/`design`/`decision`); every knowledge-bead also carries the class-marker label `kb` plus 1–3 topic labels from the controlled vocabulary (`scripts/kb-label-vocab.txt`).
  • **Body:** the research doc / ADR stays on disk as the source of truth; the bead is the queryable index/pointer via `metadata.doc` (display-only), with a distilled summary as the description:
  printf '%s' "<distilled summary: what this note establishes>" | \
  bd create "<one-line summary>" -t <research|design|decision> -l kb,<topic-labels> \
    --defer 2099-01-01 --metadata "$(jq -nc --arg d "<doc-path>" '{doc:$d}')" --body-file - --silent
  • **Retrieval:** `bd list --label <topic> --status all` (topic) and `bd search "<kw>" --status all` (keyword) — never metadata filters (broken in `bd`), never `find-duplicates`.
  • **Lifecycle:** `bd supersede <old> --with <new>` on replacement — the superseded bead closes and decays; the live pointer stays deferred.
  • **Move-out invariant (curator route step):** write the deferred knowledge-bead → **verify** (`bd show <id>` returns it) → **then** `bd forget` the memory. Never forget first. Existence-check before writing (idempotent re-run). Run the secret/PII scan on the body first — **flag for removal, never relocate** a secret into a bead.
  • **Aging path:** a cooled injected memory (low `@salience`, or superseded) can retire into a deferred knowledge-bead too, not just a tombstone — same move-out invariant above (write → verify → `bd forget`), never a copy left behind in both stores.

The sweep

One pass. Input: the session (i

Read more
Read it on GitHub ↗

Showing the first part of this file.

Ships withbeads-superpowers

Superpowers & Beads task memory for AI coding agents - supports Claude Code, Codex, OpenCode, Cursor, Gemini CLI, GitHub Copilot CLI, Kimi Code, Antigravity, Factory Droid, and Pi.

Get the whole plugin, auto-invoked
Stats
22
Stars
0
Views
1
Forks
Active
Maintenance
Shell
Language
MIT
License
1d ago
Last commit
3mo ago
Created

Repo: DollarDill/beads-superpowers