Use at the start of every coding session to read the project's LEARNINGS.md in full before taking any action, and at the end of every session to update it — applying relevant lessons, adding at most one new block for a genuinely new durable lesson, and actively pruning or merging stale/contradictory blocks so the file never becomes append-only noise. Trigger phrases: "start a session", "begin the task", "remember step", "update learnings", "session end".
How this skill is triggered — by the user, by Claude, or both
Slash command
/memory-mirror-harness:memory-fileThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
`LEARNINGS.md` is a structured, deliberately small memory file at the project root. It survives context compaction and session boundaries because it lives on disk, not in conversation history. It is the durable half of the loop's memory — the other half is the progress ledger (see the `memory-mirror-harness` skill).
LEARNINGS.md is a structured, deliberately small memory file at the project root. It survives context compaction and session boundaries because it lives on disk, not in conversation history. It is the durable half of the loop's memory — the other half is the progress ledger (see the memory-mirror-harness skill).
This is not a changelog and not a diary. It holds only lessons that would change future behavior if known in advance. Treat every block as a live hypothesis about the codebase that can go stale and must be checked, not a permanent record.
This skill is not the fresh-context-reviewer agent and the reviewer's strict "exactly two inputs" contract does not apply here. When a session or dispatch describes which blocks are stale and why (e.g. "these blocks reference a module that was deleted"), that is ordinary task input for the pruning step to act on directly — not commentary to flag as contamination and not a reason to refuse for lack of a pasted file. If the actual current file contents are not available to read, say so as a one-line caveat, then still perform the full decide/prune/regenerate-index procedure illustratively (see the memory-mirror-harness skill's "Handling scenarios without a real on-disk artifact" section) rather than stopping.
# Learnings
<one-line index: "N blocks — topic1, topic2, topic3, ...">
## L1: <five-to-eight-word title>
- Doing: <what task/change was in progress when this was learned>
- Signal: <what went wrong, or what worked non-obviously, in one sentence>
- Fix: <the corrected approach going forward, in one sentence>
## L2: <title>
- Doing: ...
- Signal: ...
- Fix: ...
Rules for the format:
At the start of every session, before taking any action on the task:
LEARNINGS.md in full — the whole file, not just the index. The index exists for fast scanning during long sessions, not as a substitute for reading blocks on first read.At the end of every session (or every discrete subtask in a long unattended run), before finalizing:
Guides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Enforces test-driven development: write failing test first, then minimal code to pass. Use when implementing features or bugfixes.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.
npx claudepluginhub skobyn/upskill-me --plugin memory-mirror-harness