Your coding agents already leave a trail. Strata makes it readable.
Search, inspect, replay, and follow local sessions from Claude Code, Codex, Cursor, Gemini, Copilot, OpenCode, and more.
Local-only. Read-only. No telemetry.
Strata turns the private session logs already on your machine into one consistent CLI and TypeScript API. Find the conversation that fixed a bug. See what an agent in another terminal is doing. Compare tools, tokens, cost, and active time. Replay the work at reading pace.
Strata has no network code and never writes to an agent's files.
This is a real Claude Code session investigating a public bug report. Strata preserves the prompt, tool calls, results, and response as distinct events.
❯ can you check this issue, #35 "no sha256 object storage support"?
✻ thought for a moment
⏺ Bash gh issue view 35 --comments
↳ title: [BUG] no sha256 object storage support in git repos
The upstream issue has moved: git2 0.21 now exposes experimental SHA-256
support. Here is what changed, the current risk, and what I would ship...
No install required:
npx @stele_ai/strata agents list
npx @stele_ai/strata sessions list -n 10
npx @stele_ai/strata replay <session-id>Or install the strata command globally:
npm install -g @stele_ai/strataRequires Node.js 22 or newer.
# Discover what is on this machine
strata agents list
strata agents show claude
strata agents ps
# Find and inspect past work
strata sessions list -n 20
strata sessions find "connection pool"
strata sessions info <id>
strata sessions transcript <id> --tools
# Watch the work unfold
strata replay <id>
strata replay <id> --from 40 --to 80 --speed 2
strata watch <id>
# Check whether an agent changed its storage format
strata doctorSession IDs work from any directory. A unique prefix is enough, so copying the
first few characters from sessions list is usually all you need.
Every command supports --json for scripts and agent tooling.
The full-screen player is interactive:
| Key | Action |
|---|---|
space |
pause or resume |
enter |
finish the current passage immediately |
← / → |
previous or next user prompt |
[ / ] |
jump back or forward ten events |
0 to 9 |
jump to a percentage of the session |
j / k |
scroll |
q |
quit and keep the replay in terminal scrollback |
Use --no-tui to stream to stdout, --instant to skip animation, and --list
to print the numbered event index before choosing a range.
Strata normalizes each session into an ordered stream of beats:
- user prompts and assistant responses
- reasoning indicators
- tool calls and results
- injected context and lifecycle hooks
- delegate reports and model usage
It does not flatten everything to { role, text }. Tool arguments remain tool
arguments, context keeps its provenance, and timing stays attached to the event
that produced it. Transcripts, statistics, replay, search, and live watching all
build on the same stream.
The library has zero runtime dependencies. The CLI uses the same public API.
import {
computeStats,
defaultRegistry,
resolveSession,
toMarkdown,
} from "@stele_ai/strata";
const registry = defaultRegistry();
const { source, ref } = await resolveSession("a1b2c3d4", registry);
const session = await source.open(ref);
const stats = computeStats(session);
console.log({ models: [...stats.models], cost: stats.cost.usd });
console.log(toMarkdown(session, { includeTools: true, redact: true }));Strata currently reads:
- Claude Code
- Codex
- Cursor
- DeepSeek Harness
- Gemini CLI
- GitHub Copilot CLI
- Kimi
- OpenCode
- Pi
These tools own their storage formats and can change them without notice.
strata doctor reports format drift instead of silently presenting unreadable
history as an empty result.
Agent transcripts can contain source code, credentials, customer data, and anything else an agent was shown. Strata keeps that data on your machine.
Use --redact when preparing a transcript or replay for sharing:
strata sessions transcript <id> --redact
strata replay <id> --redactRedaction catches strings that look like common credentials. It cannot recognize every secret, private name, internal hostname, or sensitive sentence. Always review the exact output before publishing it.
A source only needs to detect an installation, list its sessions, and parse one session into beats. Renderers and statistics work automatically.
import type { Source } from "@stele_ai/strata";
export const mySource: Source = {
id: "myagent",
label: "My Agent",
async detect() { /* cheap installation check */ },
async list(options) { /* cheap metadata listing */ },
async open(ref) { /* full session parse */ },
};See src/source.ts for the interface and
CONTRIBUTING.md for source requirements.
Version 0.1 is an early, complete release. The data model, CLI, replay, live watching, diagnostics, and nine built-in sources are usable today. Source formats and public APIs may evolve before 1.0.