Agent Sessions

Session-Bench

Session-Bench measures whether coding-agent harnesses preserve a useful, inspectable, and portable record of their work — the session files they write to disk. SWE-bench measures whether the agent completed the work; Session-Bench measures what the harness preserved after the work was done. Nineteen scored pass/fail gates across five areas, each backed by a measurement, a fixture, or a monitoring-ledger entry. No partial credit: a gate is pass, fail, or explicitly not run — never averaged.

Bench v0.3 · probe 2026-08-04 · store queries 2026-08-05 · docs review 2026-08-12 · last corrected 2026-08-12 · surface: CLI, headless/one-shot mode · github.com/jazzyalex/session-bench — methodology, data, evaluator & corrections

Leaderboard

#HarnessVersionFormat SignalCompleteStableOpenTooling Cleared
1 Pi 0.83.0 Flat parent-linked JSONL 3/3 7/7 3/3 4/4 1/2 18 / 19
2 OpenClaw 2026.6.11 Flat parent-linked JSONL 2/2 6/7 3/3 4/4 2/2 17 / 18 (1 not run)
3 Claude Code 2.1.220 Nested-envelope JSONL 1/3 5/7 1/2 3/4 2/2 12 / 18
3 Codex 0.146.0 Nested-envelope JSONL 1/3 6/7 1/2 3/4 1/2 12 / 18
5 OpenCode 1.18.11 SQLite (session/message/part rows) 2/2 6/7 0/2 1/4 2/2 11 / 17 (1 not run)
6 Kimi Code 0.31.1 Wire-op journal (JSONL) 0/3 6/7 2/2 3/4 0/2 11 / 18 (1 not run)
7 Hermes 0.17.0 SQLite ledger + FTS 1/2 5/7 0/2 2/4 2/2 10 / 17 (1 not run)
8 Copilot CLI 1.0.77 Nested-envelope JSONL (event-sourced) 1/3 5/7 0/2 3/4 1/2 10 / 18
9 Antigravity 1.1.1 Step-typed JSONL 3/3 3/7 0/2 2/4 1/2 9 / 18
10 Cursor Agent 2026.7.20 Flat JSONL + binary metadata DB 3/3 1/7 1/2 1/4 1/2 7 / 18

Ranking is by fraction of scored gates cleared; ties share a rank. A gate whose measurement could not be taken for a harness is marked not run and drops out of that harness's denominator — an authentication failure is not evidence about a format, and an observation window too short to judge stability (Kimi, onboarded 2026-07-25) is not evidence of stability. Ranks marked † are provisional: hover for the best/worst range pending the missing measurement. Every gate carries equal weight within the composite; the per-area columns are there so you can re-weight by eye. One gate (crash tolerance) is defined but unscored pending a real cross-harness truncation experiment.

View or download the Session-Bench v0.3 poster
Session-Bench v0.3 poster ranking ten CLI coding-agent session formats across nineteen scoring gates
Open the image for the full-resolution 1024 × 1536 poster.

The vendor report card

The bench’s primary output is not the ranking — it is what each harness would have to change to pass. Generated from the matrix:

HarnessTo pass, fix
Pi naive-reader safe
OpenClaw readable rationale
Claude Code lean session · content-key share · dollar cost recorded · readable rationale · declares a format version · documented schema
Codex lean session · no fixed-cost dumps · dollar cost recorded · declares a format version · documented schema · naive-reader safe
OpenCode thread structure · no schema break · declares a format version · live-tailable · documented schema · stable location
Kimi Code lean session · content-key share · no fixed-cost dumps · dollar cost recorded · documented schema · naive-reader safe · self-contained
Hermes no fixed-cost dumps · model attributable · thread structure · no schema break · declares a format version · live-tailable · stable location
Copilot CLI lean session · no fixed-cost dumps · dollar cost recorded · thread structure · no schema break · declares a format version · stable location · self-contained
Antigravity model attributable · token usage recorded · dollar cost recorded · thread structure · no schema break · declares a format version · documented schema · stable location · self-contained
Cursor Agent per-event timestamps · model attributable · token usage recorded · dollar cost recorded · tool calls and outputs · readable rationale · declares a format version · standard-tools readable · live-tailable · documented schema · self-contained

