The machine
CPU, memory, load and every disk. Warns at 90% CPU and memory, a disk at 85% (down at 95%), load above 2.0 per core.
Monitoring for indie developers and small teams
Pult watches your servers, sites, databases, Railway and App Store — and tells you the moment something breaks: a push on your iPhone and Mac, a Telegram message, and the status page on your product's site.
Free for 2 servers, no card. The agent is open source (AGPL).
$ curl -fsSL https://pult.watch/install | sudo sh -s -- <CODE>
On your servers · the agent
Services · no agent
Shop · storage is down since 01:46. Responds 503.
# Incident: Shop · storage — down since 01:46 (22:46 UTC), 2 failures «HTTP 503: storage: access denied»
How it works
No dashboards to build and no checks to type in by hand. You install one agent; it tells you what it found.
Email with a confirmation code, Apple, GitHub, GitLab or Google. No passwords, no card.
The dashboard gives you a line with a code: it installs the agent as a service and binds the server to your account.
The agent has already found sites, certificates, databases, disks and containers. For each: alert, show, or ignore.
Railway, App Store Connect, Cloudflare — with read-only keys. External URLs — just a URL.
Scan a QR code from the dashboard: alerts reach your iPhone, Mac and team chat.
/etc/pult/pult.yaml.$ curl -fsSL https://pult.watch/install | sudo sh -s -- K7Q-4MD-93X 1/4 Downloading pult-linux-amd64 ✓ sha256 2/4 Looking around this machine: 2 disks, nginx (4 sites + certificates), postgres :5432, redis :6379, 7 containers 3/4 Binding this server to your account ✓ 4/4 Starting the service ✓
The script is short on purpose — read it before you run it.
What Pult sees
Not just “the site returns 200”. The agent sits on the server and looks from inside — then you choose for each finding: alert, show, or ignore.
CPU, memory, load and every disk. Warns at 90% CPU and memory, a disk at 85% (down at 95%), load above 2.0 per core.
Every server_name in nginx. Healthy when it answers 200–399 — and, if you ask, when the page contains the word you expect.
The chain must verify. A warning 14 days before expiry, an alert at 3 days — before browsers start shouting at your users.
PostgreSQL, Redis, MySQL, MongoDB and others on their usual ports. No passwords needed: PostgreSQL is asked one byte, Redis gets a PING.
Every running container: it must be up and not unhealthy. A new container shows up on its own.
Any TCP port that should accept connections — a game server, an SMTP relay, an internal API.
/etc/pult/pult.yaml; systemctl reload pult re-reads it without a restart, a broken file is refused.pult status runs every check once, right in your terminal. pult history redis -since 24h shows what happened.Services without an agent
Not everything you run is a VPS. The Pult server watches these itself, with read-only keys. No more four browser tabs to find out what happened.
Deploys and services: a failed deploy or a crashed service is an alert, with the project and service named.
Your apps' builds and review status: you learn that a version was approved or rejected without refreshing the page.
Your zone, read through a token with “Read analytics” only.
Pult opens it every minute the way people do — and sees it even when the whole server, agent included, is down. Add a keyword so a “200 with an error inside” doesn’t count as working.
Where alerts arrive
A push with the project, what broke and since when. One tap opens the card: who checks it, how often, the reason in plain words and the original error below it.
End-to-end encrypted. The relay and Apple only see “new event”. Only your device can read the alert.
The app is free, one for iPhone and Mac: App Store soon. No Android yet — use Telegram and the web dashboard.
One button turns the incident into text for Claude Code, Cursor or any AI agent: what is down and since when, the reason, what is next to it, recent deploys. The agent starts fixing instead of spending 20 minutes collecting facts.
# Incident: Shop · storage — down since 01:46 (22:46 UTC), 14 min ## What is down - storage (check shop-storage on vps-1, site) — 15 failures in a row: «HTTP 503: storage: access denied» - Next to it in Shop: site ✓ · db ✓
Connect a chat with one button in the dashboard — your own or the team's. Same alerts, same wording, recovery with the duration.
PultShop · storage is down since 01:46 · 2 failures in a row · checked by vps-101:48
PultShop · storage is back. Was down 6 min, 01:46–01:5201:52
Your users see the state too. A pulsing dot on your home page and a full page on your /status — two lines of HTML each, in your site's font and colors.
<a data-status-page="shop"></a> <script defer src="https://pult.watch/widget.js"></script>
This is what your product's status page will look like:
See the example → pult.watch/statusHonest rules
Every check runs every minute on Free and every 30 seconds on paid plans.
An alert only after two failures in a row: one network hiccup doesn’t wake anyone at night. An unconfirmed failure is shown separately: “1 failure, waiting to confirm”.
Recovery is reported on the first good result — with how long it was down: “Was down 18 min, 17:50–18:08”.
Never green on stale data. If a server goes silent, its checks turn grey “unknown” with the time of the last data — and you get a separate alert: “server is silent”.
Every check is signed: which project, who checks it (agent vps-1, Railway, App Store), how often and since when.
Security and privacy
Every check connects, asks and hangs up. Nothing writes to your services. The service runs as a throwaway user with a read-only view of the system.
The agent is open: read the probes before you install — they are short on purpose. The install script is too: /install.
Each alert is sealed separately for each of your devices and signed by the agent. Device keys live in the Secure Enclave.
Railway, App Store Connect and Cloudflare keys are read-only, stored encrypted (AES-256-GCM) and never shown again. The agent's private key never leaves the server.
The agent sends names and states of checks — never the contents of your databases, files or logs.
Export everything from Settings; deleting the account removes it all at once. Removing the agent is three commands.
Alerts are sealed with HPKE (P-256, AES-256-GCM) for each paired device and signed by the agent; the relay that wakes phones only ever sees ciphertext. The dashboard does show check names, states and messages — that is how you see everything from a browser.
The caveat: since one sign-in links all your servers, the Pult server could in theory register a fake device. If that matters to you, pair a phone with an agent directly — pult pair shows a QR code right in the terminal, and that pairing bypasses our server entirely.
Compared
Services like UptimeRobot or Better Stack Uptime are good at checking sites from outside. Pult is built for a different job: the whole picture of a small product, from inside and outside.
| Pult | Typical uptime pinger | |
|---|---|---|
| Sites, APIs, ports from outside | Yes | Yes |
| Inside the server: disks, memory, databases, containers | Yes, found automatically | Usually no, or a separate product |
| Setup | One line per server | Each check added by hand |
| Railway, App Store Connect, Cloudflare | In the same place | Usually not |
| Fastest interval | 30 s (paid), 1 min (Free) | 30 s – 5 min, by plan |
| Native apps | iPhone and Mac | Often iPhone and Android |
| End-to-end encrypted push | Yes | Not that we know of |
| Incident text for an AI agent | Yes | No |
| Status pages | Yes | Yes |
| Phone calls, SMS, on-call rotations | No | Often yes |
| Checks from many regions | No: inside + one outside point | Often yes |
| You pay for | Servers with the agent; people included | Monitors or seats |
| Open-source agent | Yes, AGPL-3.0 | No |
From the vendors' public pricing pages as of 25 Oct 2026. If you need phone calls and on-call rotations, a dedicated on-call tool is honestly the better choice.
Pricing
External checks, connectors, status pages, devices and Telegram come with every plan. Alerts never switch off — not even above a limit.
Try it on your own two servers
$0
forever
For your own products
$9
per month · charged as 399 ₴
For a team on call
$29
per month · charged as 1 299 ₴
For agencies and studios
$79
per month · charged as 3 499 ₴
A year costs 10 months.
Sign up before 31 Dec 2026 and get Indie free for 30 days, no card.
Questions
An email address or an Apple ID, and a Linux server where you can run one command with sudo. No card. If you have no servers (only Railway, Vercel and the like), you don't need the agent at all — connect services and add URLs.
An agent or the Pult server checks every minute (30 s on paid plans). After two failures in a row you get a push on your iPhone and Mac and a message in Telegram; the status page on your site changes color. Recovery is reported on the first good check, with the duration. If a server goes silent, you get an alert about that too. The dashboard has a “test alert” button to check that everything arrives.
Railway connects directly: deploys and services, with a read-only token. Vercel, Fly, Render and others work through external URL checks — best on an /api/health that itself checks your database and storage and answers with a keyword. App Store Connect and Cloudflare connect the same way as Railway.
Your account (email or Apple ID), names and states of checks with their messages and times, devices' public keys, encrypted read-only service keys, payment status from monobank (never full card data). History is kept 7–90 days depending on the plan. We never get the contents of your databases, files or logs, and we can't read the push alerts the agent encrypts for your devices. Export and delete it all in Settings. Details: privacy policy.
A machine with the Pult agent. External checks, connectors, status pages and devices come with the plan. Above the limit, alerts never switch off: a new server is listed but not watched until you upgrade or remove another.
Team has up to 5 members and several Telegram chats, Agency up to 15 and a chat per client. You pay for servers, not for people.
By card through monobank, in hryvnias — a foreign card works too, your bank converts. The US dollar prices are for reference. The invoice and receipt are in the dashboard, under Billing. In the iPhone and Mac app, plans will also be available through Apple.
Dashboard → Billing → Cancel. The plan works until the end of the paid period, then you are on Free. Alerts never switch off and your data stays.
Not yet: iPhone and Mac only. On Android use Telegram and the dashboard in the browser.
Yes, AGPL-3.0: read it, build it yourself, change it. The probes are short on purpose, so you can check that the agent only reads.
Free for two servers, no card. Indie free for 30 days if you sign up before 31 Dec 2026.
$ curl -fsSL https://pult.watch/install | sudo sh -s -- <CODE>