System Configuration

These are the two files that control Claude Code at the system level. They live in ~/.claude/ and apply to every project.

settings.json

Location: ~/.claude/settings.json

{
  "permissions": {
    "allow": ["*", "WebSearch", "WebFetch", "Fetch"]
  },
  "model": "opus",
  "defaultMode": "bypassPermissions",
  "permissionMode": "bypassPermissions",
  "verbose": true,
  "statusLine": {
    "type": "command",
    "command": "ccstatusline"
  },
  "enabledPlugins": {
    "code-review@claude-plugins-official": true,
    "frontend-design@claude-plugins-official": true
  }
}

What Each Setting Does

model: "opus" - Sets Claude Opus 4.5 as the default model for every session. This is a system-level setting, not per-session. You can always check your current model with /model inside a session.

permissionMode: "bypassPermissions" - This is the "dangerously skip permissions" flag. Without it, Claude asks for approval on nearly every tool call - reading files, running commands, making edits. With it, Claude just does the work. If you're uncomfortable with this, you can use "defaultMode": "default" instead and approve individually.

permissions.allow: ["*", ...] - Allows all tools plus web search and fetch. The * wildcard covers file operations, bash commands, etc. WebSearch and WebFetch are listed separately because they're not covered by the wildcard.

verbose: true - Shows more detail about what Claude is doing. Useful for understanding the tool calls being made.

statusLine - Adds a persistent status bar pinned below your input that gives you constant awareness of your session at a glance. It runs a shell command on every prompt and renders the output as a single line. Here it's wired to the ccstatusline package, but you can point it at any script or command you like.

What you'll see:

Model: Opus 4.5 | Ctx: 31.7k | ⌐main | (+4,-0)

Each segment tells you something:

SegmentWhat it means
Model: Opus 4.5Which model is running the session
Ctx: 31.7kHow much context (in tokens) you've used so far — watch this to know when it's time to /handoff or /clear
⌐mainCurrent git branch
(+4,-0)Uncommitted changes — lines added and removed in your working tree

The context counter is the most useful part. Once it climbs past ~60%, responses can start degrading in quality because the model has less room to reason. The status line makes that visible so you're never caught off guard.

To install:

npm install -g ccstatusline

If you'd rather use your own script, just swap the command:

"statusLine": {
  "type": "command",
  "command": "my-custom-statusline-script"
}

enabledPlugins - Plugins extend Claude Code with specialized capabilities. code-review adds PR review workflows. frontend-design improves UI code generation quality.

mcp.json

Location: ~/.claude/mcp.json

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": ["@playwright/mcp@latest"]
    }
  }
}

Why Playwright at the System Level

MCP servers can be configured per-project (in your project's .claude/ directory) or globally. We put Playwright at the system level because:

  1. Every project benefits from browser testing - You can ask Claude to open your localhost, take screenshots, click through flows, fill forms
  2. No per-project setup - New project? Playwright is already there
  3. @latest flag - Always pulls the latest version of the MCP server

What Playwright MCP Gives You

Once configured, Claude can:

  • Navigate to any URL (including localhost:3000)
  • Take screenshots of pages or specific elements
  • Click buttons, fill forms, select dropdowns
  • Read page accessibility snapshots (better than screenshots for understanding structure)
  • Run Playwright code snippets directly
  • Check console logs and network requests

Adding More MCP Servers

You can add additional servers to the same file. For example, adding Figma:

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": ["@playwright/mcp@latest"]
    },
    "figma": {
      "type": "http",
      "url": "https://mcp.figma.com/mcp"
    }
  }
}

Figma MCP requires authentication. You'll be prompted to sign in on first use.

Where These Files Live

~/.claude/
  settings.json     # Global settings (model, permissions, plugins)
  mcp.json          # Global MCP server configuration
  commands/          # Custom slash commands
    commit.md
    handoff.md
  projects/          # Per-project overrides (auto-generated)
  plugins/           # Installed plugins (managed by CLI)

The projects/ and plugins/ directories are managed automatically. You'll only ever hand-edit settings.json, mcp.json, and files in commands/.

Checking Your Config

Inside a Claude Code session:

CommandWhat it shows
/modelCurrent model
/statusSession info including config
/configOpens configuration

From your terminal:

cat ~/.claude/settings.json
cat ~/.claude/mcp.json
ls ~/.claude/commands/