end-session
Skill0 starsChanged 37 days agoMITView on GitHub
Close a working session. In board repos (e.g. openly) follow that repo's CLAUDE.md Session > End: close shipped issues, no session-end file. In tasks/todo.md repos: reconcile todo.md, update lessons on a repeat correction, commit as session-end. Use when the user says "end session," "wrap up," "we're done for today," or it's clear the session is winding down. NOT for "save state" or "save context" mid-task — that's /context-save (this skill commits and closes out; it doesn't checkpoint working context). Prevents bloat in `tasks/todo.md`.
11 other projects use a version of this.
Adopted by
Most recently taken up by
- jocarrd/crux-agentstheir own version, first seen Nov 8, 2026
- abhayla/claude-best-practicestheir own version, first seen Nov 1, 2026
- DavoDC/claude-playbooktheir own version, first seen Oct 13, 2026
- edwardyen724-g/claude-session-skillstheir own version, first seen Aug 30, 2026
- jctots/thinkpad-fedora-agenttheir own version, first seen Aug 15, 2026
- ozgurkarahan/ai-agent-memorytheir own version, first seen Jul 24, 2026
Other versions11 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 11
- YehudaFrankel/clankbrain★ 16same name
- abhayla/claude-best-practices★ 9same name
- ozgurkarahan/ai-agent-memory★ 8same name
- alxyrgin/agent-forge★ 4same name
- jocarrd/crux-agents★ 4same name
- DavoDC/claude-playbook★ 1same name
- heffrey/claude-skills★ 1same name
- edwardyen724-g/claude-session-skills★ 0same name
- jctots/thinkpad-fedora-agent★ 0same name
- markbaindesign/bain-studio★ 0same name
1 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository3 other files it gives its agents.
- boost-promptSkill
- cutSkill
- reorganize-filesSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
15 rules. 0 are common, 11 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 9 edited versions we read keep these.
11
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 16
Do NOT run if no real work shipped (no commits, no doc decisions).
- Distinctive: line 20
Check the project's CLAUDE.md first:
- Distinctive: line 32
If no previous session-end commit exists, fall back to commits in the last 24 hours.
- Distinctive: line 52
Wait for confirmation. Never write without explicit OK.
- Distinctive: line 57
Remove from In progress.
- Very specific: line 58
Add to Done at the top of the section as a single bullet: YYYY-MM-DD — <title> — <one-line summary with commit hashes if relevant>.
- Distinctive: line 62
Ask two questions, in order.
- Distinctive: line 65
"Is there no automatic check that catches it?": If a hook, test, or CI job would catch it, build that instead and write nothing.
- Very specific: line 67
If both are yes, add one line with today's date: - YYYY-MM-DD — [the mistake] → Rule: […] → Next: [the check that would end it, or "no …
- Very specific: line 94
Run these against the full tasks/todo.md, not just the items you moved.
- Distinctive: line 97
In progress fits in your head: If a fresh agent at next session-start couldn't summarize what's active in 30 seconds, the section needs …
- Very specific: line 98
Done entries have dates: Every Done bullet starts with YYYY-MM-DD —.
- Distinctive: line 106
If any of checks 5–9 fail, fix them in the same session-end commit.
- Distinctive: line 114
Moving items that aren't actually shipped: Verify against git log and the diff, not the conversation.
- Distinctive: line 116
Skipping the founder confirmation in step 3: Always show the plan. They'll catch items you misread.
“Common” is measured: kept by at least 6 in 10 of the 9 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
end-session
A deliberate ritual for closing a working session, in whichever project you are in. Stops tasks/todo.md from bloating with shipped items that never got moved to Done. (Step 0 routes by how the repo tracks work.)
When to run
- User says "end session," "let's wrap up," "we're done."
- The user is about to stop working and the session shipped real code or docs.
- Proactively offer to run it if you've shipped 3+ items in a session and todo.md hasn't been touched.
Do NOT run if no real work shipped (no commits, no doc decisions).
Step 0 — Route by how this repo tracks work
Check the project's CLAUDE.md first:
- Board-based repos (the project says its to-do list is a GitHub Projects board and
tasks/todo.mdis retired — e.g., openly): SKIP steps 1–4 and 6. Instead: follow the repo's CLAUDE.md Session > End. Open an issue only if something outside the session blocks the work (a person, vendor, scheduled job or date), viatools/board/new-issue.mjs; everything else is a ticked line in the reply. A lessons line only when the same mistake happened before (step 5). Do NOT create asession-endcommit — the board is the record. - todo.md-based repos (e.g., sentinel, family-office): follow the steps below unchanged.
Steps
1. List commits since the last session-end
git log $(git log --format=%H --grep='^session-end' -n 1 2>/dev/null || git log --reverse --format=%H -n 1)..HEAD --onelineIf no previous session-end commit exists, fall back to commits in the last 24 hours.
2. Walk the In progress section of tasks/todo.md
For each item:
- Did it ship in one of the commits from step 1? → propose moving it to Done.
- Is it marked
[x]? → it must move.[x]items in In progress are wrong by definition. - Was it superseded by a decision? → propose moving to Done or Blocked with a note.
3. Show the founder the proposed moves before writing
Plain English. One line per item. Example:
Proposing to move 3 items from In progress → Done:
- "Pre-launch monitoring v1 spec" — shipped in commit
4b5473c(2026-05-05)- "Round 3 polish on Speed/PriceGap/Elimination" — shipped in commits
f617082→c18e5b8(2026-05-11)- "GitHub migration finalized" — shipped in commits
2ec0e7f+587560b(2026-05-11)No
[x]items remain in In progress after this. OK to write?
Wait for confirmation. Never write without explicit OK.
4. Update tasks/todo.md
For each approved item:
- Remove from In progress.
- Add to Done at the top of the section as a single bullet:
**YYYY-MM-DD — <title>** — <one-line summary with commit hashes if relevant>.
5. Add a lesson ONLY on the second occurrence
Ask two questions, in order. Both must be yes.
- "Did the founder correct my approach, and has this SAME mistake happened before?" Grep
tasks/lessons.mdandtasks/lessons-archive.mdto check — do not go from memory. A first-time mistake is fixed in the moment and nothing is written. - "Is there no automatic check that catches it?" If a hook, test, or CI job would catch it, build that instead and write nothing.
If both are yes, add one line with today's date:
- YYYY-MM-DD — [the mistake] → **Rule:** […] → **Next:** [the check that would end it, or "no check possible — judgment"]
One line, not a paragraph. The file is capped at five by tools/guards/rules-budget.mjs (openly), which fails the pull request at six. At the cap, the way forward is to build a check and delete a line — not to raise the cap.
Why: a lesson on every correction piled up hundreds of entries and zero checks; a mistake that happens twice is the one worth a check.
6. Commit and push
Stage:
tasks/todo.mdtasks/lessons.md(if updated)- Any other docs touched this session that haven't been committed
Commit message format:
session-end YYYY-MM-DD: <one-line summary of session>Examples:
session-end 2026-05-11: Round 3 polish + GitHub migration finalizationsession-end 2026-05-07: monitoring spec finalized + lesson logged
Then push per the project's CLAUDE.md push policy; if it has none, ask.
Anti-bloat checks (before declaring done)
Run these against the full tasks/todo.md, not just the items you moved. They catch the slow drift that makes the file unreadable over weeks.
- Zero
[x]items in the In progress section.grep -c "^- \[x\]" tasks/todo.mdagainst the In progress block must return 0. - In progress fits in your head. If a fresh agent at next session-start couldn't summarize what's active in 30 seconds, the section needs further pruning. Move stalled items to Blocked.
- Done entries have dates. Every Done bullet starts with
**YYYY-MM-DD —**. - No meeting-organized sub-sections in In progress. Items are organized by topic, not by which sync they came from. Sync decisions live in
tasks/decisions.md. - No relative dates anywhere.
grep -in "tomorrow\|today\|next week\|yesterday\|this week" tasks/todo.mdmust return nothing inside In progress/Blocked/Decisions pending. "Tomorrow" rots in 24 hours; absolute dates or no date. - No item longer than 3 lines of context. Walk the file. If any single bullet has more than 3 lines under it, that's coaching prose — it belongs in
tasks/session-log.mdor a doc, with a link from here. - No duplicates. For any unusual keyword (a Vercel project name, a commit hash, a doc path),
grepit — if it appears in two sections of the file, those items should be merged. - No misplaced types. In progress should contain workstreams only. If you see a pending founder decision, move it to
Decisions pending. If you see a watch-list or parking-lot item, move it toAppendix. IfDecisions pendingorAppendixdoesn't exist yet, create it. - Owner clarity on mixed-owner workstreams. If a workstream's heading names a single owner (e.g., "Gabriel — fulfillment workstream") or a single counterparty (e.g., "Phase 1.5 wrap with Jason"), sub-bullets can skip owner tags. If the workstream mixes both founders without naming them (catch-all sections like "Other open items"), every sub-bullet needs
[Gabriel]/[Jason]/[Both].
If any of checks 5–9 fail, fix them in the same session-end commit. They are the failure modes that bloated todo.md before — catching them weekly is what keeps the file readable.
What "shipped" means
A commit landed on the active branch that closes the work. The change is verifiable in the diff. If unsure, ask the founder before moving. Do not optimistically promote things to Done.
Failure modes to avoid
- Moving items that aren't actually shipped. Verify against
git logand the diff, not the conversation. The conversation lies; commits don't. - Adding new In progress items without prompting. End-of-session is reconciliation, not planning. New items go in via a separate request.
- Skipping the founder confirmation in step 3. Always show the plan. They'll catch items you misread.
- Forgetting the lessons line when there was a correction. Re-read your own back-and-forth — if the founder said "no," "stop," "don't," or "actually," check whether it repeats an earlier mistake (Step 5); a first-time correction writes nothing.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

