GitHub - B33BMO/vaportrail: Your agents leave trails. vaportrail reads them — a local-first flight recorder for AI coding agent sessions. · GitHub
/" data-turbo-transient="true" />
Skip to content
Search or jump to...
Search code, repositories, users, issues, pull requests...
-->
Search
Clear
Search syntax tips
Provide feedback
--><br>We read every piece of feedback, and take your input very seriously.
Include my email address so I can be contacted
Cancel
Submit feedback
Saved searches
Use saved searches to filter your results more quickly
-->
Name
Query
To see all available qualifiers, see our documentation.
Cancel
Create saved search
Sign in
/;ref_cta:Sign up;ref_loc:header logged out"}"<br>Sign up
Appearance settings
Resetting focus
You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
{{ message }}
B33BMO
vaportrail
Public
Notifications<br>You must be signed in to change notification settings
Fork
Star
master
BranchesTags
Go to file
CodeOpen more actions menu
Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit
History<br>5 Commits<br>5 Commits
demo
demo
src
src
.gitignore
.gitignore
LICENSE
LICENSE
README.md
README.md
package-lock.json
package-lock.json
package.json
package.json
tsconfig.json
tsconfig.json
View all files
Repository files navigation
vaportrail
Your agents leave trails. vaportrail reads them.
A local-first flight recorder for AI coding agent sessions. Every Claude Code , Codex CLI , and opencode session leaves a detailed transcript on disk — what you asked, what the agent did, every file it touched, every command it ran, every token it burned. vaportrail reads all three formats and turns that pile of JSON into one searchable, replayable history.
Zero runtime dependencies. Nothing leaves your machine. One command to try it:
npx vaportrail
Why
AI agents now do a meaningful share of the work in your repos, but their history is write-only: gigabytes of transcripts nobody can read. vaportrail answers the questions that data was always able to answer:
What did the agent actually do last Tuesday? → vaportrail show
Where did we solve this exact problem before? → vaportrail search "jwt refresh"
Which files do agents churn on the most? What does a month of usage look like? → vaportrail stats
Commands
vaportrail / vaportrail list
Recent sessions across every project — id, age, project, AI-generated title, prompt count, tool calls, output tokens, model.
vaportrail show<br>" href="#vaportrail-show-id">
Replay a session as a timeline: your prompts, the agent's narration, and every tool call with what it operated on.
vaportrail · session cca29f96…<br>title Build SSH over WebSocket with agent enrollment<br>project ~/wssh (main)<br>when 2026-06-02 22:14 → 2026-06-03 00:04 (1h 49m)<br>activity 16 prompts · 183 turns · 168 tool calls · opus-4-8
22:14:30 ❯ So.. I have a cool ass idea. So... SSH.. but over websocket…<br>22:14:47 ⚒ Bash ls -la /Users/b/wssh && command -v go node python3…<br>22:15:40 ✦ Hell yes — this is a great idea, and it's very buildable…<br>22:17:03 ⚒ Write /Users/b/wssh/go.mod<br>22:17:15 ⚒ Write /Users/b/wssh/main.go<br>...
Use --full for untruncated text.
vaportrail search<br>" href="#vaportrail-search-query">
Full-text search across your entire agent history — prompts and responses, with --regex for patterns and --tools to also match commands and file paths.
vaportrail stats
The big picture: sessions, prompts, turns, token totals (with cache split), a 30-day activity sparkline, a tool-usage leaderboard, per-model token tables, and the files your agents edit the most.
Options
flag<br>meaning
-s, --source<br>agents to read: claude, codex, opencode (comma list; default all)
-p, --project<br>only sessions whose project path contains (. = current dir)
-n, --limit<br>max rows / matches
-a, --all<br>no limit
-j, --json<br>machine-readable output for every command
-d, --dir<br>transcript root override (combine with -s for non-claude layouts)
--agents<br>include subagent transcripts
How it works
vaportrail reads each agent's native on-disk format — no hooks, no wrappers, no telemetry:
agent<br>where it reads from
Claude Code<br>~/.claude/projects/**/*.jsonl (honors CLAUDE_CONFIG_DIR)
Codex CLI<br>~/.codex/sessions/**/rollout-*.jsonl (honors CODEX_HOME)
opencode<br>~/.local/share/opencode/storage/ (honors XDG_DATA_HOME)
Everything is normalized into one session model: token usage is deduplicated where formats repeat it across entries, subagent work is separated from your own prompts, tool names are normalized across agents (shell_command and bash both count as Bash), and bookkeeping noise is filtered out. ~100 MB of history parses in about a second. Read-only: vaportrail never modifies a transcript.
Roadmap
Codex CLI and opencode transcript formats
More agents: Gemini...