Claude Code 配置速查(配置类)

键位、权限规则、hooks、环境变量、MCP。

目录


0. 严格 JSON

官方原文:"Settings files are strict JSON: a // comment or a trailing comma is a syntax error, and Claude Code reports the file as a Settings Error at the next start."

  • // 注释 → 报错
  • 尾逗号 → 报错
  • 报错后该文件被整体跳过,不是只忽略一行

所以本文档所有片段都不带注释。想在文档里保留说明,请写在 JSON 外面。


1. 配置文件放哪

层级路径进 git?
用户级~/.claude/settings.json(Windows:%USERPROFILE%\.claude\settings.json
项目共享<项目>/.claude/settings.json
项目本地<项目>/.claude/settings.local.json否(由 Claude Code 创建时自动加进全局 git excludes;手工创建的要自己加 .gitignore
企业强制见下表由 IT 下发

企业级 managed 路径

平台路径
Windows 文件C:\Program Files\ClaudeCode\managed-settings.json
Windows HKLMHKLM\SOFTWARE\Policies\ClaudeCode 下名为 Settings 的值(REG_SZREG_EXPAND_SZ
Windows HKCUHKCU\SOFTWARE\Policies\ClaudeCode 下同名的 Settings
macOS 文件/Library/Application Support/ClaudeCode/managed-settings.json
macOS MDMcom.anthropic.claudecode managed preferences domain
Linux / WSL/etc/claude-code/managed-settings.json
旧的 C:\ProgramData\ClaudeCode\managed-settings.json 已不再读取
同目录可放 managed-settings.d/*.json 分片:先合并 managed-settings.json,再按文件名字母序合并分片(用 10-20- 前缀控制顺序)。
托管源优先级:remote(server-managed) → MDM/OS 策略 → managed-settings 文件 → HKCU。

优先级与合并规则

企业 managed > 命令行 --settings > settings.local.json > 项目 settings.json > 用户 settings.json
  • 标量键model):高优先级覆盖
  • 列表键permissions.allow):跨文件合并,不是覆盖。
  • permissions.deny永远赢,宽泛的 deny 压过更窄的 allow。
  • 环境变量不属于这个栈,它与同名键按「键 + 变量」成对决定:ANTHROPIC_MODEL 覆盖任何文件里的 model
  • 少数安全键会采纳更低层级的更严格值(如 maxEffortLevel)。
  • 部分键只在会话启动时读一次modeleffortLevel),改了要重开会话;permissionshooksapiKeyHelper 是热重载。

查当前状态

claude config list
claude config get <key>
claude doctor

会话内 /statusSetting sources 行会显示托管源,如 (remote) / (plist) / (HKLM) / (file) / (drop-ins) / (HKCU)


2. settings.json 键位

{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "model": "sonnet",
  "fallbackModel": "haiku",
  "permissions": {
    "allow": [],
    "ask": [],
    "deny": [],
    "defaultMode": "acceptEdits",
    "additionalDirectories": ["../shared"],
    "disableBypassPermissionsMode": "disable"
  },
  "env": {
    "NODE_ENV": "development"
  },
  "hooks": {},
  "statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.sh",
    "padding": 0
  },
  "enableAllProjectMcpServers": false,
  "enabledMcpjsonServers": [],
  "disabledMcpjsonServers": [],
  "cleanupPeriodDays": 30,
  "alwaysThinkingEnabled": true,
  "spinnerTipsEnabled": false,
  "attribution": {
    "commit": "",
    "pr": ""
  },
  "outputStyle": "Explanatory",
  "autoUpdatesChannel": "stable",
  "apiKeyHelper": "",
  "disableAllHooks": false,
  "sandbox": {
    "enabled": true
  }
}
说明
model / fallbackModel主模型 / 降级模型。--modelANTHROPIC_MODEL 会覆盖 model
permissions第 3 节defaultModeadditionalDirectories 都在这一层内
env注入每个会话;与 shell 同名时设置文件的值生效
hooks第 4 节
statusLine状态栏,另有 refreshIntervalhideVimModeIndicator
apiKeyHelper输出 API key 的脚本,TTL 5 分钟,适合密钥轮换
cleanupPeriodDays会话记录保留天数,默认 30
alwaysThinkingEnabled默认开扩展思考
attributioncommit / PR 的归属信息(includeCoAuthoredBy 已废弃,改用这个)。子键 attribution.commit / .pr / .sessionUrl"隐藏尾注"的具体取值未核实,勿照抄骨架里的空字符串
autoUpdatesChannel发布通道:"latest"(默认)或 "stable"
enableAllProjectMcpServers免确认启用 .mcp.json 全部 server
enabledMcpjsonServers白名单
disabledMcpjsonServers黑名单
disableAllHooks一键关所有 hooks。注意它同时会关掉自定义 statusLine 与 @ 文件补全
sandbox沙箱,见 第 7 节
claudeMdExcludes按绝对路径 glob 排除 CLAUDE.md(managed 的 CLAUDE.md 排除不掉)

已废弃 / 不存在(常见误写)

误写实际
autoUpdatesautoUpdaterStatus不存在 → autoUpdatesChannel
coauthorTrailer不存在 → attribution
includeCoAuthoredBy存在但已废弃attribution
outputStyle: "default" 不生效内置风格值首字母大写Default/Proactive/Concise/Explanatory/Learning
disableAutoMode: true 不生效值是字符串 "disable",不是布尔
顶层 additionalDirectories位置错误 → permissions.additionalDirectories
顶层 defaultMode位置错误 → permissions.defaultMode
$schema 可用但 schema 可能滞后于 CLI 版本;claude doctor 会报出不认识的键。

3. 权限规则

求值顺序

deny  >  ask  >  allow

先 deny,再 ask,最后 allow;第一个命中的决定结果,规则宽窄不改变顺序。allow 无法在 deny 里开口子。

完整示例

{
  "permissions": {
    "allow": [
      "Bash(npm run test:*)",
      "Bash(git status)",
      "Bash(git diff:*)",
      "Read(./src/**)",
      "Read(./**/*.md)",
      "Edit(./src/**)",
      "WebFetch(domain:docs.claude.com)",
      "WebSearch",
      "Agent(Explore)",
      "mcp__github__get_issue",
      "mcp__puppeteer__*"
    ],
    "ask": [
      "Bash(git push:*)",
      "Bash(npm publish:*)"
    ],
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)",
      "Read(//etc/passwd)",
      "Edit(./**/*.pem)",
      "Bash(curl:*)",
      "Bash(rm -rf:*)"
    ]
  }
}

