Cursor
Cursor’s cloud agents are a hosted API: Cursor clones your repo, runs the agent, and opens a PR. Beeps creates an agent run when an alert fires, polls Cursor for the run’s status, and writes the PR URL onto the alert responder.
Cloud agents work with Privacy Mode: Cursor doesn’t train on your code, and code is retained only for the duration of the run.
Prerequisites
Section titled “Prerequisites”- A Cursor account with cloud agents enabled.
- A GitHub repository connected to Cursor that the agent can clone. The
repositoryURL goes on the relay rule, not the integration.
Provider-side setup
Section titled “Provider-side setup”- Connect your GitHub account and grant access to the target repository from the Cloud Agents dashboard.
- Create an API key under Dashboard → API Keys. A user API key works; for team setups prefer a service account API key so the integration isn’t tied to one person’s account.
- Save the API key; you’ll paste it into beeps as
apiKey.
Beeps verifies the key against Cursor’s API at integration-creation time, so a bad key is caught immediately rather than failing on the first alert.
Beeps-side setup
Section titled “Beeps-side setup”Create the integration:
const cursorIntegration = await client.integration.create({ name: "Cursor Agent", provider: "cursor", apiKey: process.env.CURSOR_API_KEY,});Reference it from a relay rule. Cursor requires a repository URL on the rule. That’s the repo Cursor will clone and open the PR against:
await client.relay.rules.create(relayId, { name: "Cursor Auto-Fix", ruleType: "agent", config: { agentType: "cursor", integrationId: cursorIntegration.id, repository: "https://github.com/org/repo", autoCreatePr: true, pollInterval: 30000, maxPollAttempts: 120, },});Configuration reference
Section titled “Configuration reference”Integration metadata
Section titled “Integration metadata”Cursor doesn’t use metadata. Only apiKey is required.
Rule config
Section titled “Rule config”| Field | Type | Required | Default | Description |
|---|---|---|---|---|
agentType | "cursor" | yes | — | Selects the Cursor agent |
integrationId | string | yes | — | The Cursor integration’s id |
repository | string (URL) | yes | — | GitHub repo URL Cursor will clone |
autoCreatePr | boolean | no | true | Whether the agent should open a PR |
model | string | no | Cursor’s default | Cursor model id to run the agent with |
Cursor pushes the agent’s work to an auto-generated cursor/... branch; the branch name can’t be chosen through the API.
The shared polling and storm-control fields are documented in Relay Rules.
API version
Section titled “API version”Beeps targets the Cursor Cloud Agents v1 API (https://api.cursor.com/v1/agents). v1 is built around durable agents and per-prompt runs: beeps captures the run created at dispatch and polls that run for status and the PR URL. The legacy v0 endpoint had a different request and response shape; customers still pinned to v0 via an explicit config.endpoint override should plan to migrate, since v0 is no longer documented.
Troubleshooting
Section titled “Troubleshooting”invalid_cursor_token at integration creation
Section titled “invalid_cursor_token at integration creation”The API key was rejected by Cursor. Confirm it hasn’t been revoked and was created at Dashboard → API Keys on the account (or service account) that has access to your repositories.
Requests return 403 Forbidden
Section titled “Requests return 403 Forbidden”The API key is valid but lacks permission — for example a key without access to the repository’s team, or an Enterprise-only capability on a non-Enterprise plan. Recreate the key from Dashboard → API Keys with the right account, or use a service account key for the team that owns the repo.
Repository required error on dispatch
Section titled “Repository required error on dispatch”The repository URL must be on the rule config, not the integration metadata.
Cursor API error: response missing agent.id
Section titled “Cursor API error: response missing agent.id”You’re on a config.endpoint that returns a v0-shaped response. Either remove the endpoint override (recommended) or update it to a v1 path.