Skip to content
All Docs pages

Sessions

Checkpoints

A snapshot before every turn, kept off your branch entirely. Restoring files is clean; rewinding the conversation starts a fresh Claude session.


Fleet takes a checkpoint before each of your turns, because the moment worth returning to is always "just before I asked for that".

What a checkpoint is

A commit holding the tree of the worktree at that moment, plus a position in the transcript.

The commit is written to refs/fleet/checkpoints/<session>, which is not under refs/heads. It is not on your branch, it does not appear in your history, it does not appear in your diff against base, and no branch listing shows it. A checkpoint is not a commit you made, and Fleet is careful that it never looks like one.

Capturing goes through a temporary index rather than your real one, so taking a checkpoint cannot disturb what you had staged.

Fleet keeps up to 50 per session and drops the oldest beyond that.

Restoring

Restoring is two independent choices, and you can take either or both.

Files

Puts tracked content back as it was. It deliberately does not delete a file the turn created. Deleting untracked files would mean git clean, and git clean cannot tell the agent's new source file from the .env.local your setup script copied in. Fleet will not make that call on your behalf.

If the worktree has uncommitted changes, Fleet says so before overwriting them.

The conversation

Truncates the transcript back to the checkpoint and tells you how many items were dropped.

Rewinding the conversation starts a fresh Claude session. This is a real limitation and it is worth being plain about: the model's context is held server side and there is no way to truncate it, so the only way to give the agent a conversation that no longer contains those turns is to begin a new one. The agent keeps the files and the repository. It does not keep what it worked out along the way.

Restoring files alone does not restart anything.

Turning it off

Checkpoints are a preference. Turning them off stops the capture before each turn.

The capture is fired but not awaited, so it never sits between pressing Send and the turn appearing. Sending always feels immediate, and that is on purpose.