Claude Code Plugins

Community-maintained marketplace

Feedback

How checkpointing works for tracking file changes and rewinding to previous states. Use when user asks about checkpoints, rewinding, rollback, undo, or restoring previous states.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name checkpointing
description How checkpointing works for tracking file changes and rewinding to previous states. Use when user asks about checkpoints, rewinding, rollback, undo, or restoring previous states.

Claude Code Checkpointing

Overview

Claude Code includes an automatic checkpointing system that tracks file edits and allows users to recover from unwanted changes during development sessions.

How Checkpointing Works

Automatic Tracking

The system captures code states before each modification.

Key features:

  • Every user prompt creates a new checkpoint
  • Checkpoints persist across resumed conversations
  • Automatic cleanup occurs after 30 days (configurable)

What Gets Tracked

Tracked:

  • Direct file edits via Edit tool
  • File creations via Write tool
  • File modifications by Claude

Not tracked:

  • Files modified by bash commands (rm, mv, cp)
  • Manual file modifications outside Claude Code
  • Changes from concurrent sessions (unless they affect files the current session modified)

Rewinding Changes

Access Rewind Menu

Keyboard shortcut: Press Esc twice (quickly)

Slash command:

/rewind

Restoration Options

When you open the rewind menu, you have three options:

1. Conversation Only

Keeps: All code changes Reverts: Conversation history to selected checkpoint

Use when:

  • You want to start conversation over
  • Code changes are good
  • You want to try different approach in conversation

2. Code Only

Keeps: Conversation history Reverts: Files to selected checkpoint

Use when:

  • Recent changes broke something
  • Want to undo code changes
  • Conversation context is valuable

3. Both Code and Conversation

Reverts: Everything to selected checkpoint (full rollback)

Use when:

  • Complete do-over needed
  • Both code and conversation went wrong
  • Want to return to known good state

Selecting a Checkpoint

Checkpoints are displayed with:

  • Timestamp
  • User prompt that created it
  • Files affected
  • Changes summary

Navigate with arrow keys and select with Enter.

Use Cases

Testing Different Approaches

Scenario: Try multiple implementation strategies without losing starting point.

# Approach 1
"implement feature using strategy A"
# Review, not ideal

# Rewind
Esc Esc → Select checkpoint → Code only

# Approach 2
"implement feature using strategy B"
# Better!

Quick Bug Recovery

Scenario: Recent changes introduced a bug.

# Make changes
"refactor the authentication module"
# Oops, broke login

# Rewind
Esc Esc → Select checkpoint before refactor → Code only

# Try again differently
"refactor authentication but keep existing login flow"

Iterative Development

Scenario: Preserve working states while iterating.

# Working state 1
"add basic user validation"
# Works ✓

# Iterate
"add more complex validation rules"
# Issues found

# Return to working state
Esc Esc → Code only

# Try different iteration
"add regex-based validation"

Conversation Reset

Scenario: Conversation got confused or went off track.

# Good code changes made
"add user profile endpoint"
"add user settings endpoint"

# Conversation gets confusing
# Want to restart conversation but keep code

# Rewind conversation only
Esc Esc → Conversation only → Select early checkpoint

# Fresh conversation start with code intact

Important Limitations

Bash Command Changes Not Tracked

Not captured:

!rm file.txt
!mv old.txt new.txt
!cp source.txt dest.txt
!git checkout -b new-branch

Why: Bash commands run outside Claude's file tracking system.

Workaround:

  • Use Claude's Edit/Write tools instead when possible
  • Manually track bash file operations
  • Use git for version control of important changes

External Changes Not Tracked

Not captured:

  • Manual edits in your text editor
  • IDE refactorings
  • File system operations outside Claude Code
  • Changes from other tools

Workaround:

  • Use git to track all changes
  • Create manual checkpoints with git commits
  • Be aware of what Claude modified vs what you modified

Concurrent Session Caveats

Limited tracking: If multiple Claude Code sessions modify the same files, only changes from the current session are tracked for checkpointing.

Best practice: Use one Claude Code session at a time per project.

