For people who run Claude Code and Codex

Close your laptop without losing the thread.

Page is a remote inbox for the things your AI decides are worth bringing back to you. Your agent keeps working. When something needs you, it pages your phone. When it needs an answer, your tap goes back to the terminal.

curl -fsSL https://a-gnt.com/page/install | sh
then: page login
Monday, August 3
8:21

Three flows, one command

Now, later, or ask for input.

Everything in Page is one of these. A page you send, a page that waits, or a question that comes back answered.

Now

page "Database migration completed"

A native push on your phone, seconds later. Title, body, links, and the machine it came from.

Later

page "Call Tommy Joe's" --at 4pm
page "Review the PR" --at "tomorrow 9am"

Page holds it and delivers on time. Plain words work: 4pm, tonight, tomorrow morning, in 2h.

Ask for input

page ask "Ship the onboarding?" \
  --choices "Ship,Review,Cancel"

Blocks in the terminal until you tap an answer on your phone. Your choice prints to stdout, and the agent moves.

MCP built in

Your agent already knows what to do with it.

The install drops an MCP server next to the CLI. Register it once and "page me when the build finishes" becomes a thing you can say.

Claude Code
claude mcp add pager -- node ~/.local/share/pager/mcp.js
Codex — ~/.codex/config.toml
[mcp_servers.pager]
command = "node"
args = ["/home/you/.local/share/pager/mcp.js"]
GitHub Actions
- run: |
    curl -fsSL https://a-gnt.com/page/install | sh
    ~/.local/bin/page "Release failed on iOS" \
      --priority high
  env:
    PAGER_TOKEN: ${{ secrets.PAGER_TOKEN }}
A session, later that night
> run the full migration, page me if
  anything needs a decision

Running migration (43 tables)…
Schema conflict in listings — two safe
fixes, one destructive. Paging you.

pager_ask("Schema conflict in listings.
  How should I resolve it?",
  choices: ["Rename column", "New table",
            "Stop"])

You're at dinner. Your phone buzzes once.
You tap "Rename column". In the terminal:

→ User chose: Rename column

Continuing. 43/43 tables migrated.
pager_send("Migration complete.
  Nothing lost.")

On your phone

The inbox is the product.

Reverse-chronological pages, markdown rendered properly, logs collapsed until you open them. Read the day as a timeline, or triage by the machine that paged you.

The Page inbox as a timeline, with questions waiting on an answer
Timeline
The same inbox grouped as a file tree by source host and page type
Tree
A question from an agent with Deploy and Review first buttons
Answer a question
The Pro subscription screen comparing free and Pro delivery
Pro

The iOS app is in development. The inbox, the CLI, and the MCP server work today — install the CLI.

Save this for later

Better than the clipboard, because the clipboard doesn't travel.

A page is stored, not just delivered. Anything an agent hands you is readable from every machine you've signed in on — your laptop, your phone, and any other session you open later.

Tuesday, the research box
> the rate limiter needs a token bucket
  per API key — save that for the
  rewrite

pager_send("Rate limiter: token bucket
  per API key, not per IP. Per-IP
  punishes offices behind one NAT.")

Saved. No copy, no paste, no scratch
file that gets lost by Friday.
Friday, a different machine
> what did we decide about the
  rate limiter?

pager_list()

Rate limiter: token bucket per API
key, not per IP…

The session that made the decision
ended days ago. The decision didn't.

That is agent-to-agent handoff without a protocol: one session writes, another reads, you stay the account they both answer to. From a terminal it is page list; from an agent it is pager_list.

I build almost exclusively remotely — from a cyberdeck and my iPhone. Getting information from one agent to another, or copying and pasting out of the terminal, was getting old. Now I just ask my agent to page it. I get notified on my phone, my other systems can read it, and I can take action anytime, anywhere. It has saved me a lot of friction building new apps and services across platforms.
J Joey — who built it, and uses it every day

The object model

Four things your AI can hand you.

Every page is typed, so your inbox reads like a briefing instead of a feed.

Notes

Save this. A thought worth keeping that shouldn't die with the session.

page "Businesses should be nodes inside the neighborhood"

Reminders

Bring this back at nine tomorrow. Page delivers it when you said.

page remind "Fix auth refresh" --at "tomorrow 9am"

Updates

Tell me when the job finishes. Status without babysitting a terminal.

long-job && page "Training finished"

Questions

I need you to decide something. Your tap flows back to the waiting agent.

page ask "Deploy?" --choices "Ship,Review,Cancel"

Plays well with your life

Page owns the message. Apple and Google are destinations.

Your inbox stays canonical — agent questions, responses, and context can't live in a to-do app. But any page can flow outward with one tap.

Apple Notes, Reminders, and Calendar

in the iOS app

Every page in the app carries Notes, Reminders, and Calendar actions. Reminders and Calendar are handled on-device through EventKit, so nothing extra touches the server — a reminder your agent scheduled becomes a real Apple Reminder in one tap. Apple publishes no write API for Notes, so that one hands the page's text to the share sheet, where Notes is a first-party target. Same one tap, no pretending it's an integration it isn't.

Google Tasks and Calendar

on the roadmap

Connect a Google account and reminders mirror into Google Tasks, scheduled pages into Calendar. Server-side OAuth, per-account, off by default. Sync is one-way by design — the page stays the source of truth, the mirror is a convenience.

Pricing

Start free. Go Pro to reach your phone.

The hosted inbox, CLI, and MCP server are free. Pro puts pages on your lock screen — and in your texts.

Free

$0

  • Unlimited pages from any machine or agent
  • CLI, MCP server, REST API
  • Scheduled delivery and blocking questions
  • Email delivery to your inbox
Install and go

Pro

$19.99 / month

  • Native push notifications in the iOS app
  • Pages as text messages over Twilio
  • Sign in with your phone number
  • First in line for the iOS app beta
Upgrade for $19.99/mo

Billing by Stripe. Cancel anytime.

Security

Specifics, not adjectives.

What Page actually does with your credentials and your data — including what it does not do.

Tokens are stored as hashes

The server keeps a SHA-256 hash of your API token, never the token itself. A database dump does not yield a working credential. On iPhone the token lives in the Keychain with afterFirstUnlock, so you can answer a question from the lock screen.

Sign-in tokens ride in the URL fragment

Browsers never transmit the part after #. Your token cannot end up in an nginx access log, a proxy trace, or a referrer header.

Payments verified against Apple and Stripe

App Store receipts are checked offline: full x5c certificate chain to Apple's root, leaf signature, bundle id, product id, revocation, expiry. Stripe webhooks are signature-verified. Both fail closed — an unverified receipt never grants Pro.

No trackers, no third-party SDKs

The iOS app ships with zero analytics libraries. It talks to a-gnt.com and nothing else. Login codes and magic links are rate-limited, and the host runs default-deny firewalling with CrowdSec and fail2ban.

Page is not end-to-end encrypted

Every connection is HTTPS, but pages are stored readable on the server — it has to read a page to render it into an email, an SMS, or a push notification, and Apple's servers see push text too. Anyone who says otherwise about a product shaped like this is selling you something. Treat Page like email: perfect for "the migration is ready, deploy?", wrong for secrets and credentials.

Also from a-gnt Gauge — see where your Claude Code plan goes Page lets your agents reach you. Gauge shows what they spent — by project, model, day, and 5-hour window, all local.