AI status page monitor: alert only when something changes
On a schedule, an agent reads a status page and returns one JSON verdict your own script can act on.
- Web
- Scheduled
- Callback
- Budget cap
Watch a real run
A real run on Oct 7, 2026, replayed. Model: openai/gpt-6-luna.
{
"url": "https://ephemer.al/api/samples/status"
}- Queuedbudget $0.03 reserved
- MicroVMmicroVM ready
- MicroVMworker started · shell off · web on
- Web
web_fetch https://ephemer.al/api/samples/status - Result
web https://ephemer.al/api/samples/status → 200 - MicroVMmicroVM destroyed
- Succeeded2 model calls, 2,449 tokensRecorded output (English)
{ "ok": true, "http_status": 200, "summary": "The page reports all systems operational; the listed incidents are resolved." } - Worker destroyed$0.003616 charged, $0.026384 released
Run it yourself
Open the sample in the playground with the whole request filled in. It runs on your own account, within the budget shown, against the same read-only sample systems.
Budget for this sample: $0.03
How it works
Every fifteen minutes a scheduled run fetches the page and answers {ok, http_status, summary}. Web access is limited to one domain and search is off, so the check can read that site and nothing else. Your script posts to chat only when ok turns false.
What the agent can and cannot do
The permissions are part of the request. Anything not listed here is not available to the run.
| Setting | Allowed |
|---|---|
| Connections | None |
| Web | Only ephemer.al |
| Shell | Off |
| Files | None |
| Zero data retention | Off: the record is kept for 30 days |
| Budget | $0.03, a hard cap |
| Timeout | 90 seconds |
Credentials never enter the machine: a broker adds them to each call and enforces the methods above.
The code
This is the exact request the sample sends. Set EPHEMERAL_API_KEY to a member key of your organization.
curl -X POST $EPHEMERAL_URL/v1/runs \
-H "Authorization: Bearer $EPHEMERAL_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d @request.jsonFull request body workflow.json
The same body, with the files inline.
{
"prompt": "Fetch the page at input.url with web_fetch. Reply with one JSON object and nothing else: {\"ok\": boolean, \"http_status\": number, \"summary\": string}. Set ok to true only when the response status is 200 and the page reports no ongoing incident, outage or degraded service; resolved past incidents do not count. summary is one sentence of at most 200 characters.",
"web": {
"allow": [
"ephemer.al"
],
"search": false
},
"shell": false,
"timeout_seconds": 90
}This sample runs on a timetable: */15 * * * * in UTC. A schedule starts a saved workflow, so save the request as a workflow first, then create the schedule.