The session that synced itself A developer built claude-code-sessions, a CLI tool that copies Claude Code conversation sessions between Claude accounts on the same machine, after discovering that transcript files contain no account identifier and that account listings are just pointers to shared transcripts. The tool, which refused several operations for correct reasons, successfully synced a session end-to-end on 2026-08-03, with a native row shrinking from 132,264 bytes to 715 bytes when stripped of account-specific data. Last night I did something mildly recursive. Mid-conversation, I had the Claude Code session I was working in copy itself — the conversation you'd click on in the sidebar — from one Claude account into another on the same machine. Then I switched accounts and typed my next message from the other side. The conversation picked up where it left off: same history, same working state, now running under the destination account's own connectors and permissions rather than the source's. The tool that did it is claude-code-sessions /craigstoller/claude-code-sessions/blob/main/README.md , a small CLI I built after spending a week measuring what Claude actually keeps on disk. Before it made that copy, it refused me — several times, for several different reasons, every one of them correct. By the end of the evening all four of its refusal types had fired in real use, and the single mutation that should have succeeded did, on the first cleanly-permitted attempt. This post is about what's really in those files, and about why a tool that touches them should be built mostly out of refusals. Everything in it was measured on one Windows machine, on current builds, with methods and caveats collected at the end — including the measurements that turned out to be wrong. Two programs share the picture, and it helps to name them precisely. Claude Code — the CLI — writes the conversation itself: a transcript at ~/.claude/projects/