Skip to content

Claude How ToClaude How To

CLI Reference

Overview

The Claude Code CLI (Command Line Interface) is the primary way to interact with Claude Code. It provides powerful options for running queries, managing sessions, configuring models, and integrating Claude into your development workflows.

Architecture

Runtime & Packaging

Since v2.1.113, the Claude Code CLI launches a native per-platform binary (macOS, Linux, Windows) via optional npm dependencies. The binary is matched to your OS and architecture at install time — the older bundled-JavaScript runtime is no longer the default on macOS or Linux.

The user-facing install is unchanged: npm install -g @anthropic-ai/claude-code still works and remains the recommended path. Behind the scenes npm fetches the correct native binary for your platform.

Download host (v2.1.116+): native-binary artifacts are served from https://downloads.claude.ai/claude-code-releases.

Corporate / proxy users: If your network requires an explicit allowlist, add downloads.claude.ai (and https://downloads.claude.ai/claude-code-releases) to your proxy egress rules. Environments that previously allowlisted only storage.googleapis.com or the npm registry will need to be updated or claude update and the initial install will fail.

The older JavaScript bundle is still produced for Windows and for environments that pin to it; those installs continue to ship Glob and Grep as first-class tools (see the Glob/Grep footnote under Tools).

CLI Commands

CommandDescriptionExample
claudeStart interactive REPLclaude
claude "query"Start REPL with initial promptclaude "explain this project"
claude -p "query"Print mode - query then exitclaude -p "explain this function"
cat file | claude -p "query"Process piped contentcat logs.txt | claude -p "explain"
claude -cContinue most recent conversationclaude -c
claude -c -p "query"Continue in print modeclaude -c -p "check for type errors"
claude -r "<session>" "query"Resume session by ID or nameclaude -r "auth-refactor" "finish this PR"
claude updateUpdate to latest versionclaude update
/doctor (slash command)Diagnose installation, config, and plugin health. Since v2.1.116 it can be opened while Claude is responding, shows status icons inline, and accepts the f keypress to auto-fix detected issues. v2.1.178 refreshed the layout to a flat tree with clearer status icons and highlighted commandsrun /doctor inside the REPL
claude mcpConfigure MCP servers (incl. login/logout for auth, v2.1.186+)See MCP documentation
claude mcp serveRun Claude Code as an MCP serverclaude mcp serve
claude agentsOpen the Agent View (Research Preview, v2.1.139+) — multi-session manager listing every Claude Code session with its status. See Agent View below.claude agents
claude auto-mode defaultsPrint auto mode default rules as JSONclaude auto-mode defaults
claude auto-mode resetRestore default auto-mode configuration, with a confirmation prompt (--yes to skip) (v2.1.212)claude auto-mode reset --yes
claude remote-controlStart Remote Control serverclaude remote-control
claude pluginManage plugins (install, enable, disable)claude plugin install my-plugin
claude plugin init <name>Scaffold a new plugin in .claude/skills — auto-loads with no marketplace required (v2.1.157+)claude plugin init my-plugin
claude plugin tag <version>Create a release git tag for a plugin with version validation (v2.1.118+)claude plugin tag v0.3.0
claude install [version]Install a specific native-binary version. Accepts stable, latest, or an explicit version stringclaude install 2.1.131
claude project purge [path]Delete all local Claude Code state for a project (transcripts, tasks, debug logs, file-edit history, prompt history, and ~/.claude.json entry). Omit [path] for an interactive picker. Flags: --dry-run to preview, -y/--yes to skip confirmation, -i/--interactive to confirm each item, --all for every project (v2.1.126+)claude project purge ~/work/repo --dry-run
claude plugin pruneRemove orphaned auto-installed plugin dependencies (parent plugin gone). plugin uninstall --prune does the same cascade after uninstalling a target (v2.1.121+)claude plugin prune
claude ultrareview [target]Run /ultrareview non-interactively. Prints findings to stdout, exits 0 on success / 1 on failure. Use --json for raw payload, --timeout <minutes> to override the 30-minute default (v2.1.120+)claude ultrareview 1234 --json
claude auth loginLog in (supports --email, --sso). Since v2.1.126, accepts the OAuth code pasted into the terminal as a fallback when the browser callback can't reach localhost (WSL2, SSH, containers)claude auth login --email user@example.com
claude auth logoutLog out of current accountclaude auth logout
claude auth statusCheck auth status (exit 0 if logged in, 1 if not)claude auth status

Core Flags

FlagDescriptionExample
-p, --printPrint response without interactive modeclaude -p "query"
-c, --continueLoad most recent conversationclaude --continue
-r, --resumeResume specific session by ID or nameclaude --resume auth-refactor
-v, --versionOutput version numberclaude -v
-w, --worktreeStart in isolated git worktreeclaude -w
-n, --nameSession display nameclaude -n "auth-refactor"
--from-pr <url-or-number>Resume sessions linked to a pull/merge request. Accepts GitHub (cloud + Enterprise), GitLab MR, and Bitbucket PR URLs since v2.1.119; previously GitHub.com onlyclaude --from-pr 42 or claude --from-pr https://gitlab.example.com/org/repo/-/merge_requests/17
--remote "task"Create web session on claude.aiclaude --remote "implement API"
--remote-control, --rcInteractive session with Remote Controlclaude --rc
--teleportResume web session locallyclaude --teleport
--teammate-modeAgent team display modeclaude --teammate-mode tmux
--bareMinimal mode (skip hooks, skills, plugins, MCP, auto memory, CLAUDE.md)claude --bare
--safe-modeStart with all customizations disabled (CLAUDE.md, plugins, skills, hooks, MCP) to isolate config problems; also CLAUDE_CODE_SAFE_MODE=1 (v2.1.169)claude --safe-mode
--permission-mode autoStart in auto permission mode (replaces the removed --enable-auto-mode flag, gone since v2.1.111)claude --permission-mode auto
--channelsSubscribe to MCP channel pluginsclaude --channels discord,telegram
--chrome / --no-chromeEnable/disable Chrome browser integrationclaude --chrome
--effortSet thinking effort levelclaude --effort high
--init / --init-onlyRun initialization hooksclaude --init
--maintenanceRun maintenance hooks and exitclaude --maintenance
--disable-slash-commandsDisable all skills and slash commandsclaude --disable-slash-commands
--no-session-persistenceDisable session saving (print mode)claude -p --no-session-persistence "query"
--exclude-dynamic-system-prompt-sectionsExclude dynamic sections from the system prompt for better prompt cache hit ratesclaude -p --exclude-dynamic-system-prompt-sections "query"

Interactive vs Print Mode

Interactive Mode (default):

bash
# Start interactive session
claude

# Start with initial prompt
claude "explain the authentication flow"

Print Mode (non-interactive):

bash
# Single query, then exit
claude -p "what does this function do?"

# Process file content
cat error.log | claude -p "explain this error"

# Chain with other tools
claude -p "list todos" | grep "URGENT"

Model & Configuration

FlagDescriptionExample
--modelSet model (sonnet, opus, haiku, or full name)claude --model opus
--fallback-modelAutomatic model fallback when the primary is overloaded/unavailable; configure up to three via the fallbackModel setting. Applies to interactive sessions too since v2.1.166 (previously print mode only)claude -p --fallback-model sonnet "query"
--agentSpecify agent for sessionclaude --agent my-custom-agent
--agentsDefine custom subagents via JSONSee Agents Configuration
--effortSet effort level (low, medium, high, xhigh, max)claude --effort xhigh

Model Selection Examples

bash
# Use Opus 4.8 for complex tasks
claude --model opus "design a caching strategy"

# Use Haiku 4.5 for quick tasks
claude --model haiku -p "format this JSON"

# Full model name
claude --model claude-sonnet-4-6-20250929 "review this code"

# With fallback for reliability
claude -p --model opus --fallback-model sonnet "analyze architecture"

# Use opusplan (Opus plans, Sonnet executes)
claude --model opusplan "design and implement the caching layer"

Gateway model discovery (v2.1.129+, opt-in): When ANTHROPIC_BASE_URL points at an Anthropic-compatible gateway, set CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1 to populate /model from the gateway's /v1/models endpoint. Without the env var, /model falls back to the built-in static list. The flag is opt-in (changed in v2.1.129) because the discovery call can surface models a user may not be entitled to use; v2.1.126 made it implicit and that behavior was reverted.

Org default model (v2.1.196): When an org admin sets a default model, /model labels it as "Org default" (or "Role default").

System Prompt Customization

FlagDescriptionExample
--system-promptReplace entire default promptclaude --system-prompt "You are a Python expert"
--system-prompt-fileLoad prompt from file (print mode)claude -p --system-prompt-file ./prompt.txt "query"
--append-system-promptAppend to default promptclaude --append-system-prompt "Always use TypeScript"
--append-subagent-system-promptAppend text to every subagent's system prompt (non-interactive)claude -p --append-subagent-system-prompt "Cite sources" "query"

System Prompt Examples

bash
# Complete custom persona
claude --system-prompt "You are a senior security engineer. Focus on vulnerabilities."

# Append specific instructions
claude --append-system-prompt "Always include unit tests with code examples"

# Load complex prompt from file
claude -p --system-prompt-file ./prompts/code-reviewer.txt "review main.py"

System Prompt Flags Comparison

FlagBehaviorInteractivePrint
--system-promptReplaces entire default system prompt
--system-prompt-fileReplaces with prompt from file
--append-system-promptAppends to default system prompt

Use --system-prompt-file only in print mode. For interactive mode, use --system-prompt or --append-system-prompt.

Tool & Permission Management

FlagDescriptionExample
--toolsRestrict available built-in toolsclaude -p --tools "Bash,Edit,Read" "query"
--allowedToolsTools that execute without prompting"Bash(git log:*)" "Read"
--disallowedToolsTools removed from context"Bash(rm:*)" "Edit"
--dangerously-skip-permissionsSkip all permission promptsclaude --dangerously-skip-permissions
--permission-modeBegin in specified permission modeclaude --permission-mode auto
--permission-prompt-toolMCP tool for permission handlingclaude -p --permission-prompt-tool mcp_auth "query"

v2.1.111 update: --enable-auto-mode was removed; auto mode is now in the Shift+Tab cycle by default — use --permission-mode auto to start in it directly.

Glob / Grep footnote (v2.1.113+): On native macOS/Linux builds, Glob and Grep are provided as the embedded bfs and ugrep binaries invoked through the Bash tool rather than as separate first-class tools. Windows and npm-bundled (JS) installs still expose them as standalone tools. For subagent allowedTools / disallowedTools lists the backend substitution is transparent — you can keep referring to Glob / Grep in your configuration on every platform.

PowerShell auto-approve (v2.1.119): PowerShell tool commands can be auto-approved in permission mode exactly the same way Bash commands are. Use the same matcher syntax you already use for Bash(...) rules to scope PowerShell permissions — for example, PowerShell(Get-ChildItem:*).

--permission-mode honored on resume (v2.1.132+): claude -p --continue --permission-mode plan (and --resume) now respects the flag. Earlier versions silently dropped --permission-mode when resuming a session, so a plan-mode session resumed without re-passing the flag would silently downgrade — that's fixed.

Permission hardening (v2.1.214): Docker/Podman commands using daemon-redirect flags (e.g. --url, --connection, --identity) now require a permission prompt instead of running automatically. file commands using -m/--magic-file or -f/--files-from also now require permission. Bash commands over 10,000 characters always prompt for permission, regardless of allow rules.

Permission Examples

bash
# Read-only mode for code review
claude --permission-mode plan "review this codebase"

# Restrict to safe tools only
claude --tools "Read,Grep,Glob" -p "find all TODO comments"

# Allow specific git commands without prompts
claude --allowedTools "Bash(git status:*)" "Bash(git log:*)"

# Block dangerous operations
claude --disallowedTools "Bash(rm -rf:*)" "Bash(git push --force:*)"

Parameter matching Tool(param:value) (v2.1.178): Permission rules follow the format Tool (every use) or Tool(specifier). As of v2.1.178, a specifier can match a tool's input parameters, not just command or path patterns — using the Tool(param:value) form with wildcard support. This generalizes the matching you already use for Bash(...) command prefixes (e.g. Bash(npm run test *)) and Read(...) path globs (e.g. Read(./.env.*)) so other tools can be scoped by their arguments. Check the permissions reference for the current per-tool example strings before writing a rule, since the exact parameter names differ by tool.

Output & Format

FlagDescriptionOptionsExample
--output-formatSpecify output format (print mode)text, json, stream-jsonclaude -p --output-format json "query"
--input-formatSpecify input format (print mode)text, stream-jsonclaude -p --input-format stream-json
--verboseEnable verbose loggingclaude --verbose
--include-partial-messagesInclude streaming eventsRequires stream-jsonclaude -p --output-format stream-json --include-partial-messages "query"
--json-schemaGet validated JSON matching schemaclaude -p --json-schema '{"type":"object"}' "query"
--max-budget-usdMaximum spend for print mode. Since v2.1.217, hitting the cap also halts running background subagents and denies new spawns (previously background agents kept running past the cap)claude -p --max-budget-usd 5.00 "query"

Output Format Examples

bash
# Plain text (default)
claude -p "explain this code"

# JSON for programmatic use
claude -p --output-format json "list all functions in main.py"

# Streaming JSON for real-time processing
claude -p --output-format stream-json "generate a long report"

# Structured output with schema validation
claude -p --json-schema '{"type":"object","properties":{"bugs":{"type":"array"}}}' \
  "find bugs in this code and return as JSON"

Workspace & Directory

FlagDescriptionExample
--add-dirAdd additional working directoriesclaude --add-dir ../apps ../lib
--setting-sourcesComma-separated setting sourcesclaude --setting-sources user,project

/config persistence (v2.1.119): Changes made interactively via the /config command are now written to ~/.claude/settings.json and participate in the normal precedence chain (policy → local → project → user). Before v2.1.119, some /config changes were session-only. See Memory & Settings for the full precedence order. | --settings | Load settings from file or JSON. File must be no larger than 2 MiB (v2.1.214) | claude --settings ./settings.json | | --plugin-dir | Load plugins from directory (repeatable) | claude --plugin-dir ./my-plugin |

Multi-Directory Example

bash
# Work across multiple project directories
claude --add-dir ../frontend ../backend ../shared "find all API endpoints"

# Load custom settings
claude --settings '{"model":"opus","verbose":true}' "complex task"

MCP Configuration

FlagDescriptionExample
--mcp-configLoad MCP servers from JSONclaude --mcp-config ./mcp.json
--strict-mcp-configOnly use specified MCP configclaude --strict-mcp-config --mcp-config ./mcp.json
--channelsSubscribe to MCP channel pluginsclaude --channels discord,telegram

MCP Examples

bash
# Load GitHub MCP server
claude --mcp-config ./github-mcp.json "list open PRs"

# Strict mode - only specified servers
claude --strict-mcp-config --mcp-config ./production-mcp.json "deploy to staging"

Session Management

FlagDescriptionExample
--session-idUse specific session ID (UUID)claude --session-id "550e8400-..."
--fork-sessionCreate new session when resumingclaude --resume abc123 --fork-session

Session Examples

bash
# Continue last conversation
claude -c

# Resume named session
claude -r "feature-auth" "continue implementing login"

# Fork session for experimentation
claude --resume feature-auth --fork-session "try alternative approach"

# Use specific session ID
claude --session-id "550e8400-e29b-41d4-a716-446655440000" "continue"

Session Fork

Create a branch from an existing session for experimentation:

bash
# Fork a session to try a different approach
claude --resume abc123 --fork-session "try alternative implementation"

# Fork with a custom message
claude -r "feature-auth" --fork-session "test with different architecture"

Use Cases:

  • Try alternative implementations without losing the original session
  • Experiment with different approaches in parallel
  • Create branches from successful work for variations
  • Test breaking changes without affecting the main session

The original session remains unchanged, and the fork becomes a new independent session.

Project State Cleanup (v2.1.126+)

claude project purge deletes all local Claude Code state for a project — transcripts, task lists, debug logs, file-edit history, prompt history lines, and the project's ~/.claude.json entry. Use --dry-run first to preview the deletion; --all walks every project on the machine.

bash
# Preview what would be deleted (safe)
claude project purge ~/work/repo --dry-run

# Delete state for a specific project, no prompts
claude project purge ~/work/repo --yes

# Walk every project interactively
claude project purge --all --interactive

Advanced Features

FlagDescriptionExample
--chromeEnable Chrome browser integrationclaude --chrome
--no-chromeDisable Chrome browser integrationclaude --no-chrome
--ideAuto-connect to IDE if availableclaude --ide
--max-turnsLimit agentic turns (non-interactive)claude -p --max-turns 3 "query"
--debugEnable debug mode with filteringclaude --debug "api,mcp"
--enable-lsp-loggingEnable verbose LSP loggingclaude --enable-lsp-logging
--betasBeta headers for API requestsclaude --betas interleaved-thinking
--plugin-dirLoad plugins from directory (repeatable)claude --plugin-dir ./my-plugin
--effortSet thinking effort levelclaude --effort high
--bareMinimal mode (skip hooks, skills, plugins, MCP, auto memory, CLAUDE.md)claude --bare
--channelsSubscribe to MCP channel pluginsclaude --channels discord
--tmuxCreate tmux session for worktreeclaude --tmux
--fork-sessionCreate new session ID when resumingclaude --resume abc --fork-session
--max-budget-usdMaximum spend (print mode); also halts background subagents when hit (v2.1.217)claude -p --max-budget-usd 5.00 "query"
--json-schemaValidated JSON outputclaude -p --json-schema '{"type":"object"}' "q"
--ax-screen-readerPlain-text rendering mode for screen readers (v2.1.208)claude --ax-screen-reader

Platform & Theme Notes (v2.1.112)

  • PowerShell tool on Windows: A dedicated PowerShell tool is rolling out on Windows and is controllable via environment variable.
  • Auto (match terminal) theme: The new "Auto (match terminal)" theme syncs Claude Code's light/dark appearance with your terminal.
  • Quieter permission prompts: Read-only Bash invocations and Glob patterns no longer trigger permission prompts.

Advanced Examples

bash
# Limit autonomous actions
claude -p --max-turns 5 "refactor this module"

# Debug API calls
claude --debug "api" "test query"

# Enable IDE integration
claude --ide "help me with this file"

Agents Configuration

The --agents flag accepts a JSON object defining custom subagents for a session.

Agents JSON Format

json
{
  "agent-name": {
    "description": "Required: when to invoke this agent",
    "prompt": "Required: system prompt for the agent",
    "tools": ["Optional", "array", "of", "tools"],
    "model": "optional: sonnet|opus|haiku"
  }
}

Required Fields:

  • description - Natural language description of when to use this agent
  • prompt - System prompt that defines the agent's role and behavior

Optional Fields:

  • tools - Array of available tools (inherits all if omitted)
    • Format: ["Read", "Grep", "Glob", "Bash"]
  • model - Model to use: sonnet, opus, or haiku

Complete Agents Example

json
{
  "code-reviewer": {
    "description": "Expert code reviewer. Use proactively after code changes.",
    "prompt": "You are a senior code reviewer. Focus on code quality, security, and best practices.",
    "tools": ["Read", "Grep", "Glob", "Bash"],
    "model": "sonnet"
  },
  "debugger": {
    "description": "Debugging specialist for errors and test failures.",
    "prompt": "You are an expert debugger. Analyze errors, identify root causes, and provide fixes.",
    "tools": ["Read", "Edit", "Bash", "Grep"],
    "model": "opus"
  },
  "documenter": {
    "description": "Documentation specialist for generating guides.",
    "prompt": "You are a technical writer. Create clear, comprehensive documentation.",
    "tools": ["Read", "Write"],
    "model": "haiku"
  }
}

Agents Command Examples

bash
# Define custom agents inline
claude --agents '{
  "security-auditor": {
    "description": "Security specialist for vulnerability analysis",
    "prompt": "You are a security expert. Find vulnerabilities and suggest fixes.",
    "tools": ["Read", "Grep", "Glob"],
    "model": "opus"
  }
}' "audit this codebase for security issues"