Not a Version Control Replacement

Checkpointing vs Git

Feature Checkpointing Git
Scope Session-level Repository-wide
Duration 30 days Permanent
Granularity Per prompt Per commit
Collaboration Single user Team
Purpose Session recovery Version control
Bash tracking No Yes

Use Both Together

Git for:

  • Permanent history
  • Collaboration
  • Branch management
  • All file changes (including bash)
  • Release management

Checkpointing for:

  • Quick session rollback
  • Trying different approaches
  • Recovering from mistakes
  • Conversation management
  • Rapid iteration

Recommended workflow:

# Regular git commits for milestones
git commit -m "Working authentication"

# Use checkpointing for rapid iteration
"try optimization A"
Esc Esc → rewind if not good
"try optimization B"
Esc Esc → rewind if not good
"try optimization C"
# This one works!

# Commit the winner
git add .
git commit -m "Optimized authentication"

Configuration

Checkpoint Retention

Default: 30 days

Configure retention: Edit .claude/settings.json:

{
  "checkpointRetentionDays": 60
}

Disable Checkpointing

Not recommended, but possible:

{
  "enableCheckpointing": false
}

Best Practices

1. Review Before Rewinding

Look at:

  • What checkpoint contains
  • What will be lost
  • What will be kept

Avoid:

  • Blindly selecting checkpoints
  • Rewinding without understanding impact

2. Use Descriptive Prompts

Good (easy to identify):

"add email validation to user registration"
"refactor database queries for performance"

Bad (hard to identify):

"make changes"
"fix it"

Checkpoints show your prompts, so descriptive prompts make checkpoint selection easier.

3. Combine with Git

# Checkpoint for rapid iteration
Try approach → rewind → try approach → rewind

# Git for confirmed changes
git add .
git commit -m "Final implementation"

4. Rewind Code, Not Conversation

Often better: Rewind code only and keep conversation history.

Why:

  • Maintains context
  • Claude learns from mistakes
  • Can explain what went wrong
  • Better for iterative improvement

5. Regular Git Commits

Don't rely solely on checkpoints:

# After significant progress
git add .
git commit -m "Checkpoint: working user authentication"

# Continue with Claude Code
# Checkpointing handles rapid iteration
# Git handles permanent milestones

Troubleshooting

Checkpoint Not Showing Expected State

Possible causes:

  • Changes made via bash commands (not tracked)
  • External file modifications
  • Concurrent session changes
  • Checkpoint expired (>30 days)

Solution:

  • Use git for those scenarios
  • Check git history: git log
  • Review git diff: git diff

Can't Find Recent Checkpoint

Check:

  • Are you in the right directory?
  • Is this the same session?
  • Did checkpoint expire?

Solution:

  • Use /rewind command instead of Esc Esc
  • Check session history
  • Verify working directory

Rewind Not Working

Check:

  • Are files write-protected?
  • Do you have filesystem permissions?
  • Are files open in another program?

Solution:

  • Close files in editors
  • Check file permissions
  • Ensure no file locks

Example Workflows

Refactoring Safely

# Current working state
git commit -m "Pre-refactor checkpoint"

# Try refactoring
"refactor user controller for better error handling"

# Test
!npm test

# If tests fail
Esc Esc → Code only → Return to pre-refactor

# Try different approach
"refactor user controller with focus on backward compatibility"

# If tests pass
git commit -m "Refactored user controller"

Feature Experimentation

# Baseline working
git commit -m "Baseline"

# Experiment 1
"add feature using approach A"
# Review, note pros/cons

# Rewind
Esc Esc → Code only

# Experiment 2
"add feature using approach B"
# Compare, choose better

# If experiment 2 is better
git commit -m "Added feature using approach B"

# If neither was good
Esc Esc → Code only → Back to baseline

Conversation Management

# Making good progress
"implement auth"
"add user roles"
"add permissions"

# Conversation gets complex/confused
Esc Esc → Conversation only → Select first checkpoint

# Start fresh conversation
"explain the architecture we just built"
# Code intact, conversation reset