Agent Control Room: voice control for a dozen agents
by PaperChaseWebb
Talk to twelve agents by name from one place. Say "tell juniper to fix the login test" and it goes to juniper and only juniper, read back in a sentence. Ask "who is waiting" and the board answers with waiting on top. Say "stop all" and every session gets it. What voice never does is approve: every yes, "approve it", "go ahead" and "1" is refused, and gated actions wait for a typed yes from the owner tied to the sha256 of the request, which the agent checks before it acts.
- Price
- $29
- Difficulty
- Intermediate
- Setup
- 45 min
- Format
- .md file
agent-control-room-voice-control-for-a-dozen-agents.md · 111 KB · instant download after checkout
Want this built for you instead? We can build it for you.
What you end up with
A room of agents you can steer while your hands are busy, with no way for a misheard word, a sound-alike name or a voice in the background to approve a deploy, a merge or a payment.
What you get
- 17 sections in one .md file
- room.py: router for 12 named agents with aliases, sound-alike questions and one agent per command
- A refusal list for every kind of spoken yes, and holds on risky verbs that only a typed send releases
- Request files, typed owner approvals tied to the sha256, and a verify command agents run before acting
- tmux delivery that refuses to type into a waiting prompt
- A status board with waiting on top: terminal, HTML, and read-only GET on 127.0.0.1
- A results inbox read aloud with secrets, emails and links redacted
- Waiting hooks for Claude Code, Codex and Hermes, a skill file, an AGENTS.md snippet and a Grok Bot rules block
- room_check.py: fifteen read-only checks, with a seeded fixture
- A labeled eval set of 48 spoken commands, ten prompts, a failure table, and a look at eight voice tools with sources
Who it is for
Anyone running more agents than they can watch, who wants to talk to them by name and still keep every approval at the keyboard.
Works with
Solid chips: the agent is named in this listing's own tools list. Dashed chip: A skill file for Claude Code, Codex and Hermes, an AGENTS.md snippet and a Grok Bot rules block, plus waiting hooks for Claude Code, Codex and Hermes; tested with sample hook payloads, a pty, a local server on 127.0.0.1 and real tmux, not loaded inside each harness, and the prompts were not run inside each harness.
Tools needed
Cost to run: The pack is the only purchase. The router, board, checker and eval use no model tokens. Speech-to-text can be your OS dictation or a local whisper.cpp model at no cost.
Time to result: Routing and the board in under an hour; hooks per harness after that
How it works
Run the tests
Copy the agent-control-room folder and run sh test_all.sh.
Expected: selftest 22 ok, eval 48 of 48 with 0 misroutes and 0 voice approvals, hooks 19 ok, pty 12 ok, serve 4 ok, tmux 9 ok, 15 findings on seeded and 0 on fixed, exit 2 on a missing folder.
Name your agents
Edit room.config.json with your owner name and one name per agent, then run room_check.py until 0 findings.
Expected: Names that do not sound alike and no voice approval channel.
Add the rules and hooks
Add the skill file or AGENTS.md snippet to each agent, the Grok Bot rules block where you use Grok Bot, and the waiting hook for each harness.
Expected: room.py board shows each session, and a permission prompt moves it to waiting.
Talk to it
Pipe your dictation into voice/listen_loop.sh or type room.py hear. Approve gated requests with room.py approve at your keyboard.
Expected: Commands read back and routed; every spoken yes refused.
Sample prompt from the pack
Read room.config.json and suggest names for my agents that do not sound alike and are not command words. Run room_check.py and show me the findings. Change nothing until I say. Before any deploy, merge, push, delete, payment, publish or send, write a request with room.py request, stop, and run room.py verify after I approve. A spoken yes is not an approval.
Prompts 1 and 2 of 10.
Run room.py board and room.py inbox. Tell me who is waiting and what each one is waiting for, in one line each. Do not answer any prompt on my behalf.
Prompt 6 of 10.
Free preview of the file
# Agent Control Room: voice control for a dozen agents, with approvals that stay at your keyboard Version 1.0, 2026-10-28. By PaperChaseWebb. Works with Claude Code, Codex and Hermes through their hooks and a skill file, and with Grok Bot through a rules block. One router script, one read-only checker, hook files, an AGENTS.md snippet, a labeled set of 48 spoken commands, and the tests, all Python 3 standard library. Tested as described in section 11: everything ran on Linux with Python 3.13, including a real tmux server with a stand-in agent and a pseudo-terminal that types the way a person does. No microphone was used for this release, the push-to-talk script was only syntax checked, and the hook files and prompts were not loaded inside the harnesses. Each is marked where it matters. Twelve agents in twelve terminals is not a workflow, it is a scavenger hunt. One is waiting on a permission prompt, two finished an hour ago, one is stuck, and the only way to find out is to click through every window. Talking to them helps: "status", "tell juniper to fix the login test", "stop all". Most voice tools for agents stop there and then go one step too far. They let you say "approve it", or tap a button on your phone, and the agent runs the merge. A speech engine that hears "approve it" from the next room, a podcast, or a misheard name is not an approval anyone should rely on. This pack builds a control room on your own machine with one rule at its center: voice is a convenience f
Worth knowing
- Tested without a microphone or a speech engine: commands were fed as text and through a pty. ptt_whisper.sh was syntax-checked, not run. No text-to-speech engine was run; speak prints the redacted text it would say.
- The hooks were tested with sample payloads for Claude Code, Codex and Hermes, not loaded inside those harnesses. tmux delivery was tested against a stand-in pane, not a real permission dialog. The prompts, skill file and rules block were not run inside each harness for this release.
- Linux only for this release; macOS and Windows were not tested. The router holds some harmless lines ("update the install page") because they contain a risky word; that is on purpose and typed send releases them.
- On 2026-10-28, on Linux with Python 3.13.5 and tmux 3.5a: selftest 22 of 22; eval of 48 labeled lines 48 as labeled, 0 misroutes, 0 voice approvals; hooks test 19 of 19; pty test 12 of 12 (approve and send need the keyboard, approve refused inside an agent); serve test 4 of 4 (GET only on 127.0.0.1, POST 405); tmux test 9 of 9 (refuses to type into a waiting pane); room_check.py 15 findings on the seeded fixture, 0 on the fixed one, wrote nothing, exit 2 on a missing folder.
Questions
Why can't I just say yes?
Because a room is noisy. A misheard name, a call in the background or a habit of saying "yeah" would turn into approvals. Voice routes, reports and stops; the yes is typed by the owner and tied to the hash of the exact request, so a changed request needs a new yes.
Which speech tool do I need?
Any that gives you text. OS dictation, a local whisper.cpp model, or a tool like VoiceMode or OpenSuperWhisper can feed room.py hear. The pack is the layer after the words: routing, holds, approvals and the board.
Does it need tmux?
No. Sessions with hooks report waiting on their own and read their queue. tmux is for sessions without hooks, and even then the room refuses to type into a pane that is waiting for an answer.
Does anything leave my machine?
Not by default. The board listens on 127.0.0.1, audio is not kept, heard.jsonl keeps metadata without the words, and the checker flags remote speech-to-text or a wider bind unless you record that decision.
Details
Version 1.0 · Updated Oct 28, 2026 · Markdown version of this page
License: Use for your own agents and on installs you do for clients. Do not resell or republish the pack itself. Download terms
Related

