Terminal History Demo
July 30, 2026 ยท View on GitHub
play-better-harness-history.mjs renders one project's historical findings.json files
as an animated five-dimension Agent Work Loop trend.
For the English-only twenty evaluation demo:
asciinema rec --overwrite --window-size 100x30 --idle-time-limit 1 \
--command "node dev/terminal-demo/play-better-harness-history.mjs \
--history-root /path/to/project/.qoder/better-harness \
--since 2026-07-17" \
dev/terminal-demo/twenty-history.cast
agg --theme github-dark --font-size 22 --fps-cap 15 \
--last-frame-duration 3 \
dev/terminal-demo/twenty-history.cast \
assets/demo/twenty-history.gif
ffmpeg -i assets/demo/twenty-history.gif -vf reverse -frames:v 1 assets/demo/twenty-history.png
The repository keeps the GIF as the recording source. The public website uses
the static final-frame PNG so it does not autoplay or loop. Regenerate both
files together after changing the recording; the reverse filter makes the
GIF's last frame the single PNG output frame.
Run without a root to discover history below the current workspace, or select a workspace explicitly:
node dev/terminal-demo/play-better-harness-history.mjs --workspace /path/to/project
Discovery combines .qoder/better-harness and .codex/better-harness
histories for that one project. The same product directory below another
first-level hidden host directory is also recognized.
For a host-level location, pass one or more explicit roots. Home shorthand is expanded by the script, including when the argument is quoted:
node dev/terminal-demo/play-better-harness-history.mjs \
--history-root '~/.qoder/better-harness' \
--history-root '~/.xx/better-harness'
Point at one project-specific report root so unrelated histories are not mixed.
Use --limit N to retain only the latest N scans, or
--no-animate --no-color for a stable text snapshot.
Use --since YYYY-MM-DD to exclude earlier report runs with known-invalid
scores. The Twenty recording starts on 2026-07-17 and continues through the
latest available scan.
--omit-zero learning-capture keeps each scan and its other four scores, but
removes zero-valued Learning Capture anomalies from that dimension's trend. A
legend count records how many values were omitted. It does not rewrite the
source findings.json files.