| name | checkpoint |
| description | Use when you need to save session state to survive context compaction or handoff between sessions. |
| allowed-tools | Read, Write, Edit, Bash(git*), Bash(date*), Bash(wc*), Glob |
Checkpoint — Save Session State
Snapshot the current session's progress to a YAML file so it can be restored after context compaction or in a new session. This is NOT a session log (narrative) or context save (profile/focus) — it's a machine-readable state dump for continuity.
When to Use
- Before a session is likely to hit context compression (many tool calls, long outputs)
- At phase boundaries in multi-phase work
- When the user says "save state", "checkpoint", "save progress"
- Proactively when you sense context is getting large — don't wait to be asked
When This Skill Is Invoked
Step 1: Gather State
Collect the following from the current conversation context:
- Project — which project directory are we working in?
- Task — what was the user's original request this session?
- Files modified — list every file you've created or edited this session (use
git diff --name-only if in a git repo, plus any new untracked files)
- Decisions made — key choices and their rationale (e.g., "chose LaTeX over Markdown because...", "used sonnet for cron jobs to reduce cost")
- Current step — where in the plan are we? What just completed? What's next?
- Blocked items — anything that couldn't be completed and why
- Open questions — unresolved ambiguities that need user input
Step 2: Write Checkpoint
Write to .planning/checkpoint.yaml in the active project directory. If no project directory is obvious, write to the Task Management root.
created: "YYYY-MM-DDTHH:MM:SS"
session_id: "<from $CLAUDE_SESSION_ID if available>"
project: "<project directory basename>"
task: |
<one-paragraph description of what the user asked for>
files_modified:
- path: "relative/path/to/file.md"
action: "created|edited|deleted"
summary: "what was changed and why"
decisions:
- decision: "what was decided"
rationale: "why"
progress:
completed:
- "step 1 description"
- "step 2 description"
current: "what step we're on now"
next:
- "next step 1"
- "next step 2"
blocked:
- item: "what's blocked"
reason: "why"
open_questions:
- "question that needs user input"
context_files:
- "list of files that should be re-read on restore"
Step 3: Confirm
Report to the user:
Checkpoint saved to .planning/checkpoint.yaml
- N files modified
- N decisions recorded
- Current step: [description]
- Next: [first next step]
Schema Rules
files_modified: Only files touched THIS session, not all project files
decisions: Only non-obvious choices. Skip mechanical decisions ("used latexmk" is obvious; "chose TWFE over CS estimator" is not)
context_files: List files that /restore should re-read to reconstruct working context. Include CLAUDE.md, the plan file, and any files being actively edited
progress.current: Must be specific enough that /restore can pick up exactly where we left off
- Timestamps: Always ISO format, always local timezone
Multiple Checkpoints
Each /checkpoint invocation overwrites the previous checkpoint. There is only one active checkpoint per project. If you need history, the git log preserves it.
Anti-Patterns
- Do NOT write narrative prose — this is structured data for machine consumption
- Do NOT include file contents — only paths and summaries
- Do NOT checkpoint trivially (single-file edits with no decisions) — it's overhead without value
- Do NOT use this instead of
/session-log — session logs are for humans, checkpoints are for restore