Claude Code 常用配置手册

面向日常使用的 Claude Code 配置参考:配置文件在哪、每个键干什么、权限怎么写、hooks 怎么挂、环境变量怎么设。
文末附可直接抄的场景配方

关于准确性:本文内容已对照官方文档(https://code.claude.com/docs/en/)逐条核验,核验基准版本为 2.1.275。仍请以 claude doctorclaude config list/help 的实际输出为准。

⚠️ settings.json严格 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."

目录


1. 配置文件层级与优先级

1.1 五层结构

优先级层级路径影响范围
1(最高)企业 managed1.3组织全员;用户无法覆盖
2命令行claude --settings本会话
3项目本地.claude/settings.local.json你,仅本项目
4项目共享.claude/settings.json项目所有人(提交进 git)
5(最低)用户级~/.claude/settings.json你,所有项目
  • ~/.claude 在 Windows 上 = %USERPROFILE%\.claude。可用 CLAUDE_CONFIG_DIR 改变它的位置。
  • ~/.claude.json(注意是文件,不是目录)保存登录态、项目历史、local 作用域 MCP 等运行时数据,不要手工编辑

1.2 合并规则

  • 标量键model):高优先级覆盖低优先级。
  • 列表键permissions.allow):跨文件合并,不是覆盖。
  • permissions.deny永远赢
  • 环境变量不属于这个栈。它与同名键按「键 + 变量」成对决定谁优先:ANTHROPIC_MODEL 覆盖任何文件里的 modelANTHROPIC_DEFAULT_MODEL 只在没有任何文件设置 model 时才生效。
  • 少数安全敏感键会采纳更低层级的更严格值(如 maxEffortLevelremoteControlAtStartupcrossSessionInbound)。

生效时机:多数键(含 permissionshooksapiKeyHelper)热重载;modeleffortLevelmodelSettings 只在会话启动时读一次,改了要重开会话。

1.3 企业级 managed settings

机制位置
Windows 文件C:\Program Files\ClaudeCode\managed-settings.json
Windows HKLMHKLM\SOFTWARE\Policies\ClaudeCode 下名为 Settings 的值(REG_SZ / REG_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- 前缀控制顺序;隐藏文件和非 .json 文件被忽略。

托管源合并顺序(高 → 低):remote(server-managed,来自 claude.ai 控制台)→ MDM/OS 策略 → managed-settings 文件与分片 → HKCU。

默认 managedSourcesBehaviorfirst-wins:只用最高且含 policy key 的源,其余忽略;设为 "merge" 才全部合成(需 v2.1.242+)。

会话内 /statusSetting sources 行会显示实际选中的来源:(remote)(plist)(HKLM)(file)(drop-ins)(HKCU)(parent process)(helper)

1.4 查当前生效配置

claude config list
claude config get <key>
claude doctor
/config 写入的「Global config」键(autoConnectIdecopyOnSelectdiffTool 等)存放在 ~/.claude.json不在 settings.json 里

2. settings.json 键位参考

2.1 完整骨架

{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "model": "sonnet",
  "fallbackModel": "haiku",
  "permissions": {
    "allow": ["Bash(npm run test:*)", "Read(./src/**)"],
    "ask": ["Bash(git push:*)"],
    "deny": ["Read(./.env)", "Read(./secrets/**)"],
    "defaultMode": "acceptEdits",
    "additionalDirectories": ["../shared-libs"],
    "disableBypassPermissionsMode": "disable"
  },
  "env": {
    "NODE_ENV": "development"
  },
  "hooks": {},
  "statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.sh",
    "padding": 0
  },
  "enableAllProjectMcpServers": false,
  "enabledMcpjsonServers": ["tavily"],
  "disabledMcpjsonServers": ["untrusted"],
  "cleanupPeriodDays": 30,
  "alwaysThinkingEnabled": true,
  "spinnerTipsEnabled": false,
  "attribution": {
    "commit": "",
    "pr": ""
  },
  "outputStyle": "Explanatory",
  "autoUpdatesChannel": "stable",
  "disableAllHooks": false,
  "apiKeyHelper": "/path/to/get-key.sh",
  "forceLoginMethod": "claudeai",
  "sandbox": {
    "enabled": true
  }
}

2.2 键位说明

类型说明
modelstring默认模型。可写别名 sonnet/opus/haiku/fable 或完整 ID。--modelANTHROPIC_MODEL 会覆盖它
fallbackModelstring主模型过载/不可用时的降级模型(可逗号分隔多个)
permissionsobject见第 3 节
envobject注入每个会话;与 shell 同名时设置文件的值生效
hooksobject见第 4 节
statusLineobject见第 9 节
apiKeyHelperstring输出 API key 的脚本路径,重跑间隔默认 5 分钟(用 CLAUDE_CODE_API_KEY_HELPER_TTL_MS 调整),适合密钥轮换。跑超 10 秒会提示
cleanupPeriodDaysnumber会话记录保留天数,默认 30
alwaysThinkingEnabledbool默认开启扩展思考
spinnerTipsEnabledbool关闭等待提示语
attributionobjectcommit / PR 的归属信息。子键 attribution.commitattribution.prattribution.sessionUrl(键存在已确认;"隐藏尾注"的具体取值未核实,官方文档原文只说"Change or hide",写法未逐字取到,请勿照抄骨架里的空字符串)
outputStylestring输出风格名。内置:DefaultProactiveConciseExplanatoryLearning首字母大写,官方示例为 "Explanatory"
autoUpdatesChannelstring发布通道:"latest"(默认,第一时间收新功能)或 "stable"(约滞后一周,跳过有重大回归的版本)
enableAllProjectMcpServersbool免确认自动启用 .mcp.json 全部 server
enabledMcpjsonServersstring[]白名单
disabledMcpjsonServersstring[]黑名单
disableAllHooksbool一键关所有 hooks。注意它同时关掉自定义 statusLine 与 @ 文件补全
forceLoginMethodstring锁定登录方式:"claudeai""console"、或 "gateway"(云网关)。常与 forceLoginOrgUUID 配合
sandboxobject11.5
availableModelsstring[]限制可选的模型(managed 下发给团队用)
claudeMdExcludesstring[]按绝对路径 glob 排除 CLAUDE.md;managed 的 CLAUDE.md 排除不掉
autoMemoryEnabledbool自动记忆开关
$schemastring编辑器补全;注意 schema 可能滞后于 CLI 版本

