{"slug": "i-put-a-setting-in-my-project-config-and-it-did-nothing", "title": "I Put a Setting in My Project Config and It Did Nothing", "summary": "A developer discovered that 71 of the 223 keys in Claude Code's settings reference are scope-restricted, meaning placing them in a project's .claude/settings.json silently does nothing — no error, no warning. The developer built a checker tool, published as npx @quintetkit/ccheck, that validates settings keys against their allowed scopes and flags misplaced entries such as autoMode.", "body_md": "I put `autoMode` in `.claude/settings.json`, committed it, and it had no effect.\n\nThe JSON was valid. Startup printed no warning. `--debug` said nothing. I spent\n\na while assuming I had the semantics wrong before I found the actual reason:\n\n**that key does not apply from that file.**\n\nClaude Code's settings reference has a column I had never read carefully. Every\n\nkey names the scopes it applies from. Counting it:\n\n```\nAny file                  152 keys\nManaged                    39 keys   only from managed settings\nUser or managed            23 keys   ~/.claude/settings.json, or managed\nUser, local, or managed     3 keys   settings.local.json but not settings.json\nGlobal config               6 keys   ~/.claude.json only\n------------------------------------\n                          223 keys, of which 71 are scoped\n```\n\n**71 of 223.** Put one of those in a project's `.claude/settings.json` and it is\n\nnot an error, produces no warning, and does nothing.\n\nThe ones I would expect people to hit:\n\n```\nautoMode                          user or managed\nautoMode.classifyAllShell         user or managed\nskipAutoPermissionPrompt          user or managed\nuseAutoModeDuringPlan             user, local, or managed\nspellcheck                        user or managed\nsandbox.network.strictAllowlist   user or managed\nsandbox.filesystem.disabled       user or managed\ndiffTool                          ~/.claude.json only\nautoConnectIde                    ~/.claude.json only\n```\n\nIf you run several agents at once you get more approval prompts, so loosening\n\n`autoMode` is the obvious move — and the obvious place to put it is the project\n\nconfig you already have open. That is the one place it does not work.\n\n```\nUser, local, or managed     3 keys\n```\n\n`settings.local.json` is a **different scope** from `settings.json`. Three keys\n\napply from the local one and not from the shared one:\n\n`useAutoModeDuringPlan`` syncClaudeAiSkills``skipDangerousModePermissionPrompt`\nSo: you put one in `settings.local.json`, it works. Later you move it into the\n\nshared file so the team gets it, and it silently stops. **Nothing changed except which file it lives in.**\n\nThis is a manufactured \"works on my machine\" — with the unusual property that\n\nthe person who wrote it is the one for whom it works.\n\nThe documentation names them the way you would write a path, not the way you\n\nwould write JSON:\n\n```\nsandbox.network.strictAllowlist        ← this is what is scoped\nsandbox                                ← this is not\n```\n\nWhich matters if you go looking. I wrote a checker for this and inspected only\n\nthe top level of the settings object, so this:\n\n```\n{ \"sandbox\": { \"network\": { \"strictAllowlist\": true } } }\n```\n\nproduced nothing at all. **20 dotted keys were invisible to it, 12 of them\n`sandbox.*`.**\n\nI had been maintaining this list by hand, copied out of the documentation, with\n\na comment I wrote myself:\n\n```\n/** そのファイルからは効かないスコープのキー（一部。確実なものだけ） */\n```\n\n\"Some. Only the certain ones.\" I knew it was partial. I did not know how partial.\n\n```\n             actual   I had\nManaged          39      14\nUser or managed  23       0     ← the whole row\nGlobal config     6       6\n```\n\n**The `user or managed` row was missing entirely — 23 keys, including\n`autoMode`, the one that started this.**\n\nI had read the table by grouping it: `Managed` is for organisations deploying\n\npolicy, which is not my situation, so I skipped past it — and past the row\n\nsitting next to it, which turned out to mean *\"applies from your own\n`~/.claude/settings.json`\"* and was the row I most needed.\n\n**Reading it row by row would have worked. Reading it by category is what failed.**\n\nSo it is generated now, straight from the scope column, and the count comes out\n\nof the same place the checker reads.\n\n```\nnpx @quintetkit/ccheck\nwarn  .claude/settings.json:63\n      `autoMode` applies from user or managed settings only. It has no effect from this file.\n      why: https://code.claude.com/docs/en/settings-reference\n```\n\nOne thing that took a second pass to get right: `~/.claude/settings.json`\n\n**is** the user scope. Deciding \"this key doesn't apply here\" from the path alone\n\nwould report a correctly placed `autoMode` on the machine of anyone who runs it\n\nagainst their home directory — including mine, which has `autoMode` in it. So\n\nthe scope is decided by whether the directory being scanned is your home, not by\n\nwhat the path looks like.\n\nThe full list of 71, and the same list as JSON if you would rather check the\n\nclaim than trust it:\n\n[https://quintetkit.github.io/en/reference/claude-code-settings-scope.html](https://quintetkit.github.io/en/reference/claude-code-settings-scope.html)\n\nI publish the configuration for splitting Claude Code into separate personas —\n\nArchitect, Coder, Reviewer, Conflict Resolver — under MIT. Copy it, run\n\n`./setup.sh`, and it works. It does not depend on your tech stack.\n\n[https://github.com/quintetkit/quartet](https://github.com/quintetkit/quartet)\n\nI built one real tool using nothing but this workflow. Every Issue, PR, review\n\nand merge is still there. **The parts that went wrong were not deleted.**\n\n[https://github.com/quintetkit/mdlinkcheck](https://github.com/quintetkit/mdlinkcheck)\n\nThe version that adds a UI Designer persona, review criteria, a per-Issue\n\nparallel execution script and a 11-chapter guide is on the\n\n[product page](https://quintetkit.github.io/index.en.html).\n\nThe full kit — five personas, the scripts and the complete guide — is available here.", "url": "https://wpnews.pro/news/i-put-a-setting-in-my-project-config-and-it-did-nothing", "canonical_source": "https://dev.to/quintetkit/i-put-a-setting-in-my-project-config-and-it-did-nothing-2id2", "published_at": "2026-09-10 01:48:41+00:00", "updated_at": "2026-09-10 02:19:00.925503+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools"], "entities": ["Claude Code", "@quintetkit/ccheck"], "alternates": {"html": "https://wpnews.pro/news/i-put-a-setting-in-my-project-config-and-it-did-nothing", "markdown": "https://wpnews.pro/news/i-put-a-setting-in-my-project-config-and-it-did-nothing.md", "text": "https://wpnews.pro/news/i-put-a-setting-in-my-project-config-and-it-did-nothing.txt", "jsonld": "https://wpnews.pro/news/i-put-a-setting-in-my-project-config-and-it-did-nothing.jsonld"}}