What your coding agent did last night, with receipts.
nightreel reads the session logs an agent leaves behind and renders a morning debrief and a 45-second narrated reel. Every number on screen traces to a log event. It runs on your machine, offline.
$ nightreel reel --since 10h --project ~/code/myproject How to install and run it, including what it printed on this machine.
The numbers, and where they come from
Night of 2026-09-30, 22:05 to 04:53. 3 sessions, 175 events in the logs.
Hardest moment: over 32 minutes, then passed.
Claims in the final messages:
Written at 04:53: debrief.html, 16.9 KB and reel.mp4, 1.9 MB.
Each number above is a button: press one to lay its log events on the night.
Claims are checked, not repeated
When an agent ends with “all tests pass”, nightreel looks for a test, lint or build command that ran after the last edit and reports what happened. In the demo night the second session says tests pass; the last test run after its final edit failed.
| Session | Final message says | Receipt |
|---|---|---|
| a3f1c2d4 | “Done.” | ✓ ruff passed 23:15 |
| a3f1c2d4 | “The `forecast` command is in place with `--days` and `--json`; all 6 tests pass and ruff is clean.” | ✓ ruff passed 23:15 |
| b7e2d3c4 | “Done — all tests pass and the cache plus `--units` flag are committed as d41f0b2.” | ✗ pytest failed 02:12 |
| c9d4e5f6 | “The docs are complete and ready to merge: README, CHANGELOG and improved help text are committed as e8a7c33.” | – no run after the edit at 04:45 |
Run it on your logs
From a checkout of the repository, in cli/nightreel. Python 3.11 or newer and
ffmpeg are the only requirements; without a text-to-speech engine the reel is rendered
captions-only.
python3 -m venv .venv && . .venv/bin/activate && pip install -e .
nightreel demo # the bundled night → out/demo/
nightreel reel --since 10h --project ~/code/myproject
With uv: uv run nightreel demo. The repository is private for now, so there is no
public package yet.
What nightreel doctor printed on the machine that built this page
$ nightreel doctor
nightreel doctor
┏━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ capability ┃ status ┃ detail ┃
┡━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ ffmpeg │ ok │ /usr/bin/ffmpeg ffmpeg version 6.1.1-3ubuntu5 │
│ │ │ Copyright (c) 2000-2023 the FFmpeg developers │
│ ffprobe │ ok │ /usr/bin/ffprobe │
│ espeak-ng │ ok │ /usr/bin/espeak-ng │
│ piper │ missing │ pip install piper-tts + a voice (.onnx) │
│ tts backend │ ok │ espeak │
│ fonts │ ok │ sans=ok, sans-semibold=ok, sans-bold=ok, mono=ok, │
│ │ │ mono-bold=ok │
│ git │ ok │ /usr/bin/git │
└─────────────┴─────────┴──────────────────────────────────────────────────────┘
And nightreel demo
$ nightreel demo
3 sessions · 175 events · 30 edits across 7 files · 11 errors · 3 commits · 6
claim(s): done=VERIFIED, tests_pass=VERIFIED, lint_ok=VERIFIED,
tests_pass=CONTRADICTED, done=CONTRADICTED, done=UNVERIFIED
wrote /home/user/incubator/cli/nightreel/site/.build/assets/916/facts.json
wrote /home/user/incubator/cli/nightreel/site/.build/assets/916/debrief.md,
/home/user/incubator/cli/nightreel/site/.build/assets/916/debrief.html
voice: espeak, 8 clips, reel stretched to 45.0s
reel /home/user/incubator/cli/nightreel/site/.build/assets/916/reel.mp4:
1080x1920 30fps h264 yuv420p 45.0s (1350 frames in 73s) audio=yes
demo done in 74.6s → /home/user/incubator/cli/nightreel/site/.build/assets/916 Reel transcript
The narration, scene by scene, as spoken and captioned (22:05– 04:53 night, 175 events).
[0:00] While you slept: 30 edits, 3 commits.
[0:03] The ask: Add a `forecast` command to tinyweather: deterministic 5-day forecast…
[0:08] From 22:05 to 04:53: 3 hours 9 minutes active, 10 phases, 2 fix cycles, 11 errors.
[0:15] 7 files changed. Hottest: cli.py, 10 edits, 3 errors.
[0:21] Hardest moment: make check failed 5 times over 32 minutes, then passed.
[0:27] 176 lines added, 46 removed, across 7 files.
[0:33] 6 claims made: 3 verified, 2 contradicted, 1 unverified.
[0:39] Final score: 175 events, 30 edits, 11 errors, 3 commits. What is not done
It has run on synthetic transcripts and on the one real session that built it; real
multi-project nights still need a pass. Codex CLI logs are read from a fixture written against
the Codex sources, not from a real ~/.codex. The optional Ollama rephrase and the
piper voice were tested with mocks, which is why nightreel doctor above says
piper is missing. There is no package on PyPI, no hosted version and no pricing: it is a
command-line tool you run yourself.