← All @molecule/* packages · App templates
@molecule/api-agent-transcript-claude-codeProvider bond · agent-transcript · API (Node) · v1.0.0 · Apache-2.0
Reads Claude Code sessions — the /export text and the session .jsonl — into a normalized agent session
npm install @molecule/api-agent-transcript-claude-codenpm · Source on GitHub · Implements @molecule/api-agent-transcript
@molecule/api-agent-transcript-claude-code is a provider bond on the API (Node) side: it implements the agent-transcript core interface (@molecule/api-agent-transcript) with a concrete vendor or library behind it.
Your code calls the core; you wire this provider once at startup. Swapping vendors later is one line in that wiring, not a rewrite.
import { readFileSync } from 'node:fs'
import { readTranscript, setProvider } from '@molecule/api-agent-transcript'
import { provider } from '@molecule/api-agent-transcript-claude-code'
setProvider(provider)
const session = readTranscript({
text: readFileSync('session.jsonl', 'utf8'),
fileName: 'session.jsonl',
})
// session.turns: [{ role: 'user', text: '…as typed…' }, { role: 'assistant', model: 'claude-…', text, files }]Works with: @molecule/api-agent-transcript
Auto-generated, AI-first package reference for the molecule.dev ecosystem. It is written to be read by coding agents as much as by people, and is generated from this package's source — edit
src/index.tsJSDoc, not this file.
Claude Code transcript reader for @molecule/api-agent-transcript.
Reads both forms of a Claude Code session into a normalized AgentSession:
the session log Claude Code keeps at
~/.claude/projects/<project>/<session-id>.jsonl (full fidelity: the
assistant's markdown as written, per-message model and timestamps, and the
complete text of every Write / Edit / MultiEdit), and the plain text
/export writes (the terminal rendering: user ❯, assistant ●, tool
calls such as Write(path) with the lines they wrote).
import { readFileSync } from 'node:fs'
import { readTranscript, setProvider } from '@molecule/api-agent-transcript'
import { provider } from '@molecule/api-agent-transcript-claude-code'
setProvider(provider)
const session = readTranscript({
text: readFileSync('session.jsonl', 'utf8'),
fileName: 'session.jsonl',
})
// session.turns: [{ role: 'user', text: '…as typed…' }, { role: 'assistant', model: 'claude-…', text, files }]
provider
npm install @molecule/api-agent-transcript-claude-code @molecule/api-agent-transcript
looksLikeExportText(text)Whether a text looks like a Claude Code /export.
function looksLikeExportText(text: string): boolean
text — The file's text.Returns: True when it carries the export's header or both of its speaker markers.
looksLikeSessionJsonl(text)Whether a text looks like a Claude Code session log.
function looksLikeSessionJsonl(text: string): boolean
text — The file's text.Returns: True when the first parseable lines are Claude Code log records.
readExportText(text)Read a Claude Code /export text.
function readExportText(text: string): AgentSession
text — The export's text.Returns: The normalized session.
readSessionJsonl(text)Read a Claude Code session log.
function readSessionJsonl(text: string): AgentSession
text — The .jsonl text.Returns: The normalized session.
providerReads Claude Code sessions: the session log (.jsonl) and the /export text.
const provider: AgentTranscriptReader
Implements @molecule/api-agent-transcript interface.
Setup function to register this provider with the core interface:
import { setProvider } from '@molecule/api-agent-transcript'
import { provider } from '@molecule/api-agent-transcript-claude-code'
export function setupAgentTranscriptClaudeCode(): void {
setProvider(provider)
}
Peer dependencies:
@molecule/api-agent-transcript ^1.0.0@molecule/api-agent-transcript
Prefer the .jsonl when you have it. The /export text is a rendering:
markdown is already applied (a ## heading arrives as heading, **bold**
as bold), paragraphs are re-joined from terminal wrapping, and the model
is only the display name in the header (Haiku 4.5). Edits the terminal
showed collapsed ("Made 1 edit") carry no text, and a truncated preview
(… +N lines) is marked complete: false.
Dropped from user turns: slash-command echoes (<command-name> …), their
output, <system-reminder> text, tool results, and lines Claude Code marks
isMeta. A subagent's own messages (isSidechain) are not part of the
session.
Verified against Claude Code 2.1.281's own files; the older > / ⏺
markers are accepted too.