The Claude Code session-activity platform: a superset JSONL parser (Rust fast path, Python reference), typed tool calls with a cross-language content digest, turns/edits/evidence over one spine, context windows with labeled fidelity, unified decision and correction ledgers, LLM judging, and a transcript-investigation CLI.
Project description
cc-transcript
A non-lossy parser for Claude Code's on-disk JSONL transcripts, plus a CLI to investigate sessions.
cc-transcript parses Claude Code's JSONL transcripts into a typed superset event model — every entry type preserved, nothing dropped. The parser never silently discards sidechains, synthetic turns, tool results, or unrecognized entries; filtering is opt-in and lives in your code, not buried in the parser. It ships as a Python library, a uvx-runnable CLI, and a Claude Code plugin.
Install
uvx cc-transcript --help # run the CLI
Quickstart
Discover the transcripts on disk, parse one, and walk the events:
import anyio
from cc_transcript import AssistantEvent, TranscriptDiscovery, UserEvent, parse_events_from_bytes
path = anyio.run(TranscriptDiscovery.find_transcripts)[0]
events = parse_events_from_bytes(path.read_bytes())
for event in events:
match event:
case UserEvent(text=text):
print("user:", text[:80])
case AssistantEvent(model=model, text=text):
print(f"assistant ({model}):", text[:80])
Filtering is opt-in. Compose a spec from small builders and apply it — build_spec assembles clauses, apply_spec yields the survivors. NOISE_SPEC is a ready-made spec for universal structural noise (system reminders, local-command output, skill banners):
from cc_transcript import apply_spec, build_spec, keep_only, drop_junk, drop_short
spec = build_spec(keep_only("user", "assistant"), drop_junk("structural"), drop_short(2))
clean = list(apply_spec(events, spec))
CLI
Every command runs as uvx cc-transcript <command> ...; see --help on any command for its flags.
| Command | What it does |
|---|---|
list |
Find transcripts on disk, newest first |
stats |
Summarize a session — counts, kinds, models, tools, token sizes, span |
show |
Render one compact line per event (--signal keeps the conversational spine) |
grep |
Search event content; hit indexes feed back into show --range |
slice |
Emit per-tool-call JSONL for a session UUID and time window (the bridge cc-review consumes) |
digest |
Generate and check the cross-language fixture corpus for the tool-digest contract |
The output is compact by design — one line per event, hard truncation — so an agent triages a session in a few hundred tokens instead of paging through megabytes of JSONL:
$ uvx cc-transcript stats ~/.claude/projects/-Users-yasyf-Code-cc-transcript/4c77d556-8694-4613-8f50-253d905da68e.jsonl
files 1
events 181
kinds other 68 · assistant 53 · user 33 · mode 22 · system 5
models claude-fable-5 53
tools TaskCreate 10 · Agent 5 · Read 5 · TaskUpdate 5 · Bash 2 · ToolSearch 2 · AskUserQuestion 1 · ExitPlanMode 1
text 14.8KB
thinking 8.7KB
tool io 89.0KB
sessions 1
span 2026-06-12 01:07:55 → 2026-06-12 02:28:03
interrupts 0
tool errors 0
sidechain 0
Claude Code plugin
Install the bundled plugin from inside Claude Code:
/plugin marketplace add yasyf/cc-transcript
/plugin install cc-transcript@cc-transcript
The plugin's skill teaches Claude to answer questions about its own history — "what did I ask yesterday", "find the session where we fixed the parser" — by funneling through the CLI's list, stats, grep, and show commands instead of reading raw JSONL.
How it works
The event model is a superset: sidechains, <synthetic> turns, thinking blocks, and unrecognized entry types all survive parsing, so you decide what to drop via composable filter specs. Two engines sit behind one Backend protocol — RustBackend (PyO3 + rayon) is the default fast path, PythonBackend is the readable reference, parity-asserted against each other. On top of the spine, SessionActivity lifts events into turns and typed tool calls, FileStateStore tracks per-file mtimes in SQLite for incremental re-parses, and cc_transcript.mining/judge/sentiment extract feedback, run LLM verdict passes, and score conversational sentiment. The docs site covers each of these in depth.
Docs
Each section of the docs site is a focused guide:
- Getting Started — install, parse, filter, persist.
- Filtering events — clauses, specs, and
NOISE_SPEC. - Scoring sentiment — the lexicon engine and score specs.
- Rust/Python backends & parity — the
Backendprotocol and parity testing. - Compose your own policy — building a bespoke filtering policy.
- Mining feedback — detectors, confidence, candidates, and verdicts.
- The transcript CLI —
list/show/grep/statsend to end. - API reference — the complete typed surface.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cc_transcript-7.0.2.tar.gz.
File metadata
- Download URL: cc_transcript-7.0.2.tar.gz
- Upload date:
- Size: 145.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
471a1521cbe27589ff6522809b436ab7d66a63bde6748e9c2617652704fe46e9
|
|
| MD5 |
d23cdfb6b7052e8fd22a3d94dfeca90d
|
|
| BLAKE2b-256 |
c97f05ab72f692493ff011bafbe719b49b6d71da28de25accce2d799788e344b
|
Provenance
The following attestation bundles were made for cc_transcript-7.0.2.tar.gz:
Publisher:
release-pypi.yml on yasyf/cc-transcript
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cc_transcript-7.0.2.tar.gz -
Subject digest:
471a1521cbe27589ff6522809b436ab7d66a63bde6748e9c2617652704fe46e9 - Sigstore transparency entry: 2044296863
- Sigstore integration time:
-
Permalink:
yasyf/cc-transcript@f7d36ec2bfe1cb09d8cdd6765b3b8d6334067a80 -
Branch / Tag:
refs/tags/v7.0.2 - Owner: https://github.com/yasyf
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@f7d36ec2bfe1cb09d8cdd6765b3b8d6334067a80 -
Trigger Event:
push
-
Statement type:
File details
Details for the file cc_transcript-7.0.2-cp313-abi3-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cc_transcript-7.0.2-cp313-abi3-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 2.5 MB
- Tags: CPython 3.13+, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
99656c92ef16e8a993405b8356f82a932f8a5375a297de8ff55eeda5ad56a8d2
|
|
| MD5 |
d828a562dbe2110bb4fb56dcc2f17d73
|
|
| BLAKE2b-256 |
037749e72930d90df8a2d5054b9cac4068ec64d69471acf7d7706d3bce1b68d5
|
Provenance
The following attestation bundles were made for cc_transcript-7.0.2-cp313-abi3-manylinux_2_28_x86_64.whl:
Publisher:
release-pypi.yml on yasyf/cc-transcript
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cc_transcript-7.0.2-cp313-abi3-manylinux_2_28_x86_64.whl -
Subject digest:
99656c92ef16e8a993405b8356f82a932f8a5375a297de8ff55eeda5ad56a8d2 - Sigstore transparency entry: 2044297019
- Sigstore integration time:
-
Permalink:
yasyf/cc-transcript@f7d36ec2bfe1cb09d8cdd6765b3b8d6334067a80 -
Branch / Tag:
refs/tags/v7.0.2 - Owner: https://github.com/yasyf
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@f7d36ec2bfe1cb09d8cdd6765b3b8d6334067a80 -
Trigger Event:
push
-
Statement type:
File details
Details for the file cc_transcript-7.0.2-cp313-abi3-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cc_transcript-7.0.2-cp313-abi3-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 2.4 MB
- Tags: CPython 3.13+, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b015f40075b9a3cfb3dd900ce914d497ca39c151a88043044984d1b8bbf9d794
|
|
| MD5 |
1ae425f34052fe9024c3844ca0979a97
|
|
| BLAKE2b-256 |
51bc7666748a69a80b9aea43b5775a0f2471a1934945599b3d5e4cbaae4af3e0
|
Provenance
The following attestation bundles were made for cc_transcript-7.0.2-cp313-abi3-manylinux_2_28_aarch64.whl:
Publisher:
release-pypi.yml on yasyf/cc-transcript
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cc_transcript-7.0.2-cp313-abi3-manylinux_2_28_aarch64.whl -
Subject digest:
b015f40075b9a3cfb3dd900ce914d497ca39c151a88043044984d1b8bbf9d794 - Sigstore transparency entry: 2044296907
- Sigstore integration time:
-
Permalink:
yasyf/cc-transcript@f7d36ec2bfe1cb09d8cdd6765b3b8d6334067a80 -
Branch / Tag:
refs/tags/v7.0.2 - Owner: https://github.com/yasyf
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@f7d36ec2bfe1cb09d8cdd6765b3b8d6334067a80 -
Trigger Event:
push
-
Statement type:
File details
Details for the file cc_transcript-7.0.2-cp313-abi3-macosx_11_0_x86_64.whl.
File metadata
- Download URL: cc_transcript-7.0.2-cp313-abi3-macosx_11_0_x86_64.whl
- Upload date:
- Size: 2.4 MB
- Tags: CPython 3.13+, macOS 11.0+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5978c9ac7e908aa7d1e2b8a4afce58ed4a41e12440765e5cda09a03267ab05fb
|
|
| MD5 |
c5b25dd358c6fb35bde448f449c62d85
|
|
| BLAKE2b-256 |
096b97e1427594ab3f71c187fd54cbd694454f2de04bb69a62859198f9ebdb55
|
Provenance
The following attestation bundles were made for cc_transcript-7.0.2-cp313-abi3-macosx_11_0_x86_64.whl:
Publisher:
release-pypi.yml on yasyf/cc-transcript
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cc_transcript-7.0.2-cp313-abi3-macosx_11_0_x86_64.whl -
Subject digest:
5978c9ac7e908aa7d1e2b8a4afce58ed4a41e12440765e5cda09a03267ab05fb - Sigstore transparency entry: 2044296955
- Sigstore integration time:
-
Permalink:
yasyf/cc-transcript@f7d36ec2bfe1cb09d8cdd6765b3b8d6334067a80 -
Branch / Tag:
refs/tags/v7.0.2 - Owner: https://github.com/yasyf
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@f7d36ec2bfe1cb09d8cdd6765b3b8d6334067a80 -
Trigger Event:
push
-
Statement type:
File details
Details for the file cc_transcript-7.0.2-cp313-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: cc_transcript-7.0.2-cp313-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.3 MB
- Tags: CPython 3.13+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
491b2202f5a119a2e987aff249af1eb4102f6fb5454f7a422e545335230eae97
|
|
| MD5 |
fd465f220b13ba36fd2350bba628d14b
|
|
| BLAKE2b-256 |
152fe246012b8cc70b8d37ef94d2f0d51eb27b0ef63c607681c3f6f3e99f46c1
|
Provenance
The following attestation bundles were made for cc_transcript-7.0.2-cp313-abi3-macosx_11_0_arm64.whl:
Publisher:
release-pypi.yml on yasyf/cc-transcript
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cc_transcript-7.0.2-cp313-abi3-macosx_11_0_arm64.whl -
Subject digest:
491b2202f5a119a2e987aff249af1eb4102f6fb5454f7a422e545335230eae97 - Sigstore transparency entry: 2044296978
- Sigstore integration time:
-
Permalink:
yasyf/cc-transcript@f7d36ec2bfe1cb09d8cdd6765b3b8d6334067a80 -
Branch / Tag:
refs/tags/v7.0.2 - Owner: https://github.com/yasyf
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@f7d36ec2bfe1cb09d8cdd6765b3b8d6334067a80 -
Trigger Event:
push
-
Statement type: