Skills learnings

Review the current session and code changes for anything worth codifying in CLAUDE.md or README.md. Use before committing/opening a PR, or when the user asks "anything learned?", "anything to note?", "should we update CLAUDE.md?", "update the docs with what we learned", or similar.

install
source · Clone the upstream repo
git clone https://github.com/Shpigford/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/Shpigford/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/learnings" ~/.claude/skills/shpigford-skills-learnings && rm -rf "$T"
manifest: learnings/SKILL.md
source content

Learnings

Final pre-commit sweep: did we learn anything in this session that the next person (or agent) working in this repo will regret not having written down?

The bar is high. Most sessions produce nothing worth adding. That's fine. Saying "nothing worth adding" is a valid — and often correct — outcome. Do not invent findings to justify the skill.

Step 1: Gather context

Run these in parallel:

  • git diff
    (unstaged) and
    git diff --cached
    (staged) — what actually changed
  • git status
    — new files, deleted files
  • git log --oneline -20
    — recent commit style and scope
  • Read
    CLAUDE.md
    if it exists (project root, then
    .claude/CLAUDE.md
    )
  • Read
    README.md
    if it exists

Also re-read this session's conversation: what did the user correct you on? What did you stumble over? What non-obvious thing did you discover about the codebase?

Step 2: Apply the bar

A candidate learning is worth codifying only if it meets at least one of these:

  1. Non-obvious gotcha — something that cost real time this session and will cost real time next time. ("The build silently caches X, you have to nuke
    .cache/
    to actually re-run.")
  2. Convention the code doesn't self-document — a pattern, naming rule, or structural choice that isn't visible from reading one file. ("Migrations must be written idempotent because they run on every boot.")
  3. User correction that is reusable — the user pushed back on an approach in a way that applies beyond this task. ("Don't add error boundaries around server components in this repo — they swallow Next.js's own error UI.")
  4. External dependency or env requirement — something a fresh clone wouldn't work without. ("Requires
    STRIPE_WEBHOOK_SECRET
    in
    .env.local
    or checkout tests fail silently.")
  5. Architectural decision with a reason — a choice that looks arbitrary without the why. ("We hand-roll the queue instead of using Sidekiq because Rails 8 solid_queue handles our volume and removes the Redis dep.")

Reject candidates that are:

  • A summary of what this PR does (that's what the commit message is for)
  • Restating what the code already makes obvious
  • Generic best practices ("use TypeScript strict mode") that aren't specific to this project
  • One-off debugging fixes that won't recur
  • Anything already covered by existing CLAUDE.md / README.md content — check before proposing

Step 3: Decide the target file

  • CLAUDE.md — instructions to Claude. How to work in this repo. Commands, conventions, gotchas, "don't do X." Audience: the next AI agent in this repo.
  • README.md — instructions to humans. Setup, architecture overview, deployment. Audience: a developer cloning the repo.

Overlap exists. When in doubt: is this something I'd want auto-loaded into every future session? → CLAUDE.md. Is this something a human needs during onboarding? → README.md.

If the project has no CLAUDE.md and the learning belongs there, propose creating one — but only if there's at least one solid entry to put in it. Don't create an empty scaffold.

Step 4: Propose, don't commit

Present findings like this:

## Session learnings

**Worth adding to CLAUDE.md:**
- [concrete proposed line or bullet, written in the voice/style of the existing file]
  Why: [one line — what it prevents or explains]

**Worth adding to README.md:**
- [same format]

**Considered but rejected:**
- [thing that almost made the cut] — [one-line reason it didn't]

Then ask: "Want me to apply these edits?"

Do not edit CLAUDE.md or README.md without explicit approval. These files are load-bearing — a bad edit poisons every future session in the repo.

If nothing clears the bar:

## Session learnings

Nothing worth codifying. [One sentence on why — e.g., "All changes were straightforward feature work that the diff and commit message already explain."]

That's a complete, honest answer. Ship it and move on.