Quickstart
Set up a relay, schedule, AI agent, and parallel routing. Pick whichever surface you want to drive it from.
New to beeps? Read Core Concepts first to understand how the pieces fit together.
Prerequisites
Section titled “Prerequisites”- A beeps account.
- An access token from Settings → Access Tokens (looks like
bat_xxxxxxxx).
Pick your surface
Section titled “Pick your surface”The same eight-step setup is available three ways. The CLI is the fastest path to your first alert. Pick it unless you have a reason not to.
Install + authenticate:
npm install -g @beepsdev/cliexport BEEPS_ACCESS_TOKEN="bat_your_token_here"1. Create a relay
Section titled “1. Create a relay”beeps relay create --name "production relay" \ --external-key production::relay \ --description "routes critical production incidents" \ --jsonThe response includes a relay id (rly_…) and a webhook URL. Save both; you’ll need them in steps 2 and 8.
2. Create an on-call schedule
Section titled “2. Create an on-call schedule”beeps schedule create \ --name "Primary On-Call" \ --relay-id rly_REPLACE_ME \ --type weekly \ --handoff-day monday \ --handoff-time 09:00 \ --external-key "primary::schedule" \ --jsonstartAt is omitted on purpose. beeps defaults it to now, so you can test alerts immediately.
3. Add team members
Section titled “3. Add team members”beeps schedule add-member --schedule-id sch_REPLACE_ME --email alice@example.combeeps schedule add-member --schedule-id sch_REPLACE_ME --email bob@example.comMembers rotate in the order they’re added.
4. Contact methods (one-time, in the dashboard)
Section titled “4. Contact methods (one-time, in the dashboard)”Your signup email is auto-added as a verified contact method. To add SMS or another email, go to Settings → Profile in the dashboard. SMS requires verification via a confirmation text.
5. Set up an AI agent integration
Section titled “5. Set up an AI agent integration”Get a Cursor cloud agent API token. Enable Privacy Mode in Cursor account settings. Without it, every API call returns 403.
export CURSOR_API_KEY="cursor_api_key_here"beeps integration create \ --provider cursor \ --name "Cursor Agent" \ --api-key-env CURSOR_API_KEY \ --json6. Create parallel relay rules
Section titled “6. Create parallel relay rules”# AI agent rulebeeps relay rule create --relay-id rly_REPLACE_ME \ --name "AI Agent Auto-Triage" \ --rule-type agent \ --group agents \ --order 1 \ --external-key agents::cursor \ --config '{"agentType":"cursor","integrationId":"int_REPLACE_ME","repository":"https://github.com/your-org/your-repo","autoCreatePr":true}'
# Human notify rulebeeps relay rule create --relay-id rly_REPLACE_ME \ --name "Notify On-Call Engineer" \ --rule-type schedule_notify \ --group humans \ --order 1 \ --external-key humans::primary \ --config '{"scheduleId":"sch_REPLACE_ME"}'Different groups (agents vs humans) run in parallel.
7. Verify
Section titled “7. Verify”beeps relay listbeeps relay rule list --relay-id rly_REPLACE_MEbeeps schedule on-call --schedule-id sch_REPLACE_ME8. Fire a test alert
Section titled “8. Fire a test alert”Use the webhook URL from step 1:
curl -X POST https://hooks.beeps.dev/YOUR_WEBHOOK_KEY \ -H "Content-Type: application/json" \ -d '{"title":"Test Alert","message":"Testing the on-call system","severity":"high"}'You should see Cursor start triaging at the same time the on-call engineer gets notified.
beeps alert list --activeThe CLI tab above is faster for first-time setup. Use the SDK when you want this in your application code or in a config-as-code file.
1. Install and initialize
Section titled “1. Install and initialize”npm install @beepsdev/sdkpnpm add @beepsdev/sdkbun add @beepsdev/sdkexport BEEPS_ACCESS_TOKEN="bat_your_access_token_here"Create beeps.config.ts:
import { BeepsClient } from "@beepsdev/sdk";
const client = new BeepsClient({ accessToken: process.env.BEEPS_ACCESS_TOKEN,});2. Create a relay
Section titled “2. Create a relay”const relay = await client.relay.create({ name: "production relay", description: "routes critical production incidents", externalKey: "production::relay",});3. Create a schedule
Section titled “3. Create a schedule”const schedule = await client.schedule.create({ name: "Primary On-Call", relayId: relay.id, type: "weekly", handoffDay: "monday", handoffTime: "09:00", // UTC externalKey: "primary::schedule",});Omitting startAt is intentional. The schedule starts immediately, so you can test right away.
4. Add team members
Section titled “4. Add team members”await client.schedule.addMember(schedule.id, { email: "alice@example.com" });await client.schedule.addMember(schedule.id, { email: "bob@example.com" });Members rotate in the order they’re added.
5. Contact methods (one-time, in the dashboard)
Section titled “5. Contact methods (one-time, in the dashboard)”Signup email is auto-added as a verified contact method. Add SMS or extra emails at Settings → Profile.
6. AI agent integration
Section titled “6. AI agent integration”Get a Cursor cloud agent API token. Enable Privacy Mode in Cursor account settings. Without it, every API call returns 403.
const integration = await client.integration.create({ name: "Cursor Agent", provider: "cursor", apiKey: process.env.CURSOR_API_KEY,});7. Create parallel relay rules
Section titled “7. Create parallel relay rules”// AI agentawait client.relay.rules.create(relay.id, { name: "AI Agent Auto-Triage", externalKey: "agents::cursor", ruleType: "agent", group: "agents", order: 1, config: { agentType: "cursor", integrationId: integration.id, repository: "https://github.com/your-org/your-repo", autoCreatePr: true, },});
// Human notifyawait client.relay.rules.create(relay.id, { name: "Notify On-Call Engineer", externalKey: "humans::primary::schedule-notify", ruleType: "schedule_notify", group: "humans", order: 1, config: { scheduleId: schedule.id },});Different groups run in parallel.
8. Fire a test alert
Section titled “8. Fire a test alert”curl -X POST https://hooks.beeps.dev/YOUR_WEBHOOK_KEY \ -H "Content-Type: application/json" \ -d '{"title":"Test Alert","message":"Testing","severity":"high"}'For a full runnable config file (beeps.config.ts) and CI deploy via beeps relay apply, see Config as Code.
Drive setup from Claude Code, Codex, or any MCP-compatible client. Best when you live in your editor and don’t want to context-switch.
Connect the MCP server
Section titled “Connect the MCP server”claude mcp add --transport http --scope user beeps https://mcp.beeps.dev/mcpcodex mcp add beeps --url https://mcp.beeps.dev/mcpcodex mcp login beeps --scopes "openid,profile,email,offline_access,beeps.tools.read,beeps.tools.write"From here, just talk to your agent.
1. Create a relay
Section titled “1. Create a relay”Create a relay called "production relay" with externalKey "production::relay".The agent calls beeps_create_relay and reports back the relay id and webhook URL. Save the webhook URL for step 8.
2. Create a schedule
Section titled “2. Create a schedule”Create a weekly schedule called "Primary On-Call" on the production relay,handoff Monday at 09:00, externalKey "primary::schedule".3. Add team members
Section titled “3. Add team members”Add alice@example.com and bob@example.com to the primary schedule.4. Contact methods (one-time, in the dashboard)
Section titled “4. Contact methods (one-time, in the dashboard)”Open Settings → Profile to add SMS or extra emails. Your signup email is already verified.
5. AI agent integration (one-time, outside MCP)
Section titled “5. AI agent integration (one-time, outside MCP)”MCP can’t create the Cursor credential. That’s the only step that needs the CLI or dashboard. Get a Cursor cloud agent API token (enable Privacy Mode in Cursor account settings), then either:
export CURSOR_API_KEY="cursor_api_key_here"beeps integration create --provider cursor --name "Cursor Agent" --api-key-env CURSOR_API_KEY --json…or use Settings → Integrations → New integration in the dashboard. Either way, grab the returned integration id (int_…) so you can reference it in the next step.
6. Create parallel relay rules
Section titled “6. Create parallel relay rules”On the production relay, create two rules in parallel:
1. An "agent" rule named "AI Agent Auto-Triage", group "agents", using my Cursor integration int_REPLACE_ME, repository "https://github.com/your-org/your-repo", autoCreatePr true.
2. A "schedule_notify" rule named "Notify On-Call Engineer", group "humans", pointing at the Primary On-Call schedule.Different groups fire in parallel.
7. Verify
Section titled “7. Verify”List the rules on the production relay and tell me who's on call right now.8. Fire a test alert
Section titled “8. Fire a test alert”curl -X POST https://hooks.beeps.dev/YOUR_WEBHOOK_KEY \ -H "Content-Type: application/json" \ -d '{"title":"Test Alert","message":"Testing","severity":"high"}'Then back in your editor:
Show me active alerts.Next steps
Section titled “Next steps”- Config as Code — check
beeps.config.tsinto your repo and deploy viabeeps relay applyin CI. - Relay Rules — escalation, webhooks, sequential vs parallel.
- Schedules — overrides, multiple rotations, secondary schedules.
- Agent Integrations — Devin, Cursor, Codex, Claude, AWS DevOps, OpenCode, Zup.
- Observability Integrations — Sentry, Datadog, Prometheus, generic webhooks.
- MCP Server — full tool list for ongoing alert triage from your editor.