ai newsMi., 28. Okt.
EilmeldungGitHub launches Copilot Fusion as agents start 40% of pull requests

I gave my AI coding agents a face so they stop waiting on me

You know the feeling. You give Claude Code a task, switch to another window, and come back twenty minutes later. It has done nothing for nineteen of them, because it stopped at a permission prompt one minute in. Running several sessions makes this worse. One is working, one has finished, and one ha

dev.toMittwoch 19:18 · 28.10.4 Min. Lesezeit
Bild: dev.to

You know the feeling. You give Claude Code a task, switch to another window, and come back twenty minutes later. It has done nothing for nineteen of them, because it stopped at a permission prompt one minute in.

Running several sessions makes this worse. One is working, one has finished, and one has been asking "Allow npm install?" for the last quarter of an hour.

So I built Agent Needs You: a small screen on my desk with a pair of eyes that tells me how my agents are doing.

Drowsy and asleep look alike on purpose, because neither needs you. The difference is whether a session exists. Drowsy means at least one agent is open but quiet: it has just started and hasn't had a prompt yet, or it was working and went silent for 30 minutes, so the board stops trusting the "working" state. Asleep means there is nothing to track, and the board shows its IP address so you can point the hooks at it.

Beside the eyes the screen shows the state, the project name, how long it has been in that state, the agent's message when it needs you, and how many sessions are in each state.

Amber is the colour that matters. When I see it out of the corner of my eye, I know something is blocked on me.

That's the whole bill of materials. Not sponsored and no affiliate links, it's just the board I picked for the job. AMOLED suits this well: the black background really is black, so the eyes seem to float, and the panel isn't a glowing rectangle in the dark.

The firmware is PlatformIO and Arduino. The board joins Wi-Fi, runs a tiny HTTP server, and accepts JSON on POST /hook.

Claude Code, Cursor and Codex all support hooks: shell commands that run on lifecycle events. That's all I needed.

Each hook runs one small Python relay. It:

The last point matters most. A status light must never break the agent. If the board is unplugged, the hooks carry on as if nothing happened.

(Cursor has no hook that fires while it waits for approval without also answering that approval, so Cursor sessions only show working and your turn.)

The installer finds every supported agent on the machine and wires them all up. It uses the standard library only, needs Python 3.8+, and runs on Windows, macOS and Linux:

curl -fsSL https://raw.githubusercontent.com/AncientiCe/agent-needs-you/main/hooks/install.py | python3 - --ip <device-ip> Enter fullscreen mode Exit fullscreen mode irm https://raw.githubusercontent.com/AncientiCe/agent-needs-you/main/hooks/install.py | python - --ip < device-ip > Enter fullscreen mode Exit fullscreen mode It keeps your existing hooks, replaces earlier versions of its own, and backs up every file it changes. --dry-run shows what it would do and --uninstall removes it.

The board tracks up to 8 sessions and rotates through them most urgent first:

When a session starts waiting on you or finishes, it jumps the queue at once. Idle sessions only show when nothing else is going on.

There are two buttons. One marks every finished session as seen, which turns the happy face a calm grey-green. The other cycles through sessions by hand.

PostToolUse sends the whole tool output in the payload. When an agent reads a big file or runs a noisy command, that means hundreds of kilobytes of JSON hitting an ESP32.

Buffering it and then parsing it is a quick route to running out of RAM. Instead, the firmware streams the request body through an ArduinoJson filter, which keeps only the handful of fields it needs ( hook_event_name, session_id, cwd, message ) and discards the rest as it reads. Memory use stays flat however large the payload is.

The board takes plain JSON over HTTP, so anything can drive it:

curl -s -m 2 -H "Content-Type: application/json" \ -d '{"hook_event_name":"Notification","session_id":"ci-build","cwd":"my-project","message":"CI failed","agent":"ci"}' \ http://<device-ip>/hook Enter fullscreen mode Exit fullscreen mode CI failures, long builds and deploys can all make the eyes look at you.

The code is MIT-licensed on GitHub: AncientiCe/agent-needs-you.

Since it went on my desk, permission prompts have stopped sitting there for twenty minutes. I've also caught myself saying "aww" at a microcontroller, which I'm choosing not to think about.

What would you put on yours? Let me know in the comments.

Quelle: dev.to (dev.to). Original öffnen