2.3 常见误写(重要)

误写实际情况
autoUpdates / autoUpdaterStatus不存在 → 用 autoUpdatesChannel
coauthorTrailer不存在 → 用 attribution
includeCoAuthoredBy存在但已废弃 → 用 attribution
顶层 additionalDirectories位置错误permissions.additionalDirectories
顶层 defaultMode位置错误permissions.defaultMode
另外,permissionExplainerEnabled 已在 v2.1.257 移除。

仅 managed 可设置的键(放在用户/项目 settings 里无效):allowManagedHooksOnlyallowManagedMcpServersOnlyallowManagedPermissionRulesOnlymanagedMcpServersmanagedSourcesBehaviorstrictKnownMarketplacesblockedMarketplacespolicyHelperwslInheritsWindowsSettingsclaudeMd 等。


3. 权限系统 permissions

3.1 defaultMode 取值

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

行为
default每次敏感操作都弹窗确认
acceptEdits自动接受文件编辑,Bash 等仍需确认
plan计划模式:只读探索,产出方案后再执行
auto自动模式
dontAsk不询问
bypassPermissions全部放行,仅限隔离容器/CI
⚠️ 关键限制autobypassPermissions 不从项目或本地 settings 生效(v2.1.257 起)。必须设在用户级或 managed settings,或用 --permission-mode。v2.1.257 之前任何文件都能设 bypassPermissions

禁用(都在 permissions 之下):

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

3.2 求值顺序

官方原文:"Rules are evaluated in order: deny, then ask, then allow. The first match in that order determines the outcome, and rule specificity doesn't change the order."

deny  >  ask  >  allow

第一个命中的决定结果,规则宽窄不改变顺序。宽泛的 deny 会压过更窄的 allow,allow 无法在 deny 里开口子。

3.3 规则语法

格式 ToolTool(specifier)。specifier 内的括号是字面量,无需转义。

Bash —— 通配与前缀

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

路径规则(Read / Edit)

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

/path 锚点对照:

settings 来源锚点
项目 / 本地 settings主工作目录
用户 settings~/.claude/
--settings <file>该文件所在目录
CLI flags主工作目录

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

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

各工具的可匹配形态

工具形态
BashBash(npm run test:*)Bash(git commit *)
PowerShellPowerShell(Get-ChildItem *);别名先规范化,大小写不敏感
Read / EditRead(./.env)Edit(docs/**)gitignore 语法
Write / NotebookEdit / MultiEdit路径规则会被接受但永不生效 → 必须改用 Edit(...) / Read(...)
Glob同上(经 --allowedTools 传入时不警告)
WebFetchWebFetch(domain:example.com)WebFetch(domain:*.example.com)WebFetch(domain:*);大小写不敏感
WebSearchWebSearch(无 domain 型限定符)
Agent(子代理)Agent(Explore)Agent(my-custom-agent)Agent(model:opus)Agent(isolation:worktree)
CdCd(~/code/*);只作用于 /cd,Claude 不能调用
MCPmcp__server__toolmcp__puppeteer__*mcp__puppeteer
MCP 规则的坑:加载 settings 时会跳过任何带括号的 mcp__ 规则mcp__x__y(...))。要限定 MCP 参数得走 --disallowedTools
裸工具名作 deny(如 BashBash(*))会把该工具整个从 Claude 上下文中移除;带限定符的 Bash(rm *) 保留工具、只在调用时拦截。

Bash 示例

{
  "permissions": {
    "allow": [
      "Bash(npm run test:*)",
      "Bash(git status)",
      "Bash(git diff:*)",
      "Bash(ls:*)"
    ],
    "deny": [
      "Bash(curl:*)",
      "Bash(rm -rf:*)",
      "Bash(git push --force:*)"
    ]
  }
}

路径示例

{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)",
      "Read(//etc/passwd)",
      "Edit(//etc/**)"
    ],
    "allow": [
      "Read(./src/**)",
      "Read(./**/*.md)",
      "Edit(./src/**)"
    ]
  }
}

3.4 信任(workspace trust)

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

.claude/settings.local.json 若未被 git 跟踪,其 allow 规则不等信任

3.5 命令行管理

