Skip to main content

Configuration Playbook

Claude Code

Overview

Configure Claude Code for terminal-based AI-assisted development.

Quick Start

Install and start Claude Code:

brew install --cask claude-code

curl -fsSL https://claude.ai/install.sh | bash

cd your-project
claude

First run will prompt for login via browser (Claude.ai or Claude Console account required).

Configuration Files & Locations

ScopeLocationPurposeGit Tracked?
Global~/.claude/settings.jsonUser defaults, global permissions, MCP serversNo
Project.claude/settings.jsonTeam shared settings, project-specific configYes
Local.claude/settings.local.jsonPersonal overrides (auto git-ignored)No
Enterprise/Library/Application Support/ClaudeCode/managed-settings.json (macOS)IT-managed policies (cannot be overridden)N/A
MCP Config.mcp.jsonProject MCP servers (team shared)Yes
ContextCLAUDE.md or AGENTS.mdProject documentation (auto-loaded)Yes

Authentication Setup

Claude Code uses Claude.ai or Claude Console accounts for authentication.

  1. Run Claude Code:
    claude
  2. Follow browser authentication prompt
  3. Choose account type:
    • Claude.ai: Pro or Max subscription (personal use)
    • Claude Console: API usage billing (workspace/team use)

Force Login Method

Configure which login method to use:

{
  "forceLoginMethod": "claudeai"
}

Options: "claudeai" or "console"

API Key for Automation

For non-interactive use (CI/CD, scripts):

export ANTHROPIC_API_KEY="sk-ant-..."

Or use dynamic key generation:

{
  "apiKeyHelper": "~/bin/get-api-key.sh"
}

Model & Core Configuration

OptionTypeDefaultPurpose
modelstring”claude-sonnet-4-5-20250929”Primary AI model for coding tasks
cleanupPeriodDaysint30Days to retain chat transcripts
includeCoAuthoredBybooleantrueInclude “Co-authored-by: Claude” in commits
envobject{}Environment variables for every session

Example:

{
  "model": "opus",
  "cleanupPeriodDays": 60,
  "env": {
    "CUSTOM_VAR": "value"
  }
}

Available model shortcuts: "sonnet", "opus", "haiku" (maps to latest versions)

Permission & Access Controls

Claude Code uses a granular permission system with allow/ask/deny rules:

{
  "permissions": {
    "allow": [
      "Bash(git diff:*)",
      "Bash(npm run test:*)",
      "Read(~/.zshrc)"
    ],
    "ask": [
      "Bash(git push:*)",
      "WebFetch"
    ],
    "deny": [
      "Bash(curl:*)",
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)",
      "Read(~/.aws/**)"
    ],
    "additionalDirectories": ["../docs/"],
    "defaultMode": "acceptEdits"
  }
}

Permission modes:

  • "plan" - Read-only analysis, no changes
  • "acceptEdits" - Allow file edits with confirmation
  • "bypassPermissions" - Skip all permission checks (dangerous)

Tool-specific patterns:

  • Bash(command:*) - Shell command prefix matching
  • Read(path) - File/directory read access
  • Edit(path) - File write access
  • WebFetch or WebFetch(domain:example.com) - Network access
  • mcp__servername - All tools from MCP server
  • mcp__servername__toolname - Specific MCP tool

MCP Servers & Tool Integration

Register external tools via MCP. Add servers using CLI or configuration files:

Adding MCP Servers via CLI

claude mcp add --transport http github https://api.githubcopilot.com/mcp/

claude mcp add --transport stdio clickup \
  --env CLICKUP_API_KEY=YOUR_KEY \
  --env CLICKUP_TEAM_ID=YOUR_TEAM_ID \
  -- npx -y @hauptsache.net/clickup-mcp

claude mcp list

MCP Configuration in .mcp.json

{
  "mcpServers": {
    "github": {
      "type": "http",
      "url": "https://api.githubcopilot.com/mcp/"
    },
    "company-internal": {
      "type": "stdio",
      "command": "/usr/local/bin/company-mcp-server",
      "args": ["--config", "/etc/company/mcp-config.json"],
      "env": {
        "API_URL": "${COMPANY_API_URL}"
      }
    }
  }
}

Environment variable expansion: Use ${VAR_NAME} or ${VAR_NAME:-default} syntax.

MCP Permissions

{
  "enableAllProjectMcpServers": false,
  "enabledMcpjsonServers": ["github", "sentry"],
  "disabledMcpjsonServers": ["filesystem"],
  "permissions": {
    "allow": [
      "mcp__github",
      "mcp__sentry__get_issue"
    ],
    "deny": [
      "mcp__filesystem"
    ]
  }
}

