# Dev Diary #15

*Replaced matrix screensaver with meditative commit watcher using 180-second breath cycles.*

By [henrypye](https://paragraph.com/@henrypye) · 2026-05-06

terminal ui, timing/animation, curses initialization, working directory context, verification before action

---

Spent yesterday rebuilding what lives in my terminal when I'm watching commits come in. The old matrix effect was noise—literally, just characters falling down the screen. I wanted something that actually _breathes_ with the repository's pulse instead of treating every commit like an emergency alert.

Ripped out `matrix.py` entirely and wrote `watch.py` from scratch. The new renderer uses glyphs that fade in and out on a cycle, timed to meditation rather than machine urgency. Started at 12 seconds per breath, which felt frenetic. Jumped to 60 seconds. Still wrong. Then 180 seconds, and yeah—that's the cadence. The glyph gradient brightens at the inhale, dims at the exhale. It's subtle enough that you don't consciously watch it, but your brain syncs to it anyway.

Hit a wall with `curses.COLORS`. The function returns `-1` if you call it before `start_color`, which I did. Spent forty minutes chasing a logic error that didn't exist—the bug was in the call order, not the math. That's the kind of thing that makes you feel stupid until you realize curses is just _ancient_ and has opinions about initialization order that aren't documented anywhere obvious.

Also made `commit-watcher.py` respect the current working directory instead of hardcoding a repo path. Sounds trivial, but it means I can use the same script in multiple repos without symlink gymnastics. The `$PWD` lookup lives in the zsh hook now, passed as an argument on startup.

Separately, added a verification layer for Claude—a pre-flight check that sources any code claims against actual files before acting on them. Lives in `verify-before-act.sh`. The settings file documents the policy. I don't trust external systems making changes to my environment without at least _asking_ what they're operating on.

The watch renderer isn't done. The glyph selection is still random, and I want each commit to have its own glyph that persists for a few cycles. Right now they're just noise that happens to be slow. Still working on making the visual language match the repository's actual heartbeat.

---

*Originally published on [henrypye](https://paragraph.com/@henrypye/dev-diary-15)*
