{"slug": "i-built-a-tiny-cli-to-see-how-my-coding-agent-actually-worked", "title": "I built a tiny CLI to see how my coding agent actually worked", "summary": "A developer built Agent Pigeon, an open-source CLI that reads local Claude Code and Codex session history after a run and condenses it into a short \"Flight\" report of edits, verification checks, and fail-to-pass transitions. The tool runs read-only against completed sessions via `npx agent-pigeon flight`, and a `compare` subcommand lines up observed facts from two sessions without model scores or a declared winner. The author notes that Codex can perform reads inside broader exec commands, so the parser reports `READ: N/A` when it cannot reliably attribute them, and that live-warning experiments were dropped after false positives from incomplete event history.", "body_md": "Agent Pigeon reads local Claude Code and Codex session history after a run and turns it into a short Flight report. I built it because a final answer rarely shows the path that led there: the edits, checks, and retries in between.\n\n```\nnpx agent-pigeon flight\n```\n\nI wanted one command that could turn a long coding-agent session into something I could scan in a few seconds.\n\nThe GIF uses sanitized synthetic history. The header shows the provider and session span. EDIT counts observed edits; VERIFY includes checks the parser recognizes; FAIL→PASS marks a recognized failure followed by a later pass. The final line shows the latest recognized verification state.\n\nThat screen is enough to see where activity went and whether a recognized check eventually passed. I open the original session when I need more context.\n\nClaude Code exposes `Read` tool calls directly. Codex can perform reads inside broader `exec` commands, so its history may not show individual reads in a form Agent Pigeon can attribute. When that happens, `READ: N/A` means the parser cannot count reliably. `READ: 0` would imply it saw the full set and found none.\n\nI experimented with live warnings and intervention. While dogfooding it, I got false positives and noisy warnings because the event history was incomplete. I couldn't always tell whether a check had been skipped or the log had failed to capture it, so I stopped treating gaps as a reason to interrupt. The public CLI reads completed sessions in read-only mode; when the signal is incomplete, observation can be more useful than interruption.\n\n```\nagent-pigeon compare <session-a> <session-b>\n```\n\nCompare lines up observed facts from two sessions so I can scan them side by side. It has no model scores or declared winner. Provider logs can expose different details, so matching labels may still come from uneven evidence.\n\n```\nnpx agent-pigeon@latest flight\n```\n\nThe source is on [GitHub](https://github.com/hyukvoid/agent-pigeon). If you try it, tell me what it misses or misreads, especially around edge cases or provider formats.\n\nDisclosure: AI tools helped draft and edit this post and assisted with parts of the launch workflow. I reviewed the technical claims against the source code and the published v0.1.2 CLI.", "url": "https://wpnews.pro/news/i-built-a-tiny-cli-to-see-how-my-coding-agent-actually-worked", "canonical_source": "https://dev.to/jay_stride/i-built-a-tiny-cli-to-see-how-my-coding-agent-actually-worked-5co8", "published_at": "2026-09-26 01:44:11+00:00", "updated_at": "2026-09-26 02:00:02.049386+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-tools", "mlops"], "entities": ["Agent Pigeon", "Claude Code", "Codex", "GitHub"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/i-built-a-tiny-cli-to-see-how-my-coding-agent-actually-worked", "markdown": "https://wpnews.pro/news/i-built-a-tiny-cli-to-see-how-my-coding-agent-actually-worked.md", "text": "https://wpnews.pro/news/i-built-a-tiny-cli-to-see-how-my-coding-agent-actually-worked.txt", "jsonld": "https://wpnews.pro/news/i-built-a-tiny-cli-to-see-how-my-coding-agent-actually-worked.jsonld"}}