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?
| Symptom | Most likely layer | Fast 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 root | cat .editorconfig |
| AI feature (Composer, Tab, Cmd+K) disabled | cursor.* key in .vscode/settings.json | search cursor. in Workspace Settings (JSON) |
| Cursor AI extension greyed out | .vscode/extensions.json unwantedRecommendations | Extensions panel shows “Disabled (Workspace)“ |
| Wrong model / rules in chat | .cursor/rules/*.mdc or .cursorrules | ls -la .cursor/rules/ |
| Settings behave differently only when one repo is open | multi-root .code-workspace | File -> 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.jsonso 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-houseComposer 2.5model in some surfaces.
Info to collect
- Cursor version and OS.
- Full contents of
.vscode/settings.json,.editorconfig,.prettierrc*, andls -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.jsonso 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.jsonand 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-workspacefile kept outside the repo, and put your personal overrides in its top-levelsettingsblock.
Note: there is no built-in
.vscode/settings.json.localmerge feature — VS Code does not read a.localsidecar. Don’t rely on one. - Edit the value locally in
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 -> Featuresand inCursor Settings -> Models(model defaults for completions vs Composer). Settings shown there as application-scope are not overridden by the workspace; workspace-scopedcursor.*keys in.vscode/settings.jsonare, 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.
Userif you removed the workspace override, or the correctedWorkspacevalue). - 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.jsonedit and retest. - Search forum.cursor.com for “workspace settings override”; include your Cursor version and the full
.vscode/settings.json. - Grab
View -> Output -> Cursorlogs and post them to the Bug Reports section of the forum.
Prevention
- First task on any new repo:
cat .vscode/settings.json .editorconfigandls -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.
Related reading
- Cursor rules not loaded
- Cursor Tab not suggesting
- Cursor models list out of date
- Cursor IDE state out of sync with disk
- Cursor suggestions ignore conventions
Tags: #Troubleshooting #Cursor #Debug