● Case study · Ops tooling

Know when it breaks, without another dashboard.

pulse is a single-file health checker that tells your cron job or CI pipeline when a website or API stops behaving, with nothing to install.

Rodz·3 min read·Python · stdlib only
CHECK EVERY ENDPOINT. website 142ms api-health 318ms legacy-redirect 200 ≠ 301 RESULT 2/3 exit 1 → alert sent cron · CI · webhook

Every service has a handful of addresses that simply must keep working: the homepage, an API health route, a redirect that old links depend on. There are monitoring services for this, but they usually mean another account, another dashboard, and handing your list of endpoints to someone else.

pulse takes the opposite approach. It is one Python file that uses only the standard library. You list your endpoints in a small config file, run it, and it tells you, through a single exit code, whether everything is healthy.

1file to copy
0dependencies to install
0 / 1exit code: healthy / failed

01What a check looks for

A check passes only when every rule you set for it holds. For each endpoint you can require:

python3 pulse.py
pulse · 2026-08-23 14:00:00
OK   website         200    142ms
OK   api-health      200    318ms
FAIL legacy-redirect 200    105ms
      └─ got status 200, expected 301

2/3 healthy
Example output from the project's README: the redirect answered, but with the wrong status.

02How one round works

FIG. 01 — ONE ROUND OF CHECKS PULSE.PY · STDLIB ONLY pulse.toml [[endpoints]] website [[endpoints]] api-health [[endpoints]] legacy-redirect expect 301 reads pulse status · keyword latency · retries GET website 200 · 142 ms api-health 200 · 318 ms legacy-redirect got 200 · expected 301 exit 1 2/3 healthy cron / CI fails the job POST JSON Slack / Discord
The config lists what to check; pulse probes each endpoint and reduces the round to one exit code, plus a JSON alert when something fails.

The important part is that exit code: 0 when every endpoint is healthy, 1 when at least one check failed. It's the language cron, CI systems and shell scripts already speak, so pulse plugs into them with no glue code. Configuration mistakes also exit with an error and a message, so it's safe to block a deploy on it.

When something fails and a webhook is configured, pulse also posts a JSON summary of the failures, which can go straight into a Slack or Discord channel.

One exit code is a language every pipeline already speaks.

0 ms300 ms website 142 ms api-health 318 ms legacy-redirect expected 301 PULSE · ROUND 1 2/3 healthy exit 1 · alert ↗ spike height = response time · flatline = failed rule
The same round as a heartbeat. Spike heights are drawn to scale from the response times above.

03Where it fits

04Decisions I made, and why

05Known limits

pulse is a checker, not a monitoring platform. There is no history, no graphs and no dashboard: results live in your logs, exit codes and webhook messages. The project's roadmap lists stored history and a Prometheus metrics endpoint as next steps.

Try it or read the code

Open source under the MIT licence. Needs Python 3.11 or newer:

git clone https://github.com/Rodzman/pulse.git && cd pulse
cp pulse.example.toml pulse.toml
python3 pulse.py
Python 3.11stdlib onlyTOMLunittestGitHub Actions