Every agent turn,on the record.

AI agents write the code. Turnal keeps the receipts.

npm install -g @aadijo/turnal
aadijo@MacBook-Pro Project % turnal log --all-worktrees --no-pager

checkpoint graph: 5 sessions, 13 turns, 5 lanes, 2 rollbacks

sessions: [claude 14:20] [claude 14:46] [claude 14:16] [codex 14:28] [codex 14:12]

*         59a91d6d715f - 14:58 [claude 14:20] turn 4      Read +2 complete 2 files +18 -6  24 events; claude-code; tools: Read, Edit, Bash
|         Prompt: "Return success for an event another worker already completed."
|         
| *       583cb027b9f3 - 14:56 [claude 14:46] turn 2      Read +2 complete 3 files +31 -14  22 events; claude-code; tools: Read, Edit, Bash
| |       Prompt: "Attach order and event ids to every checkout error."
| |       
| |   *   e853a4e34acc - 14:54 [codex 14:28] turn 2      Read +2 complete 2 files +24 -3  19 events; codex; tools: Read, Edit, Bash
| |   |   Prompt: "Validate provider timeout values during startup."
| |   |   
! ! ! ! ! ------------ reverted to [codex 14:12] turn 2 68459d51926d
| | | | | 
* |   |   5027e8e66e1f - 14:49 [claude 14:20] turn 3      Read +2 complete 2 files +42 -19  28 events; claude-code; tools: Read, Edit, Bash
| |   |   Prompt: "Move the idempotency claim into the fulfillment transaction."
| |   |   
| *   |   7d073c54cb16 - 14:46 [claude 14:46] turn 1      Read +3 complete 3 files +57 -8  26 events; claude-code; tools: Read, Write, Edit, Bash
| |   |   Prompt: "Add payment lifecycle correlation ids."
| |   |   
|     | * 3251ca08a1b4 - 14:43 [codex 14:12] turn 3      Read +2 complete 2 files +29 -12  21 events; codex; tools: Read, Edit, Bash
|     | | Prompt: "Separate duplicate delivery metrics from provider retries."
|     | | 
|   * | | 7f68c3762e1a - 14:40 [claude 14:16] turn 2      Read +2 complete 2 files +16 -10  18 events; claude-code; tools: Read, Edit, Bash
|   | | | Prompt: "Scope raw-body parsing to the Stripe route."
|   | | | 
! ! ! ! ! ------------ reverted to [claude 14:20] turn 1 pre 614611d0aa9f
| | | | | 
*   | | | eadff0409763 - 14:32 [claude 14:20] turn 2      Read +2 complete 2 files +23 -9  20 events; claude-code; tools: Read, Edit, Bash
|   | | | Prompt: "Release the claim only for retryable failures."
|   | | | 
|   | * | 993f79127546 - 14:28 [codex 14:28] turn 1      Read +3 complete 3 files +46 -2  23 events; codex; tools: Read, Write, Edit, Bash
|   | | | Prompt: "Define provider timeout configuration."
|   | | | 
|   |   * 68459d51926d - 14:24 [codex 14:12] turn 2      Read +2 complete 1 file +63 -7  25 events; codex; tools: Read, Edit, Bash
|   |   | Prompt: "Synchronize eight delivery workers in the integration test."
|   |   | 
*   |   | ad8a917cf3bd - 14:20 [claude 14:20] turn 1      Read +2 complete no file changes  17 events; claude-code; tools: Read, VectorSearch, Bash
|   |   | Prompt: "Map the existing fulfillment boundary."
|   |   | 
    *   | deef09f4d71a - 14:16 [claude 14:16] turn 1      Read +2 complete no file changes  15 events; claude-code; tools: Read, VectorSearch, Bash
    |   | Prompt: "Trace the parsed request-body path."
    |   | 
        * b31b0e743646 - 14:12 [codex 14:12] turn 1      Read +2 complete 1 file +71 -0  20 events; codex; tools: Read, Write, Bash
        | Prompt: "Add the first concurrent delivery test."

Local history for Claude Code, Codex, Cursor, Pi, OpenCode, and GitHub Copilot CLI

Claude Code Codex Cursor Pi OpenCode GitHub Copilot CLI

It watches the work. It doesn’t direct it.

An append-only event trail explains what happened. Hidden Git checkpoints preserve what the captured workspace looked like. Turnal keeps the two together.

Local by construction.

Events and checkpoints live in .turnal, outside your Git history.

One history across agents.

