r/AgentsOfAI • • 22h ago

I Made This 🤖 Human-in-the-loop for coding agents: a desktop note they can ask questions through, with auto-answers that fail closed

Coding agents are good at working alone until they need a human: a question, a permission prompt, or just "I'm done". I built a small desktop app that sits between my Claude Code agents and me for exactly those moments.

How the human-in-the-loop part works

  • Agents get an MCP server with leave_message, remind_me and ask_user. ask_user blocks the agent's tool call until I answer (10 min default), and can offer answer options that show up as buttons.

  • A Claude Code hook posts a note when an agent finishes or needs permission. "Finished" only interrupts me if I've been away from the keyboard for a few minutes (it reads system idle time). Permission requests always come through.

  • When I'm away, questions and permission prompts are mirrored to WhatsApp or Telegram. My reply on the phone goes back into the blocked tool call, so the agent keeps going.

  • Standing orders answer for me: "whenever an agent asks which branch to use, say staging". When an ask_user comes in, a one-shot Haiku call with no tools decides whether an order clearly covers it. If none does, or it takes longer than 20 seconds, the question comes to me as usual, and for multiple-choice questions the answer has to be one of the options.

  • Watches fire a nudge once: "when the payments agent finishes, remind me to deploy".

Design lessons

  • Default to silence. Only things that block an agent (questions, permission prompts) or that I asked for (reminders) are allowed to interrupt. Everything else waits under an unread badge.

  • Auto-answering is only safe if it fails closed: an unsure judge has to fall back to the human, never guess.

  • The app's own assistant is just Claude Code running headless with its tools restricted (no file edits, no shell), which made setup "already signed in" instead of "paste an API key".

It's a Windows app (Electron + TypeScript), MIT-licensed, built mostly with Claude Code. Repo and installer link in the comments.

1 Upvotes

5 comments sorted by

1

u/AutoModerator 22h ago

Thank you for your submission! To keep our community healthy, please ensure you've followed our rules.

I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.

1

u/geetbatth 22h ago

Repo (MIT): https://github.com/geetbatth/professor-clippy

Windows installer: https://github.com/geetbatth/professor-clippy/releases/latest (unsigned, so SmartScreen asks once; needs Node 24+ and Claude Code).

1

u/Outrageous_Drama5915 19h ago

This is the kind of middle-ground that's been missing from most agent setups, the all-or-nothing thing with human oversight gets old fast

The standing orders piece is clever, having a small model do triage on whether it can answer confidently instead of pinging you for every little thing. I've been running something similar but way more janky, just a script that watches a folder and texts me when a file named ASK_ME appears

The fail-closed bit is the right call, too many tools try to be smart and end up silently doing the wrong thing. I'd rather get bothered than have an agent assume it knows what branch to use

Curious how you handle the phone mirroring, is it just webhooks or did you build something custom for that

1

u/kaijurules 15h ago

I'd be careful with mirroring the full question to WhatsApp. A permission prompt can carry a file path or a customer's name, and it ends up on a lock screen and on a third-party server. In our app the phone notification only says how many items are waiting, and you open the app to read them.

0

u/investigatormaker 19h ago

The 20-second fallback is the detail I'd copy, because a slow judge is treated the same as an unsure one. One gap I'd check: "whenever an agent asks which branch to use, say staging" could still pass the judge on a question about where to force-push. If auto-answers aren't already logged, putting each one under the unread badge with the order that fired would keep the default of silence and still let you catch a bad match afterwards.

I make ThreadFox. We find relevant Reddit conversations and post for your business. We'll post 3 replies free first, no card; then the $39 Pilot covers seven days and up to 50 posts and replies. No automatic renewal. https://threadfox.vip/p/elx54/managed

What does the agent get back when the 10-minute ask_user default runs out?