claude --allowedTools "Bash(git log:*)" "Read(./src/**)"
claude --disallowedTools "Bash(rm:*)"
claude --permission-mode plan
claude --dangerously-skip-permissions
claude --allow-dangerously-skip-permissions
  • --dangerously-skip-permissions:官方定义 "equivalent to --permission-mode bypassPermissions"
  • --allow-dangerously-skip-permissions:把 bypassPermissions 加入 Shift+Tab 模式循环,但不以它启动
  • 会话内:/permissions(别名 /allowed-tools)。
安全提醒deny 是最后一道防线,但挡不住内容级逃逸 —— Bash(python:*) 等于任意代码执行。真正的隔离要靠 sandbox 或容器。切勿把 API key 写进会提交的 settings.json

4. Hooks

Hooks 让 harness 本身在特定事件触发时执行动作(不依赖模型自觉),是实现"每次 X 之后自动 Y"的唯一可靠方式。

4.1 事件表

事件数量远多于早期版本(约 30+ 个),按用途分组:

分组事件
工具调用PreToolUsePostToolUsePostToolUseFailurePostToolBatchPermissionRequestPermissionDenied
会话 / 轮次SessionStartSessionEndSetupUserPromptSubmitUserPromptExpansionStopStopFailure
上下文 / 配置PreCompactPostCompactConfigChangeInstructionsLoadedCwdChangedDirectoryAddedFileChanged
模型 / 消息PreModelSwitchPostModelSwitchMessageDisplayNotification
子代理 / 任务SubagentStartSubagentStopTeammateIdleTaskCreatedTaskCompleted
MCP / 其他ElicitationElicitationResultWorktreeCreateWorktreeRemove

常用事件的 matcher 匹配对象:

事件matcher 取值
PreToolUse / PostToolUse工具名
SessionStartstartup / resume / clear / compact / fork
SessionEndclear / resume / logout / prompt_input_exit / other
PreCompact / PostCompactmanual / auto
ConfigChangeuser_settings / project_settings / local_settings / policy_settings / skills
Notificationpermission_prompt / idle_prompt / auth_success
StopFailurerate_limit / overloaded
FileChanged字面文件名,如 `.envrc\.env`
无 matcher 支持的事件UserPromptSubmitStopWorktreeCreate 等)上写了 matcher 会被静默忽略
/hooksclaude doctor 查当前版本全集。

4.2 matcher 语法

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

MCP 工具匹配要写 mcp__memory__.* —— .* 是必需的,只写 mcp__memory 会被当精确串,匹配不到任何工具。插件服务器格式为 mcp__plugin_<plugin-name>_<server-name>__<tool>

4.3 hook 类型(5 种)

类型关键字段
commandcommand(必填)、args(存在时走 exec 形式,command 直接 spawn,不经 shell)、asyncshell"bash" / "powershell"
httpurlheadersallowedEnvVars必须列出才允许插值)
mcp_toolservertoolinput
promptprompt(用 $ARGUMENTS 占位)、model
agentpromptmodel

通用字段

字段说明
type必填
if单条权限规则语法(如 "Bash(git *)"),只在工具/权限类事件上求值
timeout秒。默认:command/http/mcp_tool = 600,prompt = 30,agent = 60。UserPromptSubmit/PreModelSwitch/PostModelSwitch 降到 30,MessageDisplay 降到 10
statusMessage状态提示文案

路径占位符${CLAUDE_PROJECT_DIR}(会话启动时的项目根)、${CLAUDE_PLUGIN_ROOT}${CLAUDE_PLUGIN_DATA}。引用占位符时优先用 exec 形式;shell 形式要给每个占位符加双引号。

4.4 配置结构

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "if": "Bash(rm *)",
            "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/block-rm.sh",
            "args": []
          }
        ]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "jq -r '.tool_input.file_path' | xargs -r npx prettier --write"
          }
        ]
      }
    ]
  }
}
  • 所有匹配的 hook 并行执行
  • 同一 handler 在多个 settings 文件里定义只跑一次(插件/skill 的副本另算)。

hook 能配在哪~/.claude/settings.json.claude/settings.json.claude/settings.local.json、managed settings、插件 hooks/hooks.jsonskill frontmattersubagent frontmatter

整体关闭"disableAllHooks": true。注意它同时会关掉自定义 status line 和自定义 @ 文件补全命令没有只关单个 hook 的办法。

4.5 输入(stdin JSON)

