Enterprise
Cursor Enterprise Deployment Patterns: MDM & Package Managers
Cursor can be deployed to developer machines via MDM, a package manager or direct installation from cursor.com/download. MDM lets IT enforce policies and automate updates on macOS (via Jamf or Kandji) and Windows (Intune). Cursor's cloud distribution system is an alternative for syncing hooks without MDM: it pushes to all members when they log in.
On this page
- What deployment methods does Cursor Enterprise support?
- How do we deploy Cursor via MDM?
- How do we distribute hooks to all team members?
- How does Cursor work behind a corporate proxy or VPN?
- How do we control Cursor update cadence on managed machines?
- Does self-hosting Cursor's cloud agents keep the model inside our network?
- What governance knobs control cloud agents at the org level?
What deployment methods does Cursor Enterprise support?
How you distribute depends on who owns the machine. IT-managed fleets go through MDM; developer-owned boxes use package-manager scripts; small pilots can just download the build.
- Method
- MDM (Jamf, Intune, Kandji)
- Best for
- Enforced deployment, policy management, auto-updates
- Who manages it
- IT / security team
- Method
- Package managers (Homebrew, winget, Chocolatey, apt)
- Best for
- Developer-controlled install, scripted provisioning
- Who manages it
- Developer or DevOps
- Method
- Direct download (cursor.com/download)
- Best for
- Manual install, fast pilots, small teams
- Who manages it
- Individual user
| Method | Best for | Who manages it |
|---|---|---|
| MDM (Jamf, Intune, Kandji) | Enforced deployment, policy management, auto-updates | IT / security team |
| Package managers (Homebrew, winget, Chocolatey, apt) | Developer-controlled install, scripted provisioning | Developer or DevOps |
| Direct download (cursor.com/download) | Manual install, fast pilots, small teams | Individual user |
Cursor does not push or manage files through your MDM. Your IT team owns that configuration.
The method also settles where the application lands on disk, which is why it outlives the rollout. Cursor's endpoint-security guidance names two Windows locations, %LOCALAPPDATA%\Programs\cursor\ for a user install and %ProgramFiles%\cursor\ for a system install, and antivirus exclusions have to point at whichever one your machines actually have.
A fleet that grew half through MDM and half through people installing it themselves needs both paths listed. Endpoint security has the full exclusion set.
For a pilot of six or eight, MDM is probably more setup than it saves. Direct download and a line in the onboarding doc gets everyone running, and the version drift you are avoiding is not costing you anything yet. The threshold is less a headcount than a question. Whether anyone is being asked to prove which build the team is on.
This is covered hands-on in Teams and Enterprise Admin — 6 short modules, free to read.
How do we deploy Cursor via MDM?
Cursor documents MDM deployment for three vendors: Jamf, Kandji and Microsoft Intune. Download the relevant build from cursor.com/download and follow your vendor's standard app deployment workflow. Cursor does not push or manage files through your MDM. Configuration and update cadence are owned by your IT or security team.
Vendor choice matters less than policy format, though, since that is where the per-OS work actually lands. Windows takes policies through Registry-based Group Policy, macOS through a .mobileconfig configuration profile, and Linux reads ~/.cursor/policy.json on Cursor 2.0 and later. Reference profiles ship inside the macOS app bundle at /Applications/Cursor.app/Contents/Resources/app/policies/, which is quicker to copy from than to write from scratch.
Getting Cursor onto a machine (this article) is a different layer from enforcing which team members can log in and which models or extensions they can use. See Identity & Access Management for the AllowedTeamId, AllowedExtensions and WorkspaceTrustEnabled policies.
Push the application and the policy profile as two separate runs. Combine them and a failed first sign-in leaves you two suspects, the package and the profile, with no way to tell them apart without pulling a machine off someone's desk. The gap also buys a confirmation that the build launches on your standard image, which is probably the step people skip.
How do we distribute hooks to all team members?
Hooks (scripts that run at specific points in the Cursor agent workflow) can reach developer machines three ways:
- Project hooks: commit
.cursor/hooks.json(plus any scripts under.cursor/hooks/) to the repo so every engineer gets them on clone. The workspace has to be trusted before they run. - MDM-based distribution: place
hooks.jsonper user at~/.cursor/hooks.json, or system-wide at/Library/Application Support/Cursor/hooks.jsonon macOS,/etc/cursor/hooks.jsonon Linux and WSL,C:\ProgramData\Cursor\hooks.jsonon Windows. - Cursor cloud distribution: configure hooks in the Enterprise admin dashboard and Cursor automatically delivers them to every client machine when a team member logs in. No MDM required.
Cloud distribution is the simplest route if you are already on Enterprise. Hooks are configured in the web dashboard, delivered when a team member logs in, then re-synced every thirty minutes, so an edit made before standup is on the fleet by mid-morning. It also targets by operating system, which saves maintaining one script that branches on platform.
Four locations can define the same hook, and all of the matching ones run. Precedence only settles disagreements: when two hooks return conflicting responses, Cursor merges them highest-first, Enterprise then Team then Project then User. A system-wide hook pushed by MDM does not stop the one an engineer committed to the repo from running, it just wins the argument about what the answer should be. When a hook fires and the decision is not the one the repo asked for, that ordering is what I would check first.
The cloud-agent side carries its own limits. Cloud agents run command-based hooks only, and they never read ~/.cursor/hooks.json, because the VM has no access to a developer's home directory. A hook that works on a laptop and does nothing in a cloud run is usually one of those two, though the per-user MDM path is the route that walks straight into it.
How does Cursor work behind a corporate proxy or VPN?
Most corporate proxies work transparently. The common failure is a network that blocks HTTP/2 streaming, and Zscaler is the documented example. On one machine, switch HTTP Compatibility Mode to HTTP/1.1 under Cursor Settings → Network and restart. Across a fleet, the NetworkDisableHttp2 MDM policy does the same thing without asking anyone to click it.
My first instinct was to set that policy fleet-wide as insurance. That gets it backwards: Cursor already falls back to HTTP/1.1 server-sent events on its own when a proxy breaks the stream, and that fallback was built for Zscaler specifically, so the policy forces what the client otherwise handles transparently. Scope it to the sites behind the proxy that needs it, and use the Run Diagnostics button under Settings → Network to test connectivity before you decide.
For everything else, the fix depends on where the network breaks the connection. The table maps each symptom to the setting that resolves it.
- HTTP/2 blocked
- Enable HTTP Compatibility Mode (Settings → Network → HTTP/1.1).
- Proxy auth required
- Cursor respects system proxy settings; check that env vars or OS proxy config are set.
- Certificate inspection (MITM)
- Add your internal CA to the system trust store; Cursor uses the system TLS stack.
- Private connectivity
- For VPC-routed or on-prem scenarios, see Enterprise Private Connectivity.
The certificate row is the one this page cannot finish for you. Adding your internal CA to the system trust store handles the client side; the proxy side, meaning firewall allowlists and SSL-inspection exclusions, sits on network configuration. Settle that first or the client-side fix will look like it failed.
How do we control Cursor update cadence on managed machines?
Update cadence is an MDM policy called UpdateMode, and it takes five values. none disables automatic updates, manual lets users check for themselves, start checks on launch, default behaves the same as start, and silentlyApplyOnQuit downloads in the background and applies when Cursor quits. Cursor publishes builds for all platforms at cursor.com/download, so pinning a version means deploying that build through your MDM and setting the policy to match.
On a managed fleet I would reach for silentlyApplyOnQuit before none. It keeps machines current without interrupting anyone mid-session, and it steps around the macOS problem: Electron makes Cursor updates require administrator privileges there, so on a fleet where developers are standard users, an update prompt that lands mid-task is one they cannot complete. Cursor's own suggestions for that case are MDM deployment, an automated tool such as Installomator, or UpdateMode set to none.
Pinning has a clock attached to it, which is the part that surprises people. Cursor runs two version floors: a minimum supported version, where users on older builds see a dismissable warning, and a minimum allowed version, where the error cannot be dismissed and they have to upgrade. A release becomes eligible for the first about two months after its GA date, and for the second about three months after. Freeze a build with UpdateMode set to none and leave it there, and roughly a quarter later your fleet hits the error nobody can click past.
A pin needs a review date. Whoever sets it should book the revalidation in the same change ticket, two months out, while the warning is still dismissable.
Does self-hosting Cursor's cloud agents keep the model inside our network?
This is the single most common enterprise misconception about deploying Cursor. Self-hosted runtimes move where tool calls execute: the shell that clones your repo, runs commands, edits files and drives the browser. They do not move model inference, and they do not move the agent loop, which Cursor documents as running in its cloud on all three runtimes. Every completion is still an outbound call to a model provider.
The agent container (the sandbox where code runs) can live in your network so it can reach internal Git, package registries, build systems and self-hosted MCPModel Context Protocol. A standard that lets an AI agent pull in context from outside the repo, like Jira tickets or internal docs. Press Enter for the full definition. servers.
Model inference is still external. The container makes outbound calls to the model providers Cursor uses. No weights run on your hardware.
If your goal is "no source code or prompts leave our network for inference," private workersCloud-agent machines that run inside your own network so they can reach internal systems; the model inference still calls external providers. Press Enter for the full definition. alone do not deliver that. Pair them with the data-handling and privacy controls in your Cursor Enterprise agreement.
What a private worker buys you is network reach. Because it runs where your internal services live, the agent can talk to an internal-only Git host or a private package registry, and to MCPModel Context Protocol. A standard that lets an AI agent pull in context from outside the repo, like Jira tickets or internal docs. Press Enter for the full definition. servers you keep off the public internet.
Whether you need one at all, and which runtime fits, is a separate call and probably the one to make first. Choosing a Cloud Agent runtime walks the decision tree Cursor publishes.
- Agent container (clone, run, edit)
- Your network, when you self-host private workersCloud-agent machines that run inside your own network so they can reach internal systems; the model inference still calls external providers. Press Enter for the full definition..
- Internal Git / registries / MCP
- Your network, reachable only because the container is co-located.
- Model inference (completions)
- External. Outbound calls to Cursor's model providers, always.
- Model weights
- Never on your hardware; self-hosting does not ship weights.
Self-hosting relocates the execution sandbox, not the model.
What governance knobs control cloud agents at the org level?
Cloud agents run with broad capability by default, so the Enterprise admin dashboard exposes per-org controls over what a run can reach and how long it can run. Set these before you turn agents loose on real repos.
- Knob
- Domain allow-lists
- What it controls
- Which external hosts the agent's environment may reach over the network.
- Why it matters
- Prevents exfiltration and pulls from untrusted hosts; the agent can only talk to approved domains.
- Knob
- Run-time caps
- What it controls
- Maximum wall-clock duration (and effective spend) per agent run.
- Why it matters
- Stops runaway loops and bounds cost on long autonomous tasks.
- Knob
- Environment isolation
- What it controls
- Whether each run gets a fresh, sandboxed container with no shared state.
- Why it matters
- Keeps one run's secrets and artifacts from leaking into the next.
- Knob
- Branch control
- What it controls
- Which branches an agent may push to and whether it can open PRs directly.
- Why it matters
- Keeps agents off protected branches; forces human review via PR.
- Knob
- MCPModel Context Protocol. A standard that lets an AI agent pull in context from outside the repo, like Jira tickets or internal docs. Press Enter for the full definition. toggles
- What it controls
- Which MCPModel Context Protocol. A standard that lets an AI agent pull in context from outside the repo, like Jira tickets or internal docs. Press Enter for the full definition. servers and tools the agent is allowed to call.
- Why it matters
- Limits the agent's blast radiusHow much breaks if a change goes wrong; the scope of potential damage. Press Enter for the full definition. to vetted integrations only.
- Knob
- Model selection
- What it controls
- Which models the org permits agents to use.
- Why it matters
- Enforces approved providers and controls cost/quality tradeoffs.
| Knob | What it controls | Why it matters |
|---|---|---|
| Domain allow-lists | Which external hosts the agent's environment may reach over the network. | Prevents exfiltration and pulls from untrusted hosts; the agent can only talk to approved domains. |
| Run-time caps | Maximum wall-clock duration (and effective spend) per agent run. | Stops runaway loops and bounds cost on long autonomous tasks. |
| Environment isolation | Whether each run gets a fresh, sandboxed container with no shared state. | Keeps one run's secrets and artifacts from leaking into the next. |
| Branch control | Which branches an agent may push to and whether it can open PRs directly. | Keeps agents off protected branches; forces human review via PR. |
| MCPModel Context Protocol. A standard that lets an AI agent pull in context from outside the repo, like Jira tickets or internal docs. Press Enter for the full definition. toggles | Which MCPModel Context Protocol. A standard that lets an AI agent pull in context from outside the repo, like Jira tickets or internal docs. Press Enter for the full definition. servers and tools the agent is allowed to call. | Limits the agent's blast radiusHow much breaks if a change goes wrong; the scope of potential damage. Press Enter for the full definition. to vetted integrations only. |
| Model selection | Which models the org permits agents to use. | Enforces approved providers and controls cost/quality tradeoffs. |
Configure these in the Enterprise admin dashboard before granting cloud-agent access broadly.
Of the six, domain allow-lists and branch control are the two I would have in place before anyone gets access, because they bound what a run can reach and what it can land. Run-time caps and model selection can follow a week later; a wrong value there shows up on the bill. Confirm environment isolation rather than assuming it, since a run that inherits state from the one before it is hard to spot after the fact.
Domain allow-lists and MCPModel Context Protocol. A standard that lets an AI agent pull in context from outside the repo, like Jira tickets or internal docs. Press Enter for the full definition. toggles govern what the agent container can reach. They do not change the fact that inference is external.
If a private worker is in scope, confirm the worker still honors org-level domain allow-lists and branch control; co-location does not exempt it from governance.
Frequently asked questions
Which MDM vendors does Cursor officially document?
Cursor names Jamf, Kandji and Microsoft Intune. For other vendors, the process follows your MDM's standard workflow: a custom configuration profile on macOS, Registry-based Group Policy on Windows.
Does Cursor support silent installation for mass deployment?
On Windows, yes. The installer is built on Inno Setup and accepts /SILENT, /VERYSILENT, /SUPPRESSMSGBOXES, /NORESTART and /CLOSEAPPLICATIONS; updating an existing install also needs /update pointing at a flag file. Installers before version 2.0 may not respect /SILENT correctly, so check the build you are deploying.
What is the difference between hook deployment and identity policy deployment?
Hook deployment distributes scripts that run during agent workflows. Identity policies (AllowedTeamId, AllowedExtensions, WorkspaceTrustEnabled) control who can log in and what features they can access. Both can go through MDM, but Cursor's cloud distribution handles hooks without needing MDM at all.
Can we prevent developers from installing Cursor outside the managed version?
Enforce this through your MDM by blocking sideloaded .app installs on macOS or using Windows application control policies. Cursor itself does not enforce a single managed-install channel.
Can we pin Cursor to one version indefinitely?
Not indefinitely. UpdateMode set to none stops automatic updates, but Cursor enforces two version floors: a minimum supported version that shows a dismissable warning, and a minimum allowed version that shows an error users cannot dismiss. A release becomes eligible to be the minimum supported version about two months after its GA date, and the minimum allowed version about three months after. Plan a revalidation inside that window.
Does self-hosting Cursor mean the model runs on our servers?
No. Self-hosting or private workers run only the cloud-agent container inside your network so it can reach internal Git, registries and MCP servers. Model inference stays external: the container still calls Cursor's model providers, and no model weights run on your hardware.
Sources & last verified
- Cursor - Deployment Patterns
- Cursor - Identity & Access Management
- Cursor - Hooks
- Cursor - Network Configuration
- Cursor - Endpoint Security
- Cursor - Download
- Cursor - Enterprise
Cursor ships frequently. Last updated July 28, 2026.
Keep reading
Rather do it than read about it? Run 11 interactive Cursor walkthroughs in a simulated editor. Free, no account needed.