When a Claude Code session runs out of context, or you stop for the night, the next session starts from whatever the last one wrote down. Usually that is a summary: what was done, what is left. The trouble is that the session writing it is the one most likely to be wrong about it. It ran out of room mid-task. It remembers deciding to commit, not whether the commit happened.
So the next session reads "auth refactor done, tests passing" and builds on it. Twenty minutes later you find the refactor was never committed.
Here is a habit that fixes most of this, with or without any tool.
1. Every claim gets a pointer
Don't let the handoff say "done" on its own. Each line names something that can be looked up:
- Auth refactor: done. commit a1b2c3d
- Session cookie fix: done. file src/auth/session.ts in commit a1b2c3d
- Rate limit: NOT done. Started, nothing committed.
- Decision: keep JWT, see log entry 2026-10-12 14:05
A commit hash, a file in a commit, a line in a log. If the agent can't name one, the honest line is "not done".
2. The next session checks the pointers before it trusts the file
This part is mechanical, so don't leave it to the model's judgement. A few lines of shell will do:
git cat-file -e a1b2c3d^{commit} && echo "commit exists"
git cat-file -e a1b2c3d:src/auth/session.ts && echo "file exists in that commit"
Run it for every pointer and count: how many exist, how many don't. Show the count to yourself before the new session starts work.
3. Be clear about what the check proves
A pointer that exists does not make the sentence beside it true. "Fixes the login bug" can point at a real commit that fixes nothing. What the check gives you is narrower and still useful: it tells you which claims rest on something real and which rest on nothing, and so where to look first. Often the false ones are the second kind: work that was described but never committed.
4. Keep it in the repo, in plain text
Markdown and JSON in a folder in the project. Then it doesn't matter which agent or tool reads it next, and it travels with the code.
A plugin that does this for Claude Code
I maintain Succession, a free, MIT-licensed Claude Code plugin that does the above for you. It starts small: install it, and your next session in a git project gets a name, such as Sextant, and nothing else changes. When you want handoffs, /succession:seat turns on checkpoints and a close, and before a successor takes over, a script checks every pointer in the last handoff and prints the count. Everything is plain files in a .succession/ folder; no account, no server, no network calls. It needs git and a POSIX shell (Git Bash on Windows).
claude plugin marketplace add thecontinuitylayer/succession
claude plugin install succession@succession-marketplace
Repository: https://github.com/thecontinuitylayer/succession
Short page with a recording: https://thecontinuitylayer.com/succession?utm_source=devto
But the habit matters more than the tool. If you take one thing from this: don't accept "done" without a pointer.
This post was drafted with AI assistance and reviewed by me; I stand by what it says.
Top comments (0)