Show HN: A private pager for your AI agent loops
ask-a-human is a private pager system that alerts your phone when an AI agent needs human input to proceed. It uses end-to-end encryption via Magic-Wormhole-style pairing, requires no accounts or API keys, and integrates with any MCP-compatible agent.
ask-a-human: a private pager for agent loops default referrer policy). --> above pins it before paint (no FOUC), so there's no theme-toggle script here. A localStorage-based
Works with your agents
Claude Code Codex Cursor Copilot Gemini Any MCP client
If it speaks MCP, it can reach you. Same one-line config, zero extra setup.
This is what lands on your phone.
Pair once. After that, when an agent can't decide on its own, it rings your phone and waits: a yes or no, a choice, or a quick reply.
New agent
wants to pair
Open ask-a-human.ai/app on your phone and type the 10-character code it printed to connect.
ABCDE-23456 type it in the app
svg]:size-7" data-astro-cid-j7pv25f6>
Claude Code
stuck on a risky deploy
All tests pass, but this release also runs a migration that drops orders.coupon_code on prod. Ship it?
Approve Decline
svg]:size-7" data-astro-cid-j7pv25f6>
Codex
blocked, needs your call
main has been red for 20 min and 3 deploys are stuck behind it. How do I unblock it?
Revert it Hotfix forward Hold, I'll look
svg]:size-7" data-astro-cid-j7pv25f6>
Cursor
needs your words
A customer is escalating in the support thread and demanding a refund I'm not allowed to approve. How should I reply?
Type your reply… Send
Wall to phone to “keep going,” in seconds.
: the arrows are decorative, so keeping them out of list semantics avoids a mismatched item count for screen readers. -->
1 Agent hits a wall it shouldn't pass alone
↓ →
2 Sealed in a wormhole
↓ →
3 Buzzes your phone
↓ →
4 You tap: approve, decline, or reply
↓ →
5 Agent unblocks and rolls on
Why we built this
We run a lot of agents. Like a hundred of them, in loops, full-auto, full permissions, mostly while we're asleep or away from the keyboard. That's the whole point: they're not supposed to need us. Until, every so often, one of them does.
And when an agent on full-auto hits the one step it shouldn't take alone, it has no way to reach us. It can't pause a hundred loops and wait by the door. So the choices were both bad: babysit every step and kill the automation, or let it rip and hope nothing touches prod while we sleep. We wanted a third option. Let them all run wide open, and give the rare one that's stuck a way to tap us on the shoulder.
So we built a pager. Copy-paste one MCP server into your agent, pin this site to your iPhone home screen, and that's it. Nothing to install, no account, no API key. When any of your agents needs a yes or no, a choice, or a quick reply, it pings your phone and waits. A hundred agents, one place, one buzz at a time.
And it's private by design. The messages travel through a magic wormhole, end-to-end encrypted, so the relay in the middle is blind. We don't track anything, there's no database, and we pay for the hosting ourselves, all of it. No data to sell, no funnel, no catch. We built it because we needed it, and our only goal is for it to spread.
For the curious
The crypto bit.
Pairing is a Magic-Wormhole-style SPAKE2 handshake: that short code turns into a strong shared key, and even if someone shoulder-surfs it they get exactly one online guess before it's useless. After that, every message is sealed with NaCl secretbox (XSalsa20-Poly1305). The relay only ever sees base64(nonce‖ciphertext) and which room is talking to which, never the contents.
relay phone, with the SPAKE2 shared key the relay never sees. Theme-aware (fill-*/stroke-* map to design tokens), pure SVG. -->
SPAKE2 · RFC 9382
ristretto255 · RFC 9496
magic-wormhole
Built so it can't betray you.
Not a privacy policy you have to trust. A design that can't betray you. No accounts to breach, no database to leak, no logs to subpoena. The relay is RAM-only: restart it and you simply re-pair. And if you still don't trust us, the source is right there and you can host your own relay with --relay / --public-relay.
Content-blind relay
The server only ever sees base64(nonce‖ciphertext) and which room talks to which. It's a dumb pipe: never the data, never a decision.
SPAKE2 pairing
A short pairing code becomes a strong shared key via a Magic-Wormhole-style SPAKE2 handshake. No relay-in-the-middle can read or forge it.
End-to-end encrypted
Your agent and your phone hold the keys. Approvals are sealed on one side and opened on the other. Nowhere in between.
No DB, open-source
RAM-only, no accounts, no database. Restart means re-pair. Self-host the relay and web with a flag, or read every line on GitHub.