Inspiration

I run coding agents in the terminal every day, and the slow part is never the code. It's me. A session stops to ask permission and I don't notice for ten minutes because I'm looking at a different window. Multiply that by four or five parallel sessions and you spend the day tab-hunting.

There's a bigger shift underneath this. The agent writes almost all the code now, so the keyboard, a tool designed for typing code is the wrong instrument for most of my day. What I actually do, hour to hour, is decide: yes, no, stop, try a different approach, look at this. Those are single-press decisions and spoken sentences, not paragraphs of typing. Earlier this year I built a small Logitech keypad controller for Claude Code and the idea stuck with me. For Build Week I wanted to do it properly for Codex CLI. Vizhi is Tamil for "eye." It watches the agents so I don't have to.

What it does

Vizhi shows up to six live Codex CLI sessions on the LCD keys of a Logitech MX Creative Keypad: project name, context percentage, Working/Ready state, and whether a session is waiting on you. When one needs attention, you press Yes or No, or hold the Voice key and speak a prompt. Voice is transcribed locally with Whisper and nothing leaves the Mac.

No keypad? A local browser dashboard has the same grid plus a session library, screenshot-and-voice context, prompt templates, git shortcuts, and live model/reasoning/mode controls.

Everything runs on localhost with a fresh token per start. No cloud, no accounts, no admin password.

How we built it

Codex CLI with GPT-5.6 wrote nearly all the code, most of it in one long primary session (the ID is in the /feedback field). I wrote a spec with a day-by-day plan first, then worked through it with Codex. And about halfway through, the tool became its own dev environment: I used Vizhi's grid to supervise the Codex sessions that were building Vizhi.

The model story wasn't smooth. I wanted GPT-5.6 Sol but couldn't get it working on my setup, so I went with Terra. That turned out fine: Terra High handled the early architecture and fast implementation, the Codex lifecycle hooks, normalised session state, the shared keypad/browser action flow, and the grid itself. I switched to Terra Max for Terminal focus routing, TTY-verified approvals, hook reliability, macOS permissions and local Whisper voice.

The stack is wider than I'd have attempted alone in a week: a TypeScript Node service with zero runtime dependencies, a C# .NET plugin for the keypad, a Swift helper for Whisper voice, and a JXA hook script for Codex events.

Challenges we ran into

Getting keystrokes into the right terminal. Vizhi types into your Terminal, and sending an approval to the wrong Codex session would be really bad. Designing the action router took several rounds with Terra Max before we landed on TTY verification: every approval confirms the target Terminal tab before anything is sent, even when sessions move between grid slots.

The grid itself went through three lives. I started with nine sessions per page and it was too cramped to read at a glance, which defeats the whole point. I tried a folder-style layout for overflow but never got it to a single clean icon I was happy with. Six won. Icon design and alignment on tiny LCD keys ate more hours than I expected: generate, install, screenshot, adjust, repeat.

Then the unglamorous part: making installation not miserable. The install script sets up the plugin, installs whisper-cpp and the local Whisper model (with your consent), and walks you through the Terminal automation and Accessibility permissions, all without ever asking for an admin password.

Accomplishments that we're proud of

Three tagged releases in a weekend (v1.0.0 through v1.1.1), each a packaged .lplug4 with SHA256 checksums. A parity test that fails the build if the keypad and browser ever offer different actions. Zero runtime npm dependencies. And judges don't need any hardware to try it: npm install && npm run demo

And definitely having a one press key to execute command is a great feeling.

What we learned

Building the supervisor proved the thesis. Across a full day of supervising sessions, almost everything I sent to the agents was one key press or one spoken sentence. I barely touched the keyboard, and never missed it.

On working with Codex: the hand-holding phase was my fault, not the model's. I also learned to batch visual feedback (one screenshot plus clear acceptance criteria beats five small nudges).

What's next for Vizhi.

Publishing to the Logi Marketplace, a Claude Code adapter on the same core (the state layer is agent-agnostic on purpose), more terminals, and a configurable grid.

Share this project:

Updates