Skills · Workflow

memory-review

/memory-review

Lightweight end-of-session memory review — scan the conversation just had for durable lessons and save them into Ralphy's tiered memory (`ralphy memory note`, write-and-tell: ev…

Workflowopsuser
SKILL.md

memory-review — close the loop on the session you just had

The cheap half of Ralphy's learning loop. Recall (AGENTS.md step 0) loads memory INTO a session; this skill writes the session's lessons BACK. Between them sits invariant #18 (capture corrections the moment they land). Run this when a session winds down and something was learned but nobody asked for a full postmortem.

Workflow

  1. Scan the conversation for signals, newest first:

    • User corrections — model pick, register, pacing, aspect, voice, phrasing the user changed after seeing output. The strongest signal: it cost the user a turn, and uncorrected it will cost one again.
    • Frustration markers — "stop doing X", "again?", "I already said", "why is it doing Y". First-class signals, not noise.
    • Durable preferences — anything phrased as "always / never / by default" about look, sound, structure, or workflow.
    • Discovered facts — a model filter hit, a provider quirk, a flag that behaved unexpectedly, a workaround that held.
    • Techniques that worked — a prompt pattern, a recipe, a sequence that future-you would otherwise re-derive.
  2. Filter through the do-not-capture list (same as ralphy memory distill and invariant #18):

    • environment-dependent failures (missing key/binary/dep) — capture the FIX if there was one, never the failure;
    • negative tool/model claims ("X is broken") — they outlive the bug and harden into refusals;
    • transient errors a retry solved — the lesson is the retry pattern;
    • task progress, outcomes, narratives — logs/ + postmortem/ territory;
    • anything already covered by the repo (MODELS.md, guidelines, playbooks) or by an existing memory entry that does not need changing.
  3. Dedupe against the store. For each survivor: ralphy memory search <keyword>. Overlap → re-note the existing slug (the store versions it up); no overlap → new slug, class-level name (no project ids, no error strings).

  4. Write directly, tiered (#117 — write-and-tell, no approve ceremony):

    • Every survivor → ralphy memory note .... Client/universe facts get --workspace; cross-project craft/model/tooling stays global.
    • Every body carries the rule + **Why:** + **How to apply:** + **Does NOT apply to:** — a vague negative scope is grounds to keep drafting (#045 over-application lesson).
  5. Report one tight block in chat: saved to memory: + one line per slug (description + tier), plus anything deliberately skipped with the one-word reason (covered / transient / narrative). End with the undo hint: "say 'forget <slug>' to retire any of these" — and execute ralphy memory retire <slug> the moment the user says so.

Health check hand-off

While in the store: if ralphy memory list shows more than ~70 active entries in a tier, or any write bounced with E_MEMORY_CAP_EXCEEDED this session, suggest a ralphy memory curate pass (#116) — consolidation is its job, not this skill's.

HARD INVARIANTS

  • 0-5 entries per session. More means you are logging, not curating — cut to the ones that change a future decision.
  • Write-and-tell, never write-and-hide (#117). Saves are automatic but ALWAYS surfaced in chat (saved to memory: <slug>), and "forget" is honored instantly with ralphy memory retire. Transparency is the consent mechanism — a save the user never saw is a defect.
  • Update over new. Search first; an overlapping slug is re-noted, never cloned into a sibling.
  • "Nothing to save" is a valid outcome — say it in one line and stop. A session with no corrections and no discoveries produces no entries.
  • English on disk — memory entries are English regardless of chat language (translate the user's remark, keep their meaning).
  • No paid calls. This skill is the agent reading its own conversation — if you are reaching for callLLM, you want /postmortem + ralphy memory distill instead.