How to configure Claude Code settings, permissions, environment variables, and project-level configurations. Use when user asks about settings.json, configuration, permissions, or Claude Code setup.
Configure Claude Code settings, permissions, and environment variables through hierarchical settings.json files at user, project, and enterprise levels. Use when users ask about settings.json, permissions, environment variables, or Claude Code setup.
/plugin marketplace add reggiechan74/claude-plugins/plugin install claude-code-metaskill@claude-pluginsThis skill inherits all available tools. When active, it can use any tool Claude has access to.
Claude Code provides hierarchical configuration through settings.json files at multiple levels. You can manage settings globally, per-project, or through enterprise policies.
User-level settings: ~/.claude/settings.json (applies to all projects)
Project-level settings:
.claude/settings.json (shared with team via source control).claude/settings.local.json (personal, not committed)Enterprise managed policies:
/Library/Application Support/ClaudeCode/managed-settings.json/etc/claude-code/managed-settings.jsonC:\ProgramData\ClaudeCode\managed-settings.json| Setting | Purpose | Example |
|---|---|---|
permissions | Control tool access and file restrictions | {"allow": ["Bash(npm run test:*)"], "deny": ["Read(.env)"]} |
env | Environment variables for sessions | {"FOO": "bar"} |
model | Override default model | "claude-sonnet-4-5-20250929" |
outputStyle | Adjust system prompt behavior | "Explanatory" |
hooks | Custom commands before/after tool use | {"PreToolUse": {"Bash": "echo 'Running..'"}} |
Restrict file and command access through the permissions object:
Deny patterns block sensitive files:
{
"permissions": {
"deny": [
"Read(.env)",
"Read(./secrets/**)",
"Bash(curl:*)"
]
}
}
Allow patterns explicitly permit actions:
{
"permissions": {
"allow": [
"Bash(npm run lint)",
"Bash(npm run test:*)"
]
}
}
Ask patterns require confirmation:
{
"permissions": {
"ask": [
"Bash(git push:*)",
"Write(src/**)"
]
}
}
Enable process isolation (macOS/Linux):
{
"sandbox": {
"enabled": true,
"excludedCommands": ["docker"],
"network": {
"allowUnixSockets": ["~/.ssh/agent-socket"],
"allowLocalBinding": true
}
}
}
.claude/settings.local.json).claude/settings.json)~/.claude/settings.json)Key variables for controlling Claude Code behavior:
ANTHROPIC_API_KEY - API authenticationBASH_MAX_OUTPUT_LENGTH - Limit bash output sizeDISABLE_TELEMETRY - Opt out of analyticsMAX_THINKING_TOKENS - Enable extended thinkingCLAUDE_CODE_USE_BEDROCK - Use AWS BedrockDISABLE_PROMPT_CACHING - Turn off caching globallyClaude Code can access these tools (subject to permissions):
Configure plugins via enabledPlugins:
{
"enabledPlugins": {
"formatter@company-tools": true,
"deployer@company-tools": false
},
"extraKnownMarketplaces": {
"company-tools": {
"source": {
"source": "github",
"repo": "company/claude-plugins"
}
}
}
}
Access plugin management interactively with /plugin command.
Prevent Claude from accessing confidential data:
{
"permissions": {
"deny": [
"Read(.env)",
"Read(.env.*)",
"Read(./secrets/**)",
"Read(**/credentials.json)"
]
}
}
Files matching deny patterns become completely invisible to Claude Code.
.claude/settings.json (committed to repo):
{
"permissions": {
"allow": [
"Bash(npm run *)",
"Bash(git status:*)",
"Bash(git diff:*)"
],
"deny": [
"Read(.env*)",
"Bash(git push:*)"
],
"ask": [
"Write(src/**)"
]
},
"env": {
"NODE_ENV": "development"
},
"extraKnownMarketplaces": {
"team-tools": {
"source": {
"source": "github",
"repo": "your-org/claude-plugins"
}
}
}
}
.claude/settings.local.json (not committed):
{
"model": "claude-opus-4-5-20250514",
"env": {
"CUSTOM_VAR": "my-value"
}
}
/etc/claude-code/managed-settings.json:
{
"permissions": {
"deny": [
"Read(/etc/passwd)",
"Read(~/.ssh/**)",
"Bash(rm:*)",
"Bash(sudo:*)"
]
},
"sandbox": {
"enabled": true
}
}
View current settings: Check the files in .claude/ directory
Edit project settings: Create or modify .claude/settings.json
Edit user settings: Modify ~/.claude/settings.json
Interactive configuration: Some settings can be managed via slash commands like /permissions
// in JSON5-compatible editors)Settings not applying:
Permission errors:
Plugin issues:
enabledPlugins