Cloud Agents and Automations: Cursor's Factory Floor
PLCursor cloud agents run the same agent as the editor, but in an isolated cloud VM with a full development environment. Cursor Automations start those agents unattended, on a schedule or on events from source control, Slack, webhooks, Linear, Sentry, and PagerDuty. Each automation combines a trigger, a prompt, a tool list, and a repository scope.
Cursor 3.x line Cursor docs checked 2026-08-28 Triggers and new features re-checked 2026-10-12This page is for the developer or tech lead who owns a repository’s chores. Someone runs the dependency audit by hand on Fridays, the Slack channel where bugs get reported is a graveyard, and the docs went stale three releases ago because the PR that changed the API never touched them. Each chore has a clear trigger and a clear output, which is exactly the shape an automation needs.
Unattended fleets are the fifth rung of the autonomy ladder; Level 5: You Run the Software Factory explains where automations sit in the whole pipeline. The trigger families reflect Cursor’s docs as re-checked on 2026-10-12, and the webhook details reflect them as of 2026-08-28; confirm a specific event name on the Automations page before you depend on it.
What a Cursor automation setup gives you
Section titled “What a Cursor automation setup gives you”- A Slack-triggered triage automation that reproduces a reported bug with a failing test before it touches any code
- A nightly dependency audit that opens one PR for patch-only bumps, with test and type-check output in the body
- A docs-sync automation that runs after a merge and changes the docs only when the diff changed a public surface
- A decision rule for which trigger to use, and a warning about the kinds of event that fire far more often than you expect
- A verification setup in which no automation can merge its own work and every PR arrives with its evidence attached
What is a Cursor cloud agent?
Section titled “What is a Cursor cloud agent?”Cursor’s definition is short: “Cloud agents use the same agent fundamentals but run in isolated VMs in the cloud with full development environments instead of on your local machine.” Cloud Agents were previously called Background Agents; older posts use the old name.
The VM changes what the agent can prove before it hands you a pull request. With a full development environment, a cloud agent can run the app and exercise the flow it changed, and Cursor’s capabilities page lists computer use among its tools. A local agent can claim a UI fix works; a cloud agent can show you that it ran it.
Two more facts shape a fleet:
- No repository is required to start. The
@cursor/sdk1.0.32 README (read 2026-09-26) states: “Cloud agents can run on an empty VM with no repository.” It adds that “No-repo agents must be enabled for your account or team, and repository-scoped API keys cannot create them.” Cursor’s changelog of 2026-08-27 adds a second route: “Cloud Agents no longer require a connected GitHub or other third-party SCM provider to get started.” Choose Start from scratch in the repo picker and Cursor creates an Origin repo. When you set up an automation, decide whether it needs no repository, one, or several. - Every run costs model usage. An automation fires a full agent run each time its trigger matches, so trigger frequency is the biggest lever on the bill. Check your usage dashboard after the first week and narrow any trigger whose run count surprises you.
How do Cursor Builds make cloud agents start fast?
Section titled “How do Cursor Builds make cloud agents start fast?”Cursor’s docs define Builds in one line: “Builds prepare your Cloud Agent environment in the background.” The point is that environment preparation, such as cloning and installing dependencies, moves out of the agent’s startup path and happens before a trigger fires.
The latency matters in proportion to trigger frequency. On a twice-daily schedule it is a nicety. On a trigger that fires for every pull request in a busy monorepo, it decides whether the review lands before the author moves on.
What changed in Cursor Cloud Agents since August 2026?
Section titled “What changed in Cursor Cloud Agents since August 2026?”Cursor’s changelog, release notes and docs list these changes to Cloud Agents, Automations and the agent harness. Each row carries the date of the changelog or release-notes entry for the feature, and quotes marked as docs come from Cursor’s docs pages. Every source was read on 2026-10-12.
| Feature | What Cursor says | Date |
|---|---|---|
| Subscriptions | “Cursor Agent subscribes to an event source … Subscriptions are available for cloud agents only, for now.” | 2026-08-19 |
| Skills as Custom Modes | Cursor’s skills docs: “Any skill with a valid frontmatter block can back a Custom Mode, which keeps the skill in context for the whole session.” | 2026-08-19 |
| Subagents on their own VMs | Each subagent can run on its own machine (changelog). Cursor’s subagents docs: “Type /in-cloud and the next task you submit runs as a cloud subagent.” | 2026-08-19 |
/goal | Cursor’s agent overview: “/goal is rolling out. If you don’t see it, try it in a new chat.” It still says so on 2026-10-12. | 2026-08-19 |
| Start from scratch | “Cloud Agents no longer require a connected GitHub or other third-party SCM provider to get started.” Cursor creates an Origin repo; Origin, Cursor’s git forge, is “currently released in early beta” (Cursor’s Origin docs, checked 2026-10-12). | 2026-08-27 |
| Self-hosted machines | Run the agent’s tools on your own machines to “keep tool execution entirely in your own network”: My Machines (one laptop or VM) or Team pools (named worker queues that scale and can hibernate idle machines). Workers start with agent worker. | 2026-09-02 |
| Projects (beta) | A project takes on “a feature, a migration, or a full app” and “maintains context over months of work”. Its coordinator agent “doesn’t write code itself”, runs “on its own computer in the cloud” and can watch a Slack channel, run on a schedule or follow PRs through subscriptions. | 2026-09-10 |
| Standard mode on the web | Cloud Agents started from the web always run in standard mode; the long-running mode is removed from the web. | Week of 2026-09-21 |
| Builds always on | Environment builds “can no longer be turned off”, and you can start an agent from a closed pull request. | Week of 2026-09-28 |
Projects is available on all paid plans, including Enterprise (which needs Cursor 3.21.9 or later), but not on Hobby and not with Privacy Mode (Legacy). The Start plan (India only) includes Cloud Agents but not Automations (Cursor’s Projects docs, and its models and pricing docs for Start, checked 2026-10-12); plan prices are on the pricing analysis.
Cloud Agents do not use run modes. Cursor’s docs say: “Run Modes apply to local agents. Cloud Agents run inside their own dedicated machine, so the agent never asks you to approve an action.” An automation therefore has nobody to approve a step, so its boundary is what you gave it: the tool list, the repository scope and the secrets in its environment (Cursor docs, Agent security, checked 2026-10-12).
Treat each row as a new surface and try it on one repository first. A Project’s subscriptions can start work from Slack, a schedule or a pull request, so the untrusted-text and event-storm failure modes below apply to them. Self-hosted machines change where tools run, not who checks the result: the verification section below applies unchanged.
Which trigger should a Cursor automation use?
Section titled “Which trigger should a Cursor automation use?”Cursor’s automations page describes the product as running “cloud agents in the background, either on a schedule or in response to events from GitHub, GitLab, Slack, webhooks, Linear, and more.” On 2026-08-28 it documented seven trigger families, and Cursor’s docs list the same seven on 2026-10-12:
| Family | Reacts to | Typical use |
|---|---|---|
| Scheduled | A recurring schedule (cron) | Audits, digests, anything with no natural event |
| Source control | Repository events such as pull requests and pushes, on GitHub, GitLab or Bitbucket Cloud | Review, docs sync, backports |
| Slack | Activity in a Slack channel (public channels only) | Bug triage from a report channel |
| Webhook | An HTTP call from your own system | Anything your system already knows about |
| Linear | Issue activity in Linear | Starting work from a ticket |
| Sentry | Issue activity in Sentry | First-pass investigation of a new error |
| PagerDuty | Incident activity in PagerDuty | Gathering context while the on-call engineer responds |
Choose by asking one question: does the work follow a decision, or gate one? Work that follows a decision, such as docs sync or a backport, belongs on the merge event, which fires once per pull request. Work that gates a decision, such as a review, belongs on the event for a pull request being opened or labelled, not on the event for every push, which fires again on each push and force-push during review. Work with no natural event, such as audits and digests, uses a schedule.
Four kinds of event fire far more often than their names suggest: every push to an open pull request, every comment, every message in a busy Slack channel (one chatty thread can start a dozen agents), and any catch-all “every issue event” option on an issue tracker or error tracker. Pick the narrowest event in the family instead.
Build an automation: trigger, prompt, tools, scope
Section titled “Build an automation: trigger, prompt, tools, scope”Create an automation from Cursor’s Automations page (documented at cursor.com/docs/cloud-agent/automations, checked 2026-08-28). Then work through four decisions in order.
-
Pick the narrowest trigger that fits. One repository, one label, one channel. You can widen it after a week of clean runs; you cannot un-send the Slack messages from a noisy one.
-
Write the prompt. It runs with nobody watching, so it must name its own stop conditions, its size limits, and the input it treats as untrusted. The three prompts below show the pattern.
-
Choose the tools. The tool list is both the permission boundary and the output surface: an automation without a Slack tool cannot message Slack, whatever the prompt says, and one without any reporting tool leaves no trace where you look. MCP servers extend the list. For the triage and incident cases, the official Sentry and Linear servers are the obvious additions (see the box below), and Set up MCP servers in Cursor covers configuration and approval.
-
Set the repository scope, then save. A webhook-triggered automation needs its endpoint wired into the external system, so save the automation first and copy the endpoint details from it.
Automation or a long-running agent?
Section titled “Automation or a long-running agent?”Each event starts a new agent run. Anything carried between runs has to be written down somewhere the next run reads. Cursor’s docs describe an automation memory tool; check whether it is on and what it may store, because a Slack- or webhook-triggered run can write untrusted text into it. A fresh run per event is what you want for independent chores. Some work only makes sense as one continuous job, such as fixing every flaky test until CI is green. For that, Cursor’s 2026-08-19 release added /goal: “Use /goal to give the agent a long-lived objective to work towards until it’s fully complete.” The slash-command reference marked it as rolling out on 2026-08-28, and Cursor’s agent overview and CLI reference still say it is rolling out on 2026-10-12.
The same release announced that “Subagents can now run on their own virtual machines. Each gets an isolated copy of the project with clean context in its own cloud environment.” That makes wide fan-out possible, not automatically useful: each VM is another run on the bill, and another PR someone has to trust. The orchestration patterns guide covers when fan-out pays.
How do you verify what an automation shipped?
Section titled “How do you verify what an automation shipped?”Nobody reads every line an overnight automation writes, so the proof has to arrive with the pull request. Set up these five checks before the first automation goes live.
-
The automation cannot merge. Protect the default branch so every PR needs a passing required check and an approving review from a human code owner, with nobody on the bypass list. Nothing in an automation’s prompt can override branch protection; everything in a prompt can be ignored by the model. As a repository admin, this GitHub ruleset does it (replace
OWNER/REPOand the check nameciwith yours):Terminal window gh api -X POST repos/OWNER/REPO/rulesets --input - <<'JSON'{"name": "agents-cannot-merge","target": "branch","enforcement": "active","bypass_actors": [],"conditions": { "ref_name": { "include": ["~DEFAULT_BRANCH"], "exclude": [] } },"rules": [{ "type": "pull_request", "parameters": {"required_approving_review_count": 1,"dismiss_stale_reviews_on_push": true,"require_code_owner_review": true,"require_last_push_approval": true,"required_review_thread_resolution": false } },{ "type": "required_status_checks", "parameters": {"strict_required_status_checks_policy": true,"required_status_checks": [ { "context": "ci" } ] } }]}JSONThe empty
bypass_actorslist keeps every app, including Cursor’s, subject to the rule, andrequire_last_push_approvalstops whoever pushed last from approving their own push. On a private repository, rulesets and classic branch protection both need a paid GitHub plan (Pro, Team, or Enterprise Cloud); on GitHub Free they work only on public repositories (GitHub docs, checked 2026-09-26).require_code_owner_reviewis what stops a bot approval from being enough. Add a catch-all line to.github/CODEOWNERSthat names a team of people, and never list Cursor’s identity in it:* @OWNER/maintainersGitHub reads
CODEOWNERSfrom the base branch, so every PR, including one that editsCODEOWNERSitself, then needs an approval from that team, whatever else approved it. -
Evidence is in the PR body. Each prompt above requires a failing-then-passing test, test and type-check output, or a list of the surfaces it changed. A PR without its evidence section is closed unread, and the prompt is fixed.
-
CI re-runs everything. The agent’s pasted output is a claim; your CI run on the same commit is the proof. Treat a mismatch between them as a failed run.
-
A second agent reviews it. Cursor ships managed review agents. Bugbot “reviews pull requests and identifies bugs, security issues, and code quality problems”; Security Agents “scan your code for security bugs, risky patterns, and vulnerabilities”; PR Routing & Approval “assigns reviewers based on code ownership and commit history, and can approve low-risk PRs when your criteria are met” (all quoted from Cursor’s docs, 2026-08-28). An approval from PR Routing & Approval is an approving review like any other and can count toward the review rule in check 1. That is why check 1 also requires a code owner: with the catch-all
CODEOWNERSline, Cursor may approve, but only a person on the owning team can unblock the merge. If you cannot keep that line, switch its approval off on repositories where automations open PRs and use only its reviewer routing. Tuning is covered in the Bugbot guide and the rollouts and approval guide. -
A weekly sample. The tech lead opens five automation PRs a week at random and records whether each was merged, fixed, or closed. An automation whose merge rate falls is narrowed or switched off, not argued with.
Skipping this layer has a measured cost. Faros AI’s AI Engineering Report 2026: The Acceleration Whiplash (April 2026), built on telemetry from 22,000 developers, reports 31.3% more pull requests merging without any review. The agent PR review workflow shows the full layered setup.
How do you trigger and watch runs from your own systems?
Section titled “How do you trigger and watch runs from your own systems?”The Cloud Agents API “lets you programmatically launch and manage cloud agents that work on your repositories.” It exposes /v1/agents, runs under /v1/agents/{id}/runs, a run stream and cancel, artifacts, and /v0/private-workers for self-hosted compute. The Cursor SDK guide walks through launching and following agents from CI.
To learn that a run finished without polling, register a webhook. “When you create an agent with a webhook URL, Cursor will send HTTP POST requests to notify you about status changes.” The event type is statusChange. Take the signature header name, the payload fields, and the status values from Cursor’s webhooks page (cursor.com/docs/cloud-agent/api/webhooks) rather than from memory, then build the handler to three rules that hold for any signed webhook:
- Verify over the raw bytes. Compute the HMAC over the request body exactly as it arrived, before any JSON parsing, and compare it in constant time.
- Read optional fields defensively. A run that ended in an error may have produced no pull request, so do not assume a link or any other field is present.
- Make the handler idempotent. Deduplicate events on the agent
idandstatus, so a delivered-twice notification does not post twice or start a second job.
What breaks when Cursor automations run unattended?
Section titled “What breaks when Cursor automations run unattended?”Fork pull requests are a blind spot. They are the input you trust least, and a review automation that silently skips them covers only the PRs you already trust. Recovery: confirm on the Automations page how source-control triggers treat forks, and review fork PRs in CI with a workflow that gives the agent no secrets; the Cursor CLI automation guide shows one.
Untrusted text steers the agent. Slack-, Sentry-, and webhook-triggered automations read text written by someone who is not you. Recovery: open every prompt by naming that text as data, grant only the tools the job needs, and never give an event-triggered automation a tool that deploys or merges. Keep secrets out of its cloud environment as well: no deploy keys, cloud credentials or production tokens, only the narrowest token the job itself needs, because anything the agent can read, a steered agent can send somewhere. If Cursor’s cloud-agent settings offer an outbound network control, limit egress to your git host and package registries. This page could not verify on 2026-10-02 that such a control exists, so until you have confirmed one, assume the VM can reach any host and size the secrets to match.
The first runs are live runs. A new automation acts on real repositories and real channels from its first trigger. Recovery: launch every new automation on one repository, one label, or one channel, and widen it only after a week of runs you have read.
Event storms. The high-frequency events above can fire dozens of times an hour on a busy repository, and each fire is a paid run. Recovery: move a per-push trigger to the opened event plus a label, and a catch-all issue trigger to the event for a newly created issue.
A stale environment. Agents suddenly fail on a dependency that landed yesterday. Recovery: rebuild the prepared environment before you touch the prompt, then re-run one trigger to confirm.
A webhook signature that never verifies. Every check fails because your framework parsed and re-serialised the body before your handler ran. Recovery: read the raw body, compute the HMAC over those bytes, and parse afterwards.
A green run that left no trace. The agent did the work but had no reporting tool. Recovery: add a pull-request comment or Slack tool, and make the prompt’s last step a report.
How do Claude Code and Codex run the same kind of job?
Section titled “How do Claude Code and Codex run the same kind of job?”Claude Code’s equivalent is routines: a saved prompt plus repositories and connectors, run as cloud sessions on a Scheduled, API, or GitHub trigger, with a minimum interval of one hour. It is a research preview on 2026-09-26. Codex’s equivalent is automations, which its docs on 2026-08-28 described as a way to “schedule recurring tasks to run in the background”. Cursor’s list of event triggers is the widest of the three, and its cloud agents can also run their tools on your own machines (self-hosted machines, 2026-09-02). The background and cloud agents comparison sets all three side by side.