demo — watch the belt decide, live
Four panels, refreshed as decisions happen: ROUTING, SAVINGS,
MICRO-NN, ESCALATIONS. Reads from [[events]] — same data source as
dashboard --watch and session replay.
python -m skills.demo.cli scripted # built-in scenario, ~4s total
python -m skills.demo.cli scripted --speed 0 --no-clear # dump all frames, no timing
python -m skills.demo.cli live . # tail a real project while an agent works
python -m skills.demo.cli replay .botte/events.jsonl --speed 0.3 # the "black box" — replay a real session
Three modes, same renderer
scripted— 6 fixed steps (scenario.py) covering every filter of the belt: micro-NN routing, a deterministic classifier, a cache hit, a cloud escalation, a verification-failure escalation, an anomaly-detector output. Deterministic, no dependency on a running LLM or.botte/events.jsonl— this is the mode for a README GIF or a cold-machine walkthrough.live— tails a real project's.botte/events.jsonl(written by [[auto_router]], [[cache]], …) while an agent works. Genuine decisions, genuine numbers.replay— the "black box": replays a captured event log at real or sped-up pace. Accepts a raw.botte/events.jsonl(JSONL, exactly whatevents/auto_routerwrite) or a JSON array (e.g. fromevents tail --json) viaload_events_file(), which auto-detects the shape. Useful for debugging a real routing session after the fact, demoing with real data without a live agent running, or as raw material for the active-learning loop.
All three funnel through build_panels(events) -> list[Panel] and
render_grid(panels) -> str.
Design
- Pure stdlib ANSI (
render.py) — norich/textualdependency, degrades to plain text whenNO_COLORis set or stdout isn't a TTY. - Panels trim to a fixed width so the layout never breaks on a long task description.
--no-cleardisables the screen-clear escape codes — use it for piping frames into a file (recording) or in this test harness.
Related: [[events]] (the data source), [[dashboard]] (the report counterpart).