Claude Code keeps a complete transcript of every session as plain JSONL files on your machine, one file per session, grouped by project. Unlike most coding agents this storage is at least readable with standard tools, but the location and format are not formally documented, so this page records the layout as observed in August 2026. We maintain an open-source adapter that reads these files, so the details here are re-verified against real installations.
Transcripts live in a projects directory under the .claude folder in your home directory:
Each subdirectory of projectscorresponds to one project folder you have run Claude Code in. The directory name is the project’s absolute path with every path separator, colon and dot replaced by a dash. A project at /Users/dana/dev/my-app becomes -Users-dana-dev-my-app, and on Windows C:\dev\my-app becomes C--dev-my-app. That rule matters in reverse: when a directory listing is all you have, the dashes are ambiguous, so the reliable way to find a specific project’s folder is to compute the munged name from the path rather than trying to read the munged name back.
Every line of a session file is one JSON object. The lines that make up the visible conversation have a type of user or assistant and carry the message under a message field, whose content is either a plain string or an array of typed content blocks; the prose sits in blocks with type: "text". Lines also carry a sessionId, a uuid and a timestamp. Interleaved with the conversation are other line types recording tool activity, summaries and bookkeeping, which a transcript reader can simply skip.
Because it is one JSON object per line, ordinary tooling works. A quick way to see the user side of a session with jq:
Note that content is an array on many lines, so a robust reader flattens the text blocks rather than assuming a string. Files grow with session length and long sessions reach tens of megabytes, which jq handles fine and editors sometimes do not.
The transcripts are the only durable record of how an AI-assisted project was actually built: what was asked for, what the agent proposed, which decisions were made and why. That makes them valuable in exactly the situations where the code alone does not speak: handing a project to a client or a new maintainer, auditing what an agent did, or recovering the reasoning behind a change months later. It also makes them sensitive. Everything you pasted into a session is in these files, including any secrets that went in during debugging, so treat a raw transcript as confidential and redact before sharing one.
Reading the files is easy; extracting what matters from hundreds of messages is not. The Mantyl CLI does that extraction in one local run: it locates the session files for the current project, pulls out the claims the agent made and the decisions that were taken, runs every message through secret redaction before anything is stored, and cross-checks the claims against what the repository actually contains. Statements the code contradicts get labelled as contradicted rather than repeated as fact. The output is a project passport the next person can verify, which is the difference between handing over a chat log and handing over evidence. The same run reads Cursor and Codex CLI history too; the support matrix is in the agents documentation.