{"_id":"@camtrik/agent-trail","_rev":"7-be6900dbbbb867fb09816682a8d060bc","name":"@camtrik/agent-trail","dist-tags":{"latest":"0.1.7"},"versions":{"0.1.1":{"name":"@camtrik/agent-trail","version":"0.1.1","keywords":["claude-code","openclaw","codex","ai-agents","tracing","dashboard","observability"],"author":{"name":"camtrik"},"license":"MIT","_id":"@camtrik/agent-trail@0.1.1","maintainers":[{"name":"camtrik","email":"camtrikcsky@gmail.com"}],"homepage":"https://github.com/camtrik/agent-trail#readme","bugs":{"url":"https://github.com/camtrik/agent-trail/issues"},"bin":{"agent-trail":"bin/agent-trail.js","agents-tracing":"bin/agent-trail.js"},"dist":{"shasum":"8bc8d2cf12d489426a7d367cd52f6d920137f83e","tarball":"https://registry.npmjs.org/@camtrik/agent-trail/-/agent-trail-0.1.1.tgz","fileCount":246,"integrity":"sha512-hSEV3ka9SNcJEFa2vgMQHHcEIYD5SLZ/Yh++gN0jfNj9fkM6Qtkakl/26DSNglxNq+iZCYFZsQeKeDbdkYEN1A==","signatures":[{"sig":"MEUCIQCdbDQbRA7IM6uoPtgDVJHMrqqMH41vedp2RmC2J6YfNAIgO8QD0CiueCwEXStR1OIlz7WXsB04C3uiwnNBdZQzOxE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@camtrik%2fagent-trail@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4412898},"engines":{"node":">=22.0.0"},"gitHead":"6faecdfd14c9b2faa0e7c9d3f14202e4b9621c98","_npmUser":{"name":"camtrik","email":"camtrikcsky@gmail.com"},"repository":{"url":"git+https://github.com/camtrik/agent-trail.git","type":"git"},"_npmVersion":"11.12.1","description":"Local dashboard for tracking and replaying Claude Code, OpenClaw, and Codex agent sessions.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ws":"^8.20.0","clsx":"^2.1.1","hono":"^4.6.16","next":"16.2.4","react":"19.2.4","zustand":"^5.0.12","chokidar":"^5.0.0","radix-ui":"^1.4.3","react-dom":"19.2.4","remark-gfm":"^4.0.1","lucide-react":"^1.14.0","better-sqlite3":"^12.10.0","react-markdown":"^10.1.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","@hono/node-server":"^1.14.1","@tanstack/react-virtual":"^3.13.24","class-variance-authority":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/agent-trail_0.1.1_1779416614044_0.7145014281386202","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@camtrik/agent-trail","version":"0.1.2","keywords":["claude-code","openclaw","codex","ai-agents","tracing","dashboard","observability"],"author":{"name":"camtrik"},"license":"MIT","_id":"@camtrik/agent-trail@0.1.2","maintainers":[{"name":"camtrik","email":"camtrikcsky@gmail.com"}],"homepage":"https://github.com/camtrik/agent-trail#readme","bugs":{"url":"https://github.com/camtrik/agent-trail/issues"},"bin":{"agent-trail":"bin/agent-trail.js","agents-tracing":"bin/agent-trail.js"},"dist":{"shasum":"17d51e4a445cd0395c76cee10d70c3f2a970afd5","tarball":"https://registry.npmjs.org/@camtrik/agent-trail/-/agent-trail-0.1.2.tgz","fileCount":246,"integrity":"sha512-7rJOdethlYWQvXr43kfBPhJz6cLfAqH8BqwA5yJLr496ERxjtQ3aQdXhf+e4r750ty+ugOxmB/o2ILDBi08wBg==","signatures":[{"sig":"MEUCIA6wV4gkaFq8wA+F9Iambnb1bvavmHAFw59KWBMiygYnAiEA0R7brIFdJu4fhT3XmalwHXKZRR06j0IGlxepwsvwxxw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@camtrik%2fagent-trail@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4431741},"engines":{"node":">=22.0.0"},"gitHead":"1606ff33980973bcd04a0d4401a3d360b4014c42","_npmUser":{"name":"camtrik","email":"camtrikcsky@gmail.com"},"repository":{"url":"git+https://github.com/camtrik/agent-trail.git","type":"git"},"_npmVersion":"11.12.1","description":"Local dashboard for tracking and replaying Claude Code, OpenClaw, and Codex agent sessions.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ws":"^8.20.0","clsx":"^2.1.1","hono":"^4.6.16","next":"16.2.4","react":"19.2.4","zustand":"^5.0.12","chokidar":"^5.0.0","radix-ui":"^1.4.3","react-dom":"19.2.4","remark-gfm":"^4.0.1","lucide-react":"^1.14.0","better-sqlite3":"^12.10.0","react-markdown":"^10.1.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","@hono/node-server":"^1.14.1","@tanstack/react-virtual":"^3.13.24","class-variance-authority":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/agent-trail_0.1.2_1779455444931_0.5549216883885817","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@camtrik/agent-trail","version":"0.1.3","keywords":["claude-code","openclaw","codex","ai-agents","tracing","dashboard","observability"],"author":{"name":"camtrik"},"license":"MIT","_id":"@camtrik/agent-trail@0.1.3","maintainers":[{"name":"camtrik","email":"camtrikcsky@gmail.com"}],"homepage":"https://github.com/camtrik/agent-trail#readme","bugs":{"url":"https://github.com/camtrik/agent-trail/issues"},"bin":{"agent-trail":"bin/agent-trail.js","agents-tracing":"bin/agent-trail.js"},"dist":{"shasum":"2f9347e1f2bd2af0a884828ef093000a79eaf66e","tarball":"https://registry.npmjs.org/@camtrik/agent-trail/-/agent-trail-0.1.3.tgz","fileCount":246,"integrity":"sha512-g3XvIAYH9k8FSyF5F5H+1JlDaW98rr3CGm6StnLvfLUxQImASsohnxLGgWvel/FQ53QuzpaBdnNOk2iMt/VjoA==","signatures":[{"sig":"MEQCIB9+S6OSLrtMaHkb0+GgqmgSSSa2R3zJSMha++Q3SY1MAiB6Q+nzy/s1joCen82BIARASyDYZi/Z5niKX64Dg9IrOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@camtrik%2fagent-trail@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4433489},"engines":{"node":">=22.0.0"},"gitHead":"83ae4c6197d8aa34101c543655aab279adc2e75f","_npmUser":{"name":"camtrik","email":"camtrikcsky@gmail.com"},"repository":{"url":"git+https://github.com/camtrik/agent-trail.git","type":"git"},"_npmVersion":"11.12.1","description":"Local dashboard for tracking and replaying Claude Code, OpenClaw, and Codex agent sessions.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ws":"^8.20.0","clsx":"^2.1.1","hono":"^4.6.16","next":"16.2.4","react":"19.2.4","zustand":"^5.0.12","chokidar":"^5.0.0","radix-ui":"^1.4.3","react-dom":"19.2.4","remark-gfm":"^4.0.1","lucide-react":"^1.14.0","better-sqlite3":"^12.10.0","react-markdown":"^10.1.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","@hono/node-server":"^1.14.1","@tanstack/react-virtual":"^3.13.24","class-variance-authority":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/agent-trail_0.1.3_1779460814256_0.11835527695485393","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@camtrik/agent-trail","version":"0.1.4","keywords":["ai-agents","coding-agents","claude-code","codex","opencode","openclaw","qoder","llm","llmops","dashboard","observability","agent-observability","token-usage","cost-tracking","session-replay","developer-tools","tracing"],"author":{"name":"camtrik"},"license":"MIT","_id":"@camtrik/agent-trail@0.1.4","maintainers":[{"name":"camtrik","email":"camtrikcsky@gmail.com"}],"homepage":"https://github.com/camtrik/agent-trail#readme","bugs":{"url":"https://github.com/camtrik/agent-trail/issues"},"bin":{"agent-trail":"bin/agent-trail.js","agents-tracing":"bin/agent-trail.js"},"dist":{"shasum":"1f5f8d07961ef56bfa71b0441aa526e4b15b1e6c","tarball":"https://registry.npmjs.org/@camtrik/agent-trail/-/agent-trail-0.1.4.tgz","fileCount":246,"integrity":"sha512-OkU+uojBKF4Ukgb1rhzTg8VW+cQ8BgTgyBi7ih0oOo1YQ+EpUCkwsoWG89oDo+A8Rw0A/fpT7rzYvnEkWvdaaQ==","signatures":[{"sig":"MEUCIQCjmePZQ7dUNkic4QwfmggoL2Z1bX4MT31xH4T3zYsiTwIgRGtrCSybkL5mAmz3XuNbgNqDPdGxS9Rv/I6+VpRUsYs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@camtrik%2fagent-trail@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4433588},"engines":{"node":">=22.0.0"},"gitHead":"992eb664a292fd1e70d818048af1ff4704799386","_npmUser":{"name":"camtrik","email":"camtrikcsky@gmail.com"},"repository":{"url":"git+https://github.com/camtrik/agent-trail.git","type":"git"},"_npmVersion":"11.12.1","description":"Local AI coding agent observability dashboard for Claude Code, Codex, OpenCode, OpenClaw, and Qoder. Track token usage, estimated cost, tool calls, subagent trees, and replay full sessions from local JSONL/SQLite files — no cloud, no telemetry.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ws":"^8.20.0","clsx":"^2.1.1","hono":"^4.6.16","next":"16.2.4","react":"19.2.4","zustand":"^5.0.12","chokidar":"^5.0.0","radix-ui":"^1.4.3","react-dom":"19.2.4","remark-gfm":"^4.0.1","lucide-react":"^1.14.0","better-sqlite3":"^12.10.0","react-markdown":"^10.1.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","@hono/node-server":"^1.14.1","@tanstack/react-virtual":"^3.13.24","class-variance-authority":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/agent-trail_0.1.4_1779599259668_0.4751768348575207","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@camtrik/agent-trail","version":"0.1.5","keywords":["ai-agents","coding-agents","claude-code","codex","opencode","openclaw","qoder","llm","llmops","dashboard","observability","agent-observability","token-usage","cost-tracking","session-replay","developer-tools","tracing"],"author":{"name":"camtrik"},"license":"MIT","_id":"@camtrik/agent-trail@0.1.5","maintainers":[{"name":"camtrik","email":"camtrikcsky@gmail.com"}],"homepage":"https://github.com/camtrik/agent-trail#readme","bugs":{"url":"https://github.com/camtrik/agent-trail/issues"},"bin":{"agent-trail":"bin/agent-trail.js","agents-tracing":"bin/agent-trail.js"},"dist":{"shasum":"815bd975f77279fc39cd19fd34f3e83ea9e678ab","tarball":"https://registry.npmjs.org/@camtrik/agent-trail/-/agent-trail-0.1.5.tgz","fileCount":251,"integrity":"sha512-Sd0GgdOz1dNNZaFkdCKeIdMGhCT9BB1eOMfv9PepQESGPsVT35wzvCuvJYC+x4EQj8+GFR2UKEG7d4nOTDpGFw==","signatures":[{"sig":"MEYCIQDKuHBmhppnH8mt7ObrOH5X5vw4UiK69bM3+qKkqVPxpAIhAMwS3UGyH4dTQXbODBTy3xl8ejnzaKpiGjv8NwNlyJ40","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@camtrik%2fagent-trail@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4508354},"engines":{"node":">=22.0.0"},"gitHead":"e526f8724ede42dc19c17b5db6a854a8580b3089","_npmUser":{"name":"camtrik","email":"camtrikcsky@gmail.com"},"repository":{"url":"git+https://github.com/camtrik/agent-trail.git","type":"git"},"_npmVersion":"11.12.1","description":"Local AI coding agent observability dashboard for Claude Code, Codex, OpenCode, OpenClaw, and Qoder. Track token usage, estimated cost, tool calls, subagent trees, and replay full sessions from local JSONL/SQLite files — no cloud, no telemetry.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ws":"^8.20.0","clsx":"^2.1.1","hono":"^4.6.16","next":"16.2.4","react":"19.2.4","zustand":"^5.0.12","chokidar":"^5.0.0","radix-ui":"^1.4.3","react-dom":"19.2.4","remark-gfm":"^4.0.1","lucide-react":"^1.14.0","better-sqlite3":"^12.10.0","react-markdown":"^10.1.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","@hono/node-server":"^1.14.1","@tanstack/react-virtual":"^3.13.24","class-variance-authority":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/agent-trail_0.1.5_1779640342357_0.43920510328111684","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@camtrik/agent-trail","version":"0.1.6","keywords":["ai-agents","coding-agents","claude-code","codex","opencode","openclaw","qoder","llm","llmops","dashboard","observability","agent-observability","token-usage","cost-tracking","session-replay","developer-tools","tracing"],"author":{"name":"camtrik"},"license":"MIT","_id":"@camtrik/agent-trail@0.1.6","maintainers":[{"name":"camtrik","email":"camtrikcsky@gmail.com"}],"homepage":"https://github.com/camtrik/agent-trail#readme","bugs":{"url":"https://github.com/camtrik/agent-trail/issues"},"bin":{"agent-trail":"bin/agent-trail.js","agents-tracing":"bin/agent-trail.js"},"dist":{"shasum":"ff0f774e992ebd76ff38b18d1f9f91a5ffa382f1","tarball":"https://registry.npmjs.org/@camtrik/agent-trail/-/agent-trail-0.1.6.tgz","fileCount":251,"integrity":"sha512-1aKstr8T0eTfeRa/uJOH1qjfUqKs9vsrf7KkbS+Ma40WxZhbOkC5yA2rxzQ3BItE9wbbDeyqUDXloo0tZ3rCtw==","signatures":[{"sig":"MEYCIQCnZq+5RtzQKvjwfOwxjgyPCUlCPydKSECBx9YtefVmiwIhAJQRTXgLH0WC5C1SPntaakTqAxWJ+okgSrDDPflgkKuf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@camtrik%2fagent-trail@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4519169},"engines":{"node":">=22.0.0"},"gitHead":"89eb1b3ec08814b3f8de7a7fbb6e074c9dce440f","_npmUser":{"name":"camtrik","email":"camtrikcsky@gmail.com"},"repository":{"url":"git+https://github.com/camtrik/agent-trail.git","type":"git"},"_npmVersion":"11.12.1","description":"Local AI coding agent observability dashboard for Claude Code, Codex, OpenCode, OpenClaw, and Qoder. Track token usage, estimated cost, tool calls, subagent trees, and replay full sessions from local JSONL/SQLite files — no cloud, no telemetry.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ws":"^8.20.0","clsx":"^2.1.1","hono":"^4.6.16","next":"16.2.4","react":"19.2.4","zustand":"^5.0.12","chokidar":"^5.0.0","radix-ui":"^1.4.3","react-dom":"19.2.4","remark-gfm":"^4.0.1","lucide-react":"^1.14.0","better-sqlite3":"^12.10.0","react-markdown":"^10.1.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","@hono/node-server":"^1.14.1","@tanstack/react-virtual":"^3.13.24","class-variance-authority":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/agent-trail_0.1.6_1779682799152_0.21132621320855494","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@camtrik/agent-trail","version":"0.1.7","description":"Local AI coding agent observability dashboard for Claude Code, Codex, OpenCode, OpenClaw, and Qoder. Track token usage, estimated cost, tool calls, subagent trees, and replay full sessions from local JSONL/SQLite files — no cloud, no telemetry.","keywords":["ai-agents","coding-agents","claude-code","codex","opencode","openclaw","qoder","llm","llmops","dashboard","observability","agent-observability","token-usage","cost-tracking","session-replay","developer-tools","tracing"],"homepage":"https://github.com/camtrik/agent-trail#readme","bugs":{"url":"https://github.com/camtrik/agent-trail/issues"},"repository":{"type":"git","url":"git+https://github.com/camtrik/agent-trail.git"},"license":"MIT","author":{"name":"camtrik"},"bin":{"agent-trail":"bin/agent-trail.js","agents-tracing":"bin/agent-trail.js"},"engines":{"node":">=22.0.0"},"dependencies":{"@hono/node-server":"^1.14.1","@tanstack/react-virtual":"^3.13.24","better-sqlite3":"^12.10.0","chokidar":"^5.0.0","class-variance-authority":"^0.7.1","clsx":"^2.1.1","hono":"^4.6.16","lucide-react":"^1.14.0","next":"16.2.4","radix-ui":"^1.4.3","react":"19.2.4","react-dom":"19.2.4","react-markdown":"^10.1.0","remark-gfm":"^4.0.1","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","ws":"^8.20.0","zustand":"^5.0.12"},"publishConfig":{"access":"public"},"gitHead":"6e53f21f292955974ac21a082edb4ac216e2ad92","_id":"@camtrik/agent-trail@0.1.7","_nodeVersion":"24.17.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-2LGoGvG/w/G3UyRaFqzWVd0tksaescFuh1h/OgkZWYW6CmMZLIqTautPby8OGful2sgkICcQjEV13IbxoBnP9g==","shasum":"6094b1f7f1e434e8011d626d03c5605c78ba13d4","tarball":"https://registry.npmjs.org/@camtrik/agent-trail/-/agent-trail-0.1.7.tgz","fileCount":289,"unpackedSize":5691628,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@camtrik%2fagent-trail@0.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC9ldIATUAgJv3SFI2RtFK/RLQAltbsio74RypYseeCdQIhAMNaOonsYLHQ3EuKI4+P77ds1P8KuMDb0lXjzyxYYWLx"}]},"_npmUser":{"name":"camtrik","email":"camtrikcsky@gmail.com"},"directories":{},"maintainers":[{"name":"camtrik","email":"camtrikcsky@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/agent-trail_0.1.7_1782320470102_0.5220836925823664"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-22T02:23:33.905Z","modified":"2026-06-24T17:01:10.654Z","0.1.1":"2026-05-22T02:23:34.275Z","0.1.2":"2026-05-22T13:10:45.241Z","0.1.3":"2026-05-22T14:40:14.465Z","0.1.4":"2026-05-24T05:07:39.893Z","0.1.5":"2026-05-24T16:32:22.569Z","0.1.6":"2026-05-25T04:19:59.333Z","0.1.7":"2026-06-24T17:01:10.333Z"},"bugs":{"url":"https://github.com/camtrik/agent-trail/issues"},"author":{"name":"camtrik"},"license":"MIT","homepage":"https://github.com/camtrik/agent-trail#readme","keywords":["ai-agents","coding-agents","claude-code","codex","opencode","openclaw","qoder","llm","llmops","dashboard","observability","agent-observability","token-usage","cost-tracking","session-replay","developer-tools","tracing"],"repository":{"type":"git","url":"git+https://github.com/camtrik/agent-trail.git"},"description":"Local AI coding agent observability dashboard for Claude Code, Codex, OpenCode, OpenClaw, and Qoder. Track token usage, estimated cost, tool calls, subagent trees, and replay full sessions from local JSONL/SQLite files — no cloud, no telemetry.","maintainers":[{"name":"camtrik","email":"camtrikcsky@gmail.com"}],"readme":"<div align=\"center\">\n\n# Agent Trail\n\n**English** · [简体中文](README.zh-CN.md) · [日本語](README.ja-JP.md)\n\n**A local AI coding agent observability dashboard for Claude Code, Codex, OpenCode, OpenClaw, and Qoder.**\n\nTrack token usage, estimated cost, tool calls, subagent trees, and replay full coding-agent sessions from local JSONL / SQLite files.\n\n🏠 [camtrik.github.io/agent-trail](https://camtrik.github.io/agent-trail/)\n\n[![npm version](https://img.shields.io/npm/v/%40camtrik%2Fagent-trail?style=for-the-badge&logo=npm&logoColor=white&color=CB3837)](https://www.npmjs.com/package/@camtrik/agent-trail)\n[![GitHub stars](https://img.shields.io/github/stars/camtrik/agent-trail?style=for-the-badge&logo=github&color=181717)](https://github.com/camtrik/agent-trail)\n[![License](https://img.shields.io/badge/license-MIT-blue?style=for-the-badge)](LICENSE)\n\n![Overview dashboard](image/README/1779286882349.png)\n\n![Session replay](image/README/1779290188740.png)\n\n</div>\n\n---\n\n## What it does\n\n### Usage overview across all your agents\n\nA unified dashboard aggregates token consumption and estimated cost across Claude Code, OpenClaw, Codex, OpenCode, and Qoder — broken down by day, session, project, and model. At a glance you can see:\n\n- Total tokens and estimated USD cost for any time window (today / week / all)\n- Per-project and per-model breakdowns with trends over time\n- Which sessions consumed the most tokens and where your budget is going\n- Live activity feed as new sessions are written to disk\n\nEverything is computed locally from the JSONL files your agents already produce.\n\n### Full session replay with tool and subagent detail\n\nOpen any session and step through every turn exactly as it happened. The replay view goes beyond raw text — it surfaces the internal structure of each assistant turn:\n\n- **Tool calls**: expand any `Bash`, `Read`, `Edit`, `Write`, or custom tool invocation to see the exact input arguments and the full output the model received\n- **Subagent spawns**: when Claude Code or OpenClaw launches a sub-agent, the dashboard renders the nested agent tree so you can trace which subtask was delegated, what instructions it received, and what it returned\n- **Injected context and system events**: surface hidden context blocks, permission prompts, and synthetic messages that normally live between turns but shape how the model behaves\n- **Token accounting per turn**: see input, output, cache-read, cache-write, and reasoning token counts at the turn level, not just the session level\n\n### Let your coding agent search past sessions\n\nAgent Trail ships a bundled agent skill, **`local-session-search`**, that teaches an AI coding agent (Claude Code, Codex, etc.) how to find your historical sessions through the local ingest/BFF API — without you knowing the session ID up front.\n\n- Ask your agent something like *\"find the session where I debugged the WebSocket reconnection bug.\"*\n- The skill drives a global message-body search (`GET /api/v1/sessions/search`) to surface candidate sessions, then drills down into session detail / turns / messages to answer.\n- It returns enough metadata — `source`, `sessionId`, title, project, `updatedAt`, and a matching snippet — for the agent to locate and open the right session.\n\nThe skill lives at [`.agents/skills/local-session-search/SKILL.md`](.agents/skills/local-session-search/SKILL.md).\n\n---\n\n## Install\n\n### Option 1 — npm (recommended, any Node.js 22+)\n\n```bash\nnpm install -g @camtrik/agent-trail\nagent-trail\n```\n\nUpdate an existing global install:\n\n```bash\nnpm update -g @camtrik/agent-trail\n# Or force the latest published version:\nnpm install -g @camtrik/agent-trail@latest\n```\n\nWorks across Node 22, 24, and newer — `npm install` resolves native modules (better-sqlite3) for your local ABI. First install takes ~30s while deps are fetched.\n\nRuntime logs are quiet by default. For verbose diagnostics:\n\n```bash\nAGENT_TRAIL_LOG_LEVEL=debug agent-trail\n```\n\n### Option 2 — Docker local build\n\n```bash\ngit clone https://github.com/camtrik/agent-trail.git\ncd agent-trail\ndocker compose up --build\n```\n\nThe default Compose file builds the app locally with Node 24 inside Docker, so your host machine does not need Node.js installed.\n\nOpen [http://localhost:3030](http://localhost:3030).\n\n### Option 3 — Docker published image\n\n```bash\ndocker compose -f docker-compose.image.yml up -d\n```\n\nOr run the published image directly:\n\n```bash\ndocker run --rm -p 127.0.0.1:3030:3030 \\\n  -v \"$HOME/.claude/projects:/agents/claude:ro\" \\\n  -e CLAUDE_PROJECTS_DIR=/agents/claude \\\n  ghcr.io/camtrik/agent-trail:latest\n```\n\nOpen [http://localhost:3030](http://localhost:3030). Mount additional agent directories with `-v` and the matching env var (`OPENCLAW_DIR`, `CODEX_SESSIONS_DIR`, `OPENCODE_DB_PATH`).\n\n### Option 4 — from source\n\n```bash\npnpm install\npnpm dev       # starts Next.js (3000) + ingest service (8078)\n```\n\nSee [`docs/GETTING-STARTED.md`](docs/GETTING-STARTED.md) for full setup and environment variable reference.\n\n---\n\n## Uninstall\n\n### npm global install\n\n```bash\nnpm uninstall -g @camtrik/agent-trail\n```\n\nOptional cleanup for the local index/config created by the packaged app:\n\n```bash\nrm -rf ~/.agent-trail\n```\n\nThis does not delete your original Claude Code, OpenClaw, Codex, OpenCode, or Qoder session files.\n\n### Docker Compose\n\nStop and remove the containers:\n\n```bash\ndocker compose down\n# or, if you used the published-image compose file:\ndocker compose -f docker-compose.image.yml down\n```\n\nOptional cleanup for the Docker volume that stores the dashboard's SQLite index:\n\n```bash\ndocker compose down -v\n# or:\ndocker compose -f docker-compose.image.yml down -v\n```\n\nOptional image cleanup:\n\n```bash\ndocker image rm agent-trail:local\ndocker image rm ghcr.io/camtrik/agent-trail:latest\n```\n\n---\n\n## Supported AI coding agents\n\n| Agent                 | Source files                              | Notes                                     |\n| --------------------- | ----------------------------------------- | ----------------------------------------- |\n| **Claude Code** | `~/.claude/projects/**/*.jsonl`         | Full tool-call and subagent replay        |\n| **OpenClaw**    | `~/.openclaw/agents/*/sessions/*.jsonl` | Gateway live view + file ingest           |\n| **Codex**       | `~/.codex/sessions/**/*.jsonl`          | Parent-child session tree                 |\n| **OpenCode**    | `~/.local/share/opencode/opencode.db`   | SQLite source                             |\n| **Qoder**       | local cache DB                            | Token counts (cost excluded from rollups) |\n\n---\n\n## Use cases\n\nAgent Trail is useful if you are:\n\n- Inspecting **Claude Code** tool calls, subagent trees, and injected context\n- Replaying **Codex**, **OpenCode**, **OpenClaw**, or **Qoder** coding sessions turn by turn\n- Tracking LLM **token usage and estimated cost** across multiple agents locally\n- Analyzing which sessions or projects consumed the most tokens\n- Debugging expensive or failed AI coding agent runs\n---\n\n## Privacy\n\nThis is a **local-only** tool. No data leaves your machine.\n\n- JSONL files are parsed and indexed into a local SQLite database (`data/ingest.db`).\n- The dashboard is read-only — it replays recorded tool calls, never re-executes them.\n---\n\n\n","readmeFilename":"README.md"}