Bash 匹配规则

  • * 匹配任意文本(含空格)。
  • :* 后缀等价末尾通配:Bash(ls:*) == Bash(ls *):* 只在模式末尾被识别。
  • 末尾 * 且前面有空格时也匹配裸命令:Bash(ls *) 匹配 ls;而 Bash(ls*)lsof 也匹配。
  • 复合命令按 &&||;||&&、换行拆分,规则须逐个子命令都匹配。
  • 会被自动剥离的包装器:timeouttimenicenohupstdbuf、shell 内建 command/builtin、zsh noglob、裸 xargs,以及「已知安全变量的前导赋值」。npxdocker exec 不在剥离列表内。
  • 文档提醒:Bash(curl http://example.com/ *) 这类参数约束规则很脆弱,别依赖它做安全边界。

路径规则(Read / Edit)

模式含义示例
//path文件系统根绝对路径Read(//Users/alice/secrets/**)
~/path家目录起Read(~/Documents/*.pdf)
/path相对 settings 来源项目设置里 Edit(/src/**/*.ts)<主工作目录>/src/**/*.ts;用户设置里 → ~/.claude/path
path./path相对当前工作目录Read(*.env)<cwd>/*.env

/path 的锚点按来源区分:项目/本地 settings → 主工作目录;用户 settings → ~/.claude/--settings <file> → 该文件所在目录;CLI flags → 主工作目录。

Windows:路径先归一化为 POSIX(C:\Users\alice/c/Users/alice),跨盘用 //**/.env

! 开头是 gitignore 取反,且只能在本文件内抵消前面的规则。

各工具的可匹配形态

工具形态
BashBash(npm run test:*)Bash(git commit *)
PowerShellPowerShell(Get-ChildItem *),大小写不敏感
Read / EditRead(./.env)Edit(docs/**),gitignore 语法
Write / NotebookEdit / MultiEdit路径规则会被接受但永不生效 → 改用 Edit(...)
Glob同上(经 --allowedTools 传入时不警告)
WebFetchWebFetch(domain:example.com)WebFetch(domain:*.example.com)
WebSearchWebSearch
Agent(子代理)Agent(Explore)Agent(model:opus)Agent(isolation:worktree)
CdCd(~/code/*)(只作用于 /cd
MCPmcp__server__toolmcp__puppeteer__*mcp__puppeteer
MCP 规则的坑:带括号的 mcp__x__y(...) 在加载 settings 时会被跳过;要限定 MCP 参数得走 --disallowedTools。按 server 通配用 mcp__puppeteer__*
裸工具名作为 deny 会把该工具整个从 Claude 上下文中移除(省 token,但也彻底没有该能力);带限定符的 Bash(rm *) 只在使用时拦截。

defaultMode 取值

default(CLI 显示为 Manual,接受 manual 作别名)、acceptEditsplanautodontAskbypassPermissions

autobypassPermissions 不从项目或本地 settings 生效(v2.1.257 起)。必须设在用户级或 managed,或用 --permission-mode。v2.1.257 之前任何文件都能设 bypassPermissions

禁用方式(都在 permissions 下):

{
  "permissions": {
    "disableBypassPermissionsMode": "disable",
    "disableAutoMode": "disable"
  }
}

信任(workspace trust)

项目 .claude/settings.json 里的 permissions.allowpermissions.additionalDirectories 须在信任对话框接受后才生效denyask 立即生效。

命令行

claude --allowedTools "Bash(git log:*)" "Read(./src/**)"
claude --disallowedTools "Bash(rm:*)"
claude --permission-mode plan
claude --dangerously-skip-permissions

--dangerously-skip-permissions 官方定义就是「equivalent to --permission-mode bypassPermissions」。另有 --allow-dangerously-skip-permissions:把该模式加入 Shift+Tab 循环,但不以它启动。


4. Hooks

结构

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/guard.sh",
            "timeout": 60
          }
        ]
      }
    ]
  }
}

matcher 语法

  • "*""" 或省略 → 匹配全部。
  • 只含字母数字、_-、空格、,|精确字符串或精确列表("Edit|Write""Edit, Write")。
  • 含其他字符 → 未锚定的 JS 正则"Edit.*" 会同时匹配 EditNotebookEdit;要整串匹配写 "^Edit$"

MCP 工具匹配要写 mcp__memory__.* —— .* 是必需的,只写 mcp__memory 会被当精确串,匹配不到任何工具。

常用事件

事件时机matcher 匹配
PreToolUse工具调用前,可拦截/改写工具名
PostToolUse工具调用成功后工具名
PostToolUseFailure工具调用失败后工具名
UserPromptSubmit用户提交 prompt 后
SessionStart会话开始/恢复startup/resume/clear/compact/fork
SessionEnd会话结束clear/resume/logout/prompt_input_exit/other
Stop / StopFailure回答结束 / 结束失败无 / 失败原因
SubagentStart / SubagentStop子代理开始 / 结束
PreCompact / PostCompact上下文压缩前 / 后manual/auto
PermissionRequest / PermissionDenied权限请求 / 被拒工具名
Notification发通知时permission_prompt/idle_prompt/…
FileChanged文件变化字面文件名,如 `.envrc\.env`
ConfigChange配置变化user_settings/project_settings/…
TaskCreated / TaskCompleted任务创建 / 完成
实际事件约 30+ 个,还在增加。/hooksclaude doctor 可查当前版本全集。无 matcher 支持的事件上写了 matcher 会被静默忽略

hook 类型

type 有 5 种:commandhttpmcp_toolpromptagent

类型关键字段
commandcommand(必填)、args(存在时走 exec 形式,不经 shell)、shellbash/powershell)、async
httpurlheadersallowedEnvVars(必须列出才允许插值)
mcp_toolservertoolinput
prompt / agentprompt(用 $ARGUMENTS 占位)、model

通用字段:type(必填)、if(单条权限规则语法,如 "Bash(git *)")、timeoutstatusMessage

timeout 默认值:command/http/mcp_tool = 600 秒,prompt = 30,agent = 60。UserPromptSubmit/PreModelSwitch/PostModelSwitch 降到 30,MessageDisplay 降到 10。

输入(stdin JSON)

{
  "session_id": "abc123",
  "prompt_id": "uuid",
  "transcript_path": "/path/to/session.jsonl",
  "cwd": "/path/to/project",
  "permission_mode": "default",
  "hook_event_name": "PreToolUse",
  "tool_name": "Bash",
  "tool_input": { "command": "rm -rf build" },
  "tool_use_id": "toolu_xxx"
}
  • permission_mode 取值:default/plan/acceptEdits/auto/dontAsk/bypassPermissions界面上的 Manual 传过来是 "default",永远不是 "manual"
  • 子代理内另有 agent_idagent_type
  • 附加字段:UserPromptSubmitpromptSessionStartsourcePreCompacttrigger

退出码

行为
0成功。stdout 仅在 UserPromptSubmitUserPromptExpansionSessionStartPostModelSwitch 上作为 Claude 可见上下文;其他事件只进 debug log
2阻塞错误JSON 覆盖不了它 —— 即使 JSON 里写 permissionDecision: "allow" 也照样阻塞
其他若 stdout 是通过 schema 校验的 JSON,退出码被忽略,由 JSON 决定结果;否则是非阻塞错误
文档明确警告:exit 1 在多数事件上不阻塞。要强制策略必须用 exit 2

stdout 被当作 JSON 解析的条件:首字符 { 末字符 }。以 { 开头但未闭合、或以任何其他字符开头(含 JSON 数组),都按纯文本处理。

输出 JSON

{
  "hookSpecificOutput": {
    "hookEventName": "PreToolUse",
    "permissionDecision": "deny",
    "permissionDecisionReason": "Destructive command blocked by hook"
  }
}

已确证存在的字段:hookSpecificOutput(含 hookEventNamepermissionDecisionpermissionDecisionReasonretryupdatedInputadditionalContext)、systemMessageterminalSequencedecision

  • PermissionRequesthookSpecificOutput.decision.behavior(值 "allow")。
  • PostToolUseStop 用顶层 decision: "block"
continuestopReasonsuppressOutput 在官方页面上存在但定义未逐字取到,暂不示例

拦截危险命令(完整可用)

配置:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "if": "Bash(rm *)",
            "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/block-rm.sh",
            "args": []
          }
        ]
      }
    ]
  }
}

脚本 .claude/hooks/block-rm.sh

#!/usr/bin/env bash
set -euo pipefail
input=$(cat)
cmd=$(jq -r '.tool_input.command // empty' <<<"$input")

if [[ "$cmd" =~ rm[[:space:]]+-rf ]]; then
  jq -n '{
    hookSpecificOutput: {
      hookEventName: "PreToolUse",
      permissionDecision: "deny",
      permissionDecisionReason: "Destructive command blocked by hook"
    }
  }'
fi
exit 0

保存即格式化

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "jq -r '.tool_input.file_path' | xargs -r npx prettier --write"
          }
        ]
      }
    ]
  }
}

hook 配置能放哪

~/.claude/settings.json.claude/settings.json.claude/settings.local.json、managed settings、插件 hooks/hooks.jsonskill frontmattersubagent frontmatter

所有匹配的 hook 并行执行。同一 handler 在多个 settings 文件里定义只跑一次。整体关闭:"disableAllHooks": true它同时会关掉自定义 statusLine 和 @ 文件补全命令);没有只关单个 hook 的办法。

调试:claude --debug hooks


5. 环境变量

端点 / 认证

变量说明
ANTHROPIC_API_KEY作为 X-Api-Key 发送;设置后即使已登录也用 key 而非订阅
ANTHROPIC_AUTH_TOKEN自定义 Authorization 头(前缀 Bearer
ANTHROPIC_BASE_URL覆盖 API 端点,走代理/网关
ANTHROPIC_CUSTOM_HEADERS自定义头,Name: Value,换行分隔
ANTHROPIC_BETAS逗号分隔的额外 anthropic-beta 头值
CLAUDE_CODE_USE_BEDROCK用 Amazon Bedrock
CLAUDE_CODE_USE_VERTEX用 Google Vertex AI
AWS_REGION / AWS_PROFILEBedrock 相关
CLOUD_ML_REGION / ANTHROPIC_VERTEX_PROJECT_IDVertex 相关

模型

变量说明
ANTHROPIC_MODEL优先于 settings 里的 model
ANTHROPIC_DEFAULT_MODEL新会话默认模型;仅当没有文件设置 model 时生效
ANTHROPIC_DEFAULT_OPUS_MODEL / _SONNET_ / _HAIKU_ / _FABLE_各别名解析到的模型 ID
ANTHROPIC_SMALL_FAST_MODEL【已废弃】 → 改用 ANTHROPIC_DEFAULT_HAIKU_MODEL
CLAUDE_CODE_SUBAGENT_MODEL子代理默认模型
CLAUDE_CODE_EFFORT_LEVELeffort 级别;覆盖 --effort/effort

网络

HTTPS_PROXY(推荐)、HTTP_PROXYNO_PROXY(空格或逗号分隔,支持 .example.com*)。

  • 小写变体同样有效,取值顺序:https_proxyHTTPS_PROXYhttp_proxyHTTP_PROXY
  • 不支持 SOCKS 代理
  • Basic auth 直接写进 URL:http://user:pass@proxy:8080

超时 / 上限

变量默认
API_TIMEOUT_MS600000(10 分钟)
BASH_DEFAULT_TIMEOUT_MS120000(2 分钟)
BASH_MAX_TIMEOUT_MS600000(10 分钟)
BASH_MAX_OUTPUT_LENGTH30000,上限 150000
MCP_TIMEOUTMCP server 启动超时
MCP_TOOL_TIMEOUT每台服务器工具执行超时
MAX_MCP_OUTPUT_TOKENSMCP 输出 token 上限

隐私 / 遥测

CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1
DISABLE_TELEMETRY=1
DISABLE_ERROR_REPORTING=1
「非空即开启」型开关:这类变量只要非空(包括设成 0)就算开启。要关闭必须 unset 或设为空串。属于这一类的有 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICDISABLE_TELEMETRYDISABLE_ERROR_REPORTINGCLAUDE_CODE_TMUX_TRUECOLORFALLBACK_FOR_ALL_PRIMARY_MODELSIS_DEMO

其他

变量说明
CLAUDE_CONFIG_DIR改变 ~/.claude 的位置(settings 等随之前移)
NODE_EXTRA_CA_CERTS自定义 CA 证书路径
CLAUDE_CODE_CERT_STORE逗号分隔,取值 bundled / system
CLAUDE_CODE_CLIENT_CERT / _CLIENT_KEYmTLS 客户端证书
CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD--add-dir 的目录也加载 CLAUDE.md

脚本里读(运行时注入)

变量说明
CLAUDECODEClaude Code 在其 spawn 的子进程中设为 1(Bash/PowerShell 工具、tmux、hook 命令、status line 命令、stdio MCP 服务器)
CLAUDE_CODE_CHILD_SESSION区分「直接由工具调用/hook spawn」与「在 CC 启动的 stdio MCP 服务器内」
CLAUDE_PROJECT_DIR项目根绝对路径(hook 配置里用的占位符)

写在哪

① settings.json 的 env

{
  "env": {
    "NODE_ENV": "development",
    "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
  }
}
  • shell 与 settings 文件同时设置时,设置文件的值生效
  • settings 文件里只能设变量,不能删变量;要压掉 shell 里无法 unset 的变量,就设为空串 ""

② shell 环境变量(全局):

export ANTHROPIC_BASE_URL="https://gateway.example.com"

③ 单次会话

ANTHROPIC_MODEL=opus claude
数字变量的写法:支持科学计数法与数字分隔符,2e3 读作 2000、64_000 读作 64000。(v2.1.211 之前 1e6 会被错误地设成 1。)

6. MCP

.mcp.json(项目根,进 git)

{
  "mcpServers": {
    "filesystem": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "./data"],
      "env": { "LOG_LEVEL": "info" }
    },
    "tavily": {
      "type": "http",
      "url": "https://mcp.tavily.com/mcp/",
      "headers": { "Authorization": "Bearer ${TAVILY_API_KEY}" }
    },
    "legacy": {
      "type": "sse",
      "url": "https://example.com/sse"
    }
  }
}
字段说明
typestdio / sse / http / wsstreamable-httphttp 的别名
stdiocommandargsenv
http/wsurlheadersheadersHelpertimeoutalwaysLoad
  • url 但没 type 是配置错误 —— 会被当成 stdio 服务器读取。
  • 变量展开支持 ${VAR}${VAR:-default},位置:commandargsenvurlheaders
  • ${VAR} 未定义 → 该 server 加载失败。
  • 每服务器工具超时 "timeout": 600000(毫秒),覆盖该服务器的 MCP_TOOL_TIMEOUT低于 1000 的值被忽略

作用域与优先级

整个 server 条目取用(字段不合并),优先级高 → 低:local → project → user → 插件提供 → claude.ai 连接器。

作用域存储位置团队共享
local(默认)~/.claude.jsonprojects.<path>.mcpServers
project项目根 .mcp.json
user~/.claude.json

命令

claude mcp add --transport http <name> <url>
claude mcp add --transport sse <name> <url>
claude mcp add --env KEY=val <name> -- <command> [args...]
claude mcp add-json <name> '{"type":"stdio","command":"npx","args":["-y","pkg"]}'
claude mcp add-from-claude-desktop
claude mcp list
claude mcp get <name>
claude mcp remove <name>
claude mcp login <name>
claude mcp logout <name>
claude mcp reset-project-choices
claude mcp serve

标志:-s/--scopelocal/project/user)、-t/--transporthttp/sse/stdio不接受 ws)、-e/--env-H/--header--callback-port--client-id--client-secret

--env 与服务器名之间至少放一个其他选项,否则名字会被当成又一对 KEY=value

会话内:/mcp(状态、OAuth 认证、重连)。

信任开关

{
  "enableAllProjectMcpServers": false,
  "enabledMcpjsonServers": ["tavily"],
  "disabledMcpjsonServers": ["experimental"]
}
.mcp.json 里写的是会被执行的任意命令。克隆陌生仓库先审再信任。

7. 可复制模板

团队共享(.claude/settings.json,进 git)

{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "permissions": {
    "allow": [
      "Bash(pnpm install)",
      "Bash(pnpm run test:*)",
      "Bash(pnpm run lint:*)",
      "Bash(git status)",
      "Bash(git diff:*)",
      "Bash(git log:*)",
      "Read(./src/**)",
      "Read(./docs/**)"
    ],
    "ask": [
      "Bash(git push:*)",
      "Bash(pnpm publish:*)"
    ],
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)",
      "Edit(./**/*.pem)",
      "Bash(curl:*)",
      "Bash(rm -rf:*)"
    ]
  },
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "pnpm exec prettier --write $(jq -r '.tool_input.file_path')"
          }
        ]
      }
    ]
  }
}

