Skip to content

Quickstart

Set up the full human on-call loop: a relay that receives alerts, a schedule with you on it, and a test alert that beeps your phone. Then wire in AI agents as a next step.

New to beeps? Read Core Concepts first to understand how the pieces fit together.

  • A beeps account.
  • Node.js 20+ and npm.
  • For the CLI tab: curl and jq (used to capture ids between steps).
  • For the SDK and MCP paths (and CI): an access token from Settings → Access Tokens (looks like bat_xxxxxxxx). The CLI can mint its own via beeps login.

The CLI is the fastest path to your first alert. Pick it unless you have a reason not to.

Install + authenticate:

Terminal window
npm install -g @beepsdev/cli
beeps login

beeps login opens your browser and saves an org-scoped token to ~/.config/beeps/config.json. In CI, set BEEPS_ACCESS_TOKEN instead (it takes precedence).

Steps capture ids into shell variables so you can paste top to bottom — if running as a script, start with set -euo pipefail.

Your signup email is already verified. Add your phone for the channel that wakes you up:

Terminal window
beeps contact-method add --transport sms --value +15555550100

Reply YES to the verification text (unverified numbers never receive alerts — check with beeps contact-method list).

Terminal window
RELAY_ID=$(beeps relay create --name "production relay" \
--external-key production::relay \
--description "routes critical production incidents" \
--json | jq -r '.id')
echo "$RELAY_ID" # → rly_xxxxxxxxxxxx
WEBHOOK_URL="https://hooks.beeps.dev/$(beeps webhook list --relay-id "$RELAY_ID" --json | jq -r '.[0].webhookKey')"
echo "$WEBHOOK_URL" # → https://hooks.beeps.dev/xxxxxxxx...

Creating a relay auto-generates the webhook you’ll POST alerts to in step 6.

Terminal window
SCHEDULE_ID=$(beeps schedule create \
--name "Primary On-Call" \
--relay-id "$RELAY_ID" \
--type weekly \
--handoff-day monday \
--handoff-time 09:00 \
--external-key "primary::schedule" \
--json | jq -r '.id')
echo "$SCHEDULE_ID" # → sch_xxxxxxxxxxxx

startAt defaults to now, so you can test immediately.

Terminal window
beeps schedule add-member --schedule-id "$SCHEDULE_ID" # → member added: <your user id>

No --email means you. Teammates must be org members first (invite via Settings → Members), then add with --email alice@example.com. Members hand off in the order added.

Terminal window
beeps relay rule create --relay-id "$RELAY_ID" \
--name "Notify On-Call Engineer" \
--rule-type schedule_notify \
--external-key humans::primary \
--config '{"scheduleId":"'"$SCHEDULE_ID"'"}' # → rule created: rr_...
beeps schedule on-call --schedule-id "$SCHEDULE_ID" # confirm it's you
Terminal window
curl -X POST "$WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{"title":"Test Alert","message":"Testing the on-call system","severity":"high"}'

Expected response:

{"success":true,"alertsCreated":1,"alertIds":["alr_..."]}

A 401 means $WEBHOOK_URL is wrong (re-run step 2’s webhook list). Within seconds, your phone buzzes with a link to the alert.

Terminal window
ALERT_ID=$(beeps alert list --active --json | jq -r '.[0].id')
beeps alert on-it --alert-id "$ALERT_ID" # acknowledges + stops escalation
beeps alert resolve --alert-id "$ALERT_ID" # closes it

That’s the loop your team will live in.

Alerts can route to AI agents alongside your schedule — an agent starts triaging and opening a fix PR in the same seconds your phone buzzes. Each guide takes ~5 minutes and ends with an agent rule running in parallel with the one you just made: Cursor, Devin, Claude, Codex, OpenCode, or AWS DevOps.

  • Relay Rules — timed escalation with --delay, --repeat policies, sequential vs parallel groups.
  • Config as Code — check a declarative beeps.config.ts into your repo and deploy via beeps relay apply in CI.
  • Schedules — overrides, multiple schedules, secondary coverage.
  • Observability Integrations — Sentry, Datadog, Prometheus, Axiom, and custom webhooks.
  • MCP Server — full tool list for ongoing alert triage from your editor.