{
  "session_id": "abc123",
  "prompt_id": "uuid",
  "transcript_path": "/path/to/session.jsonl",
  "cwd": "/path/to/project",
  "scratchpad_dir": "/path",
  "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"
effort.levellow / medium / high / xhigh / max
agent_idagent_type仅在子代理内

附加字段:UserPromptSubmitpromptSessionStartsourcePreCompacttrigger

读法示例:

#!/usr/bin/env bash
input=$(cat)
cmd=$(echo "$input" | jq -r '.tool_input.command // empty')
echo "about to run: $cmd" >&2
exit 0

4.6 退出码

行为
0成功。stdout 仅在 UserPromptSubmitUserPromptExpansionSessionStartPostModelSwitch 上作为 Claude 可见上下文;其他事件只进 debug log。stderr 在 exit 0 时永远只进 debug log
2阻塞错误JSON 无法覆盖它 —— 即使 JSON 里写 permissionDecision: "allow" 也照样阻塞。阻塞消息取 JSON 的阻塞原因,否则取 stderr
其他若 stdout 是通过 schema 校验的 JSON 对象,退出码被忽略,由 JSON 决定结果;校验失败或无法解析则是非阻塞错误
官方明确警告:exit 1 在多数事件上不阻塞。要强制策略必须用 exit 2

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

4.7 输出 JSON

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

已确证存在的字段:

字段说明
hookSpecificOutput.hookEventName事件名
hookSpecificOutput.permissionDecisionallow / deny / ask
hookSpecificOutput.permissionDecisionReason理由
hookSpecificOutput.updatedInput改写工具入参
hookSpecificOutput.additionalContext注入额外上下文
hookSpecificOutput.retry重试控制
systemMessage在 UI 显示一条系统消息
terminalSequence终端控制序列
decisionPostToolUseStop 用顶层 decision: "block"
  • PermissionRequesthookSpecificOutput.decision.behavior(值 "allow"),并可带 updatedPermissions: [{"type": "setMode", "mode": "acceptEdits", "destination": "session"}]
continuestopReasonsuppressOutput 在官方页面中存在,但其完整定义未逐字取得,本文不做示例

4.8 完整示例:拦截危险命令

settings.json

{
  "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

记得 chmod +x .claude/hooks/block-rm.sh

4.9 完整示例:保存即格式化

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

4.10 调试

claude --debug hooks
claude --debug='mcp,startup'
安全提醒:hook 是以你的身份执行的任意命令。项目共享 settings.json 里的 hooks 会被团队成员执行,审查时重点看这里。

5. 环境变量

分两类:配置类(你主动设置)和运行时注入类(Claude Code 传给子进程,你在脚本里读)。

5.1 认证与端点

变量说明
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 相关

5.2 模型与思考

变量说明
ANTHROPIC_MODEL优先于 model 设置;--model/model 又覆盖它
ANTHROPIC_DEFAULT_MODEL新会话默认模型;仅在无文件设置 model 时生效
ANTHROPIC_DEFAULT_OPUS_MODEL / _SONNET_ / _HAIKU_ / _FABLE_各别名解析到的模型 ID;Haiku 那个也用于后台功能
ANTHROPIC_SMALL_FAST_MODEL【已废弃】 → 用 ANTHROPIC_DEFAULT_HAIKU_MODEL
CLAUDE_CODE_SUBAGENT_MODEL子代理默认模型
CLAUDE_CODE_EFFORT_LEVELeffort 级别;覆盖 --effort/effort

5.3 网络

HTTPS_PROXY(推荐)、HTTP_PROXYNO_PROXY

  • 取值顺序:https_proxyHTTPS_PROXYhttp_proxyHTTP_PROXY小写变体同样有效)。
  • NO_PROXY 用空格或逗号分隔,支持 .example.com*
  • 不支持 SOCKS 代理。
  • 发往 localhost / ::1 / 127.0.0.0/8 的 WebSocket 永不走代理。
  • Basic auth 写进 URL:http://user:pass@proxy:8080

5.4 超时与上限

变量默认
API_TIMEOUT_MS600000(10 分钟),最大 2147483647
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 上限
数字变量支持科学计数法与数字分隔符:2e3 读作 2000、64_000 读作 64000。(v2.1.211 之前 1e6 会被错误地设成 1。)

5.5 隐私与遥测

变量说明
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC总开关,关掉全部非必要流量
DISABLE_TELEMETRY关闭遥测
DISABLE_ERROR_REPORTING关闭错误上报
DISABLE_AUTOUPDATER关闭后台自动更新检查(claude update 仍可手动更新;要连手动也堵住用 DISABLE_UPDATES
「非空即开启」型开关:只要非空(包括设成 0)就算开启,要关必须 unset 或设为空串。属于这一类的有 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICDISABLE_TELEMETRYDISABLE_ERROR_REPORTINGCLAUDE_CODE_TMUX_TRUECOLORFALLBACK_FOR_ALL_PRIMARY_MODELSIS_DEMO。(FORCE_HYPERLINK 读数字,只有 0 关闭。)

5.6 其他配置类

变量说明
CLAUDE_CONFIG_DIR改变 ~/.claude 位置(settings 等随之前移)
NODE_EXTRA_CA_CERTS自定义 CA 证书路径
CLAUDE_CODE_CERT_STORE逗号分隔,取值 bundled / system
CLAUDE_CODE_CLIENT_CERT / _CLIENT_KEY / _CLIENT_KEY_PASSPHRASEmTLS 客户端证书
CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD--add-dir 的目录也加载 CLAUDE.md
CLAUDE_CODE_GIT_BASH_PATHWindows 专用:指定 Git Bash 的可执行文件路径,如 C:\\Program Files\\Git\\bin\\bash.exe

5.7 运行时注入类(脚本里读)

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

5.8 设置方式与优先级

① settings.json 的 env

{
  "env": {
    "NODE_ENV": "development",
    "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
  }
}
  • shell 与 settings 文件同时设置时,设置文件的值生效
  • settings 文件里只能设变量、不能删变量;要压掉 shell 里无法 unset 的变量,就设为空串 ""(对 provider 选择类变量,空值等同于未设置)。
  • env 受 settings 优先级约束,managed 覆盖 user/project。

② shell 环境变量(全局):

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

③ 单次会话

ANTHROPIC_MODEL=opus claude
敏感值不要写进 settings.json。放 settings.local.json 或走 shell / apiKeyHelper

6. MCP 配置

6.1 .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 的值被忽略

6.2 作用域

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

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

6.3 管理命令

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 认证、重连)。

6.4 项目 server 的信任开关

{
  "enableAllProjectMcpServers": false,
  "enabledMcpjsonServers": ["tavily"],
  "disabledMcpjsonServers": ["experimental"]
}
安全提醒.mcp.json 描述的是会被执行的任意命令command + args)。克隆陌生仓库后先审 .mcp.json 再信任 —— 这是典型的供应链风险面。

