or drop it here
One .jsonl file from Claude Code or Codex CLI. It is read by this page in your browser. Nothing is uploaded, and the page blocks its own scripts from making any network request.
Worked example
What the counts look like for a sample session
This sample is a made up 47 minute Claude Code session, written by hand for this page and not taken from anyone's work: a developer adds a CSV export to a small reports service. It starts in plan mode, rejects one edit that would have changed a test, interrupts a review agent and runs the tests four times. Counts, not a score.
| Prompts you typed | 6 | |
|---|---|---|
| Median prompt length | 31 words | |
| Slash commands | 0 | |
| Assistant replies | 14 | |
| Tool calls | 18 | |
| Tool calls you rejected or interrupted | 2 | |
| Turns you interrupted | 1 | |
| Plan mode used | yes | |
| Subagents started | 1 | |
| Test or check commands run | 4 | shell commands that ran a test runner, linter or type checker |
| Files edited | 5 | |
| Session length | 47 minutes | first to last timestamp |
| Lines read | 51 | 0 not JSON, 3 of other entry types |
Edit | 6 |
|---|---|
Bash | 4 |
Read | 4 |
Write | 2 |
Agent | 1 |
ExitPlanMode | 1 |
Download the sample file (sample-session.jsonl, 27.9 KB) and drop it above to see the same numbers.
Where is my session file?
Claude Code writes one file per session at ~/.claude/projects/<project>/<session-id>.jsonl, where the project folder is your working directory's path with every character that is not a letter or a digit replaced. By default it deletes files older than 30 days. Pick the newest file in the folder for the project you just worked in.
Codex CLI keeps its state under ~/.codex. Session rollouts are usually at ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl; that layout comes from community write ups rather than OpenAI's documentation.
Cursor is not supported yet. Its agent transcripts leave out tool outputs, according to a reply on Cursor's forum, so most of these counts could not be made from them. More on each tool: where transcripts are stored.
What exactly is counted?
- Prompts you typed: messages from you, not counting slash commands, command output, tool results, interruptions, compaction summaries or subagent traffic. Prompt length is in words.
- Assistant replies: distinct model responses. Claude Code writes one response across several lines; they are counted once.
- Tool calls you rejected or interrupted: calls whose result says you declined them or stopped them.
- Test or check commands: shell commands that ran a test runner, linter or type checker, such as
pytest,python -m unittest,npm test,go test,mypyoreslint. - Files edited: distinct files the agent edited, leaving out edits you rejected.
- Session length: from the first timestamp in the file to the last, so a session left open over lunch counts the lunch.
What are the limits?
Both file formats are internal to their tools and change between versions. Claude Code's documentation says so directly. The counter skips lines it cannot read and ignores entry types it does not know, and tells you how many, but a new version can still move a count. Counts say nothing about whether the work was good: a strong engineer may type few prompts and run few commands. Read them next to the rubric, not instead of it.
Sources
- Claude Code docs: managing sessions and where transcripts are stored
- Claude Code docs: what the ~/.claude directory holds and how long it is kept
- OpenAI Codex docs: advanced configuration and local history
- Cursor forum: what Cursor's agent transcripts contain
Last checked: .