Claude Code
Claude Code keeps every conversation as a JSONL file on your machine. Drop one here and read it properly: the messages, the thinking it usually hides, the diffs it applied, the todo list it worked through — and the output of every command it ran.
Drop a session file here
Codex and Claude Code .jsonl (.gz works too), or click to pick one
Codex: ~/.codex/sessions/ Claude Code: ~/.claude/projects/
The file is parsed in your browser. Nothing is uploaded unless you choose to create a share link.
This is the most common reason people go looking. The terminal scrollback is gone, /resume doesn't show what you wanted, the context got compacted — but the transcript itself is still sitting on disk. Claude Code writes one JSONL per session and never deletes it.
Sessions are grouped by project. Each project folder is named after its working directory, with slashes replaced by dashes. A project at /Users/me/dev/myapp becomes -Users-me-dev-myapp:
~/.claude/projects/<project-slug>/<session-uuid>.jsonl # most recent conversations across every project: ls -t ~/.claude/projects/*/*.jsonl | head -5 # search all of them for something you said: grep -rl "the thing you remember" ~/.claude/projects/
The raw file contains one JSON object per line, with tool calls and their results in separate records and a lot of harness scaffolding mixed into the message stream. The viewer separates the useful content from the scaffolding:
Edit, MultiEdit, Write) rendered as a colored diff, so you can see exactly what changed rather than a JSON blob of old_string / new_string.TodoWrite) shown as checklists, with completed items clearly marked.Every other Claude Code history tool is local — a desktop app, a VS Code extension, a CLI. Useful for you, useless for showing a colleague what happened. Click Create share link and you get a URL that anyone can open with nothing installed. It's a random string, never listed or indexed, and you get a delete command back with it.
You don't have to hunt for the file yourself. Ask Claude Code in your current session — it reads a short instruction file here that tells it where transcripts live, how to slim one down, and how to upload it, then gives you the link.
Upload our conversation to https://sessionviewer.cc and give me a viewing link. Read https://sessionviewer.cc/llms.txt first.
In ~/.claude/projects/<project-slug>/<session-uuid>.jsonl, where the project slug is the working directory path with separators replaced by dashes (/Users/me/dev/app → -Users-me-dev-app). One JSONL file per session.
Almost certainly yes. Losing the terminal scrollback, or having the context compacted, does not delete the transcript — the JSONL file is still in ~/.claude/projects/. Run ls -t ~/.claude/projects/*/*.jsonl | head -5, open the file here, and the whole conversation is back.
Yes. Thinking blocks are written to the transcript in full, and the viewer shows them (collapsed by default, so they don't get in the way). This is one of the main reasons to read a transcript rather than scroll the terminal.
No. Parsing happens entirely in your browser. An upload only happens if you click “Create share link”, and that returns a delete command so you can remove it at any time.
Yes — the same viewer auto-detects Codex rollout files as well. Drop either format in.
Share links are random strings, never listed or indexed. Every upload returns a delete command you can run any time.