settings.json in 📝Claude Code is the configuration file at ~/.claude/settings.json (or .claude/settings.local.json per-project) that controls permissions, hooks, environment variables, and MCP server registrations across every session.
Claude Code reads settings.json at session start from three layered locations: global at ~/.claude/settings.json, project-shared at .claude/settings.json in the project root, and project-local at .claude/settings.local.json (which should be .gitignored for secrets and personal overrides). Later layers override earlier ones at the key level, mirroring how 📝CLAUDE.md as Infrastructure layers project context.
The schema covers four major concerns: a permissions block declaring allow / ask / deny rules for tool calls, Bash commands, and MCP calls; a hooks object mapping lifecycle events to shell commands (see 📝Hook (Claude Code)); an env block for environment variables; and an mcpServers block registering 📝MCP Server connections with their command, args, and headers.
Edits take effect on the next session — there's no live-reload while a conversation is active. Common practitioner patterns include pre-approving safe read-only commands in permissions.allow to reduce prompts, routing linting through PostToolUse hooks, and keeping secrets in settings.local.json rather than the shared settings.json.