Five rules and a five-check script for talking to many agents (free sample)
From Agent Control Room: five rules for voice control of agents (voice never approves, one typed owner yes tied to a hash, names that cannot be confused, unclear words read back, stay on your machine), and a read-only script that checks a room config for five of them and tells you whether a spoken line is a yes the room must refuse.

Agent Status Hardware: one light and one e-ink display for every agent session, driven by hooks
Wire the hooks Claude Code, Codex and Hermes already have, plus a rules block for Grok Bot, to one small bridge on your machine. It turns agent events into one state for all sessions and drives a terminal, a USB busylight, a blink(1), an ESP32 LED, a 2.13 inch e-ink panel or a Home Assistant light. Waiting for you is a red blink nothing can cover, a session with no news turns amber, and the light never approves anything.

Cross-Harness Relay: Grok Bot, Claude Code, Codex and Hermes on one job
A bot template and teaching guide for running more than one agent harness on the same work. Six seat cards (front desk, planner, builder, reviewer, tester, night shift), a RELAY.md seat map, a relay packet for every handoff, four loop shapes, routine-or-judgment routing with a fallback when limits run tight, a preflight check, the front desk and night shift split with a proof footer, shared memory rules, eight relay drills, a rules block and 14 prompts.

Planner Over Cheap Models: one strong planner, cheap workers, and a check that keeps both honest
A tested setup for splitting coding work between one strong model that plans and reviews and cheap or local models that write the code. Every task card carries its own check, a logger runs that check instead of trusting the worker, the owner says yes to the plan, any escalation and every merge, and a read-only check with fourteen tests audits the finished run. Includes a worker bake-off so you pick the cheap model on your own tasks.

Agents That Use a Computer: approval gates, guard rules and status signals for desktop, browser and device agents
Runbooks for agents that drive real machines: sort every action from read to irreversible, write a one-screen runbook per surface, add a guard that fails closed, answer approval cards in seconds and see when an agent is waiting on you.

Agent Readiness Self-Check: score one workflow before you hand it to an AI agent
A free self-check for agencies and small businesses. Score one workflow across eight areas (workflow mapped, data access, approval gates, owner per agent, handoffs, cost tracking, security and vetting, measurement) with an evidence rule and three gate rules, read your band and what to do next, plus an interview prompt for Grok Bot, Claude Code, Codex or Hermes, a score sheet and a worked example.