# Checkpoints, stop & rewind

> Every message is a checkpoint — stop mid-run, continue later, or rewind the thread to an earlier state.

Every message you send is a **checkpoint**: a point in the conversation you can come back to. [Threads & branches](https://darting.dev/docs/threads-and-branches/) states the rule; this page is the detail — what a checkpoint is made of, and what you can do with one.

## The shape of a turn

Each turn runs as a **completion stream** — a single execution attempt, described in more detail on [how the lead agent works](https://darting.dev/docs/lead-agent/). A stream ends when the agent finishes, when you stop it, when it errors, or when it loops. The raw message log is written to disk after every stream, so a refresh, a crash, or a server restart never loses history.

```text
you send ──▶ checkpoint ──▶ stream (one attempt) ──▶ commit on the thread's branch
                  ▲
                  └── rewind puts you back here
```

## Stop and continue

You can **Stop** a stream mid-run — when the agent has clearly gone the wrong way, or when you've seen enough to redirect it. Nothing is lost: continuing later starts a fresh stream that picks up exactly where it left off, with the work already on disk.

## Queue while it works

You don't have to wait for the agent to finish to say the next thing. Messages you send while it's working **queue** in the composer and land as the next turn, in order. Drafts persist per thread, so switching threads mid-sentence doesn't cost you the sentence.

## Rewind

**Rewind** restores the conversation to an earlier checkpoint so you can take a different path from there — a different approach, a different framing, a correction you'd rather make before the agent built on it than after.

It's an iteration tool for work that hasn't shipped, and it's safe for one specific reason: agent output is committed per turn on the thread's *own* branch ([git & commits](https://darting.dev/docs/git-and-commits/)). Stepping back and going again only rewrites that branch's story. Nothing has reached your default branch, because reaching your default branch takes a [pull request](https://darting.dev/docs/pull-requests-and-ci/).

## After a merge, fork instead

Once a thread's PR has merged, rewind can't un-merge anything — the change is in your default branch and belongs to its history now. Continue in a [fork](https://darting.dev/docs/forks-and-follow-ups/): a fresh thread that inherits the whole conversation on a new branch, with its own PR lane.

That's the division of labor worth remembering. Rewind is for redirecting work in flight. A fork is for work that has already landed.
