putdown
Skill1 starsChanged 2 months agoMITView on GitHub
Writes a session handoff file that a fresh Claude Code session reads via /pickup, harvests durable knowledge into memory and CLAUDE.md (via /takenotes when installed), then commits and pushes all session work. Use when the user says "putdown", when ending or stepping away from a working session, or when the context window is filling up (around 50% used). Do NOT use for pausing media, downloads, background processes, or VMs.
- Reads credentials
- Commits and pushes
In this repository5 other files it gives its agents.
- grill-meSkill
- newprojectSkill
- pickupSkill
- takenotesSkill
- skill-dictSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
18 rules. About 0 are common, 10 are distinctive, and 8 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈10
Distinctive · estimate
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 22
If /takenotes is installed, a putdown is two operations, not one.
- Very specific: line 30
If /takenotes is not installed, skip the announcement.
- Distinctive: line 34
Before writing anything, gather context.
- Distinctive: line 39
Read the project-level CLAUDE.md if one exists in the CWD
- Very specific: line 40
Read ~/.claude/projects/<project-slug>/memory/MEMORY.md to know which memory files exist
- Distinctive: line 41
Check the current TodoWrite list state (if you have one in this session — recall from conversation, don't invent)
- Very specific: line 62
Update auto-memory only for things matching the memory rules (user, feedback, project, reference).
- Distinctive: line 65
If the user corrected your approach this session, save that as feedback.
- Distinctive: line 67
If there's a CLAUDE.md in the project directory, add or update stable facts only (architecture, conventions, how to run and test it).
- Distinctive: line 77
Keep the result — you'll echo a one-line version in Step 5.
- Very specific: line 84
If the user passed an argument (e.g.
- Very specific: line 86
If the CWD basename looks like a multi-project parent (e.g.
- Distinctive: line 88
Use this structure exactly — the next agent will be reading it cold:
- Very specific: line 137
Secrets gate before staging: Run git status --porcelain and review the file list.
- Distinctive: line 143
After saving, print to chat — in this exact order:
- Very specific: line 147
Exception: if MCP servers or config were added/changed *this session*, /clear won't load them — the process must be restarted.
- Distinctive: line 153
Keep your final reply tight — the handoff document does the heavy lifting.
- Distinctive: line 158
Include failure context: If you spent 20 minutes ruling something out, write it down so the next agent doesn't repeat it.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
/putdown — Context handoff before clearing
The user is about to clear the context window and start fresh. Your job: capture everything a new agent would need so the next session loses no momentum.
Renamed from
/checkpointon 2026-06-12 (paired with/resume→/pickup) because those names shadow Claude Code built-ins (/checkpointaliases/rewind;/resumeopens the conversation picker). On 2026-06-13 the handoff files also moved from.checkpoints/→.putdowns/to drop the old term entirely. If you ever see a stray.checkpoints/folder, it predates the move — treat it as a putdown.
Step 0 — Announce what's about to run
If /takenotes is installed, a putdown is two operations, not one. Print this first so the user knows what's running and in what order:
/putdown runs two skills, in this order:
1. /takenotes — harvest this session into memory, CLAUDE.md, and docs/
2. /putdown — write the handoff file, then commit and push everythingIf /takenotes is not installed, skip the announcement. Either way this is an announcement, not a prompt — don't wait for confirmation, continue to Step 1.
Step 1 — Read current state (parallel)
Before writing anything, gather context. Run these in parallel:
pwd— where the session is rootedgit statusandgit log --oneline -10— if it's a git repo (skip silently if not)git diff --stat— what's changed, uncommitted- Read the project-level
CLAUDE.mdif one exists in the CWD - Read
~/.claude/projects/<project-slug>/memory/MEMORY.mdto know which memory files exist - Check the current TodoWrite list state (if you have one in this session — recall from conversation, don't invent)
echo "$CLAUDE_CODE_ENTRYPOINT"— which surface this is.cli= terminal (standalone or VSCode's integrated terminal); anything else (or empty) = VSCode's visual-editor chat panel or another GUI surface. This decides the clear-context instructions in Step 5.
Also pull from your conversation memory:
- What was the user actually trying to accomplish in this session?
- What did you finish? What's half-done?
- What file paths and line numbers are you in the middle of?
- What did you try that didn't work, and why?
- Any decisions made with non-obvious rationale?
- Any errors, blockers, or open questions waiting on the user?
Steps 2–3 — Harvest durable knowledge
If /takenotes is installed — it ships alongside this skill in the session-continuity package —
invoke it and follow it to completion before continuing. It harvests the session, reconciles what
is already in memory and CLAUDE.md against what this session actually established (correcting
anything that has since become false), and routes each finding to memory, CLAUDE.md, or a docs/
spoke.
If it isn't installed, do this inline instead — a reduced version with no reconcile pass:
- Update auto-memory only for things matching the memory rules (user, feedback, project,
reference). If a
project_*.mdmemory exists, update it with current state (status, what's next, blockers), converting relative dates to absolute. - If the user corrected your approach this session, save that as feedback. If you learned something about their role or preferences, update the user memory.
- If there's a
CLAUDE.mdin the project directory, add or update stable facts only (architecture, conventions, how to run and test it). Do NOT put session state in it — that belongs in the handoff file. If none exists and the project has accumulated real conventions, suggest creating one; don't create it unprompted.
Either way, two things hold:
- Ephemeral session state stays out of memory. It belongs in the handoff file below.
- Nothing here commits. Step 4.5 commits and pushes everything, including whatever this step wrote.
Keep the result — you'll echo a one-line version in Step 5.
Step 4 — Write the handoff file
Save to ~/.claude/putdowns/<project-slug>/<YYYY-MM-DD-HHMM>.md. Create the per-project subfolder if it doesn't exist (mkdir -p).
Determining <project-slug>:
- If the user passed an argument (e.g.
/putdown my-app), use that as the slug. This is the right choice when the CWD is a parent folder containing multiple projects (e.g. CWD isCLAUDEbut the work is about my-app). - Otherwise, use the basename of the CWD (e.g.
my-app,RecipeBox). - If the CWD basename looks like a multi-project parent (e.g.
CLAUDE) and no argument was given, ask the user which project this putdown is for before saving — don't dump it under the parent folder name.
Use this structure exactly — the next agent will be reading it cold:
# Putdown: <project> — <date> <time>
**CWD**: <absolute path>
**Branch / git state**: <branch, ahead/behind, dirty file count>
**Session goal (this conversation)**: <one paragraph — what the user came to do>
## Where we are right now
<2-4 sentences. The single most important section. If the next agent reads only this, they should be unblocked.>
## What's done this session
- <bullet>
- <bullet>
## What's in progress (resume here)
- <task>: <file:line>, <what state it's in>, <what's left>
## Immediate next steps (in order)
1. <concrete action with file path>
2. <concrete action>
3. <concrete action>
## Blockers / open questions for the user
- <thing waiting on user decision, or "none">
## Key decisions made & why
- <decision>: <rationale — especially anything non-obvious from the code>
## What NOT to redo
- <approaches already tried and rejected, with why — saves the next agent from repeating>
## Environment state
- Dev servers running: <list or "none">
- Background processes: <list or "none">
- Modified-but-uncommitted files: <list — should be "none" after Step 4.5 commits>
- Pushed to origin: <branch @ short SHA — filled in by Step 4.5; or "no remote" / "PUSH FAILED: <why>">
- Anything the user needs to manually do before resuming: <list or "none">
## First message to paste in the new session
> <Literal text the user should send. Easiest: just have them type `/pickup` — the pickup skill will load this latest putdown automatically. Only write a custom message if there's something the next agent needs to know that isn't captured in the sections above.>Step 4.5 — Commit + push (a putdown means the session is ending)
Skip this step entirely if the CWD is not a git repo.
- In-repo putdown copy — private repos only. If the repo is private AND its contents are not publicly served (a GitHub Pages site publishes everything on its deployed branch), copy the just-written handoff file to
<repo>/.putdowns/<same-YYYY-MM-DD-HHMM>.md(mkdir -p .putdowns). This is what makes the putdown readable from Claude Code on the web. For public repos and Pages-served repos, skip the copy — committed putdowns there would be published; the local file in~/.claude/putdowns/is the only copy. Check visibility withgh repo view --json visibilityor the project CLAUDE.md; if still unsure, skip the copy and say so. - Secrets gate before staging. Run
git status --porcelainand review the file list. Never stage.env*(except.env.example),secrets*,*.pem,*.key, or credential files — they should already be gitignored; if one shows up untracked, add it to.gitignoreinstead of committing it. Never usegit add -f. - Commit everything with a descriptive message summarizing the session's work (not just "putdown" — say what changed). Include the in-repo putdown copy from substep 1.
- Push the current branch if a remote exists (
git push, orgit push -u origin <branch>for a new branch). Then update the handoff file's "Pushed to origin" line with<branch> @ <short SHA>— and refresh the in-repo copy if it is now stale. If there is no remote or the push fails, write that prominently in the handoff file and tell the user in Step 5 — never fail silently; unpushed work is invisible to web sessions.
Step 5 — Show it to the user
After saving, print to chat — in this exact order:
- The full path to the saved putdown file (so they can re-open it later)
- A clear-the-context reminder, matched to the current surface. Use the
CLAUDE_CODE_ENTRYPOINTvalue you read in Step 1 — the right way to free context differs by surface, so don't give the wrong one:- Terminal CLI (
CLAUDE_CODE_ENTRYPOINTiscli) — this covers both a standalone terminal and VSCode's integrated terminal. Here/cleargenuinely frees the context window. Tell the user to type/clear, then/pickup. No window juggling needed.- Exception: if MCP servers or config were added/changed this session,
/clearwon't load them — the process must be restarted. Tell them to fully quit (Ctrl+Ctwice, or/exit) and relaunchclaude, then/pickup.
- Exception: if MCP servers or config were added/changed this session,
- VSCode visual-editor panel, or any other/unknown surface (
CLAUDE_CODE_ENTRYPOINTis anything other thancli, or empty) —/cleardoes not reliably free context here. Tell the user toCmd+Wto close this Claude Code window, then open a new Claude Code window in VSCode. (Closing affects only this window — other VSCode windows stay untouched. Note:Cmd+Shift+P → "Developer: Reload Window"does NOT actually free the context window — you confirmed this.)
- Terminal CLI (
- A code block containing exactly
/pickup— what they type once the context is cleared (in the CLI, right after/clear; in a new/reopened window otherwise) - The result of Steps 2–3, labelled with its source — what memory,
CLAUDE.md, anddocs/files were written or corrected. If/takenotesran, label it as such so the user can see both skills fired, e.g.takenotes: 2 memories updated, 1 created, CLAUDE.md +3 lines. If nothing durable was found, say so explicitly rather than omitting the line — a silent absence looks like a skipped step. - The commit + push result:
<branch> @ <short SHA> pushed to <repo>— or a prominent warning if there was no remote or the push failed (that work is invisible to Claude Code on the web until pushed)
Keep your final reply tight — the handoff document does the heavy lifting; don't summarize it again in chat.
Notes on judgment
- Be specific, not generic. "Continue working on the auth flow" is useless. "In
<workspace-root>/my-app/src/export.py:142, the--seedflag isn't being passed to the renderer; need to add it to the request payload" is useful. - Include failure context. If you spent 20 minutes ruling something out, write it down so the next agent doesn't repeat it.
- Don't overwrite prior putdowns. Each is timestamped; keep history.
- If the project is brand new and there's nothing meaningful to hand off, say so rather than padding with filler.
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.

