Getting a conversation out of your coding agent

the transcript is already a file; the question is what shape you need it in

Sooner or later you want a session out of the tool: to attach it to a bug report, to hand a colleague what you already worked out, to keep a record before clearing history. Every harness writes the conversation to disk, and none of them offers a good way to get one out.

The raw file, if that is what you want

Most agents write JSONL — one JSON object per line, appended as the session runs. Claude Code keeps it under ~/.claude/projects, Codex under ~/.codex, and the rest are listed on where each agent stores its history. That file is complete and unreadable in equal measure: system prompts, tool payloads and base64 blobs sit between the sentences you were looking for.

ls -t ~/.claude/projects/*/*.jsonl | head -1 | xargs jq -r 'select(.type=="user") | .message.content'

Good enough to grep. Not something to attach to an issue.

One session, readable

$ deja share 8f31c0a9
# deja share: 8f31c0a9-…

- Project: api-gateway
- Harness: claude
- Date: 2026-07-08T13:41:02Z

## User problem statement(s)
…

## What was tried
…

## Outcome
…

Markdown, structured as the thing a reader needs rather than as the thing the harness stored: what the problem was, what was tried, what was decided. Redaction runs again on the way out — the same rules the index applied, re-applied to what leaves.

Everything, as data

$ deja sync export ./out
deja: exported 180516 records
deja: records were redacted at index time (566 masked). pattern redaction is a floor —
      review the export before moving it; rotate anything that leaked.

JSONL across every harness the index read, in a shape another machine's deja can import — which is what syncing between machines uses. It is also a plain archive: the records are ordinary JSON, and nothing needs deja to read them back.

That second line is printed on every export on purpose. Redaction is pattern matching, and pattern matching has a floor: it catches the shapes it knows — AWS keys, bearer tokens, JWTs, PEM blocks, scheme://user:pass@host URLs, high-entropy values in secret-shaped positions — and cannot promise there is nothing else. Read an export before it leaves the machine, and rotate anything that did leak. Project exclusions are honoured by the export too, so a project you excluded does not travel.

Browsing rather than exporting

deja view

Writes one local HTML file with the sessions, the recalls served and the notes, and opens it. No server, nothing uploaded — the page is a file on your disk. This is usually what people actually wanted when they went looking for an export: a way to look through what is there.

Before you clear history

Deleting a harness's transcripts is not the same as removing them from an index that already read them. If you keep an index, deja forget <id> removes those sessions and writes a tombstone so a later deja index cannot resurrect them from the source; --list shows the tombstones and --unforget reverses one. Privacy covers the rest: what is indexed, what is stripped, and what never leaves the machine.

Where each agent keeps its sessions · Privacy · CLI reference