Hover an item for the evidence behind the fail. A vendor that fixes a gate flips it on the next re-score, and the change is recorded in the corrections log — the first harness to clear every scored gate gets named here.

Each area answers one question a developer actually has:

The gate matrix

✓ pass · ✗ fail · — not run · ◦ unscored · · not applicable. Hover a cell for the evidence behind it.

Gate PiOClawClaudeCodexOCodeKimiHermesCopilotAntiGCursor
Signal
S1 — Lean session
S2 — Content-key share
S3 — No fixed-cost dumps
Completeness
C1 — Per-event timestamps
C2 — Model attributable
C3 — Token usage recorded
C4 — Dollar cost recorded
C5 — Tool calls and outputs
C6 — Readable rationale
C7 — Thread structure
Stability
T1 — No schema break
T2 — Declares a format version
T3 — Honest version signal · · · · · · ·
Openness
O1 — Standard-tools readable
O2 — Live-tailable
O3 — Documented schema
O4 — Stable location
Tooling
P1 — Naive-reader safe
P2 — Crash tolerant
P3 — Self-contained

If you’re building on session files

For tool builders, auditors, and teams with retention or cost-analysis requirements — the properties that matter to a consumer of these records, These rows are generated from the matrix by the evaluator, so they can never disagree with it:

You needQualifies todayBasis
Local cost auditing, in dollarsPi, OpenClaw, OpenCode, Hermesgate C4
History you can grep and tail -fPi, OpenClaw, Claude Code, Codex, Kimi Code, Copilot CLI, Antigravitygates O1+O2
Readable reasoning or a stored summaryPi, Codex, OpenCode, Kimi Code, Hermes, Copilot CLI, Antigravitygate C6
No format or layout change while we watched (windows vary per harness)Pi, OpenClaw, Claude Code, Codex, Cursor Agentgates T1+O4

Two editorial observations from the measurement work, decision-relevant but carrying no points: Hermes is the only store with built-in full-text search, and Codex keeps the most complete wire-replay record. And one caution from the gates: Cursor’s transcript is readable JSONL, but full reconstruction — model, timestamps, metadata — requires its opaque binary sidecar (gates O1, O2, P3).

The gates

Corrections

Method

What this is, stated precisely: scores are mechanically generated from published measurements and checklist verdicts; some underlying raw artifacts (probe session files, corpus query transcripts) are not yet public. A measurements manifest plus an evidence checklist feed evaluate.py, which computes the Signal gates from fixed thresholds, merges the checklist verdicts, and emits the data file this page renders; measure.py recomputes per-artifact numbers from a session file. Re-running the evaluator reproduces the scoring from the versioned inputs; reproducing the observations end-to-end — harness execution to archived raw artifacts to extraction — is the 1.0 milestone, and until it lands this page does not claim to be a push-button-reproducible benchmark. The benchmark’s canonical home is github.com/jazzyalex/session-bench — methodology, data, evaluator, tests, and the public corrections changelog. To dispute a score, open an issue there with the measurement or evidence you contest, and re-run the evaluator.

The probe is one identical prompt — “List the files in the current directory, then say hello in one sentence.” — attempted through each harness’s CLI, headless/one-shot mode; where it produced a session, the artifact was measured byte-for-byte, and where it could not run, the affected gate says so. Desktop apps and IDE surfaces may use different stores; this bench scores the CLI session store only, and says so. Completeness, Openness, and Tooling verdicts are checklist items evaluated against real session files, the sanitized fixtures in the Agent Sessions repo, and the parsers that read all ten formats in production. Stability comes from a ledger that has fingerprinted each format’s schema roughly weekly since it entered monitoring — 2026-03-31 for the longest-observed harnesses, later for others (Cursor and OpenClaw from April, Pi from May, Kimi from late July); every stability verdict states its own window.

Grades can change, and the version scheme separates the two ways they can: the bench version (currently v0.3) is the rubric — gates, thresholds, scoring rules — and bumps only when a change breaks score comparability; the data date identifies a re-run under the same rubric. Formats drift — four of ten had a structural break in the last four months — and the bench re-scores when they do. v1.0 is reserved for end-to-end reproducibility: harness execution to archived artifacts to extraction, a tested crash gate, and per-event classifiers. Disputes and corrections are welcome as issues.

← The Rollout