An AI agent can do most of a job. Some of it it shouldn’t: force-pushing rewritten history, uploading files to a live server, anything hard to undo. Those actions get queued here instead, with the reason and the exact commands, and a person presses Run.
Claude Code is blocked from a specific class of actions on my machine, and the block is correct. A person should start anything outward-facing or irreversible.
The friction it created was the actual problem. The agent would leave a .cmd file somewhere in a folder, and I would find it three weeks later with no memory of what it did or whether it was still safe to run. The safeguard worked. The handover around it did not.
The agent writes queue files. It cannot press Run. The CLI has no run command at all, deliberately, so there is no path where the thing that wants the action is also the thing that takes it.
That constraint set the bar for the interface. If a person is doing the deciding, the page has to give them enough to decide with: every command in full rather than a summary of it, and a plain statement of what cannot be undone and where the backup is.
Queuing work fires a Windows toast rather than a message in a chat window. A notification that depends on someone reading a chat window is not a notification. It lands in Action Center and waits there whether or not the session that queued it is still alive.
It is a reminder-type toast, so it stays on screen until dismissed. Notification sounds are off on this machine, so a banner that auto-hides after five seconds is one I will miss. It also registers its own app identity, because without that it borrows PowerShell’s and every alert announces itself as “Windows PowerShell”, which tells you nothing about what wants your attention.
Queuing does not open a browser tab. A tab steals focus the moment work is queued; a toast waits until you look.
This is not a service that runs at login. It starts when something queues work and shuts down after ten minutes with no visible tab, with an eight hour cap behind that. Only a visible tab counts as watching, so a forgotten background tab cannot hold it open.
Both timers are vetoed while an action is running. Killing the server mid-upload would leave the remote half-written with no record of what happened, which is the exact failure the tool exists to prevent.
Two cards were queued, one of them removing a person’s phone number and email from a public image. I opened the page filtered to that project and it said:
Nothing waiting. When Claude hits a wall it will queue the action here.
Six cards were in the queue. Two were the ones I was looking for.
The filter was an exact string match, the cards were tagged with the full project name, and I had typed a prefix of it. The filtering was correct. The reporting was not, in two places. The empty state printed the same sentence for “no actions exist” and “your filter matched none of the actions that exist”, and that sentence asserts the first. Separately, setting a <select> to a value with no matching option does not throw. It leaves the control blank, so the one piece of UI that could have revealed an active filter showed no filter at all.
Reading it as “there is no work” was correct behaviour on my part. The tool lied.
The fix was in the reporting, not the filtering. The empty state now names the filter and counts what it hid. An unknown project gets appended to the dropdown, so a filter that is on always looks like it is on. The CLI resolves a near-miss name before opening anything and says so out loud instead of quietly opening something else.
An empty result and a filtered-out result are different answers, and a UI that gives one message for both will be believed.
That bug cost a delay on taking a real person’s contact details off a public URL, because the queue looked empty.
Python and Flask, no other dependencies. It listens on 127.0.0.1 only, so nothing outside the machine can reach it, and the server will only execute what is written in a queue file. The page cannot send it a command of its own.
git clone https://github.com/Sagelakshya/control-center cd control-center pip install flask cc open
Source and issues: github.com/Sagelakshya/control-center. MIT licensed.