Part of the Brigade fleet from Escoffier Labs
Export local agent session logs to portable adapter JSONL.
StationTrail is a local scanner and exporter for agent session logs. It reads sessions from Codex, Claude Code, OpenClaw, OpenCode, and Hermes, normalizes them into portable miseledger.adapter.v1 records, and writes JSONL to a file or stdout. It makes no network calls.
Chef de partie: every station keeps its log.
Read · local sessions
- Discovers default roots or a path you pass
- Walks supported JSONL and JSON session files
- Parses Codex, Claude, OpenClaw, Hermes, and OpenCode shapes
- Keeps raw references with path, hash, and ordinal
- Reports counts and manifests without printing item text
Write · adapter JSONL
- Normalizes messages, tools, artifacts, actors, and relations
- Applies --since, --limit, and requested redactions
- Emits one miseledger.adapter.v1 object per line
- Writes to a file or stdout, never the network
- Pipe into MiseLedger, which owns archive, search, and bundles
StationTrail is the source-specific adapter layer. It discovers, normalizes, redacts, and exports, then stops. Storage, search, relations, and evidence bundles happen downstream. See the evidence pipeline below for how the pieces fit together.
StationTrail is one of three tools that share a single contract. Two scanners export to the same miseledger.adapter.v1 JSONL format, and one archive ingests both. StationTrail covers agent-session harnesses, SourceHarvest covers everything else local, and MiseLedger stores and analyzes what they emit. Each tool owns its own station.
StationTrail
Exports harness session logs from Codex, Claude Code, OpenClaw, OpenCode, and Hermes to miseledger.adapter.v1 JSONL. Reads local files, normalizes them into portable adapter records, redacts per run, and writes to a file or stdout. This is the site you are on.
SourceHarvest
Exports outside sources to the same adapter format: notes, chat archives, crawler output, issue exports, and git history. It is the sibling scanner for non-harness local records, reading files and exports without crawling live services.
Local only, no network
StationTrail reads files on disk and writes adapter JSONL to a file or stdout. It makes no network calls. Nothing leaves the machine unless you pipe it somewhere yourself.
Portable adapter records
Every line is one miseledger.adapter.v1 JSON object: source kind, collection, item, and optional actor, artifacts, links, and relations. One contract, five sources.
Scanner, not an archive
StationTrail discovers, normalizes, and exports. Storage, indexing, dedupe, search, relations, and evidence bundles stay in MiseLedger. Each tool keeps its own station.
Per-export redaction
Request redaction at export time: paths, secrets, emails, urls, hostnames, the safe profile, or all. Redaction is opt-in per run, never silently applied.
Diagnostics that stay quiet
discover, doctor, inspect, and --dry-run report file manifests, structural keys, counts, and warnings. They never print generated transcript text.
Scriptable and pipeable
Add --json for machine-readable summaries, --out - to stream to stdout, and --since and --limit to bound a scan. Pipe straight into MiseLedger import.
| Source | Default input | Notes |
|---|---|---|
| Codex | ~/.codex/sessions | Session JSONL. |
| Claude Code | ~/.claude/projects | Project JSONL. |
| OpenClaw | ~/.openclaw/agents | Agent sessions and trajectories. |
| Hermes | ~/.hermes/sessions | session_*.json snapshots and trajectory JSONL. state.db is observed, not parsed. |
| OpenCode | Explicit file, directory, or session ID | Sanitized export JSON from opencode export <session-id> --sanitize. |
stationtrail all scans Codex, Claude, OpenClaw, and Hermes default roots. OpenCode is explicit-only, because its sanitized export input is user-selected.
| Command | What it does |
|---|---|
| stationtrail discover | Report candidate source roots and JSONL counts. Structure only, no transcript text. |
| stationtrail doctor | Report source readiness and warnings. Add --live to dry-run ready roots for counts and manifests. |
| stationtrail inspect <source> <path> | Inspect file manifests, structural keys, and record counts without exporting item text. |
| stationtrail all | Scan Codex, Claude, OpenClaw, and Hermes default roots and export one adapter stream. |
| stationtrail codex [path] | Export Codex session JSONL from ~/.codex/sessions. |
| stationtrail claude [path] | Export Claude project JSONL from ~/.claude/projects. |
| stationtrail openclaw [path] | Export OpenClaw agent sessions and trajectories from ~/.openclaw/agents. |
| stationtrail hermes [path] | Export Hermes session snapshots and trajectory JSONL from ~/.hermes/sessions. |
| stationtrail opencode <export-json> | Export a sanitized OpenCode export produced by opencode export <session-id> --sanitize. |
| stationtrail version | Print the StationTrail version. |
Export every default source, redacted, and pipe it into MiseLedger:
StationTrail treats exported session text as untrusted evidence, not instructions. The diagnostic commands are built to stay quiet. discover reports candidate roots and JSONL counts only. doctor reports source readiness and warnings only. doctor --live runs dry-run scanners and reports counts, file manifests, and warnings only. None of them print transcript content.
inspect and --dry-run --json report file manifests, structural keys, record counts, and warnings without printing generated item text. Export commands preserve raw references with path, hash, and ordinal while keeping searchable item text compact. Redaction is requested per export, so you decide what each run keeps or strips.
StationTrail is one station in the Brigade fleet from Escoffier Labs. MiseLedger stores and analyzes what StationTrail exports. The fleet site and the cookbook cover the rest.