# Load agents from file
claude --agents "$(cat ~/.claude/agents.json)" "review the auth module"

# Combine with other flags
claude -p --agents "$(cat agents.json)" --model sonnet "analyze performance"

Agent Priority

When multiple agent definitions exist, they are loaded in this priority order:

  1. CLI-defined (--agents flag) - Session-specific
  2. Project-level (.claude/agents/) - Current project
  3. User-level (~/.claude/agents/) - All projects

CLI-defined agents override both project and user agents for the session. Project-level agents override user-level agents when their names collide. See Lesson 04 — Subagents for the full priority table including plugin-level agents.

Agent View (claude agents, v2.1.139+)

Research Preview — feature is stable enough for daily use but may change.

claude agents opens the Agent View — a single list of every Claude Code session on the machine with its current status (running, blocked on you, done). It is the replacement for juggling multiple terminal tabs when you run background agents, scheduled tasks, or --bg-launched sessions.

bash
# Open the Agent View
claude agents

When you dispatch a session from the view (or via claude --bg <prompt>), you can pass the same configuration flags you would pass to claude itself. Flags introduced for the Agent View dispatch path:

FlagSinceDescription
--cwd <path>v2.1.141Scope the session list (or new session) to a specific working directory
--add-dir <path>v2.1.142Add directories to the dispatched session's workspace
--settings <path>v2.1.142Use a specific settings.json for the dispatched session
--mcp-config <path>v2.1.142Use a specific MCP config for the dispatched session
--plugin-dir <path>v2.1.142Use a specific plugin directory for the dispatched session
--permission-mode <mode>v2.1.142Set permission mode (plan, acceptEdits, auto, etc.) for the dispatched session
--model <model>v2.1.142Pin a model for the dispatched session
--effort <level>v2.1.142Pin an effort level (low/medium/high/xhigh/max)
--dangerously-skip-permissionsv2.1.142Run the dispatched session without permission prompts (use only in sandboxes)
--jsonv2.1.145Print the agent list as machine-readable JSON for scripting (status bars, session pickers, tmux-resurrect integrations)