个人覆盖(.claude/settings.local.json,不进 git)

{
  "env": {
    "TAVILY_API_KEY": ""
  },
  "permissions": {
    "allow": ["Bash(docker:*)"]
  },
  "enabledMcpjsonServers": ["tavily"]
}
敏感值放这里,或干脆走 shell 环境变量 / apiKeyHelper不要写进会提交的 settings.json

企业网关

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://llm-gateway.corp.example.com",
    "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
  },
  "apiKeyHelper": "/usr/local/bin/get-gateway-key.sh",
  "forceLoginMethod": "console"
}
走 Bedrock 另加 CLAUDE_CODE_USE_BEDROCK=1 + AWS_REGION;走 Vertex 加 CLAUDE_CODE_USE_VERTEX=1 + CLOUD_ML_REGION + ANTHROPIC_VERTEX_PROJECT_ID

Windows 代理

{
  "env": {
    "HTTPS_PROXY": "http://127.0.0.1:7890",
    "HTTP_PROXY": "http://127.0.0.1:7890",
    "NO_PROXY": "localhost,127.0.0.1"
  }
}

或用 setx(改完需重开终端)。

沙箱

{
  "sandbox": {
    "enabled": true,
    "autoAllowBashIfSandboxed": true,
    "network": {
      "allowUnixSockets": ["/var/run/docker.sock"]
    },
    "filesystem": {
      "allowWrite": ["./tmp", "./build"],
      "denyRead": ["~/.ssh", "~/.aws"]
    }
  }
}
⚠️ 沙箱只在 macOS、Linux、WSL 2 上支持Native Windows 不支持(WSL 1 也不支持)。

statusLine

{
  "statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.sh",
    "padding": 2,
    "refreshInterval": 5
  }
}

padding 默认 0refreshInterval 最小 1 秒;hideVimModeIndicator 可抑制 -- INSERT --


评论已关闭