pedrohcgs/promote-memory
Review candidate `[LEARN]` entries in `.claude/state/personal-memory.md` (gitignored) and run them through a five-critic council in parallel: generality, staleness, redundancy, evidence, format. Majority vote (3+ of 5) promotes the entry to MEMORY.md. Use when user says "promote memory", "review my learnings", "what should graduate to MEMORY.md", "five-critic council", or as monthly memory maintenance.
npx skills add https://github.com/pedrohcgs/claude-code-my-workflow --skill promote-memory
<!-- Pattern adapted with attribution from Chris Blattman's claudeblattman v2.1
"Five-critic council" (claudeblattman.com, Apr 2026 continuous-improvement
loop). Blattman uses it to decide what enters his MEMORY layer; we adapt
it to the personal-memory → MEMORY.md promotion question codified in
.claude/rules/meta-governance.md. -->
/promote-memory — five-critic council for memory promotionThe template's meta-governance.md rule splits memory into two tiers:
MEMORY.md (committed, ≤ 200 lines) — generic learnings that help all forkers..claude/state/personal-memory.md (gitignored, no size cap) — machine-specific and user-specific learnings.The rule says generic patterns should sync via git; personal patterns stay local. What it doesn't say is *who decides which is which*. /promote-memory operationalizes the call: spawn five critics in parallel, each reviewing the candidate [LEARN] entries on a single dimension, and promote on majority vote (3+ of 5).
/loop task. Wire /loop monthly /promote-memory all if you want automated proposal cadence (still requires user approval for each promotion).[LEARN] after a single correction. Just add it to personal-memory.md; let it sit until the next council runs./learn --revoke or manual edit. /promote-memory only promotes; it doesn't demote.Each critic runs in a forked context (Task with context=fork) — they don't see each other's verdicts or the user's draft. Each casts one YES/NO vote per candidate entry with a one-sentence rationale.
> "Would a non-econ forker benefit from this [LEARN] entry — a biology PhD, a sociology postdoc, a CS instructor? If the lesson is specific to *your* setup (your bibliography path, your machine's TeX install, your discipline's notation), vote NO."
> "Does this entry contradict the current state of the codebase? Run grep -r on the file paths, function names, or settings the entry references. If the referenced thing has been renamed, removed, or significantly changed, vote NO — the entry is stale and would mislead a future session."
> "Is this lesson already encoded in MEMORY.md, CLAUDE.md, or an existing rule? Read the relevant files. If yes (even paraphrased), vote NO — duplication erodes the index's signal."
> "Does the entry cite the incident, file path, or specific case that motivated it? If the entry is [LEARN:foo] always do X with no anchor to *why*, vote NO. Future Claude can't judge edge cases without the rationale."
> "Does the entry follow the schema in .claude/rules/meta-governance.md: [LEARN:category] wrong → right for corrections, structured Why: + How to apply: for feedback/project entries? If it's just a free-form note, vote NO — fix the format first, then re-submit."
Each critic returns YES/NO + rationale. The promotion threshold is majority (3+ YES).
If $ARGUMENTS is all, read every [LEARN:*] entry in .claude/state/personal-memory.md. Otherwise treat $ARGUMENTS as a substring filter (e.g., r-code matches all [LEARN:r-code] entries).
Five Task invocations in parallel, one per critic, each with context: fork:
Read / Grep the codebase. Should explicitly check any file paths / function names / settings the entry references.MEMORY.md + CLAUDE.md + relevant rule files..claude/rules/meta-governance.md for the schema reference.Use the Haiku tier for all five critics (per .claude/rules/model-routing.md: mechanical-ish review work). The user can override via the agent's model: field if they want Sonnet for the harder calls.
Collect verdicts. For each candidate entry, compute the vote count + per-critic verdicts.
For each entry:
## `[LEARN:foo] <summary>`
**Vote:** 4-of-5 YES (promote with note)
| Critic | Vote | Rationale |
|---|:---:|---|
| Generality | YES | ... |
| Staleness | YES | ... |
| Redundancy | YES | ... |
| Evidence | NO | Entry doesn't cite the originating incident. Add a one-line "Incident:" pointer before promoting. |
| Format | YES | ... |
**Recommendation:** Address Evidence critic, then promote.
**Proposed MEMORY.md addition:**
[LEARN:foo] <full proposed text>
The user reviews the report and explicitly approves which entries to promote. The skill writes approved entries to MEMORY.md, removes the same entries from personal-memory.md (or marks them with # promoted YYYY-MM-DD for audit), and surfaces a summary.
Do not auto-promote — even on 5-of-5 YES votes. The user's approval is the final gate.
[LEARN:category] section), personal-memory.md updated (entry marked promoted).quality_reports/memory_promotion_<date>.md audit file recording the full council session for forensics..claude/rules/meta-governance.md — the two-tier memory contract this skill operationalizes..claude/agents/promote-memory-council.md — the five-critic implementation (one agent file with five role specs, dispatched in parallel via Task)..claude/rules/model-routing.md — why critics default to Haiku tier./learn (existing skill) — captures new [LEARN] entries; pairs with /promote-memory (which decides what graduates).Take pedrohcgs/promote-memory from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.