Cursor Config Conflicts with VS Code Workspace Settings

Open a team repo and Cursor's formatting or AI behavior changes? The repo's .vscode/settings.json is overriding your user settings. Here's how to find which layer won.

You turned off format-on-save in your user settings and set the default model to Sonnet 4.6. Then you open a team repo and save suddenly reformats the file, the model swaps to something else (gpt-5.5 or Composer 2.5), and Tab autocomplete stops popping up. Nothing is broken. Cursor is built on VS Code and inherits its layered settings model: Default -> User -> Workspace -> Folder, where the layer closest to the file wins. The repo’s committed .vscode/settings.json (and .cursor/ files) quietly outrank your personal preferences.

Fastest fix: open the affected file, run Cmd+Shift+P (Ctrl+Shift+P on Windows/Linux) -> Preferences: Open Settings (UI), search the misbehaving key (e.g. editor.formatOnSave). Cursor tags each row with the scope that won (Workspace, User, or Default). That one screen tells you which layer to edit. Then change that layer, not your user settings.

Which bucket are you in?

SymptomMost likely layerFast check
Save reformats / wrong formatter.vscode/settings.json (editor.formatOnSave, editor.defaultFormatter)Settings UI shows the key as Workspace
Indent size / tabs vs spaces flipped.editorconfig at repo rootcat .editorconfig
AI feature (Composer, Tab, Cmd+K) disabledcursor.* key in .vscode/settings.jsonsearch cursor. in Workspace Settings (JSON)
Cursor AI extension greyed out.vscode/extensions.json unwantedRecommendationsExtensions panel shows “Disabled (Workspace)“
Wrong model / rules in chat.cursor/rules/*.mdc or .cursorrulesls -la .cursor/rules/
Settings behave differently only when one repo is openmulti-root .code-workspaceFile -> Open Recent: did you open a .code-workspace?

Common causes

1. Repo .vscode/settings.json overrides format and AI keys

A team commits .vscode/settings.json to standardize style. It can contain both editor keys and Cursor-specific keys, for example:

{
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "cursor.cpp.disabledLanguages": ["markdown"],
  "cursor.general.enableTab": false
}

The last two disable Cursor features outright in that workspace. Cursor reads its own cursor.* keys from the same .vscode/settings.json layers VS Code uses — there is no separate per-project settings file for them (more on that in cause 2).

How to judge: Cmd+Shift+P -> Preferences: Open Workspace Settings (JSON) and look for any cursor.* keys, plus editor.formatOnSave / editor.defaultFormatter.

2. Repo-root .cursor/ directory

This is the spot most guides get wrong. As of June 2026, .cursor/ does not hold a general .cursor/settings.json for editor or AI preferences. Per the official Cursor docs, the directory holds:

  • .cursor/rules/*.mdc — project rules (Markdown + frontmatter: description, globs, alwaysApply). These change how the AI writes code in this repo.
  • .cursor/mcp.json — project-scoped MCP server config.

So if the AI is behaving oddly in one repo (style, framework assumptions, refusing certain edits), look at the rules, not a phantom settings file. A legacy single .cursorrules file at the repo root still works if present.

How to judge: ls -la .cursor/rules/ and cat .cursorrules 2>/dev/null.

3. Conflicting Prettier / ESLint configs

.prettierrc at repo root, a .prettierrc.json in a subdirectory, plus an installed preset plugin. The formatter resolves the config closest to the current file, so two files in the same project can format differently.

How to judge: in an offending file, Cmd+Shift+P -> Format Document With... and check which formatter is set as default.

4. Workspace extension enable / disable list

A repo can commit .vscode/extensions.json with recommendations and unwantedRecommendations. If a Cursor or AI extension is listed under unwantedRecommendations, it shows as disabled for that workspace and its features go dark.

How to judge: open the Extensions panel and check whether the extension shows “Disabled (Workspace).“

5. Multi-root workspace priority confusion

A .code-workspace file can bundle multiple folders, each with its own .vscode/settings.json, plus a top-level settings block inside the .code-workspace itself. Resolution order is non-obvious: the .code-workspace file’s settings apply across all folders, and each folder’s own settings apply within that folder.

How to judge: File -> Open Recent — did you open a .code-workspace file or a plain folder? If it’s a workspace file, inspect its settings block directly.

6. EditorConfig overrides silently

.editorconfig with indent_size = 2 overrides a user setting of 4 with no UI hint at all. VS Code honors EditorConfig through the built-in support, and it wins for the keys it covers (indentation, end-of-line, charset).

How to judge: cat .editorconfig at repo root.

Before you start

  • Confirm the issue is workspace-specific: open a different repo (or an empty folder) and test the same action. If it behaves correctly there, the cause is in this repo’s config, not your install.
  • Branch or commit before editing .vscode/settings.json so you don’t accidentally trash team config.
  • Note your Cursor version (Cmd+Shift+P -> About) and the active model — defaults shift between releases, and Cursor 3.x defaults the in-house Composer 2.5 model in some surfaces.

Info to collect

  • Cursor version and OS.
  • Full contents of .vscode/settings.json, .editorconfig, .prettierrc*, and ls -la .cursor/rules/ at repo root.
  • Cmd+Shift+P -> Developer: Open Settings (JSON) for your User layer (so you can diff User vs Workspace).
  • A minimal repro: which file, which action, expected vs actual.

Shortest fix path

Ordered as “see clearly first, then choose which layer to change.”

Step 1: Trace the source of the active value

Cmd+Shift+P -> Preferences: Open Settings (UI), search the suspicious key (e.g. editor.formatOnSave). Cursor tags each setting with Workspace, User, or Default. That immediately tells you which layer overrode your value. For Cursor’s own keys, search cursor. in the same UI.

Step 2: Read the repo’s overrides

cat .vscode/settings.json
ls -la .cursor/rules/ 2>/dev/null
cat .cursorrules 2>/dev/null
cat .editorconfig 2>/dev/null

List the overrides on one table: key -> repo value -> your desired value. This is your fix checklist.

Step 3: Pick a layer to change

  • You can commit to the repo: edit .vscode/settings.json so the whole team gets the corrected, agreed-upon value. This is the right fix for genuinely shared preferences (formatter, line endings).

  • You can’t (fork, vendored dependency, large monorepo with a strict config policy): there is no “user beats workspace” override in VS Code — the workspace layer always wins over user. Practical options:

    • Edit the value locally in .vscode/settings.json and keep it out of git. The cleanest way is a personal global gitignore (git config --global core.excludesfile ~/.gitignore_global, then add .vscode/settings.json) so your local change never gets staged in any repo.
    • Or open the project through your own .code-workspace file kept outside the repo, and put your personal overrides in its top-level settings block.

    Note: there is no built-in .vscode/settings.json.local merge feature — VS Code does not read a .local sidecar. Don’t rely on one.

Step 4: Handle AI-specific overrides

If the repo set, say, "cursor.general.enableTab": false or disabled Composer via a cursor.* key:

  • Team agreement: keep it; understand why the team turned it off.
  • Personal use: flip it back. Application-scope AI toggles live in Cursor Settings -> Features and in Cursor Settings -> Models (model defaults for completions vs Composer). Settings shown there as application-scope are not overridden by the workspace; workspace-scoped cursor.* keys in .vscode/settings.json are, so check Step 1 to see which scope you’re fighting.

Step 5: Re-enable a disabled extension

Extensions panel -> find the extension -> right-click -> Enable (Workspace). If that option isn’t there, the repo actively suppressed it via unwantedRecommendations in .vscode/extensions.json — remove that entry (and commit if the team agrees).

Step 6: Untangle Prettier conflicts

# Find every Prettier config
find . -name ".prettierrc*" -not -path "./node_modules/*"
find . -name "prettier.config.*" -not -path "./node_modules/*"

Keep one config at repo root; remove the strays or have them explicitly extends the root. Then re-run Format Document With... to confirm the right formatter is now default.

How to confirm it’s fixed

  • Re-open the Settings UI and confirm the key now shows the scope you intended (e.g. User if you removed the workspace override, or the corrected Workspace value).
  • Restart Cursor and trigger the original action once more, to rule out transient session state.
  • Open another repo (or another machine) and reproduce — this separates Cursor config from this project’s state.
  • Have a teammate open the same repo and retry — confirms the fix isn’t only your local cache.

If it still fails

  • Reduce the repro to the smallest case: one file, one format action, all extensions disabled (Cmd+Shift+P -> Extensions: Disable All Installed Extensions).
  • Roll back your latest Cursor upgrade or the most recent .vscode/settings.json edit and retest.
  • Search forum.cursor.com for “workspace settings override”; include your Cursor version and the full .vscode/settings.json.
  • Grab View -> Output -> Cursor logs and post them to the Bug Reports section of the forum.

Prevention

  • First task on any new repo: cat .vscode/settings.json .editorconfig and ls -la .cursor/rules/.
  • Add a “Recommended Cursor settings” section to team docs so nobody has to guess.
  • Commit only genuinely shared keys to .vscode/settings.json (formatter, end-of-line, indentation). Keep personal preferences (theme, font, AI defaults) in your User settings, backed by a global gitignore so they never leak into a repo.
  • Maintain a “must stay enabled” list for AI features (Composer, Tab, Cmd+K) on the onboarding checklist.
  • Turn on Cursor Sync (or VS Code Settings Sync) so your user settings follow you across machines and you don’t re-hit the same trap on a fresh install.

Tags: #Troubleshooting #Cursor #Debug