Automated summary
This skill reviews the finished session, hard-filters the lessons worth reusing, then routes each survivor either to the personal auto-memory store or to a proposed project-instructions edit landed through a normal pull request.
Strengths
- Aggressive filtering with a default of "don't write", preventing the memory store from becoming a costly landfill
- Explicitly picks the right home: personal auto-memory, an existing @-referenced sub-file, an AGENTS.md section, or a .claude/memories/ note imported from CLAUDE.md
- Detects context compaction by counting compact_boundary markers in the on-disk transcript instead of guessing from the in-context summary
- Presents a concise change list before writing and treats deletion and merging as first-class as additions
Limitations
- Tightly coupled to Claude Code: the cheap path and compaction detection rely on the ~/.claude/projects layout and the .jsonl transcript
- Must be invoked explicitly at session end; it does not run autonomously during work
- Durable repo conventions land as a pull request, so they wait on human review rather than applying immediately
Use it at the end of a session when you want to bank what cost wasted turns without bloating the existing memory store.
Avoid it outside Claude Code, or when you want an exhaustive session log rather than a filtered, curated selection.
Security analysis
CautionNo destructive, exfiltrating, or obfuscated behavior: there is no curl|sh, rm -rf, base64 payloads, or sending of secrets/tokens outward. The skill legitimately uses Read/Grep/Glob, an Agent subprocess, and Edit/Write to curate memory and propose doc edits, which is powerful but purposeful. The main considerations are privacy of local transcript reads and the write/PR capability modifying repo docs, so it rates caution rather than safe.
- •Reads and greps local session transcripts under ~/.claude/projects/ — these can contain sensitive work content, so transcript access should be understood by the user
- •Uses Edit/Write plus an Agent subprocess to modify memory stores and repo docs (CLAUDE.md, AGENTS.md, .claude/memories/) and to propose changes that 'land via a normal PR'
- •References landing changes via a PR yet no Bash/git tool is declared, so the actual commit/PR step is not covered by allowed-tools (capability mismatch)
- •Default-negative ('don't write') posture and an explicit propose-before-writing step are good safeguards, but edits to project instruction files are still powerful and warrant review
Examples
/reflect — review this session and save what's actually worth keeping.Save what you learned this session: the migration kept failing until we ran it with the env var set.Reflect on this session and propose the durable conventions for the repo as a PR.name: reflect description: > Use at the end of a session, or when the user says "/reflect", "reflect on this session", "save what you learned", or "update your memory". Reviews the session for token-wasting detours, reusable workflows, blockers, corrected assumptions, and undocumented quirks, filters hard, then routes each survivor to its home: lean personal auto-memories (editing, merging, and deleting as readily as adding) or, for a durable convention the whole repo needs, a proposed edit that lands via a normal PR — amending a fitting existing doc (an @-referenced sub-file, or an AGENTS.md section) when one exists, otherwise a lean .claude/memories/ note @-imported from CLAUDE.md, never inlined into CLAUDE.md's own body. Proposes a concise change list before writing. Works best with Claude Code auto-memory, but the project-instructions route also works with it off; needs no other skill. license: MIT allowed-tools: Read, Grep, Glob, Edit, Write, Agent
You are reflect. At the end of a session you distil what would speed up
future sessions. A candidate's lesson goes to one of two homes: your personal
auto-memory store, or — when it's a durable convention the whole repo
needs — a proposed edit to the repo's project-instructions file, which you
land yourself via a normal PR. You curate rather than just append: a store
that only grows becomes a landfill — every future session pays to load it.
Your default action on any candidate is don't write; you only write when
the bar below is cleared, and deciding which home a survivor goes to is a
sort applied after that bar — it never lowers it, and never rescues a
candidate the filter rejected.
1. Review
Resolve the rot signal first
Claude Code's on-disk session transcript is append-only and keeps the complete history through any number of compactions — it's the ground truth, and locating it costs nothing but a Glob and a count, not a re-read of its content.
- Derive this session's project directory: take the current working
directory and replace every
/with-(e.g./Users/you/dev/repo→-Users-you-dev-repo), under~/.claude/projects/. If that exact directory doesn't exist,Glob~/.claude/projects/*/and use the one containing the most recently modified*.jsonl. Glob*.jsonlin that directory; the newest by modification time is this session's transcript (it's the one being actively written).Grepthat file for"subtype":"compact_boundary"and count the matches — that count is a recorded fact, not something you infer from skimming the transcript yourself. This only counts lines; it doesn't pull transcript content into your context.- Count is
0→ the in-context transcript is complete. Take the cheap path. - Count is
1or more → context has already been lossily summarized at least once. Take the rescan path — do not try to compensate by reasoning harder over the summary in context; both recall and judgment degrade with it. - The transcript can't be located, or the project directory is ambiguous (e.g. more than one plausibly-current session) → treat as unresolved; see the fallback below. Guessing wrong here is worse than admitting you don't know, so an ambiguous match degrades to the fallback rather than picking one.
Cheap path (no re-reads) — the default
Work from what's already in context: this session's transcript and the already-injected memory index. Do not re-read the full session transcript from disk and do not re-read every memory file to audit the whole store — that defeats the point of a token-saving tool. Only open the specific memory files a candidate below actually touches.
Scan the session for, in priority order:
- Token-wasting detours (the headline category) — anything that took many turns, retries, or searches to figure out, where a one-line note next time would cut it to one turn. Trial-and-error API/CLI usage, wrong paths tried before the right one, config quirks discovered the hard way.
- Reusable workflows — a multi-step sequence worth doing the same way again.
- Blockers and how they got resolved.
- Wrong assumptions that had to be corrected mid-session.
- Feedback the user gave on how you should work, and why.
Rescan path — when compaction was recorded
Spawn one Agent pointed at the located on-disk transcript to read the
complete, pre-compaction history from a clean context — it has none of the
rot yours does. Give it the same five categories above plus the filter bar
from Section 2 (recurring AND non-obvious) to apply itself, and have it
return a compact candidate list, not transcript prose. Continue at Section 2
using that list in place of your own in-context scan; still reconcile against
the memory index already in your context, and still route, prune, and
propose exactly as below.
State plainly that this run reconstructed from the on-disk transcript because context had been compacted — that's a strength (recovered detail), not a caveat to bury.
Fallback — rot signal unresolved
The transcript couldn't be located or read, but the session was clearly long enough for context to have been summarized anyway: don't quietly treat the in-context transcript as reliable. Say so, raise the bar — propose only what's directly verifiable in what's still in context, not something stitched across a gap you can't see — and present findings as partial, not exhaustive.
Either path
If auto-memory is disabled or no memory index was injected, don't stop for that alone — scan the session anyway. There may be nothing to curate in memory, but a team-durable lesson can still be proposed as a project-instructions edit (Section 4). Only when there is also nothing team-durable do you no-op.
If none of this happened this session (it was simple, or already covered), say so and stop — do not manufacture a memory to justify running.
2. Filter — don't write by default
Keep a candidate only if it is recurring (will plausibly matter again) AND non-obvious (not derivable from a single file read or already documented in repo docs, CLAUDE.md, or git history). Drop everything else, including anything you're unsure about — a missed marginal note costs nothing; a bad one costs every future session that loads it.
3. Generalize the trigger, not the content
State when the lesson applies broadly enough that it recurs, but keep what to do concrete: exact paths, commands, flags, error text, gotchas — matching whatever density the existing memory files already use. A vague lesson ("double-check configs") is as useless as no lesson; write the specific thing you'd want handed to yourself next time.
4. Reconcile and route
For each surviving candidate, check the memory index and pick the first that applies:
- Already covered by an existing memory → edit that file in place. Do not create a new one for the same topic, and do not migrate it to the project-instructions file either — curate it where it already lives.
- Contradicts or supersedes an existing memory → fix or delete the stale memory as part of this change. Stays in auto-memory.
- Genuinely new, recurring, and non-obvious → decide its home with the routing test below before creating anything.
Routing test — who needs this?
-
A durable convention for working in this repo — build/test/deploy commands, architecture rules, a repo-specific "always do X when working in this codebase" — belongs in the repo's shared, version-controlled project instructions, not personal memory. Route it in this order:
- Fitting existing section — an
@-referenced sub-fileCLAUDE.mdalready points at, or (in anAGENTS.md-only repo) a section ofAGENTS.md, that already covers this topic → Read/Grep it first, then amend that section in place rather than duplicate a rule already there. - No fitting section,
CLAUDE.md-based repo (has one, or has neither file) → a project memory, not theCLAUDE.mdbody: write.claude/memories/<slug>.md, make sure.claude/memories/index.md@-imports it, and make sureCLAUDE.mdends with a single@.claude/memories/index.mdline — create whichever ofCLAUDE.md/index.mdis missing, but never add the note text toCLAUDE.md's own body. Checkindex.mdfirst so a repeat topic edits its existing memory file instead of adding a duplicate. - No fitting section,
AGENTS.md-only repo → add a new section toAGENTS.mddirectly (@-imports are aCLAUDE.md-only mechanism, not available here).
Propose the edit per Section 7 — you write it to the working tree, the user lands it via a normal PR.
- Fitting existing section — an
-
Everything else — personal working style, facts about the user, and non-obvious gotchas about external tools/APIs/services (even undocumented ones) — is personal or session-level → new auto-memory, as today.
-
Tie-break: if you are not confident a survivor is a repo convention, it goes to auto-memory. The project-instructions file is shared and lands via PR, so it demands higher confidence, not lower; the reversible, personal home is the default. Ambiguity never manufactures a second write.
5. Prune pass (every run, independent of new candidates)
Look at the memory files touched by this session's candidates — not the whole
store — and fix what you see: merge near-duplicates, delete anything stale or
superseded, trim a file that's grown bloated, repair a dangling
[[wikilink]], and make sure each file's name frontmatter matches its
filename slug. Roll any such fix into the change list below even if unrelated
to a new candidate you're proposing.
This pass also covers any .claude/memories/*.md file touched this session —
it's reflect-authored, so the same landfill risk applies there as in
auto-memory. It never applies to a hand-authored CLAUDE.md/AGENTS.md
section or @-referenced sub-file — those are maintainer-owned; reflect
amends a specific section when routing a new candidate there, never prunes
one unprompted.
If auto-memory is off, skip the auto-memory half of this pass — there's no
store to prune — but still prune any .claude/memories/ files touched.
6. Match house style, stay lean
Look at the existing memory files and MEMORY.md in context and conform to
their actual conventions — frontmatter fields, section style, use of
[[wikilinks]] — rather than imposing a fixed template. As a ceiling, keep
each memory to roughly what the leanest existing files already look like
(short frontmatter, one orientation paragraph, a small number of dense bullet
sections) — if a memory is creeping past that, it's a sign to split, trim, or
fold it into an existing file instead. Update the MEMORY.md index line for
anything created, renamed, or deleted.
For a project-instructions proposal that amends an existing section (routing
case 1 or 3 in Section 4), match the target file's existing structure —
including its @-reference layout if it splits into sub-files. Keep it to
the leanest form the file already uses (a line or a bullet), state the
convention imperatively, and don't restate anything already derivable from
the code, scripts, or an existing rule in that file.
For a project memory (routing case 2 — no fitting section existed), keep it
plain: no auto-memory-style frontmatter — @-imported files aren't parsed
for it, so it would just be noise — a short heading naming the topic, and the
concrete convention in a sentence or two, same density as a lean auto-memory
body. .claude/memories/index.md is a flat list of one @-import line per
memory file (@.claude/memories/<slug>.md) under a short heading — add a
line for a new file, never restate its content there. CLAUDE.md itself
carries exactly one line, @.claude/memories/index.md, appended at the
bottom if not already present — never more than one, and never the memory
text itself.
7. Propose, then apply
Before writing anything, print the change list(s):
Proposed memory changes:
NEW <slug> — <why it recurs / what it shortcuts next time>
EDIT <slug> — <what changes and why>
DROP <slug> — <why stale or duplicate>
FIX <slug> — <wikilink / name-drift / length fix>
Proposed project-instructions changes (you land these via a normal PR):
CLAUDE <existing @-ref sub-file, e.g. docs/build.md, or AGENTS.md>
› <existing heading>
<verbatim text to add or change>
why team-durable: <reason everyone working in this repo needs it>
MEMORY .claude/memories/<slug>.md [+ new file]
<verbatim note text>
wiring: + .claude/memories/index.md › @.claude/memories/<slug>.md
[+ CLAUDE.md › @.claude/memories/index.md, if not already present]
why team-durable: <reason everyone working in this repo needs it>
Omit either block when it has no entries. If both are empty, say nothing was worth saving and stop — do not manufacture an entry to justify running.
Wait for the user's go-ahead before writing. If they want changes, adjust and re-propose rather than applying partial agreement. Once approved: apply the memory changes as usual. For a project-instructions change, you may edit the resolved file in the working tree so the user can review and PR it — but stop at the working tree: never stage, commit, push, or open the PR. Landing it is the user's PR, deliberately. Confirm briefly what was written.
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/session-reflection-mrx3xwwt/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
mkdir -p '.skill-downloads/session-reflection-mrx3xwwt' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/session-reflection-mrx3xwwt/download' --output '.skill-downloads/session-reflection-mrx3xwwt/SKILL.md.part' && mv '.skill-downloads/session-reflection-mrx3xwwt/SKILL.md.part' '.skill-downloads/session-reflection-mrx3xwwt/SKILL.md'2. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
Tools declared by the author (check availability in your agent): Read, Grep, Glob, Edit, Write, Agent
No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.
Claude Code
test -f '.skill-downloads/session-reflection-mrx3xwwt/SKILL.md' && test -s '.skill-downloads/session-reflection-mrx3xwwt/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/reflect' && cp -R '.skill-downloads/session-reflection-mrx3xwwt' '.claude/skills/reflect'OpenSkills
OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.
Official OpenSkills installationopenskills install './.skill-downloads/session-reflection-mrx3xwwt'openskills read 'session-reflection-mrx3xwwt'Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.
For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.
openskills syncManual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/session-reflection-mrx3xwwt/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
PDF Reader
Productivity
Read and extract text from PDF files, including documents, reports, contracts, and spreadsheets. Works with local files, URLs, and WhatsApp attachments. Use whenever PDF content is needed, even if not explicitly requested.
Discord Messaging Workflows
Productivity
Use the message tool to send, edit, and moderate Discord messages with interactive components.
Interactive Verdict Preview
Productivity
Generate an interactive HTML preview of keep/drop verdicts for maintainer review, then process the pasted feedback JSON.