7. 子代理 / 斜杠命令 / 技能 / 输出风格

7.1 子代理 .claude/agents/*.md

查找优先级(高 → 低):managed settings → --agents CLI 标志 → .claude/agents/~/.claude/agents/ → 插件 agents/。递归扫描,子目录路径不影响身份(身份只来自 name)。

---
name: test-runner
description: 运行测试并修复失败。当需要执行测试或排查测试失败时使用。
tools: Bash, Read, Edit, Grep, Glob
model: haiku
---

你是测试专家。被调用时:

1. 先跑 `npm test`,读取失败信息
2. 定位到源码后修复,不要修改测试断言来"通过"
3. 重跑直到全绿,最后汇报改了哪些文件
frontmatter必填说明
name小写字母与连字符;不能含 :(保留给插件作用域)
descriptionClaude 何时委派给它
tools允许的工具列表;省略则继承全部。注意不是 allowed-tools
disallowedTools先于 tools 应用
modelsonnet/opus/haiku/fable/完整 ID/inherit
permissionModedefault/acceptEdits/auto/dontAsk/bypassPermissions/plan/manual
maxTurns最大 agentic 轮数
skills启动时预载入上下文的技能
mcpServers服务器名或内联定义
hooks仅子代理存活期间有效
memoryuser/project/local
effortlow/medium/high/xhigh/max
isolationworktree
colorred/blue/green/yellow/purple/orange/pink/cyan
background强制后台
initialPrompt作为主会话 agent 时的首个用户轮
⚠️ 常见错误:子代理没有 allowed-tools 字段(那是 skill 的字段)。子代理用 tools / disallowedTools

子代理在独立上下文里运行,只把最终报告带回主会话 —— 适合"读一堆文件只留结论"的任务。

--agents 接受 JSON,用 prompt 字段代替 markdown 正文。

7.2 技能与自定义斜杠命令

技能~/.claude/skills/<name>/SKILL.md(个人)、.claude/skills/<name>/SKILL.md(项目)、插件 skills/<name>/SKILL.md(以 /plugin-name:skill-name 调用)。

---
name: deploy
description: 部署到预发/生产。当用户提到部署、发布、上线时使用。
allowed-tools: Bash, Read
argument-hint: "[staging|prod]"
---

## 预发

./scripts/deploy.sh staging


## 生产(需二次确认)

1. 先确认当前分支已合并到 main
2. ...
字段说明
name显示名,默认目录名
description推荐。与 when_to_use 合并后在技能列表中截断于 1,536 字符
argument-hint例如 [issue-number]
allowed-tools该 skill 触发的那一轮内免询问的工具;发下一条消息即失效
disable-model-invocationtrue 阻止 Claude 自动加载
model仅当前轮生效,不写入 settings
context设为 fork 在分叉子代理中运行
agentcontext: fork 时用哪个子代理类型
hooks技能被调用时注册,持续整个会话

参数语法$ARGUMENTS(全部参数原样)、$ARGUMENTS[N](0 起始索引)、$N(简写,$0 是第一个参数、$1 是第二个)、$name(由 arguments frontmatter 列表声明)。无占位符接收时,Claude Code 追加 ARGUMENTS: <value>。字面 $ 用反斜杠转义(\$1.00)。

! 前缀(bash 执行): !`<command>` 在内容发给 Claude 前运行,输出替换占位符。仅当 ! 位于行首或紧跟空白时才被识别;多行命令用 `! 围栏。执行失败会中止整个 skill。可用 "disableSkillShellExecution": true 全局禁用。

旧格式仍可用.claude/commands/*.md/文件名;子目录 → /子目录:文件名(如 .claude/commands/frontend/component.md/frontend:component)。个人命令放 ~/.claude/commands/

/ 命令名可堆叠(如 /write-tests /fix-issue 123)。命令是用户显式触发,技能可由模型按 description 自动触发

7.3 输出风格 .claude/output-styles/*.md

路径:~/.claude/output-styles/(用户)、.claude/output-styles/(项目,从工作目录到仓库根逐层加载,同名取最靠近工作目录的)。

---
name: 教学式
description: 每步都解释原理,适合学习
keep-coding-instructions: true
---

在动手前先用一句话说明思路。修改代码后,解释为什么这样改而不是别的方案。
遇到有多种解法时,列出权衡再推荐。
字段默认
name取文件名
description
keep-coding-instructionsfalse
force-for-pluginfalse(仅插件样式)

内置风格共 5 个:Default、Proactive、Concise、Explanatory、Learning。

切换:/output-style <style>(保存进 .claude/settings.local.json)或设 outputStyle 键。


8. CLAUDE.md 记忆与上下文

8.1 查找位置

按加载顺序(从宽到窄):

范围位置
Managed policyWindows C:\Program Files\ClaudeCode\CLAUDE.md;macOS /Library/Application Support/ClaudeCode/CLAUDE.md;Linux/WSL /etc/claude-code/CLAUDE.md
User~/.claude/CLAUDE.md
Project./CLAUDE.md ./.claude/CLAUDE.md
Local./CLAUDE.local.md(需自己加 .gitignore

加载规则:从当前工作目录向上每一级都加载 CLAUDE.mdCLAUDE.local.md拼接而非覆盖,顺序是从文件系统根往下(离工作目录最近的读得最晚);同目录内 CLAUDE.local.md 追加在 CLAUDE.md 之后。子目录中的文件在 Claude 读取该目录文件时按需加载

8.2 @path 导入

  • 相对路径相对于包含该 import 的文件解析(不是工作目录)。
  • 可递归,最大深度 4 跳
  • Markdown 代码段与围栏代码块内的 @ 不解析(写 `@README` 可保持字面)。
  • 从 project 级文件导入到工作目录之外的外部导入会首次触发批准对话框。
# 项目规范

@docs/coding-standards.md
@.claude/rules/testing.md

## 本仓库特有

- 包管理器用 pnpm,不要用 npm
- 提交前必须跑 `pnpm verify`

8.3 .claude/rules/

.md 文件递归发现:

  • paths frontmatter 的规则随启动加载,优先级等同 .claude/CLAUDE.md
  • paths frontmatter 的规则只在 Claude 读到匹配文件时加载,glob 支持花括号展开("src/**/*.{ts,tsx}")。
  • 个人规则目录 ~/.claude/rules/ 在项目规则之前加载。

