Your agents keep working.
You go touch grass.

Agents hit decisions that need you — a risky migration, a plan sign-off, a judgement call. Riby pages your phone. You answer in one tap. If you don’t, the request expires safely to deny.

Connect viaGet notified on

One tool. One tap. Six hours.

Riby is a pager, not a platform. Here is the whole loop.

  1. A dark room at night: a glowing terminal on a desk, a small robot arm paused mid-action beside it.

    Step 1

    The agent asks

    Your agent hits something it shouldn’t decide alone. It calls one MCP tool and holds its place. No stall, no silent yes.

  2. A hand holding a phone outdoors on sunlit grass; the screen shows a small green frog icon and two answer buttons.

    Step 2

    Your phone buzzes

    A pager-sized message lands in Telegram or Discord: what agent, what it wants, why. PERMISSION · claude-web · Run prisma migrate on prod? Buttons attached.

  3. The same dark room, now active: the robot arm working again and a small green frog sitting content on top of the monitor.

    Step 3

    One tap, agent proceeds

    Approve, deny, pick an option, or type a reply. The answer flows back to the waiting agent and the message updates in place: Approved via Telegram · 14:32.

Live demo

This is the page you get.

Permissionclaude-web

Run prisma migrate on prod?

Adds a NOT NULL column to users.email. Three existing rows get backfilled first; rollback script is staged.

ApproveDeny

Pending · expires in 5:59:47

The same card lands in Telegram, Discord, and the dashboard — identical shape everywhere. First answer wins, and the message edits in place.

Six hours, not sixty seconds

Every other approval tool times out in 30–300 seconds. Riby waits six hours by default — answer when you’re back from lunch, the gym, or bed. TTL is yours to adjust.

hosted approval tools30–300s
riby default6:00:00
Riby the frog sitting patiently beside a small amber hourglass.

Unanswered means denied

No answer is an answer: deny. The agent gets a definitive no, never a silent maybe. Safe by default, every time.

Expired · no answer in 6:00:00

Denied · delivered to the agent

Requests outlive the agent

Every request lands in an append-only ledger on your machine before it goes anywhere. Agent crashes, laptop sleeps, session dies — the request survives, and so does your answer.

written req_permission → ledger

sent telegram

— agent crashed —

answered approve, via phone

resumed answer delivered

Every harness, one inbox

Riby is a local MCP server. Claude Code, Cursor, headless and CI runs — anything that speaks MCP can page you.

  • Claude Code
  • Cursor
  • Headless / CI
  • Anything MCP

Know exactly which Claude

Running five Claudes on one machine? Each instance pages under its own label — folder + branch by default, or a name you set. riby · main wants to force-push. You always know who’s asking.

  • riby · main
  • riby · fix/hooks
  • riby · exp/ledger

A pager, not a platform

No policy engine. No workspace admin. No 17-tool governance lattice. One tool, pager-sized payloads, one-tap answers. Everything else stayed out on purpose.

Every state. One frog.

Questions devs actually ask

Riby the frog mid-croak, a small speech bubble above its head.

The frog only croaks when it matters.

Two minutes: install the MCP server, link Telegram, run your agent. The next time it needs you, your phone buzzes — wherever you are.

Connect Telegram

riby login · Telegram, Discord, or dashboard · unanswered means denied