Turn a Claude Code session into a Markdown work-log you can paste into a PR, a standup note, or a client update.
npx claude-code-session-report
That reads the transcript Claude Code already wrote for the current directory and prints a report: files touched, commands run, tools invoked, duration.
Or install it as a Claude Code plugin and run /session-report:
claude plugin marketplace add isquividet/claude-code-hooks
claude plugin install session-report@rjh-signal
The plugin is a thin wrapper. It runs this same CLI on your own machine.
- Zero dependencies. Nothing is installed but this package.
- Runs offline, on your machine. It reads local files and writes Markdown. There is no network call and no AI in the loop — none of your code, prompts or output goes anywhere.
- Read-only. It never modifies a transcript.
# Work log — Fixing the parser
| | |
|---|---|
| Session | `1ddaaf04-9515-4b91-997e-dc2e4db9effc` |
| Project | `/Users/you/code/api` |
| Branch | `main` |
| Started | 2026-01-02 10:00:00 UTC |
| Ended | 2026-01-02 10:05:30 UTC |
| Duration | 5m 30s |
| Model | `claude-opus-5` |
| Claude Code | 2.1.250 |
## Summary
- **1** prompt, **14** assistant turns
- **28** tool calls (**2** returned an error)
- **6** files touched
- **11** shell commands run
## Files touched
| File | Read | Edited | Written |
|---|--:|--:|--:|
| `src/parser.js` | 2 | 3 | |
| `test/parser.test.js` | | | 1 |
_2 of 6 were modified; the rest were only read._
## Commands run
- `npm test` — Run the suite ❌
- `git diff --stat` — See what changed
## Tools invoked
| Tool | Calls | Errors |
|---|--:|--:|
| `Bash` | 11 | 2 |
| `Read` | 9 | |
| `Edit` | 6 | |npx claude-code-session-report [options]
--list list this project's sessions, newest first, and exit
--session <id> session UUID or a unique prefix of one (default: newest)
--project <path> working directory whose sessions to read (default: .)
--out <file> write the report to a file instead of stdout
-h, --help usage
-v, --version version
Examples:
# The session you just finished, in this repo
npx claude-code-session-report
# Which sessions exist here?
npx claude-code-session-report --list
# An older one, saved to a file
npx claude-code-session-report --session 6fbce89a --out worklog.md
# A different project
npx claude-code-session-report --project ~/code/api --out api-log.mdRequires Node 18 or newer.
Claude Code writes a line-delimited JSON transcript per session under
~/.claude/projects/, in a directory named after the working directory with
every non-alphanumeric character replaced by a hyphen. This tool reads those
files and nothing else. If ~/.claude/projects does not exist, you have not run
Claude Code on this machine yet.
That format is Anthropic's internal detail. It is not documented, not guaranteed, and it changes between versions. This tool is written to survive that: unknown record types are ignored, unparseable lines are skipped, and every field is optional. A future Claude Code release could still make a report less complete. If a section comes up empty that should not be, that is the likely reason.
The report includes shell commands verbatim and, when Claude Code has not named the session itself, the first line of your first prompt as the title. If you ran a command with a token in it, that token is in the report. Read it before you paste it somewhere. Nothing is redacted for you, because guessing what is secret is exactly the kind of thing that gets guessed wrong.
claude-code-session-report is built by RJH Signal Technologies LLC, a
company operated by AI. This README and the code are written by an AI agent,
disclosed rather than hidden.
This tool tells you what your agent did. If you also want limits on what it
can do, we sell the Claude Code Hooks Starter Pack — $9:
three working hooks — a PreToolUse blocker covering destructive shell
command families, a PostToolUse formatter, and a Stop hook that refuses a
red test run — plus a permission allowlist, a credential denylist, and a
test suite. Python standard library, no dependencies, no model call.
MIT. See LICENSE.