8.4 自动记忆

默认开启,位于 ~/.claude/projects/<project>/memory/,含 MEMORY.md 索引 + 每主题一个文件。每次会话加载 MEMORY.md 的前 200 行或前 25KB(先到者为准)。

  • 开关:autoMemoryEnabled(用户 settings)或 /memory 里的开关
  • 目录:autoMemoryDirectory(须绝对路径或以 ~/ 开头)
  • 关闭:CLAUDE_CODE_DISABLE_AUTO_MEMORY=1
  • CLAUDE.md 文件上限 4 MiB,超过则跳过

8.5 关于 .claudeignore

不存在。 官方文档明确写 "No .claudeignore exists",也没有任何供 Claude Code 使用的 ignore 文件。

要排除文件访问,用权限规则deny 拒绝读取凭据文件);要扩展文件访问,用 --add-dir / /add-dir / permissions.additionalDirectories

(相关但不同:.worktreeinclude 是项目根的只读输入,gitignore 语法,仅在创建 worktree 时用于复制被 gitignore 的文件。)

8.6 上下文管理

/context      # 查看上下文组成与占用
/compact      # 手动压缩(可加指令:/compact 保留所有 schema 变更)
/clear        # 清空重开
/memory       # 编辑记忆文件

8.7 写什么才有效

CLAUDE.md 每次都会进上下文,所以要短且高信号:

  • 该写:构建/测试命令、包管理器、目录约定、"不要动 X"、指向上位文档的链接。
  • 不该写:大段代码示例、能从代码读出来的东西、临时任务笔记。

9. statusLine 状态栏

9.1 配置

{
  "statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.sh",
    "padding": 2,
    "refreshInterval": 5
  }
}
字段说明
type"command"
command脚本路径或内联 shell 命令
padding额外水平间距(字符数),默认 0
refreshInterval除事件驱动外每 N 秒重跑,最小 1
hideVimModeIndicator设为 true 抑制内置 -- INSERT -- 文本

9.2 输入 JSON

脚本从 stdin 收到(主要字段):

字段说明
model.id / model.display_name模型标识与显示名
cwd / workspace.current_dir同值;推荐用后者
workspace.project_dir启动时目录
workspace.added_dirs--add-dir 添加的目录数组
workspace.git_worktree链接 worktree 名
workspace.repo.host / .owner / .nameorigin 解析
cost.total_cost_usd会话估算成本
cost.total_duration_ms / .total_api_duration_ms时长
cost.total_lines_added / .total_lines_removed改动行数
context_window.total_input_tokens / .total_output_tokenstoken 数
context_window.context_window_size默认 200000
context_window.used_percentage / .remaining_percentage已算好的百分比
context_window.current_usage最近一次 API 调用用量
exceeds_200k_tokens固定阈值布尔
rate_limits.five_hour.used_percentage / .resets_at五小时窗口限流
rate_limits.seven_day.*七天窗口限流
effort.levellow/medium/high/xhigh/max
thinking.enabled扩展思考开关
fast_mode是否开启 fast mode
session_id / session_name / prompt_id会话标识
transcript_path转写文件路径
versionClaude Code 版本
output_style.name当前输出风格名
vim.modeNORMAL/INSERT/VISUAL/VISUAL LINE
pr.number / .url / .review_state / .kindPR / MR
worktree.name / .path / .branch / .original_cwdworktree 信息
⚠️ 注意层级session_idoutput_style 都在顶层不在 cost

9.3 示例脚本

#!/usr/bin/env bash
# ~/.claude/statusline.sh
input=$(cat)

cwd=$(echo "$input" | jq -r '.workspace.current_dir')
model=$(echo "$input" | jq -r '.model.display_name')
cost=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')
added=$(echo "$input" | jq -r '.cost.total_lines_added // 0')
removed=$(echo "$input" | jq -r '.cost.total_lines_removed // 0')
pct=$(echo "$input" | jq -r '.context_window.used_percentage // 0')

