Mast

A pager for iPhone, for when you are the on-call rotation.

A page repeats every two minutes until you acknowledge it. If you do not, it moves to one other phone. A job that stops checking in pages you too.

Mast is made by the people who run this platform. You create a channel in the app and it hands you a URL. From then on, anything that can make an HTTP request can page you: a deploy script, a backup job, a cron entry, the error handler in your API.

$ curl -d "disk 92% on db1" https://mast.tissue.dev/mk_9f2a41c8b7
$ curl -d "invoice run failed" -d priority=page https://mast.tissue.dev/mk_9f2a41c8b7

There is no account and no sign-up. Install Mast Pager from the App Store, allow notifications, and that is the whole setup. The phone is the credential, and the only secret is a channel's address.

from a fresh install to a page on the phone: create a channel, copy its address, curl it

will it wake me?

A page breaks through Focus, Sleep included. The ringer switch still wins; the app tells you when a page could go unheard. Three settings on the phone decide it, and all three belong to whoever is holding it: Mast allowed in the Focus you sleep under, Time Sensitive left on for Mast, and the ringer on. The line under the page tier in the app reads time sensitive · breaks through Focus once the first two are set, and turns amber with a button to fix it when they are not. Making a page wake you walks through each switch. Send yourself one before you rely on it.

how loud, channel by channel

Every message carries a priority, and the priority is what the notification does to the phone. The default comes from the channel; the sender can override it per message, as far as the ceiling the channel's owner set on their own phone. A key that leaks cannot promote itself to the pager tier.

quietthe feed records it and the phone stays dark. For build logs and the note that the backup finished.
normala banner and a sound. The ringer switch, Focus, and the channel's quiet hours all still apply.
loudtime-sensitive: it breaks through Focus modes. One alert, no repeat, for problems that need eyes soon but should not wake anyone.
pagethe pager tier. It re-alerts every two minutes until you acknowledge it, and a page you have not acknowledged moves on to the one other phone the channel names.

Not team on-call software: no seats, no schedules, one escalation partner. Using Mast works through which level to reach for, with examples of what belongs on each, and covers ceilings, quiet hours, vitals and what acknowledgement means.

the watch bell

A channel can also be a vital: it alerts when the posts stop. Your cron job or backup script checks in on a schedule, anywhere from every five minutes to daily, and silence past the schedule plus a grace window is what pages. On a ship, the bell, struck every watch, proved the watch was awake; a vital is that bell for the jobs that fail by quietly not running.

@daily backup && curl -fsS https://mast.tissue.dev/mk_0c47e2a91d
# backup failed, cron dead, box down — all the same missing check-in
PLATE II. the page lit until answered the channels one hoist per sender deploys backups cron the vital struck every watch; silence is the alarm THE MAST. flags for the day's signals, a lantern for the night's

The plate shows the other mast. The name is biology, like every name here: a mast cell is the alarm resident in living tissue, posted at every surface that meets the outside world, first to fire when something goes wrong. The ship's mast, the hoist and the bell, came free with the word.

why mast is better

Push tools come in two kinds. The free pipes — a topic you POST to, a relay that forwards a webhook — deliver a banner once; if you slept through it, that was the alert. The team pagers do repeat and escalate, but they assume a roster: services, schedules, an admin who owns the routing, and a bill per responder per month.

Mast keeps the pager mechanics and drops the roster. The team pagers assume five people, a schedule and an admin. Mast assumes you. Repeat-until-acknowledged is an ordinary priority any channel can use, and escalation is one other phone: a partner who has their own copy, paired once by QR code. It is $4.99 once, and there is nothing per seat because there are no seats.

not on the box it watchesa downtime alert that runs on the machine having the downtime dies with it. Mast's server side runs on the tissue.systems fleet, in a different failure domain from whatever it is watching.
the dead-man switch comes built inthe usual fix for a silent cron is a heartbeat service wired into a push app, and the wiring between the two can itself fail quietly. In Mast a vital is one more channel in the same app.
a storm is one linesend a message with a key and a repeat of that key within the channel's dedupe window lands once, and a channel that floods collapses into a single row with a count. A flapping check cannot bury a real page.
every feature, one purchasethe $4.99 is the whole product: every priority, vitals, escalation, the Claude Code plugin and the scripted API, with nothing unlocked later. Pages reach a paired Apple Watch through iOS notification forwarding.

