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.jsonso 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.jsonso 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.jsonedit. - 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.jsoninto 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.
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