Zup
Zup is a self-hosted incident-investigation agent. You run Zup on your own infrastructure; beeps creates a run when an alert fires and polls until the investigation finishes. The output is an investigation report (findings, situation assessment, recommendations), not a PR.
Prerequisites
Section titled “Prerequisites”- A running Zup server reachable from beeps. See the Zup docs for installation and configuration.
- A bearer token for authenticating to the Zup server.
- The Zup server’s URL.
Provider-side setup
Section titled “Provider-side setup”- Install and run Zup following zup.dev/docs.
- Configure an API token on the Zup server. Save it; you’ll paste it into beeps as
apiKey. - Note the server URL. You’ll pass it on the relay rule as
endpoint. Default during local development ishttp://localhost:3000/api/v0/runs.
Beeps-side setup
Section titled “Beeps-side setup”Create the integration with the bearer token as apiKey:
const zupIntegration = await client.integration.create({ name: "Zup - internal", provider: "zup", apiKey: process.env.ZUP_API_TOKEN,});Reference it from a relay rule. Zup needs an endpoint pointing at your server:
await client.relay.rules.create(relayId, { name: "Zup investigation", ruleType: "agent", config: { agentType: "zup", integrationId: zupIntegration.id, endpoint: "https://zup.internal.corp/api/v0/runs", pollInterval: 30000, maxPollAttempts: 120, },});Configuration reference
Section titled “Configuration reference”Integration metadata
Section titled “Integration metadata”Zup doesn’t use metadata. Only apiKey is required.
Rule config
Section titled “Rule config”| Field | Type | Required | Default | Description |
|---|---|---|---|---|
agentType | "zup" | yes | — | Selects the Zup agent |
integrationId | string | yes | — | The Zup integration’s id |
endpoint | string (URL) | no | http://localhost:3000/api/v0/runs | Base URL of your Zup server’s runs endpoint |
The shared polling and storm-control fields are documented in Relay Rules.
Troubleshooting
Section titled “Troubleshooting”401 Unauthorized when starting a run. Beeps sends Authorization: Bearer <apiKey>. Confirm the token in apiKey matches what the Zup server is configured to accept.
Run completes but no findings show up. Check the run’s status in your Zup server. Zup returns status: "completed" only when the investigation actually finishes; partial or failed runs return different statuses and beeps marks the alert responder dropped accordingly.