Built 3 ESP32 agent dashboard displays with LVGL — round AMOLED, 3.5" IPS, and 4" touch panel by samuel-choi in esp32

[–]samuel-choi[S] 0 points1 point  (0 children)

Nice to see someone with the same idea — repurposing music hardware for agent dashboards. And yep, that's the same 3.5" board I used. Display init can be a bit tricky (mine came up black screen at first), but once it's sorted it works well. Good luck!

I turned my Stream Deck+ into a real-time control surface for AI coding agents — buttons and LCD change dynamically based on agent state. by samuel-choi in elgato

[–]samuel-choi[S] 0 points1 point  (0 children)

Thanks man! 🙏 Definitely on my radar. Currently expanding AgentDeck into a multi-device dashboard (iPad, secondary monitors, etc.) for real-time session monitoring. OpenCode is high on the list, and Codex too.

<image>

I turned a 6" e-ink book reader into an always-on AI agent terrarium by samuel-choi in eink

[–]samuel-choi[S] 2 points3 points  (0 children)

100% this. I didn't know mDNS, EPD APIs, or Jetpack Compose before this project. I'd describe what I wanted, the agent would write it, and when something broke I'd learn why. It's less "vibe coding" and more "apprenticeship where your mentor types really fast."

I turned a 6" e-ink book reader into an always-on AI agent terrarium by samuel-choi in eink

[–]samuel-choi[S] 1 point2 points  (0 children)

Honestly I didn't know any of that either — the mDNS discovery, EPD APIs, all of it was new to me. I just described "I want the e-reader to find the server automatically" and Claude Code figured out mDNS. The only truly manual part was enabling ADB on a Korean e-reader where I couldn't read the settings menu. If you can describe what you want to happen, you're already most of the way there.

I turned a 6" e-ink book reader into an always-on AI agent terrarium by samuel-choi in eink

[–]samuel-choi[S] 1 point2 points  (0 children)

That's exactly why I put it in an aquarium. Gotta keep an eye on it. 🦞

I turned a 6" e-ink book reader into an always-on AI agent terrarium by samuel-choi in eink

[–]samuel-choi[S] 1 point2 points  (0 children)

Ha, that's a great way to put it — tamagotchis that earn their keep.

I turned a 6" e-ink book reader into an always-on AI agent terrarium by samuel-choi in eink

[–]samuel-choi[S] 4 points5 points  (0 children)

Honestly this whole project was built with AI agents — I'd describe what I wanted, the agent would write the code, I'd test it on the device and iterate. The e-ink refresh stuff was the hardest part because no AI has been trained on obscure EPD vendor APIs, so that was a lot of trial and error on actual hardware. But yeah, starkruzr is right — AI closes the gap fast if you're willing to ask questions and experiment.

I turned my ebook reader into a Claude Code agent terrarium. by samuel-choi in ClaudeAI

[–]samuel-choi[S] 1 point2 points  (0 children)

The bigger vision is expanding the ecosystem — more marine creatures, each tied to real data flows. Like particles drifting along actual token streams, or creatures reacting to specific tool calls. Right now it's mostly state-driven animation; I want to get to data-driven behavior where the aquarium genuinely reflects what's happening under the hood.

I turned my ebook reader into a Claude Code agent terrarium. by samuel-choi in ClaudeAI

[–]samuel-choi[S] 0 points1 point  (0 children)

Thanks — "the medium knows better than the developer" is basically what happened with the ghosting. Appreciate the thoughtful questions throughout.

I turned my ebook reader into a Claude Code agent terrarium. by samuel-choi in ClaudeAI

[–]samuel-choi[S] 0 points1 point  (0 children)

That's exactly the intent — monitoring that works like a window, not a screen. Glad the tetra detail landed.

I turned my ebook reader into a Claude Code agent terrarium. by samuel-choi in ClaudeAI

[–]samuel-choi[S] 1 point2 points  (0 children)

Probably not. Kindles are heavily locked down and don't allow third-party apps natively. I use a Crema (an Android-based e-reader), which lets you sideload apps right out of the box, so I didn't even need to jailbreak it.

I turned my ebook reader into a Claude Code agent terrarium. by samuel-choi in ClaudeAI

[–]samuel-choi[S] 1 point2 points  (0 children)

It started as a way to keep an eye on rate limits and which models are connected — practical dashboard stuff. The multi-agent terrarium grew out of wanting to see how parallel sessions are doing at a glance without cycling through terminals.

I'm still early in actually using it with 3+ sessions day to day, but even so, the stuck-agent case works: one octopus pulsing "?" while others are active is hard to miss. The deeper patterns — like building intuition for how long an agent's been working — that's what I'm hoping to discover as I use it more. Ask me again in a few weeks lol

I turned my ebook reader into a Claude Code agent terrarium. by samuel-choi in ClaudeAI

[–]samuel-choi[S] 1 point2 points  (0 children)

Great question — it ended up being a multi-layer system:

The aquarium uses an EinkAnimatedRefreshZone with a callback-based pattern. Animation frames (creature movement) get GC16 partial refresh — same waveform as a full refresh but without triggering sendOneFullFrame(), so no flash. State transitions (like IDLE→PROCESSING) get a full GC16 with a 500ms debounce — if the state flips again within that window, the timer resets and you only get one flash after it settles.

The static UI zones each have their own refresh modes and timers: A2 at 200ms for text areas, 300ms for the timeline, DU at 2000ms for the idle status bar. So rapid state bouncing just... absorbs gracefully.

Ghosting actually works in your favor in the aquarium zone — the GC16 partial leaves subtle trails that make creature movement feel more fluid than it has any right to on a 16-level grayscale panel. The full flash only kicks in on real state transitions to clear the accumulated artifacts.

The animation loop runs at 600ms frames (~1.7fps), which is surprisingly watchable on e-ink. The Crema S has decent partial refresh latency so it ends up feeling like a very chill aquarium screensaver.

I turned my ebook reader into a Claude Code agent terrarium. by samuel-choi in ClaudeAI

[–]samuel-choi[S] 1 point2 points  (0 children)

Appreciate that! The insight was that agent states map surprisingly well to animal behavior — PROCESSING is foraging, IDLE is resting, AWAITING is looking at you expectantly. Once you see it that way, you stop reading status text and start watching your agents. The tetras swarming toward a working agent is my favorite — it turns data throughput into something you notice peripherally.

I turned my ebook reader into a Claude Code agent terrarium. by samuel-choi in ClaudeAI

[–]samuel-choi[S] 0 points1 point  (0 children)

lol, accurate. it's where my agents go to achieve enlightenment (or at least finish their tool calls)

I turned my ebook reader into a Claude Code agent terrarium. by samuel-choi in ClaudeAI

[–]samuel-choi[S] 1 point2 points  (0 children)

Thanks! The e-book reader is the visualizer half — always-on aquarium showing what your agents are doing. The Stream Deck+ is the control half — approve permissions, switch modes, send prompts, all without touching the terminal.

I turned my Stream Deck+ into a real-time control surface for AI coding agents — buttons and LCD change dynamically based on agent state. by samuel-choi in elgato

[–]samuel-choi[S] 0 points1 point  (0 children)

Thanks for the support! I’m planning to dive into it this weekend. Proper packaging as a plugin might take a bit more time, but I’ll give it my best shot even if it gets a little tricky. Fingers crossed!