what is in the box

acknowledge without unlockingfrom the notification, from the Action button, or by asking Siri; a Shortcut can acknowledge too. An acknowledgement made offline is queued and sent when the phone is back on the network.
the vitals widgeta home-screen widget shows every vital as a dot, late ones marked, without opening the app.
per-message controlsa sender can set priority, a dedupe key, retry and expire for the repeat cadence, ack=required, and a url the page opens.
key rotationrotate a channel's address from the phone; the old one keeps working for seven days so a script can be updated at leisure.
no analytics, no crash reporterthe app carries no third-party SDK. What the servers keep, and for how long, is in the privacy policy.

the plain limits

Mast is for iPhone, iOS 17.2 or later. There is no Android app, no web feed and no desktop client. Escalation goes to one partner, and they need their own copy of the app. Message bodies pass through our servers and are deleted after 30 days. Those are the edges; everything inside them is included.

screenshotsa page mid-alert, the vitals wall, a channel and its URL, the setup sheets.unfoldfold
the feed: one page mid-alert, counting up until it is acknowledged; a 47-message storm is one line
the channels tab — nine vitals at a glance, two of them late
a channel and its send address — priority, repeat and escalation are set per channel
a new channel is a name, a kind and a priority; the URL comes back
connecting a tissue.systems account is optional — it adds a scripted way into the same channels
when a page goes unansweredacknowledgement from the lock screen, a Live Activity while it stays open, and escalation to one other phone.unfoldfold

A page stays on screen as a Live Activity until it is acknowledged: on the lock screen and in the Dynamic Island, with the time it has been open counting up. Acknowledge it from the notification itself, from the app, by asking Siri, or from a paired Apple Watch, where the notification is forwarded by iOS.

If you sleep through it, the page does not have to die with your phone. Pair Mast with one other person's Mast — a QR code on one phone, scanned by the other — and name them as a channel's escalation. A page you have not acknowledged moves on to them, once. Whether it wakes you in the first place is covered under will it wake me? above.

what it costs$4.99 on the App Store, once. Not a subscription.unfoldfold

The price is the whole price: $4.99 once, every feature on. Team paging tools price per person per month; Mast is priced like an app, because for one person it is one.

The working limits are wide enough to forget: 10,000 messages a month, 16 KiB per message, 60 messages a minute per channel. Messages stay in the feed for 30 days.

works with Claude Code and Codex

Ask Claude Code or Codex to alert you from an app it is writing and it reaches for email: a mail provider, an API key, a template, and a message that lands in a tab and does not repeat. The Mast plugin changes that default. With it installed, the agent wires a page instead: one POST from the error handler or the payment webhook, a key so a failing loop pages once, and a vital for the nightly job so the page comes when the heartbeat stops, which is the failure email can never report.

> /plugin marketplace add tissue-systems/mast-claude-plugin
> /plugin install mast@mast
> /mast:setup
$ codex plugin marketplace add tissue-systems/mast-codex-plugin
$ codex plugin add mast@mast

Setup asks for a channel URL from the app and keeps it outside the project. There is no account and no token, the same as any other sender. One project configured for either agent is configured for both. Both plugins are MIT-licensed, at github.com/tissue-systems/mast-claude-plugin and github.com/tissue-systems/mast-codex-plugin.

runs on tissue

Mast's server side — the channels, the feed and the vitals clock — runs on the tissue.systems fleet, the platform this company builds, in a different failure domain from whatever it watches. We built the pager because running the platform needed one, and it pages us about the platform every day.

A tissue account is optional. Connect one and an API token can do what the phone does: create channels, send, read the feed, keep the channel list in a file and let a script reconcile it. The docs cover connecting an account and channels as code. Create an account if you want one.

Mast is for iPhone, on the App Store as Mast Pager; pages reach a paired Apple Watch through notification forwarding. Push for people who ship. Questions reach support@tissue.systems, the guide to using it is at tissue.systems/mast/guide, and the app's privacy policy is at tissue.systems/mast/privacy.