Claude CodeIntermediate

How to Configure Claude Code with settings.json

Edit the user and project settings files to set your model, environment variables, and defaults without touching every session.

8 minIntermediate

Claude Code reads JSON settings files that control the model it uses, environment variables it sees, and other defaults. Setting these once beats passing flags every time. This guide covers where the files live, how they merge, and the most useful keys.

What you need

  • Claude Code installed
  • A text editor
  • About 10 minutes

Step 1: Know which file wins

Settings merge from broad to narrow, with the narrower file overriding the broader one when keys collide.

FileScopeCommit it?
~/.claude/settings.jsonAll your projectsNo
.claude/settings.jsonThis project, shared with teamYes
.claude/settings.local.jsonThis project, just youNo (gitignore)

Step 2: Set your user defaults

Open your personal settings and set a default model and any environment variables you want every session to inherit. Create the file if it does not exist.

~/.claude/settings.json
{
  "model": "claude-sonnet-4-5",
  "env": {
    "BASH_DEFAULT_TIMEOUT_MS": "120000"
  },
  "includeCoAuthoredBy": true
}
Editor - settings.json
Explorer
settings.json
CLAUDE.md
keybindings.json
~/.claude/settings.json
1{
2 "model": "claude-sonnet-4-5",
3 "env": {
4 "BASH_DEFAULT_TIMEOUT_MS": "120000"
5 },
6 "includeCoAuthoredBy": true
7}
User-level settings apply to every project.

Step 3: Add project-level settings

Put settings the whole team should share in the project file. A common choice is pinning the model so everyone gets consistent behavior on this codebase.

.claude/settings.json
{
  "model": "claude-opus-4-1",
  "env": {
    "NODE_ENV": "development"
  }
}

Step 4: Validate the JSON

A trailing comma or stray quote silently breaks the file. Check it parses before you rely on it.

zsh - validate
$cat .claude/settings.json | python3 -m json.tool
{ ...pretty-printed valid JSON... }
An error here means the file is malformed and will be ignored
$
Use /config to check the merged result
Inside a session, the /config command shows the effective settings after all layers merge, so you can confirm which value actually won.

Result: your model and environment are set once and applied automatically, with project settings overriding personal ones and local settings overriding both.

Watch related tutorials

Tags
#settings#config#json#model#env