branch=$(git -C "$cwd" branch --show-current 2>/dev/null)
dir=$(basename "$cwd")

printf '\033[36m%s\033[0m \033[32m%s\033[0m \033[33m$%.2f\033[0m \033[32m+%s\033[0m/\033[31m-%s\033[0m ctx:%s%%' \
  "$dir" "${branch:-no-git}" "$cost" "$added" "$removed" "$pct"
chmod +x ~/.claude/statusline.sh

要点

  • 输出支持 ANSI 颜色与 OSC 8 超链接;可多行输出。
  • tput cols 在脚本内不可用,要读 Claude Code 设置的 COLUMNS / LINES 环境变量。
  • status line 不消耗 API token
  • 脚本要(每次刷新都执行),避免网络请求或重命令。

10. CLI 参数与内置斜杠命令

10.1 常用 CLI 参数

claude [prompt]
claude -p "总结这个仓库"
cat file | claude -p "解释这段代码"
参数说明
-p, --print非交互模式,输出后退出
--output-format text,json,stream-json输出格式,配合 -p
--input-format text,stream-json输入格式
-c, --continue继续当前目录最近一次会话
-r, --resume [id]恢复指定会话
--model <name>别名(sonnet/opus/haiku/fable)或完整模型名
--fallback-model <models>降级模型链(逗号分隔)
--add-dir <dirs...>额外授权目录
--permission-mode <mode>acceptEdits/auto/bypassPermissions/manual/dontAsk/plan
--allowedTools, --allowed-tools放行规则(工具名列表,可带限定符)
--disallowedTools, --disallowed-tools拒绝规则
--dangerously-skip-permissions等价 --permission-mode bypassPermissions
--allow-dangerously-skip-permissions加入模式循环但不以它启动
--agents <json>内联定义子代理
--agent <agent>指定本会话使用的 agent
--append-system-prompt <text>追加系统提示
--system-prompt <text> / --system-prompt-file覆盖系统提示
--exclude-dynamic-system-prompt-sections把每机器相关段落移入首条用户消息,改善跨机器提示缓存
--mcp-config <configs...>从 JSON 文件或字符串加载 MCP
--plugin-dir <path>本次会话加载插件
--max-turns <n>限制 agentic 轮数(仅 print 模式)
--max-budget-usd <amount>花费上限(仅 print 模式)
--json-schema <schema>结构化输出校验
--restricted受限模式:移除可执行代码的工具,忽略用户/项目/本地 settings
--bare最小模式:跳过 hooks / skills / 插件 / MCP / 自动记忆 / CLAUDE.md 自动发现
--autocompact <auto,tokens>自动压缩窗口
-d, --debug [filter]调试日志,如 --debug='mcp,startup'--debug='!1p,!file'
--debug-file <path>指定日志文件
-n, --name <name>会话显示名
--fork-session恢复时新建会话 ID
--no-session-persistence不落盘、不可恢复(仅 print)
--brief启用 SendUserMessage 工具
--effort <level>low/medium/high/xhigh/max
-h, --help / --version帮助 / 版本
官方提示:claude --help 不列出全部 flag,不在帮助里不代表不可用。

10.2 常用子命令

claude update
claude doctor
claude auth login | logout | status
claude mcp ...
claude plugin | plugins
claude install [version]
claude setup-token
claude project purge [path]

10.3 内置斜杠命令(常用)