Note: MCP permissions do NOT support wildcards. Use mcp__servername for all tools or list each tool individually.

Project Context Management

Auto-load project documentation for better context:

Documentation files (loaded automatically at startup):

  • CLAUDE.md or AGENTS.md in project root
  • .claude/CLAUDE.md (project-specific)
  • ~/.claude/CLAUDE.md (personal, all projects)

What to document:

  • Common bash commands with descriptions
  • Core files and utility functions
  • Code style guidelines
  • Testing instructions
  • Repository etiquette (branch naming, merge strategy)
  • Developer environment setup
  • Project-specific warnings

Sandbox Configuration

Enable advanced sandboxing for bash command isolation (macOS/Linux):

{
  "sandbox": {
    "enabled": true,
    "autoAllowBashIfSandboxed": true,
    "excludedCommands": ["docker", "git"],
    "allowUnsandboxedCommands": true,
    "network": {
      "allowUnixSockets": ["/var/run/docker.sock"],
      "allowLocalBinding": true
    }
  }
}

Filesystem and network access are controlled via Read, Edit, and WebFetch permission rules, not sandbox settings.

Team & Enterprise Configuration

Managed Policy Settings (Enterprise)

IT/DevOps can deploy organization-wide policies that cannot be overridden:

macOS: /Library/Application Support/ClaudeCode/managed-settings.json
Linux/WSL: /etc/claude-code/managed-settings.json
Windows: C:\ProgramData\ClaudeCode\managed-settings.json

{
  "env": {
    "COMPANY_VAR": "value"
  },
  "permissions": {
    "deny": ["Read(~/.aws/**)", "Bash(curl:*)"],
    "disableBypassPermissionsMode": "disable"
  },
  "allowedMcpServers": [
    {"serverName": "github"},
    {"serverName": "company-internal"}
  ],
  "deniedMcpServers": [
    {"serverName": "filesystem"}
  ]
}

Managed MCP Configuration (Enterprise)

Deploy centrally-managed MCP servers:

macOS: /Library/Application Support/ClaudeCode/managed-mcp.json
Linux/WSL: /etc/claude-code/managed-mcp.json
Windows: C:\ProgramData\ClaudeCode\managed-mcp.json

{
  "mcpServers": {
    "company-internal": {
      "type": "stdio",
      "command": "/usr/local/bin/company-mcp-server",
      "args": ["--config", "/etc/company/mcp-config.json"],
      "env": {
        "COMPANY_API_URL": "https://internal.company.com"
      }
    }
  }
}

Settings Precedence

Settings are applied in order (highest to lowest):

  1. Enterprise managed policies (managed-settings.json) - Cannot be overridden
  2. Command line arguments - Temporary session overrides
  3. Local project settings (.claude/settings.local.json) - Personal, git-ignored
  4. Shared project settings (.claude/settings.json) - Team shared, version controlled
  5. User settings (~/.claude/settings.json) - Personal global settings

Best Practices

Do:

  • Use CLAUDE.md or AGENTS.md to document project context and common commands
  • Store API keys in environment variables, never in settings files
  • Create .claude/settings.local.json for personal settings (auto git-ignored)
  • Use permission deny rules to exclude sensitive files (.env, secrets/)
  • Configure MCP servers at project level (.mcp.json) for team sharing
  • Use permissions.defaultMode: "plan" for read-only analysis in production repos
  • Test configuration changes in isolated branches first

Don’t:

  • Commit API keys or tokens to version control
  • Use bypassPermissions mode without strong justification
  • Mix authentication methods in the same config
  • Ignore enterprise managed policies (they override everything)
  • Use wildcards in MCP permission patterns (not supported)
  • Disable all tool permissions (breaks core functionality)

Troubleshooting & Validation

Interactive configuration:

claude        # Start Claude Code
/config       # Open settings UI
/permissions  # Configure allowed tools
/mcp          # Manage MCP servers

Common issues:

ProblemSolution
Auth failsRun claude and follow login prompt; check account type
MCP server not foundVerify command path and environment variables; check claude mcp list
Permission deniedReview permissions.deny rules; use /permissions command
Context files not loadingEnsure CLAUDE.md or AGENTS.md exists in project root
Settings not appliedCheck precedence order; enterprise policies override all
Sandbox blocks commandAdd to excludedCommands or set sandbox.enabled: false

Environment variables for debugging:

export CLAUDE_CODE_ENABLE_TELEMETRY=1
export DISABLE_PROMPT_CACHING=1

export MAX_MCP_OUTPUT_TOKENS=50000

export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1

Check configuration:

cat ~/.claude/settings.json

cat .claude/settings.json

claude mcp list

Additional Resources