Skip to main content

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

cc-transcript banner

PyPI Python Docs License: PolyForm Noncommercial

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:

License

PolyForm Noncommercial 1.0.0.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cc_transcript-7.0.2.tar.gz (145.7 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

cc_transcript-7.0.2-cp313-abi3-manylinux_2_28_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.13+manylinux: glibc 2.28+ x86-64

cc_transcript-7.0.2-cp313-abi3-manylinux_2_28_aarch64.whl (2.4 MB view details)

Uploaded CPython 3.13+manylinux: glibc 2.28+ ARM64

cc_transcript-7.0.2-cp313-abi3-macosx_11_0_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.13+macOS 11.0+ x86-64

cc_transcript-7.0.2-cp313-abi3-macosx_11_0_arm64.whl (2.3 MB view details)

Uploaded CPython 3.13+macOS 11.0+ ARM64

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

Hashes for cc_transcript-7.0.2.tar.gz
Algorithm Hash digest
SHA256 471a1521cbe27589ff6522809b436ab7d66a63bde6748e9c2617652704fe46e9
MD5 d23cdfb6b7052e8fd22a3d94dfeca90d
BLAKE2b-256 c97f05ab72f692493ff011bafbe719b49b6d71da28de25accce2d799788e344b

See more details on using hashes here.

Provenance

The following attestation bundles were made for cc_transcript-7.0.2.tar.gz:

Publisher: release-pypi.yml on yasyf/cc-transcript

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cc_transcript-7.0.2-cp313-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cc_transcript-7.0.2-cp313-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 99656c92ef16e8a993405b8356f82a932f8a5375a297de8ff55eeda5ad56a8d2
MD5 d828a562dbe2110bb4fb56dcc2f17d73
BLAKE2b-256 037749e72930d90df8a2d5054b9cac4068ec64d69471acf7d7706d3bce1b68d5

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cc_transcript-7.0.2-cp313-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for cc_transcript-7.0.2-cp313-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b015f40075b9a3cfb3dd900ce914d497ca39c151a88043044984d1b8bbf9d794
MD5 1ae425f34052fe9024c3844ca0979a97
BLAKE2b-256 51bc7666748a69a80b9aea43b5775a0f2471a1934945599b3d5e4cbaae4af3e0

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cc_transcript-7.0.2-cp313-abi3-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for cc_transcript-7.0.2-cp313-abi3-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 5978c9ac7e908aa7d1e2b8a4afce58ed4a41e12440765e5cda09a03267ab05fb
MD5 c5b25dd358c6fb35bde448f449c62d85
BLAKE2b-256 096b97e1427594ab3f71c187fd54cbd694454f2de04bb69a62859198f9ebdb55

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cc_transcript-7.0.2-cp313-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cc_transcript-7.0.2-cp313-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 491b2202f5a119a2e987aff249af1eb4102f6fb5454f7a422e545335230eae97
MD5 fd465f220b13ba36fd2350bba628d14b
BLAKE2b-256 152fe246012b8cc70b8d37ef94d2f0d51eb27b0ef63c607681c3f6f3e99f46c1

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page