I built a tiny CLI to see how my coding agent actually worked 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. 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. npx agent-pigeon flight I wanted one command that could turn a long coding-agent session into something I could scan in a few seconds. The 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. That 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. Claude 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. I 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. agent-pigeon compare