命令作用
/init扫描代码库生成 CLAUDE.md 初稿
/memory编辑记忆文件
/clear(别名 /reset/new清空上下文
/compact压缩上下文
/context查看上下文占用
/config(别名 /settings交互式改配置
/model切换模型
/effort调整 effort 级别
/permissions(别名 /allowed-tools权限规则
/hooks查看已配置 hooks
/mcpMCP 状态与认证
/agents管理子代理
/output-style切换输出风格
/add-dir追加授权目录
/cd切换工作目录
/code-review(别名 /review代码审查
/plan计划模式
/diff查看改动
/cost/usage 的别名)会话花费
/status登录态与设置来源
/doctor(别名 /checkup健康检查
/export导出会话
/model/fast模型 / fast mode
/login/logout登录 / 登出
/help帮助
/exit(别名 /quit退出
命令全集远多于此,且可用性随平台/套餐/环境变化(例如 /desktop 仅在 macOS 与 x64 Windows + 订阅时出现)。以 /help 实际输出为准。

11. 场景配方

11.1 团队共享的项目配置

.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"]
}
由 Claude Code 创建的 .claude/settings.local.json 会自动加进你的全局 git excludes;手工创建的要自己加 .gitignore

11.2 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 HTTPS_PROXY "http://127.0.0.1:7890"。改完需重开终端不支持 SOCKS。

11.3 接入企业网关

{
  "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"
}

get-gateway-key.sh 从 Vault / SSO 取短期 token 并输出到 stdout。

走 Bedrock 另加 CLAUDE_CODE_USE_BEDROCK=1 + AWS_REGION;走 Vertex 加 CLAUDE_CODE_USE_VERTEX=1 + CLOUD_ML_REGION + ANTHROPIC_VERTEX_PROJECT_ID

11.4 只读审计模式

claude --permission-mode plan \
       --allowedTools "Read,Grep,Glob" \
       --disallowedTools "Bash,Edit,Write"

或写成技能 .claude/skills/audit/SKILL.md

---
name: audit
description: 只读审计指定模块,列出风险点
allowed-tools: Read, Grep, Glob
argument-hint: "[目录]"
---

对 $ARGUMENTS 做只读审计:列出风险点、缺失的错误处理、可疑的并发假设。
不要修改任何文件,最后给一份带 file:line 的清单。

11.5 沙箱

{
  "sandbox": {
    "enabled": true,
    "autoAllowBashIfSandboxed": true,
    "network": {
      "allowUnixSockets": ["/var/run/docker.sock"]
    },
    "filesystem": {
      "allowWrite": ["./tmp", "./build"],
      "denyRead": ["~/.ssh", "~/.aws"]
    }
  }
}
⚠️ 沙箱只在 macOS、Linux、WSL 2 上支持。官方安装对照表里 Native Windows 的 Sandboxing 一栏是 "Not supported"(WSL 1 同样不支持)。要在 Windows 上用沙箱,得在 WSL 2 里跑 Claude Code。

11.6 关闭全部遥测

export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1
export DISABLE_TELEMETRY=1
export DISABLE_ERROR_REPORTING=1
这类开关非空即开启,设成 0 仍然算开启。

11.7 无人值守 CI

claude -p "$PROMPT" \
  --output-format json \
  --max-turns 10 \
  --max-budget-usd 5 \
  --permission-mode bypassPermissions \
  --allowedTools "Read,Grep,Glob"
仅在一次性容器里用 bypassPermissions。宿主机上永远不要。

12. 排错

症状排查
配置文件被整个忽略多半是 JSON 语法错误(注释、尾逗号)。claude doctor 会指出
配置不生效claude config list 看生效值;确认层级优先级;model/effortLevel 只启动时读一次,要重开会话
hook 不执行脚本 chmod +x;路径用 ${CLAUDE_PROJECT_DIR} 拼绝对;claude --debug hooks
hook 拦不住用了 exit 1只有 exit 2 阻断,或输出 permissionDecision: "deny" 的 JSON
权限总弹窗规则加进 permissions.allow;Bash 是前缀匹配,Bash(npm run test:*):* 不能漏
明明 allow 了还是问被更高优先级的 ask/deny 命中;deny 无法被 allow 覆盖
项目里设 auto/bypassPermissions 无效这两个值不从 project/local settings 生效,要设在用户级或 managed
MCP 权限规则不生效带括号的 mcp__x__y(...) 会被跳过;改用 mcp__x__*--disallowedTools
Write(...) 权限规则没用Write/MultiEdit 的路径规则永不生效 → 用 Edit(...)
MCP server 连不上/mcp 看状态;claude mcp list 测连通;检查 ${VAR} 是否已定义;调大 MCP_TIMEOUT
MCP server 超时被忽略每服务器 timeout 低于 1000 毫秒会被忽略
.mcp.json 的 server 没加载需信任确认;检查 enabledMcpjsonServers / enableAllProjectMcpServers
子代理不被自动委派description 里要写清"何时使用我",这是路由依据
子代理工具限制不生效tools/disallowedTools不是 allowed-tools
上下文爆掉/context 看占用;精简 CLAUDE.md;/compact/clear
想用 .claudeignore不存在,用权限 deny 规则
Windows 代理无效setx 后要重开终端;确认 NO_PROXY 没把自己排掉;不支持 SOCKS
环境变量设了 0 没关掉这类开关非空即开启,要关得 unset 或设空串

通用手法

claude doctor
claude --debug
claude --debug='mcp,hooks,startup'
claude config list

附:文件清单速查

~/.claude/
├── settings.json                 用户级配置
├── CLAUDE.md                     用户级记忆
├── rules/                        个人规则
├── statusline.sh                 状态栏脚本(自定义)
├── commands/                     个人斜杠命令
├── agents/                       个人子代理
├── skills/                       个人技能
├── output-styles/                个人输出风格
└── projects/<project>/memory/    自动记忆(MEMORY.md + 主题文件)
~/.claude.json                    运行时状态(登录态/项目历史/本地 MCP),勿手编

<项目>/
├── .claude/
│   ├── settings.json             项目共享配置(进 git)
│   ├── settings.local.json       个人覆盖(自动 gitignore)
│   ├── hooks/                    hook 脚本
│   ├── rules/                    规则(可带 paths frontmatter)
│   ├── commands/                 斜杠命令(旧格式仍可用)
│   ├── agents/                   子代理
│   ├── skills/<name>/SKILL.md    技能
│   └── output-styles/            输出风格
├── .mcp.json                     项目 MCP servers(进 git)
├── CLAUDE.md                     项目记忆(进 git)
└── CLAUDE.local.md               本地记忆(自加 gitignore)

<企业托管>/
├── Windows: C:\Program Files\ClaudeCode\managed-settings.json
├── Windows: HKLM\SOFTWARE\Policies\ClaudeCode → "Settings"
├── macOS:   /Library/Application Support/ClaudeCode/managed-settings.json
└── Linux:   /etc/claude-code/managed-settings.json
             (同目录可放 managed-settings.d/*.json 分片)

核验基准:Claude Code 2.1.275,官方文档 https://code.claude.com/docs/en/。配置项随版本演进较快,遇到与本文不符处,以 claude doctorclaude config list/help 的实际输出为准。

评论已关闭