Cursor Config Conflicts with VS Code Workspace Settings

Open a team repo and Cursor's formatting / AI behavior changes — the repo's .vscode/settings.json overrode your user settings.

You disabled format-on-save in user settings and set the default model to sonnet. Open a team repo and suddenly save reformats your file, the model swaps to gpt-5-codex, and Tab autocomplete stops popping. Cursor inherits VS Code’s layered settings model: user → workspace → folder, where the closer-to-file layer wins. The repo’s .vscode/settings.json or .cursor/ files quietly squash your personal preferences.

Fix it by figuring out which layer overrode what.

Common causes

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

A team committed .vscode/settings.json to standardize style; it might contain:

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

The last two disable Cursor features outright.

How to judge: Cmd+Shift+P → “Preferences: Open Workspace Settings (JSON)” — look for any cursor.* keys.

2. Repo-root .cursor/ config

Cursor-specific config can live at .cursor/settings.json or .cursor/rules/. For Cursor features, this layer beats .vscode/.

How to judge: ls -la <repo-root>/.cursor/.

3. Conflicting prettier / eslint configs

.prettierrc at repo root, .prettierrc.json in a subdir, plus an installed preset plugin. Cursor uses the one closest to the current file.

How to judge: in an offending file, Cmd+Shift+P → “Format Document With…” and check which formatter is the default.

4. Workspace extension enable / disable list

A repo can commit .vscode/extensions.json with recommended (or unwanted) extensions. If Cursor’s AI extension is in unwantedRecommendations, AI features go dark in that workspace.

How to judge: Extensions panel → check whether your Cursor extension shows “Disabled (Workspace).“

5. Multi-root workspace priority confusion

A .code-workspace file can bundle multiple repos, each with its own settings. The resolution order is non-obvious and often the opposite of what you’d guess.

How to judge: File → Open Recent — is what you opened a .code-workspace file or a plain folder?

6. EditorConfig overrides quietly

.editorconfig with indent_size = 2 overrides user-settings 4 silently — no UI hint.

How to judge: cat .editorconfig at repo root.

Before you start

  • Confirm whether the issue only happens in this workspace — open a different repo and test, isolating user-level vs workspace-level.
  • Commit or branch before editing .vscode/settings.json so you don’t accidentally trash team config.
  • Note Cursor version and active model — defaults change between versions.

Info to collect

  • Cursor version and OS.
  • Contents of .vscode/settings.json, .cursor/settings.json, .editorconfig, .prettierrc* at repo root.
  • Cmd+Shift+P → “Developer: Show Active File Path” plus a screenshot of “Preferences: Settings (JSON) → User.”
  • A minimal repro: which file, which action, expected vs actual.

Shortest fix path

In “see clearly first, then choose which layer to change” order.

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 / Default.” That immediately tells you which layer overrode.

Step 2: Read the repo’s overrides

cat .vscode/settings.json
cat .cursor/settings.json 2>/dev/null
cat .editorconfig 2>/dev/null

List the overrides: key → repo value → your desired value.

Step 3: Pick a layer to change

  • You can commit to the repo: edit .vscode/settings.json so the whole team benefits.
  • You can’t (fork / vendor / huge monorepo): there’s no “user beats workspace” mechanism in VS Code. Use folder-level overrides (Cmd+Shift+P → “Preferences: Open Folder Settings”), kept in a gitignored local file:
# .gitignore (personal patch)
.vscode/settings.json.local

Or use Settings Sync to keep per-workspace overrides synced across machines.

Step 4: Handle AI-specific overrides

If the repo set "cursor.composer.shouldAllowCustomModes": false:

  • Team agreement: keep it, understand why.
  • Personal use: re-enable from Cursor → Settings → Features (that toggle is application-scope and isn’t overridden by workspace).

Step 5: Re-enable a disabled extension

Extensions panel → find the Cursor extension → right-click → “Enable (Workspace).” If that option isn’t there, the repo actively disabled it via unwantedRecommendations in .vscode/extensions.json — remove that entry.

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 at repo root; remove or explicitly extends the others.

How to verify the fix

  • Restart Cursor and trigger the original action to confirm it isn’t a transient session state.
  • Open another repo / another machine and reproduce — separates Cursor config from project state.
  • Have a teammate open the same repo and retry — confirms it isn’t only your local cache.

If it still fails

  • Reduce repro to the smallest: one file, one format action, all extensions disabled.
  • Roll back the latest Cursor upgrade or .vscode/settings.json edit.
  • Search forum.cursor.com for “workspace settings override”; include version + full settings.json.
  • Grab View → Output → Cursor logs and post to Bug Reports.

Prevention

  • First task on a new repo: cat .vscode/settings.json .cursor/settings.json .editorconfig.
  • Add a “Recommended Cursor settings” section to team docs so nobody guesses.
  • Split .vscode/settings.json into a committed (team-shared) version and a .local (gitignored personal) version.
  • Maintain a “must stay enabled” list for AI features (composer / tab / cmd+k) on onboarding checklists.
  • Turn on Cursor Sync so user settings follow you across machines and you don’t re-hit the same trap.

Tags: #Troubleshooting #Cursor #Debug