Completed turns from every agent land in one traceable timeline.

The story behind the diff.

Prompts, responses, tools, and file changes stay together for every turn.

Recovery you can rehearse.

Preview the rollback. Turnal saves a safety checkpoint first.

Every agent session, one history.

Claude Code and Codex can work in sequence or in parallel. Turnal keeps each completed turn, including its prompt, tools, and checkpoints, in one interleaved timeline.

Claude Code v2.1.11 welcome screen using Fable 5

Fable 5 with high effort · Claude API

? for shortcuts

>_ OpenAI Codex (v0.144.0)

model: gpt-5.6-sol high fast

directory: ~/Dev/relay-api

checkpoint graph: 2 sessions, 0 turns, 0 lanes

A commit shows the code. An agent turn shows the story.

A Git commit preserves what the code looked like. An agent turn adds what happened, the problem the agent said it was solving, the human request, what changed, and how to get back safely.

Turn detail
Git commit What the code looked like
Agent turn What happened, and how to get back
Captured files & bytes Byte-exact contents and executable bits for the captured workspace surface.
Full tree Included in a Git commit
Captured tree Included in an agent turn
Branch & commit context Which branch and commit the work was sitting on.
Ref + SHA Included in a Git commit
Repo + worktree identity Included in an agent turn
Prompt & assistant response The instruction and response when the agent integration exposes them.
Not captured Not available in a Git commit
Captured or marked redacted Included in an agent turn
Tool activity Ordered tool activity exposed by the agent integration.
Not captured Not available in a Git commit
Append-only event trail Included in an agent turn
Before / after diff What actually changed, scoped to a single agent turn.
Between commits Partial in a Git commit
Per-turn checkpoints Included in an agent turn
Attribution to the responsible turn Which action changed a line, plus the agent’s stated intent and human request.
Author + hash only Partial in a Git commit
Intent-aware blame Included in an agent turn
Safety-first rollback Previewing a restore and preserving the current captured state first.
Manual reset or revert Partial in a Git commit
Safety checkpoint first Included in an agent turn

Capture. Inspect. Verify. Recover.

Search, diff, blame, verification, and rollback all derive from events and checkpoints already on disk.

aadijo@MacBook-Pro Project %

Turnal captures each turn in the background. Use the CLI when you need to inspect, trace, test, or restore what happened.

Go beyond the timeline.

Trace a line, test an earlier state, name a rollback point, inspect rerun readiness, or preserve a turn as an immutable case.

aadijo@MacBook-Pro Project % turnal blame src/webhooks/stripe.ts:24 --verbose
14:48 [claude 14:42] turn 4     24 |   if (!claimed) return res.sendStatus(200)
  problem: duplicate webhook claims could escape the fulfillment transaction
  expected scope: src/webhooks/stripe.ts
  confidence: high (stated before edit)
  human request: Make the webhook idempotency claim transactional and release it only on retryable failures.
  session: claude-a13f
  adapter: claude-code
  tools: Read, Edit, Bash
  action tool: Edit
  checkpoint: refs/agent-vcs/checkpoints/claude-a13f/turn/000004/post
  id: 9df3a1e9c54b

Every project. One local view.

Run turnal ui to see sessions from every configured agent in one place. Open a project to review its prompts, models, turns, branches, and file changes.

Turnal Prism session list for the example atlas-web project, with claude-fable-5 and gpt-5.6-sol sessions

Keep the starting point. See what a fork needs.

When a result deserves another pass, preserve its starting point as a case. Fork preflight shows what you need to retry the task with a different agent, instruction, or approach.

aadijo@MacBook-Pro Project % turnal case create claude-a13f:4

Source turn

claude-a13f:4

prompt

Make webhook delivery safe to retry.

checkpoint
8e7bc19
workspace
3 files changed
tests
13 passed

Case

retry-webhook / rev 3

immutable
starting checkpoint
8e7bc19
task revision
retry-webhook / 3
contract
13 tests must pass
limitations
staging API unavailable

Fork preflight

readiness only

aadijo@MacBook-Pro Project % turnal fork claude-a13f:4 --dry-run

Captured

3
  • Base checkpoint8e7bc19
  • Instructionexact
  • Evaluators13 tests

Still needed

3
  • Conversationpartial
  • Secretsnot captured
  • Networklive service

Keep the story next to the code.

Install Turnal, initialize the workspace, then let your configured coding agents work normally.

npm install -g @aadijo/turnal
Get the extension