When Cursor is slow, classify the symptom before changing settings. Typing and scrolling lag usually points to rendering, chat-state growth, or a busy extension host. Sustained CPU after file edits often points to indexing or extensions in a large workspace. Slow first Agent tokens with a responsive editor points to model, service, VPN, proxy, or streaming transport. Remote SSH adds its own extension-host, filesystem, and workspace-size bottlenecks. Test a fresh chat, a small local folder, extensions disabled, and Cursor network diagnostics one variable at a time, then capture Process Explorer and request evidence.
- First separate local interface lag from remote Agent latency.
cursor --disable-extensionsis the highest-signal test for a busy extension host.- Large monorepos need a deliberate
.cursorignoreand a narrower workspace root. - Long chat history can slow both context processing and local chat-state rendering. Test a fresh chat.
- VPNs, corporate proxies, and HTTP/2 handling can stall streaming while ordinary browsing remains fine.
- Remote SSH performance depends on remote extension activation, file count, and filesystem latency.
Match the symptom to the layer
“Cursor is slow” is not yet a diagnosis. Say what is slow while the rest of the product is doing what. The dividing line is whether a local action lags before any AI request exists. If typing into a plain file stutters, the model provider is not the first suspect. If editing is crisp but Agent takes thirty seconds to start streaming, deleting editor caches is not the first suspect.
| Symptom | Most likely layer | Highest-signal first test |
|---|---|---|
| Typing, scrolling, or panels lag | Renderer, chat state, extension host, or GPU path | Open a small local folder and a fresh window |
| CPU spikes after every file edit | Repository indexer or language / AI extension | Process Explorer, then --disable-extensions |
| Agent is slow but editor is responsive | Conversation context, selected model, network stream, or service | Fresh chat, different model, network diagnostics |
| Only one repository is slow | Workspace size, generated files, watcher or index load | Open one subdirectory and inspect ignored paths |
| All repositories are slow | Extension set, application state, renderer, or current release | Empty profile or extensions-disabled launch |
| Only Remote SSH is slow | Remote extension host, index, filesystem, or connection | Same small folder locally and remotely |
| Only one teammate or network is slow | Proxy, VPN, DNS, route, or device | Different network and Cursor diagnostics |
| Everyone and every model is slow | Cursor or provider incident | Status page and request IDs |
The ten-minute diagnosis
Fully quit and reopen the current version
Closing one window may leave helper processes alive. Fully quit Cursor, confirm the application is gone, reopen, and reproduce once. Record the version from About before updating so a regression remains attributable.
Open a fresh Agent chat
Ask one narrow question about a small file. If it is fast while the old conversation is slow, context or accumulated chat state is involved. Do not delete the old chat yet.
Open a small local folder
Use a project with hundreds of files rather than a monorepo with generated trees. If the local control is fast, the installation and basic renderer are healthy.
Run once with extensions disabled
Launch cursor --disable-extensions. A large improvement implicates an extension or extension interaction. Re-enable by profile or in small groups instead of guessing one by one from a list of fifty.
Open Developer: Open Process Explorer
Look for renderer, extension-host, plugin helper, or other processes holding CPU or memory while the editor is idle and while the symptom occurs. Capture a screenshot rather than relying on fan noise.
Run Cursor network diagnostics
For slow Agent streaming, use Cursor Settings, Network, Run Diagnostics. Test without a VPN or corporate proxy if policy allows, then try the documented compatibility mode rather than editing unrelated files.
Check status and reproduce with another model
One model being slow suggests provider or route behavior. Every model being slow on every network suggests Cursor service or the local client path.
Stop when a single change produces a repeatable improvement. That result is worth more than a list of twenty speculative tweaks. Re-enable the suspected condition and confirm the slowdown returns before making a permanent tradeoff such as disabling indexing or abandoning an extension.
Extensions and the extension host
Cursor inherits the VS Code extension-host architecture and adds its own AI processes. Public forum reports repeatedly show high CPU and memory caused by several AI extensions running beside Cursor's built-in AI, language tooling activated for stacks not used in the current repository, or extension processes that remain after windows close. The point is not that extensions are bad. It is that they are executable programs sharing the editor's event loop and filesystem activity.
cursor --disable-extensions
If the control is fast, create workload-specific profiles. A TypeScript service does not need Java, Flutter, Jupyter, C#, Go, three AI assistants, and a pull-request bot activated at once. Keep the extensions required by the repository and disable the rest in that profile. Multiple AI coding extensions are especially prone to duplicating file watching, completions, indexing, and chat services.
| Observation | Interpretation | Next action |
|---|---|---|
| Fast with extensions disabled | At least one extension or interaction is causal | Enable half the set, reproduce, and bisect |
| Still slow with extensions disabled | Do not keep blaming extensions | Move to indexing, renderer, state, or network tests |
| Extension host climbs only after opening one repo | Workspace-triggered activation | Use Show Running Extensions and inspect that profile |
| Several AI helpers consume memory | Overlapping assistants are active | Keep the one used in this editor profile |
| Processes remain after closing windows | Window close did not end application helpers | Fully quit during diagnosis and update to a fixed release when available |
Indexing and large repositories
A large repository can be small in source code and enormous in files. Dependency trees, build output, caches, coverage, generated documentation, model artifacts, logs, and experiment results all create watcher and indexing work. Forum cases of CPU pinning after edits repeatedly improve when those paths leave the Cursor index or when the user opens a narrower workspace.
**/node_modules
**/.git
**/dist
**/build
**/.next
**/.cache
**/coverage
**/__pycache__
**/*.pyc
The file is not a universal best-practices list. Exclude directories the agent should neither search nor edit. Do not ignore generated source when your task routinely inspects that output, and do not assume .gitignore and .cursorignore answer the same question. One controls Git tracking; the other controls what Cursor should consider.
Count the problem, not just repository bytes
Find which top-level directories contain the most files and which change constantly. A million tiny cache entries can hurt more than one large asset.
Open only the active package
A monorepo root is convenient and expensive. Open the service or package being changed, or use a multi-root workspace containing only the few relevant directories.
Exclude generated and dependency trees
Add paths deliberately, reload, and observe Process Explorer during the same edit that previously caused the spike.
Inspect Indexing and Docs settings
Temporarily disable indexing only as a diagnostic. If it fixes the problem, narrow the corpus before deciding to lose repository-aware search entirely.
Long chats and local state
A long Agent conversation can be slow in two independent ways. First, more context must be assembled, transmitted, and processed before the next answer. Second, local chat history and UI state can grow large enough to make the chat panel itself lag. Cursor forum support has described cases where the local state.vscdb grew to multiple gigabytes and old Agent history made the interface nearly unusable.
| Test result | Likely problem | Safe response |
|---|---|---|
| Fresh chat streams quickly; old chat starts slowly | Conversation context | Summarize current state and continue in a new chat |
| Whole chat panel lags even before sending | Local history or rendering state | Use the built-in Delete Old Chats command after preserving anything needed |
| Editor lags only with chat panel open | Chat rendering or state | Close the panel, update, and capture process evidence |
| All panels lag and state database is very large | Broader application-state growth | Back up settings and history before any cache cleanup |
| Fresh chat is equally slow | Context alone is not the cause | Move to model, network, service, indexing, and extension tests |
Prefer built-in history deletion to manually deleting a database. If a forum workaround tells you to remove state or cache directories, treat it as destructive maintenance: fully quit Cursor, back up the data, record exact paths, and understand that chat history may be unrecoverable. Cache clearing is a last resort after a clean-profile test proves state is involved, not a first response to any slow answer.
A fresh chat also improves cost and quality when a task has changed direction. Carry forward the objective, relevant file paths, current diff, tests run, and unresolved error. Do not paste the entire old transcript back into the new window; that recreates the context problem in one turn.
Network, model, and service latency
When the editor stays responsive and only Agent waits, classify the wait. Time to first token points toward request setup, context processing, route, model, or streaming transport. Slow tokens after the response begins points more toward provider generation or a buffered stream. Slow tool steps inside an otherwise responsive answer point toward the command, remote filesystem, or extension host the agent is waiting on.
- Start a fresh narrow chat. This removes accumulated context from the comparison.
- Try one other model. Keep the prompt and repository constant. A model-specific delay is useful evidence.
- Run Cursor network diagnostics. Save the result instead of relying on a browser speed test.
- Test another allowed network. VPNs, Zscaler, corporate proxies, and managed routes can buffer long-lived streams while normal web pages load normally.
- Try Cursor’s HTTP compatibility setting. Forum support commonly suggests HTTP/1.1 or disabling HTTP/2 for buffered streaming, followed by a full restart.
- Check status. Correlate the incident time and selected model rather than treating a green page as proof no partial degradation exists.
- Capture a Request ID. This lets support distinguish provider delay, Cursor infrastructure, and client-side stream behavior.
Usage limits and slowness should remain separate diagnoses. Current on-demand requests are not intentionally put in a slow queue after included usage ends. If a response is slow, investigate performance. If it is rejected with a quota message, investigate the account limit. An old article about "slow premium requests" describes a retired billing era.
Remote SSH has three extra bottlenecks
Remote SSH adds a network hop, a remote extension host, and a remote filesystem. Cursor forum reports show lag that is worse in workspaces with recursively large file trees, heavy remote extensions, MCP servers activated remotely, or Cursor Server installed on slow network-mounted storage. A local project being fast does not clear any of those remote layers.
| Remote symptom | Likely cause | Test |
|---|---|---|
| Explorer, save, and terminal all freeze | Remote extension host or connection saturated | Open a tiny remote directory with extensions reduced |
| Startup and server extraction take minutes | Cursor Server lives on NFS or other slow shared storage | Compare install path and local disk on the remote host |
| Lag worsens with repository size | Remote indexing and recursive file visibility | Open one package and add generated paths to .cursorignore |
| Lag begins after MCP activation | Remote MCP process or extension activation load | Disable remote MCP servers temporarily |
| One very large file stalls the whole session | Remote transfer occupies the connection | Avoid opening the artifact and reproduce with a small file |
| VS Code is fast on the same host | Cursor-specific remote index or extension path | Compare extension sets and the Anysphere Remote SSH implementation |
Use Developer: Show Running Extensions while connected remotely. Extensions can be installed on the local UI side, the remote workspace side, or both, and the slow process may not be where you expect. Keep remote profiles lean. A language server needed for the current code belongs there; a calendar of unrelated AI and review extensions does not.
Do not delete ~/.cursor-server as a casual first step. That can force a clean reinstall and has helped individual forum cases, but it removes remote state and extensions. First capture the version, logs, extension activation times, install filesystem, and a reproducible small-workspace comparison. If cleanup becomes justified, back up what matters and target the explicit remote directory.
Rendering, GPU, and release regressions
If typing, scrolling, menus, and panel animation lag while CPU and extension tests are clean, the Electron rendering path is plausible. Forum users have reported improvements after disabling hardware acceleration, especially after particular releases. That is a diagnostic switch, not a universal performance recommendation: on a healthy system GPU acceleration should make rendering cheaper, and disabling it can move work to the CPU.
Record the exact Cursor and OS versions
A regression report without a build cannot be compared with anyone else's. Note whether the problem began immediately after an update.
Check Process Explorer during visible lag
Renderer pressure and extension-host pressure imply different next steps even if both make typing stutter.
Test hardware acceleration once
Use Preferences: Configure Runtime Arguments, change the documented hardware-acceleration setting, fully restart, and repeat the same scrolling or typing test. Revert if there is no clear improvement.
Try the next stable patch before a destructive reset
Cursor ships frequently. Check the changelog and forum for the exact build symptom; preserve a working installer or rollback path if your organization permits version pinning.
A release correlation is not proof by itself. Updates also restart processes, rebuild indexes, activate new extension versions, and migrate state. The control tests still matter. The useful bug report says "version X is slow in a clean profile on this file, version Y is not", not merely "it became slow after Tuesday".
What to send Cursor support
Cursor version and release track:
Operating system and hardware:
Local / Remote SSH / container:
Exact slow action:
Time to reproduce:
One repo or every repo:
Fresh chat result:
Small local folder result:
--disable-extensions result:
Top Process Explorer process:
Network diagnostics result:
VPN / proxy / managed network:
Selected model and Request ID:
Workspace file count and largest generated paths:
First version where the problem appeared:
Attach the smallest reproduction and say which single control changed the result. Avoid logs containing source or prompts your policy does not permit sharing. A screenshot of Process Explorer, extension activation times, and the network diagnostic is usually more useful than a screen recording of a spinner.
Questions people ask
The common layers are a busy extension host, large-workspace indexing, accumulated chat state, rendering or GPU behavior, network streaming, model or service latency, and Remote SSH filesystem load. Match the symptom to a layer before changing settings.
Sustained CPU commonly comes from repository indexing or extensions. Open Developer: Open Process Explorer, reproduce an edit, then compare with a small workspace and cursor --disable-extensions.
Open the narrowest useful package, exclude generated and dependency paths in .cursorignore, use project-specific extension profiles, and verify indexing behavior in Process Explorer.
The likely causes move to conversation context, selected model, Cursor or provider load, and the streaming network path. Test a fresh chat, another model, Cursor network diagnostics, another allowed network, and the status page.
Yes, they can. More context takes longer to process, and accumulated local chat history can also make the interface lag. Continue from a concise state summary in a fresh chat instead of copying the whole transcript.
Only after a clean-profile or fresh-state test implicates local state. Back up settings and history first. Cache deletion is destructive maintenance and does not fix account limits, network latency, or a busy indexer.
Remote SSH adds a remote extension host, remote indexing, a network connection, and filesystem latency. Open a smaller remote directory, reduce remote extensions and MCP servers, ignore generated trees, and keep Cursor Server on local remote-host storage rather than NFS.
Sometimes, when the renderer or GPU path is the demonstrated cause. Test it once with the same reproduction and revert if it does not clearly help; it is not a universal speed setting.
Current on-demand usage is not a slow queue and is not downgraded in quality or speed. A quota rejection and a slow response are separate problems.
Sources
Every figure above was read from these pages on August 2026. Vendors reprice without notice; if you find a stale number, tell us.