Claude Code resets effort level to medium every session because a built-in recommendation overrides saved preferences. The fix is to use the --effort max CLI flag at launch. For a permanent solution, users can create a shell alias like alias c='claude --effort max' in their ~/.zshrc file. The settings.json and /config options save the preference but it gets ignored on startup.
What is the Claude Code effort level?
The effort level controls how much thinking Claude does before responding. Claude Code has four levels: low (fast, minimal reasoning), medium (the default), high (more thorough), and max (full reasoning power). Higher effort levels produce better results for complex tasks like architecture decisions, debugging, and production code.
If you’re on the 5x or 20x Max plan, you want max effort on by default. You’re paying for it. But Claude Code keeps resetting to medium every session, no matter what you do in the settings.
The quick fix
When you start Claude Code, pass the --effort flag:
claude --effort max
That starts your session at max effort. Done. But you have to type it every time, which gets old fast.
The better fix
Create a shell alias. An alias is a shortcut you define in your terminal config so that one short command expands into a longer one. Instead of typing claude --effort max every time, you type c and it does the same thing.
Open your terminal config file. If you’re on a Mac, that’s probably ~/.zshrc. On Linux, it’s usually ~/.bashrc. Add this line:
alias c='claude --effort max'
Save the file, open a new terminal, and type c. Claude Code starts with max effort. Every time. No more toggling.
If you want a single keyboard shortcut to launch Claude Code (with the alias baked in), see How to Launch Claude Code with a Keyboard Shortcut.
If you already have a claude alias, just replace it. If you’ve never edited your .zshrc before, you can open it with nano ~/.zshrc, paste the line at the bottom, hit Ctrl+O to save, and Ctrl+X to exit.
What the effort levels actually do
Claude Code has four effort levels: low, medium, high, and max. They control how much thinking Claude does before responding.
low is fast and cheap. Claude barely thinks. Good for “what’s the command for X” questions where you just need a quick answer.
medium is the default. It’s fine for simple tasks but you’ll notice it gives up faster on harder problems, writes less thorough code, and misses edge cases more often.
high is where it starts to get useful for real work. Claude takes more time, considers more possibilities, catches more of its own mistakes.
max is the full thing. Claude thinks hard before it talks. For architecture decisions, debugging, writing production code, or anything where you want it to actually reason through the problem, this is what you want.
If you’re paying for a Max plan, there’s not much reason to run at medium. You have the capacity. Use it.
What we tried that didn’t work
We went through the obvious approaches before landing on the alias.
Claude Code stores preferences in ~/.claude/settings.json. You can set "effortLevel": "max" there. It saves. It looks right. Next session, it’s back to medium.
There’s also /config inside Claude Code. You can use the arrow keys to switch effort to max. Same deal. Works for the current session, gone the next.
We dug into the config files and found a built-in message that says “We recommend medium effort for Opus.” That recommendation appears to win over your saved preference on startup. Your setting is there, it’s just being ignored.
The --effort max CLI flag skips that whole problem. You tell the session what effort level to use when you launch it, and it listens.
More on Claude Code configuration
The --effort flag is just one of many things you can set when launching Claude Code. A few other useful ones:
--model lets you pick which model to use. You can pass sonnet, opus, or haiku as shortcuts, or a full model ID like claude-sonnet-4-6.
--allowedTools restricts which tools Claude can use in a session. Useful if you want to limit it to read-only work.
--permission-mode controls how Claude asks for permission before taking actions. Options include default, plan (read-only planning mode), and auto (approve everything automatically).
You can stack these in your alias too:
alias c='claude --effort max --model opus'
For the full list of flags, run claude --help.
Further reading
- Claude Code documentation for the official docs on setup and configuration
- Claude Code on GitHub for filing bugs (like, say, the settings not persisting)
- Anthropic’s model docs for understanding the differences between Opus, Sonnet, and Haiku
- Claude Max plans if you’re not on a Max plan yet and want to know what you’re getting
Common Questions
Why does Claude Code reset effort level to medium every session?
Claude Code has an internal recommendation that says “We recommend medium effort for Opus.” This recommendation overrides saved preferences in settings.json and the /config menu. The --effort max CLI flag bypasses this by setting effort at launch time.
How do I make max effort the default in Claude Code?
Add alias c='claude --effort max' to your ~/.zshrc file (Mac) or ~/.bashrc (Linux). Open a new terminal and type c to start Claude Code at max effort every time. The alias can also include other flags like --model opus.
What is the difference between Claude Code effort levels?
Low is fast with minimal reasoning. Medium is the default and suitable for simple tasks. High provides more thorough analysis. Max uses full reasoning power and is best for debugging, architecture decisions, and production code. Max plan subscribers should generally use max effort.
Can I set effort level in Claude Code settings.json?
You can set "effortLevel": "max" in ~/.claude/settings.json, but it currently gets overridden on session start. The reliable fix is the --effort max CLI flag or a shell alias.
A note from Alex: hi i’m alex - i run code for creatives. i’m a writer so i feel that it is important to say - i had claude write this piece based on my ideas and ramblings, voice notes, and teachings. the concepts were mine but the words themselves aren’t. i want to say that because its important for me to distinguish, as a writer, what is written ‘by me’ and what’s not. maybe that idea will seem insane and antiquated in a year, i’m not sure, but for now it helps me feel okay about putting stuff out there like this that a) i know is helpful and b) is not MY voice but exists within the umbrella of my business and work. If you have any thoughts or musings on this, i’d genuinely love to hear them - its an open question, all of this stuff, and my guess is as good as yours.