Sessions that finish their work but leave a background shell open move from "Working" to "Completed" (v2.1.141 fix). Within an attached agent session, Shift+Tab cycles through permission modes including auto mode (v2.1.143).

Pin a session — press Ctrl+T on a session in claude agents to pin it (v2.1.147). Pinned background sessions stay alive when idle, are restarted in place to apply Claude Code updates, and are shed under memory pressure only after non-pinned sessions. (This Ctrl+T is scoped to the Agent View; in the main session it toggles the task list view.)


High-Value Use Cases

1. CI/CD Integration

Use Claude Code in your CI/CD pipelines for automated code review, testing, and documentation.

GitHub Actions Example:

yaml
name: AI Code Review

on: [pull_request]

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install Claude Code
        run: npm install -g @anthropic-ai/claude-code

      - name: Run Code Review
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          claude -p --output-format json \
            --max-turns 1 \
            "Review the changes in this PR for:
            - Security vulnerabilities
            - Performance issues
            - Code quality
            Output as JSON with 'issues' array" > review.json

      - name: Post Review Comment
        uses: actions/github-script@v7
        with:
          script: |
            const fs = require('fs');
            const review = JSON.parse(fs.readFileSync('review.json', 'utf8'));
            // Process and post review comments

Jenkins Pipeline:

groovy
pipeline {
    agent any
    stages {
        stage('AI Review') {
            steps {
                sh '''
                    claude -p --output-format json \
                      --max-turns 3 \
                      "Analyze test coverage and suggest missing tests" \
                      > coverage-analysis.json
                '''
            }
        }
    }
}

Headless ultrareview (v2.1.120+):

yaml
# .github/workflows/ultrareview.yml
- name: Claude ultrareview
  run: claude ultrareview ${{ github.event.pull_request.number }} --json > review.json

claude ultrareview exits 0 on a clean review and 1 when findings are reported, so it's a drop-in PR gate. Use --timeout <minutes> to override the 30-minute default.

2. Script Piping

Process files, logs, and data through Claude for analysis.

Log Analysis:

bash
# Analyze error logs
tail -1000 /var/log/app/error.log | claude -p "summarize these errors and suggest fixes"

# Find patterns in access logs
cat access.log | claude -p "identify suspicious access patterns"

# Analyze git history
git log --oneline -50 | claude -p "summarize recent development activity"

Code Processing:

bash
# Review a specific file
cat src/auth.ts | claude -p "review this authentication code for security issues"

# Generate documentation
cat src/api/*.ts | claude -p "generate API documentation in markdown"

# Find TODOs and prioritize
grep -r "TODO" src/ | claude -p "prioritize these TODOs by importance"

3. Multi-Session Workflows

Manage complex projects with multiple conversation threads.

bash
# Start a feature branch session
claude -r "feature-auth" "let's implement user authentication"

# Later, continue the session
claude -r "feature-auth" "add password reset functionality"

# Fork to try an alternative approach
claude --resume feature-auth --fork-session "try OAuth instead"

# Switch between different feature sessions
claude -r "feature-payments" "continue with Stripe integration"

4. Custom Agent Configuration

Define specialized agents for your team's workflows.

bash
# Save agents config to file
cat > ~/.claude/agents.json << 'EOF'
{
  "reviewer": {
    "description": "Code reviewer for PR reviews",
    "prompt": "Review code for quality, security, and maintainability.",
    "model": "opus"
  },
  "documenter": {
    "description": "Documentation specialist",
    "prompt": "Generate clear, comprehensive documentation.",
    "model": "sonnet"
  },
  "refactorer": {
    "description": "Code refactoring expert",
    "prompt": "Suggest and implement clean code refactoring.",
    "tools": ["Read", "Edit", "Glob"]
  }
}
EOF

# Use agents in session
claude --agents "$(cat ~/.claude/agents.json)" "review the auth module"

5. Batch Processing

Process multiple queries with consistent settings.

bash
# Process multiple files
for file in src/*.ts; do
  echo "Processing $file..."
  claude -p --model haiku "summarize this file: $(cat $file)" >> summaries.md
done

# Batch code review
find src -name "*.py" -exec sh -c '
  echo "## $1" >> review.md
  cat "$1" | claude -p "brief code review" >> review.md
' _ {} \;

# Generate tests for all modules
for module in $(ls src/modules/); do
  claude -p "generate unit tests for src/modules/$module" > "tests/$module.test.ts"
done

6. Security-Conscious Development

Use permission controls for safe operation.

bash
# Read-only security audit
claude --permission-mode plan \
  --tools "Read,Grep,Glob" \
  "audit this codebase for security vulnerabilities"

# Block dangerous commands
claude --disallowedTools "Bash(rm:*)" "Bash(curl:*)" "Bash(wget:*)" \
  "help me clean up this project"

# Restricted automation
claude -p --max-turns 2 \
  --allowedTools "Read" "Glob" \
  "find all hardcoded credentials"

7. JSON API Integration

Use Claude as a programmable API for your tools with jq parsing.

bash
# Get structured analysis
claude -p --output-format json \
  --json-schema '{"type":"object","properties":{"functions":{"type":"array"},"complexity":{"type":"string"}}}' \
  "analyze main.py and return function list with complexity rating"

# Integrate with jq for processing
claude -p --output-format json "list all API endpoints" | jq '.endpoints[]'

# Use in scripts
RESULT=$(claude -p --output-format json "is this code secure? answer with {secure: boolean, issues: []}" < code.py)
if echo "$RESULT" | jq -e '.secure == false' > /dev/null; then
  echo "Security issues found!"
  echo "$RESULT" | jq '.issues[]'
fi

jq Parsing Examples

Parse and process Claude's JSON output using jq:

bash
# Extract specific fields
claude -p --output-format json "analyze this code" | jq '.result'

# Filter array elements
claude -p --output-format json "list issues" | jq -r '.issues[] | select(.severity=="high")'

# Extract multiple fields
claude -p --output-format json "describe the project" | jq -r '.{name, version, description}'

# Convert to CSV
claude -p --output-format json "list functions" | jq -r '.functions[] | [.name, .lineCount] | @csv'

# Conditional processing
claude -p --output-format json "check security" | jq 'if .vulnerabilities | length > 0 then "UNSAFE" else "SAFE" end'

# Extract nested values
claude -p --output-format json "analyze performance" | jq '.metrics.cpu.usage'

# Process entire array
claude -p --output-format json "find todos" | jq '.todos | length'

# Transform output
claude -p --output-format json "list improvements" | jq 'map({title: .title, priority: .priority})'

Models

Claude Code supports multiple models with different capabilities:

ModelIDContext WindowNotes
Sonnet 5claude-sonnet-51M tokensDefault on Pro / Team Standard / Enterprise seats (v2.1.197); native 1M-token context window. Opus 4.8 remains the default on Max, Team Premium, Enterprise pay-as-you-go, and the Claude API
Opus 4.8claude-opus-4-81M tokensMost capable; adaptive effort levels low → max; default effort high (v2.1.154)
Sonnet 4.6claude-sonnet-4-61M tokensBalanced speed and capability; default effort for Pro/Max subscribers raised from medium to high in v2.1.117
Haiku 4.5claude-haiku-4-5200K tokensFastest, best for quick tasks; no effort levels
Fable 5claude-fable-5Mythos-class model, made safe for general use (v2.1.170)

Model Selection

bash
# Use short names
claude --model opus "complex architectural review"
claude --model sonnet "implement this feature"
claude --model haiku -p "format this JSON"

# Use opusplan alias (Opus plans, Sonnet executes)
claude --model opusplan "design and implement the API"

# Toggle fast mode during session
/fast

Fast Mode now runs on Opus 4.8 (v2.1.154): As of v2.1.154, /fast runs Opus 4.8 by default as a research preview — about 2× the standard rate for ~2.5× the output speed. It previously flipped from Opus 4.6 to Opus 4.7 in v2.1.142. The CLAUDE_CODE_OPUS_4_6_FAST_MODE_OVERRIDE env var was deprecated in v2.1.154 and removed on 2026-06-01; to use fast mode on Opus 4.6 now, run /model claude-opus-4-6[1m] then /fast on.

Effort Levels (Opus 4.8 / Opus 4.7)

Opus 4.8 and Opus 4.7 support adaptive reasoning with effort levels, ordered from lightest to heaviest: low (○), medium (◐), high (●), xhigh, and max. The default is high on Opus 4.8 (since v2.1.154), Opus 4.6, and Sonnet 4.6, and xhigh on Opus 4.7. xhigh is available on Opus 4.8 and Opus 4.7; max works on Opus 4.8/4.7/4.6 and Sonnet 4.6 (session-only). Haiku 4.5 has no effort levels. On Opus 4.6 / Sonnet 4.6, the default effort for Pro/Max subscribers was raised from medium to high in v2.1.117.

bash
# Set effort level via CLI flag
claude --effort high "complex review"

# Set effort level via slash command
/effort high

# Set effort level via environment variable
export CLAUDE_CODE_EFFORT_LEVEL=high   # low, medium, high, xhigh (Opus 4.8/4.7), or max — default is high on Opus 4.8

The "ultrathink" keyword in prompts activates deep reasoning. The /effort menu also offers ultracode, which is not a model effort level — it sends xhigh and has Claude orchestrate dynamic workflows (session-only).


Key Environment Variables

VariableDescription
ANTHROPIC_API_KEYAPI key for authentication
ANTHROPIC_MODELOverride default model
ANTHROPIC_CUSTOM_MODEL_OPTIONCustom model option for API
ANTHROPIC_DEFAULT_OPUS_MODELOverride default Opus model ID
ANTHROPIC_DEFAULT_SONNET_MODELOverride default Sonnet model ID
ANTHROPIC_DEFAULT_HAIKU_MODELOverride default Haiku model ID
MAX_THINKING_TOKENSSet extended thinking token budget
CLAUDE_CODE_EFFORT_LEVELSet effort level (low/medium/high/xhigh/max) — default is high on Opus 4.8 (xhigh on Opus 4.7); xhigh needs Opus 4.8/4.7; max works on Opus 4.8/4.7/4.6 and Sonnet 4.6
CLAUDE_CODE_SIMPLEMinimal mode, set by --bare flag
CLAUDE_CODE_SAFE_MODESet to 1 to start with all customizations disabled (CLAUDE.md, plugins, skills, hooks, MCP) — env-var form of --safe-mode, for isolating config problems (v2.1.169)
CLAUDE_CODE_DISABLE_BUNDLED_SKILLSSet to 1 to hide the bundled skills, workflows, and commands from the model (v2.1.169)
CLAUDE_CODE_DISABLE_AUTO_MEMORYDisable automatic CLAUDE.md updates
CLAUDE_CODE_DISABLE_BACKGROUND_TASKSDisable background task execution
CLAUDE_CODE_DISABLE_CRONDisable scheduled/cron tasks
CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONSDisable git-related instructions
CLAUDE_CODE_DISABLE_TERMINAL_TITLEDisable terminal title updates
CLAUDE_CODE_DISABLE_1M_CONTEXTDisable 1M token context window
CLAUDE_CODE_DISABLE_MOUSE_CLICKSDisable mouse click/drag/hover in fullscreen mode; wheel scroll still works (v2.1.195+)
CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACKDisable non-streaming fallback
CLAUDE_CODE_ENABLE_TASKSEnable task list feature
CLAUDE_CODE_TASK_LIST_IDNamed task directory shared across sessions
CLAUDE_CODE_ENABLE_PROMPT_SUGGESTIONToggle prompt suggestions (true/false)
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMSEnable experimental agent teams
CLAUDE_CODE_NEW_INITUse new initialization flow
CLAUDE_CODE_SUBAGENT_MODELModel for subagent execution
CLAUDE_CODE_PLUGIN_SEED_DIRDirectory for plugin seed files
CLAUDE_CODE_SUBPROCESS_ENV_SCRUBEnv vars to scrub from subprocesses
CLAUDE_AUTOCOMPACT_PCT_OVERRIDEOverride auto-compaction percentage
CLAUDE_STREAM_IDLE_TIMEOUT_MSStream idle timeout in milliseconds
SLASH_COMMAND_TOOL_CHAR_BUDGETCharacter budget for slash command tools
ENABLE_TOOL_SEARCHEnable tool search capability
MAX_MCP_OUTPUT_TOKENSMaximum tokens for MCP tool output
CLAUDE_CODE_PERFORCE_MODESet to 1 to enable Perforce mode — treats files as read-only by default (for Perforce/P4 version control workflows) (added v2.1.98)
DISABLE_UPDATESBlocks all update paths including manual claude update. Stricter than DISABLE_AUTOUPDATER, which only blocks the background autoupdater (v2.1.118+)
CLAUDE_CODE_HIDE_CWDWhen set to 1, hides the current working directory in the startup logo (privacy / screen-share use) (v2.1.119+)
CLAUDE_CODE_FORK_SUBAGENTSet to 1 to enable forked subagents on external builds (Bedrock, Vertex, Foundry). No effect on Anthropic API where forked subagents are GA (v2.1.117+)
CLAUDE_CODE_DISABLE_ALTERNATE_SCREENSet to 1 to opt out of the fullscreen alternate-screen renderer; the session stays in normal terminal scrollback. Useful when piping transcripts to logs or pairing with script(1) (v2.1.132+).
CLAUDE_CODE_SESSION_IDSet in every Bash tool subprocess launched by Claude Code; equals the session_id in hook input JSON. Use to correlate bash logs with hook telemetry (v2.1.132+).
CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTELSet to 1 to re-enable Anthropic's session-quality survey for organizations capturing OpenTelemetry data. Off by default in OTEL deployments (v2.1.136+).
OTEL_LOG_TOOL_DETAILSSet to 1 to unredact custom and MCP command names in OpenTelemetry events (v2.1.117+). Redaction remains the default.
CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTHConfigures the truncation limit (default 60 KB) applied to OpenTelemetry content attributes (v2.1.214)
FORCE_HYPERLINKSet to 0 to opt out of clickable PR-badge hyperlinks in the footer, which now render even when terminal support can't be auto-detected (v2.1.217)
ANTHROPIC_BEDROCK_SERVICE_TIERSelects the Bedrock service tier: default, flex, or priority (v2.1.122+)
AI_AGENTSet automatically on subprocesses so external CLIs (e.g., gh) can attribute traffic to Claude Code (v2.1.120+)
CLAUDE_CODE_FORCE_SYNC_OUTPUTSet to 1 to force synchronous output for terminals where auto-detection misses (e.g., Emacs eat) (v2.1.129+)
CLAUDE_CODE_PACKAGE_MANAGER_AUTO_UPDATESet to 1 to enable background upgrades for Homebrew/WinGet installs (which normally do not auto-update) (v2.1.129+)
CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERYSet to 1 to opt in to gateway /v1/models discovery when ANTHROPIC_BASE_URL is set. Without it, /model shows the built-in static list (v2.1.129+)
CLAUDE_CODE_ENABLE_AUTO_MODELegacy opt-in for auto mode on Bedrock, Vertex, and Foundry (v2.1.158–v2.1.206). As of v2.1.207, auto mode is available by default on those providers for Sonnet 5, Opus 4.7/4.8, and Fable 5 — this variable is accepted for compatibility but has no effect
CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSIONCap on WebSearch tool calls per session, to stop runaway search loops. Default 200 (v2.1.212)
CLAUDE_CODE_MAX_SUBAGENTS_PER_SESSIONCap on subagent spawns per session, to stop runaway delegation loops. Default 200; /clear resets the budget (v2.1.212)
CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTSCap on subagents running concurrently. Default 20 (v2.1.217)
CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTHControls how deep nested subagent spawns can go. Nesting is now off by default; set this to opt back in to deeper nesting (v2.1.217)
CLAUDE_CODE_MCP_AUTO_BACKGROUND_MSThreshold, in milliseconds, before a long-running MCP tool call auto-backgrounds. Default 120000 (2 minutes) (v2.1.212)
CLAUDE_AX_SCREEN_READERSet to 1 to enable plain-text screen reader rendering mode. Same effect as --ax-screen-reader or "axScreenReader": true in settings (v2.1.208)
CLAUDE_CLIENT_PRESENCE_FILEPoint at a marker file to suppress mobile push notifications while you're at the machine (v2.1.181+). Note: the name is CLAUDE_CLIENT_PRESENCE_FILE, not CLAUDE_CODE_CLIENT_PRESENCE_FILE.
CLAUDE_CODE_MAX_RETRIESMaximum number of API retry attempts. Capped at 15 as of v2.1.186.
CLAUDE_CODE_RETRY_WATCHDOGRetry control recommended for unattended sessions, as an alternative to raising CLAUDE_CODE_MAX_RETRIES (v2.1.186+).
CLAUDE_ENABLE_STREAM_WATCHDOGStreaming idle watchdog (aborts/retries after 5 min with no stream events) is on by default for all providers; set to 0 to disable (v2.1.196).
CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUTOverride the 5-minute idle abort for remote MCP tool calls that hang with no response (v2.1.187+).
CLAUDE_CODE_OPUS_4_6_FAST_MODE_OVERRIDERemoved (no-op as of v2.1.160). Previously pinned Fast Mode (/fast) to Opus 4.6. To use fast mode on Opus 4.6 now, run /model claude-opus-4-6[1m] then /fast on.

ENABLE_TOOL_SEARCH on Vertex AI (v2.1.119+): Tool search is disabled by default on Google Cloud Vertex AI deployments. Users who want the tool-search capability on Vertex must explicitly opt in with export ENABLE_TOOL_SEARCH=true. On direct Anthropic API it remains enabled by default.


Settings.json Keys

These keys live in a settings.json file (~/.claude/settings.json for user scope, .claude/settings.json for project scope) rather than being passed as flags or env vars. The table below covers a few recently added UI/UX keys; for the managed enforceAvailableModels key, see Advanced Features → Managed Settings.

KeyDescription
respondToBashCommands(v2.1.186) Auto-respond to the output of ! bash commands. Default true. Set false for context-only (pre-v2.1.186) behavior. See Advanced Features → Bash Mode.
wheelScrollAccelerationEnabled(v2.1.174) Set to false to disable mouse-wheel scroll acceleration in the fullscreen renderer. Useful when fast wheel flicks overshoot.
footerLinksRegexes(v2.1.176) Array of regexes that render matched links as badges in the footer row. Configurable in user or managed settings.
languageSets Claude's preferred response language and voice-dictation language (e.g. "french", "japanese"). As of v2.1.176 it also pins the language used for auto-generated session titles.
sandbox.filesystem.disabled(v2.1.216) Skips filesystem sandboxing while keeping network egress control enforced. For workflows where file sandboxing breaks tooling but network policy must stay enforced.
emojiCompletionEnabled(v2.1.217) Enables emoji shortcode autocomplete in the prompt input (e.g. typing :heart: inserts ❤️). Set false to disable.
json
{
  "wheelScrollAccelerationEnabled": false,
  "language": "french",
  "footerLinksRegexes": ["https://jira\\.example\\.com/.*"]
}

Quick Reference

Most Common Commands

bash
# Interactive session
claude

# Quick question
claude -p "how do I..."

# Continue conversation
claude -c

# Process a file
cat file.py | claude -p "review this"

# JSON output for scripts
claude -p --output-format json "query"

Flag Combinations

Use CaseCommand
Quick code reviewcat file | claude -p "review"
Structured outputclaude -p --output-format json "query"
Safe explorationclaude --permission-mode plan
Autonomous with safetyclaude --permission-mode auto
CI/CD integrationclaude -p --max-turns 3 --output-format json
Resume workclaude -r "session-name"
Custom modelclaude --model opus "complex task"
Minimal modeclaude --bare "quick query"
Budget-capped runclaude -p --max-budget-usd 2.00 "analyze code"

Troubleshooting

Command Not Found

Problem: claude: command not found

Solutions:

  • Install Claude Code: npm install -g @anthropic-ai/claude-code
  • Check PATH includes npm global bin directory
  • Try running with full path: npx claude

API Key Issues

Problem: Authentication failed

Solutions:

  • Set API key: export ANTHROPIC_API_KEY=your-key
  • Check key is valid and has sufficient credits
  • Verify key permissions for the model requested

Session Not Found

Problem: Cannot resume session

Solutions:

  • List available sessions to find correct name/ID
  • Sessions may expire after period of inactivity
  • Use -c to continue most recent session

Output Format Issues

Problem: JSON output is malformed

Solutions:

  • Use --json-schema to enforce structure
  • Add explicit JSON instructions in prompt
  • Use --output-format json (not just asking for JSON in prompt)

Permission Denied

Problem: Tool execution blocked

Solutions:

  • Check --permission-mode setting
  • Review --allowedTools and --disallowedTools flags
  • Use --dangerously-skip-permissions for automation (with caution)

Additional Resources


Part of the Claude How To guide series


Last Updated: July 22, 2026 Claude Code Version: 2.1.217 Sources: