Anthropic shipped 125+ keys to Claude Code's settings.json. The official docs cover roughly 40.
14 of the missing ones live 3 clicks deep in the
UI. 4 of them don't appear in any documentation at all. You find them by reading GitHub issues, watching engineers leak them in Discord, or grepping the Claude Code binary at 1am.
Most Claude users run with whatever Anthropic shipped six months ago. Their bill creeps. Their output drifts. They blame the model.
Below: 18 settings that actually run your Claude.
For each: where it lives, what it does, the one-line fix.
Where: Settings -> Capabilities -> Memory
What it does: Memory rolled out to Free and Pro in March 2026. By default it stores everything Claude decides is worth storing. Three controls most people miss: per-project scope, exclusion list, and the on-the-fly forget command.
Why it matters: the default memory drifts. After 4-6 weeks it's full of one-off corrections ("I prefer tabs in Python" you said this once about one file), project-specific facts that leak into unrelated chats, and stale role context. Output quality degrades because Claude is now optimizing for the wrong "you."
1. Turn on project-scoped memory: Settings -> Capabilities -> Memory -> Scope per Project. Memories from inside a Project stay in that Project. This alone fixes most drift. 2. Add to the exclusion list any topic you don't want surfacing in unrelated chats. Examples: divorce, medical, salary numbers, client names. These persist regardless of context unless excluded. 3. Use the inline forget command in any chat: forget what you remembered about [topic]
Claude parses it against your memory store and confirms what it removed. No menu, no settings page.
Where: chat input -> model selector dropdown -> Extended Thinking: Off / Light / Full
What it does: Extended Thinking adds a <thinking> reasoning pass before the answer. Anthropic ships it on by default for Opus. The three-state toggle is per-chat and overrides the global setting.
Why it matters: Extended Thinking is great for math, debugging, multi-step planning. It's wasted on summarization, translation, formatting, rewrites, and quick lookups. On those tasks it adds 3-12 seconds of latency and 20-40% more tokens for the same answer.
The fix: set the default to Light (uses thinking only when the model judges it useful), and explicitly switch to Full for hard work. Most users I show this to drop their Opus token spend by 18-25% in week one.
Where: chat input -> style selector -> Create New Style
What it does: Styles started as a tone toggle ("Formal / Concise / Explanatory"). Custom Styles are actually an output contract. You paste a 200-1500 word instruction file. Every response in that style applies it before generation.
Why it matters: most people use Styles for "make it shorter." The real use is enforcing structural rules across every response without re-pasting them. Citation format. Banned words. Required sections. Code-fence languages. Length caps. Whether to ask follow-up questions.
The fix: create one Style per workflow. Mine:
Three of these in rotation (Draft for X, Code review, Summarize PDF) replaces 80% of my saved prompts.
Where: any Project -> top-right ⋯ -> Edit project instructions
What it does: Projects are persistent workspaces. The instructions field is a system-prompt-equivalent injected into every chat in that Project. Anthropic introduces Projects with the knowledge upload feature, which is what people remember. The instructions field is on the same page and 70% of Projects I see in the wild have it blank.
Why it matters: every chat in a Project starts cold without it. With it, you stop re-establishing context. ("This is a Polymarket research workflow. Default to skeptical. Always show probability math. Never recommend a trade — only frame the EV.")
The fix: treat it like a CLAUDE.md for Claude. Keep it under 400 words. Specify role, default skepticism level, formatting rules, what to never do. Re-read it once a month and prune.
Where: Settings → Profile → Search past chats (must be enabled)
What it does: lets Claude search your conversation history when relevant. Pro+ only.
Why it matters: off by default for new accounts even on Pro. Once on, the trick is knowing it does keyword match, not semantic. "What did we discuss about Chinese robots yesterday" returns nothing unless your past chat literally contained "Chinese robots" or "China" and "robots".
The fix: turn it on. Then learn the actual query shape. Content nouns, not meta-words. "Polymarket Iran" works. "That thing we talked about last week" doesn't.
Where: chat input -> + -> Web search: On / Off
What it does: the web search toggle is per-conversation, but the behavior changes based on a less-known setting in Settings -> Capabilities -> Web search citations: Inline / Footnotes / Hidden.
Why it matters: the default is Inline. Inline citations break copy-paste. When you copy Claude's answer somewhere else, you copy markers that point nowhere. Footnotes mode keeps the answer clean and lists sources at the end.
The fix: switch to Footnotes if you ever copy Claude's web-search answers into another doc, email, or message. Keep Inline only if you read everything inside Claude.
Where: Settings -> Connectors -> Cowork -> Trusted folders
What it does: Cowork (GA April 2026) gives Claude access to a folder on your machine. By default, Anthropic asks before each session whether to trust the folder. The trusted-folders list is the bypass.
Why it matters: once a folder is in trusted, Claude reads from it on every Cowork session without prompting. If you added a folder during a test in March and forgot, Claude has been silently reading it on every session since.
The fix: open trusted folders. Remove anything that isn't a current active project. The list grows faster than you expect.
Where: sidebar -> New incognito chat (or Cmd/Ctrl + Shift + N)
What it does: an Incognito chat is not saved, not memorized, not searchable, not used for model improvements. The chat is deleted when you close it.
Why it matters: people assume Incognito just hides the chat from the sidebar. It actually skips four systems: memory write, chat history, past-chats search index, training data opt-in (if you have it on).
The fix: use it deliberately for anything with sensitive data: salary, medical, family, legal drafts, client names. Three keystrokes, no thinking.
These live in ~/.claude/settings.json (user-level) or .claude/settings.json (project-level). The latter takes precedence.
There are 125+ keys total in the v2.1.105 binary. The seven below are the ones that actually move the needle.
Where: ~/.claude/settings.json -> enabledPlugins
What it does: sets which installed plugins are loaded on session start. The Plugin marketplace makes installation easy. Uninstallation is harder, and unnecessary if you just set the value to false.
Why it matters: every active plugin loads its hooks, SKILL.md content, and tool schemas into your context budget. Three plugins you forgot about = 3-8K tokens of pre-charge before you've typed anything.
I had 14 plugins enabled when I started this audit. 4 are active now.
false keeps the plugin installed but unloaded. Re-enable per-session with /plugin enable name@marketplace when you actually need it.
Where: ~/.claude/settings.json -> permissions.deny
What it does: blocks Claude from running specific tools or accessing specific files. The intent: prevent rm -rf, prevent reading .env, prevent writing outside the project.
Why it matters: there's a known bug. Deny rules sometimes don't block. Multiple GitHub issues filed. The most-cited (anthropics/claude-code#11544) documents hooks not loading despite valid config; a similar pattern affects deny enforcement. The rule is in your config. The debug log shows "0 matchers found." Claude reads the file anyway.
Add a second layer at the filesystem level. chmod 600 .env so even if Claude tries to read it, the OS refuses. Don't trust the deny list alone. Verify with /permissions inside Claude Code. If your rules don't appear, restart the session.
Where: ~/.claude/settings.json -> hooks.SessionStart
What it does: SessionStart fires when you open Claude Code in a directory. You can run anything: print env info, lint the git state, inject a context file, warm the cache.
Why it matters: most people inject too much. CLAUDE.md grows to 5K tokens because every project rule went in. SessionStart lets you load only the rules relevant to the current branch or directory.
Your main branch loads context-main.md. Your feat/auth branch loads context-feat-auth.md. Each file stays small. Context budget stops bleeding.
Where: ~/.claude/settings.json -> disableAllHooks: true
What it does: disables every hook in one toggle. Shipped in the March 2026 update. Most people don't know it exists.
Why it matters: when Claude Code starts behaving weirdly (phantom commands running, sessions hanging on start, mysterious file writes), 80% of the time it's a misfiring hook. Disabling hooks one by one is slow. This kills them all at once so you can isolate.
The fix: keep it false. When something breaks, flip to true, restart, see if the problem goes away. If yes, re-enable hooks one by one. If no, the bug is elsewhere.
Where: .claude/settings.json (project root) -> model
What it does: sets the default model for that project. Overrides your global setting.
Why it matters: most people set Opus globally because they want it for hard work. Then they open a project that's mostly markdown editing or shell scripts. They pay Opus rates for tasks Haiku does at 1/20 the cost.
Project-level overrides win. Open the project, get the right model. Move on.
Where: ~/.claude/settings.json -> mcpServers
What it does: MCP servers connect Claude to external tools. Each connected server loads its full tool schema into your context. Anywhere from 800 to 6,000 tokens per server.
Why it matters: people connect MCP servers to test, never disconnect. After three months you have 12 connected, of which you actively use 3. The 9 unused servers cost you ~25-40K tokens of context schema on every session start.
The fix: use the enabled flag to keep connection configured but unloaded.
Toggle true per session when you actually need them. Most days I have 2-3 active. On planning days, 6.
Where: ~/.claude/settings.json -> cleanupPeriodDays
What it does: sets how many days Claude Code keeps transcripts, debug logs, and intermediate session data. Default is 30.
Why it matters: Dreaming and past-chat search both rely on these transcripts. With the default 30-day window, Dreaming can only learn from one month of work. Six months gives it 6× the signal. Disk cost: roughly 200MB.
180 days of session history available to Dreaming, to memory consolidation, and to your own grep when you're hunting "what did I tell Claude about that auth bug back in March."
Copy this into ~/.claude/settings.json. Adjust paths and plugin names to yours. Restart Claude Code. Re-run /permissions and /hooks to verify everything loaded.
Project-level overrides go in .claude/settings.json at the project root. The most useful one to set there:
These live in code or in the Anthropic Console. They're the most cost-impactful settings in the article. Each one can change your bill by 30-90%.
Where: API request body, cache_control field on any content block
What it does: marks a prefix of your prompt as cacheable. Subsequent requests with the same prefix get charged at roughly 10% of the input rate instead of full rate.
Why it matters: this is the single biggest cost lever in the API. People know it exists. Most place the breakpoint wrong and get partial savings instead of full. On my own setup, fixing the breakpoint cut a $340/month bill to $87.
The fix: the breakpoint goes at the boundary between static and dynamic content. Anything before the breakpoint is cached. Anything after is recomputed.
Two TTLs are available: 5-minute ephemeral (default) and 1-hour. Use 1-hour for system prompts that don't change between sessions:
Cache writes cost 25% more than base input. Cache reads cost 10% of base input. The crossover: a cached prefix pays off if you read it 2+ times within the TTL window.
Where: API request -> inference_geo parameter
What it does: routes inference to a specific geographic region. US-only residency, EU-only, etc.
Why it matters: US-only data residency adds 10% premium on Opus 4.7 and above. It's not on the standard pricing card. You see it on the invoice.
The fix: if your compliance regime doesn't actually require regional residency, don't set inference_geo. Most apps default to setting it "to be safe" because someone in legal said "make sure data stays in the US." Verify whether the requirement is contractual or aspirational. If aspirational, omit the parameter and save 10% on every Opus call.
If you do need it, factor the 10% into your model selection. Sonnet at $3 base becomes effectively $3.30, which moves the Opus-vs-Sonnet break-even.
Where: Console -> Settings -> Workspaces -> [your workspace] -> Per-feature rate limits
What it does: sets a rate limit per workspace, per feature, separate from your account-level limits.
Why it matters: an account-level limit protects you from going broke. A workspace-level limit protects your interactive product when a runaway batch job tries to eat your entire ITPM allowance. You ship a new feature, it bugs, it loops, it consumes everything, your customer-facing chat starts returning 429s. Workspace limits keep one feature from starving another.
The fix: create one workspace per surface (interactive chat, batch processing, internal tools, experimental). Set each workspace's rate limit to 60-70% of your account tier. Reserve 30% for whichever workspace needs to burst.
The fourth undocumented setting in this article: there's a feature-level cap inside each workspace that's only visible if you click into a specific feature card, not the workspace overview. Default = unlimited.
If you have three features in one workspace, one of them can starve the other two and the workspace-level limit won't catch it. Set per-feature caps for anything that does batch work.
Walk through it once. 20 minutes. Anything you don't touch in 12 months, you probably never will.
Drop this into ~/bin/claude-audit.sh. Run weekly. It flags the Claude Code half of the checklist plus the cache_control side of the API half.
Save, chmod +x ~/bin/claude-audit.sh, run weekly until each line is in target.
I removed four candidates before publishing. Worth naming so you don't waste time chasing them.
Adaptive Reasoning toggle. Anthropic shipped this default-on. The override exists in Settings → Capabilities → Reasoning mode. In 30 days of comparison I couldn't find a workflow where overriding it changed outcomes meaningfully. Trust the default. Move on.
Skill auto-activation. You can toggle whether Claude auto-loads skills based on relevance detection vs requiring explicit invocation. I expected this to matter. It didn't. Auto-activation with progressive disclosure (loading only SKILL.md metadata until needed) is well-tuned. Leave it on.
Dispatch mobile-to-desktop control. Useful feature, not a settings audit item. Either you have a workflow where this fits or you don't. No hidden toggle changes the outcome.
Per-workspace max_tokens ceiling. You can force every response to truncate at 800, 2000, or 4000. It saves real money on chatty workflows but corrupts code generation that needs long outputs. Worth testing per-workspace. Not worth recommending as a default.
Walk the checklist tonight. Most of you will fix 6-8 things. A few will fix 14+. The numbers in your billing dashboard and your usage graph will tell you whether it was worth the 20 minutes.
> Bookmark and walk the checklist tonight. If this saves you a month of "Claude got dumber" frustration, repost. Telegram for daily AI tips: