learn — low-friction staged capture
Jot down a candidate learning without deciding right now whether it belongs in committed memory. This is the staging half of a two-stage pipeline; promote-memory is the review gate that later decides which staged candidates actually get promoted.
Why a staging step at all
record-learnings and memorize both write straight into committed memory (CLAUDE.md, memories/*.md, or a repo’s project memory) the moment something looks worth remembering. That’s the right call when you’re confident — an explicit user correction, a clearly general fact. But not every candidate is that clear-cut mid-task: a pattern that might be a one-off, a preference stated once that might not generalize, a workaround whose root cause isn’t confirmed yet. Committing those immediately risks polluting the corpus with noise that later has to be found and pruned. learn defers that judgment call to a dedicated review pass instead of making it under time pressure mid-task.
When this fires
- “log a learning”, “stage this as a learning”, “note this for later”, “jot this down”
- Proactively, for a discovery that seems worth keeping but you’re not confident enough to commit directly — genuinely uncertain generality, unconfirmed root cause, or a preference stated only once
- Not for a case
record-learnings/memorizealready handles confidently — an explicit “remember that…” instruction, or a clearly general, well-evidenced fact. Use those directly; staging is for the uncertain middle ground, not a mandatory detour for everything.
Procedure
1. Write a raw candidate entry
Append (never overwrite) an entry to the staging file: ~/.claude/projects/<project-slug>/memory/learn-staging.md. This is the same auto-memory directory handoff/record-learnings/memorize already use — it’s local to this machine and was never going to be committed regardless, so it’s a natural staging area distinct from the ai-config repo’s actual committed corpus (CLAUDE.md, memories/*.md).
Each entry is a dated bullet, not a polished write-up — capture speed matters more than form here:
- 2026-07-06: [candidate] <what you noticed, one or two sentences, with the
concrete evidence — a command, a file:line, a quoted user statement>Don’t categorize, don’t decide a destination file, don’t check for duplicates against the committed corpus — that’s promote-memory’s job, not this step’s. The entire point of learn is that logging it costs almost nothing.
2. Confirm briefly
One line: “logged to staging” is enough. Don’t produce a report.
Relationship to other skills
promote-memory— the review gate this feeds. Staged entries sit inlearn-staging.mduntil that skill runs (on demand, or periodically) and decides promote / discard / hold for each.record-learnings/memorize— the direct-write path for learnings confident enough not to need review.learndoesn’t replace either; it’s the additional path for the uncertain middle ground both of those skip past by writing immediately.ums— a full-session sweep that also writes directly to committed memory.promote-memorycan absorb alearn-staging.mdreview as part of aumspass, or run standalone.
Anti-patterns
- ❌ Using
learnfor everything “to be safe” — most learnings are clear enough forrecord-learnings/memorizeto write directly; reserve staging for genuine uncertainty, or the staging file becomes a dumping ground no one reviews. - ❌ Deciding a destination file or checking for duplicates at staging time — that’s
promote-memory’s job; keep this step fast and undecided. - ❌ Losing track of a staging file that never gets reviewed — if
learn-staging.mdis piling up unreviewed, runpromote-memoryrather than letting it grow indefinitely.