LED dashboard for live Claude Code sessions
AI RGB Matrix
- CircuitPython
- Flask
- Tailscale
- Matrix Portal S3
When I use Claude Code, I like to have my CC terminal share a screen with my IDE, and use my secondary screen for browser/research/documentation. But as my CC usage became more sophisticated (more tabs, such sophistication!) the need for at-a-glance orchestration became more salient. As it happened, I had an Adafruit LED board lying around unused from an old hobby project, and this seemed like a great way to make use of it.
I settled on an 8-session dashboard, where each section shows the last several turns, code changes, and context switches for that session. This naturally led to a histogram view. White bars with varying heights depending on token usage, red/green bars representing code changes, and full-height light blue/violet bars for compacting and clearing, respectively. Best of all, when a session is actively working on a request, the white bar shows as chugging up and down. The sessions are MRU-ordered, so I can easily remind myself where I am, what needs attention, and what's being worked on now.
What I love about this set up is it's simple but packs a lot of easy-to-grok information, so the signal-to-noise ratio is very high!
The path the data takes is another interesting part. My usual coding setup is: 1: An always-on cloud devbox running Claude, which I tunnel to via 2: my home laptop. Add in the S3 for the CircuitPy and you have 3 pieces of hardware at play. So the data flow goes: ClaudeCode (with shell hooks) runs on devbox and reaches out to a Flask state server on my home laptop over Tailscale only; the laptop drives an S3 Matrix Portal on the home LAN (CircuitPython) which renders to the HUB75 panel. Internal by design. Tailscale for cross-host traffic and a LAN-scoped Defender firewall rule for panel access, so there's no public auth surface. When I shut my laptop, the Flask server goes down and the panel shuts off, which is fine -- I'm not viewing anything and the devbox can chug away in the cloud. When I open my laptop back up, the Flask server auto restarts and S3/board come back on line.
Parts I'm especially happy with:
- Color leases, not hash-mod-8. An 8-color palette with a birthday-paradox-aware lease system that guarantees distinct colors across concurrent sessions, instead of hashing the GUID into 8 buckets and praying.
- Transcript reconstruction. Per-turn token and code-change counts are recovered by parsing the session transcript.
- High signal-to-noise ratio in the end-hardware. Doesn't take up any of my precious screen real estate, and all it takes is a quick side glance to remind myself what just finished and what's in progress.
Ideas for future improvements:
- More advanced orchestration visual design language. Sessions are treated as unique and independent, and there's no view into subagents. As development becomes more agentic, this gap gets more critical. Consider subagent view and inter-session relationship mappings. (Though keep this within reason, part of the appeal is the system's simplicity and I don't want to lose that either).
- "Waiting on Permissions" signal. One of the most common waiting signals doesn't have coverage. There's not a straightforward CC hook for this state (yet) to key off of.
- Reduce devbox/flask drift. When the Flask server goes down and comes back up, the state of the server doesn't update until one turn later. Not a huge deal because I usually need some time at this point to re-orient myself, which is usually better spend in the TUI than staring at the dashboard, but this would be nice polish.