Project session JSONL: 13+ record types, variable type placement, no schema/version marker — request for a documented record-type enum

Status Open
Maintainer reply None cached
Activity 0 comments · opened Sep 7, 2026

Summary

We built fail-closed analytics over Claude Code project session files (~/.claude/projects/<encoded-path>/<uuid>.jsonl; 128 sessions / 7 days in a multi-vendor orchestration). Observations from a tokenized structural specimen (all values replaced with type tokens; key sets and type placement preserved exactly):

https://github.com/oguzhanpisgin/ai-session-analytics/tree/main/specimens/claude

Findings

  1. 13+ record types beyond user/assistant: ai-title, atis-latch, last-prompt, queue-operation, custom-title, mode, frame-link, bridge-session, pr-link, artifact-comment-monitor, artifact-autoreact-ledger, agent-setting, attachment (counts from a 7-day sample in the linked specimen README).
  2. type placement varies: message lines carry type mid-object (after parentUuid, isSidechain, ...), while metadata lines carry it first. Type-first regex parsing silently misses all message lines — micro-benchmark here:

https://github.com/anthropics/claude-code — see benchmarks/claude-record-mix in the analytics repo above (2/4 lines recognized on a 4-line file).

  1. No schema/version marker anywhere in the file.

Request

A documented, versioned record-type enum for the project JSONL format (type names + key sets + placement rules, with a version field). This would let third-party analytics detect format evolution instead of silently mis-parsing.

View original on GitHub ↗