SpyBara
Go Premium

debug-your-config.md 2026-06-29 23:02 UTC to 2026-06-30 23:02 UTC

2 added, 2 removed.

2026
Tue 30 23:02 Mon 29 23:02 Sat 27 01:01 Fri 26 23:00 Thu 25 23:58 Wed 24 22:02 Tue 23 22:00 Mon 22 23:59 Fri 19 22:58 Thu 18 22:00 Wed 17 17:02 Tue 16 21:57 Mon 15 23:02 Sat 13 21:59 Fri 12 22:00 Thu 11 23:01 Wed 10 23:57 Tue 9 06:34 Mon 8 06:52 Sat 6 06:24 Fri 5 06:45 Thu 4 06:52 Wed 3 06:53 Tue 2 06:51

调试你的配置

诊断为什么 CLAUDE.md、settings、hooks、MCP 服务器或 skills 没有生效。使用 /context、/doctor、/hooks 和 /mcp 来查看实际加载了什么。

当 Claude 忽略了一条指令或你配置的功能没有出现时,通常是因为文件没有加载、从你预期之外的位置加载,或者被另一个文件覆盖了。本指南展示了如何检查 Claude Code 实际加载了什么,以便你能够缩小范围。

对于安装、身份验证和连接问题,请参阅故障排除安装和登录

查看加载到上下文中的内容

/context 命令显示当前会话中占用上下文窗口的所有内容,按类别分解:系统提示、内存文件、skills、MCP 工具和对话消息。首先运行它来确认你的 CLAUDE.md、规则或 skill 描述是否存在。

对于特定类别的详细信息,请使用专用命令:

命令 显示内容
/memory 加载了哪些 CLAUDE.md 和规则文件,加上自动内存条目
/skills 来自项目、用户和插件源的可用 skills
/agents 配置的子代理及其设置
/hooks 活跃的 hook 配置
/mcp 连接的 MCP 服务器及其状态
/permissions 当前生效的已解析允许和拒绝规则
/doctor 配置诊断:无效的键、schema 错误、安装健康状况。{/* min-version: 2.1.196 */}从 v2.1.196 开始,还会报告在同一作用域中定义的重复子代理名称,并标记哪一个是活跃的
/debug [issue] 为会话启用调试日志记录,并提示 Claude 使用日志输出和设置路径进行诊断
/status 活跃的设置源,包括是否启用了托管设置

如果内存文件在 /memory 中缺失,请根据CLAUDE.md 文件如何加载检查其位置。子目录 CLAUDE.md 文件在 Claude 使用 Read 工具读取该目录中的文件时按需加载,而不是在会话开始时加载。

如果 /memory 确认文件已加载但 Claude 仍然没有遵循特定指令,问题可能在于指令的编写方式,而不是是否加载。CLAUDE.md 适用于你会给新队友的指导类型,例如项目约定、构建命令和文件位置。

当指令足够模糊以至于可以多种方式解释、两个文件给出相互矛盾的方向,或者文件变得足够长以至于单个规则获得较少关注时,遵守度会下降。编写有效的指令涵盖了保持高遵守度的特异性、大小和结构模式。

检查已解析的设置

设置在托管、用户、项目和本地范围内合并。当存在时,托管设置总是优先。在其余的中,更接近的范围按本地、项目、用户的顺序覆盖更广泛的范围。某些设置也可以由命令行标志或环境变量设置,它们充当另一个覆盖层。当设置似乎不适用时,你设置的值通常被另一个范围或环境变量覆盖。

运行 /doctor 来验证你的配置文件并显示无效的键或 schema 错误。当 /doctor 报告问题时,按 f 将诊断报告发送给 Claude,让它与你一起逐步解决问题。

运行 /status 来查看哪些设置源是活跃的,包括是否启用了托管设置。要了解给定键哪个范围优先,请参阅范围如何交互

检查 MCP 服务器

运行 /mcp 来查看每个配置的服务器、其连接状态以及你是否为当前项目批准了它。服务器可以定义正确但仍然不提供工具,原因有几个常见的:

  • .mcp.json 中的项目范围服务器需要一次性批准。如果提示被关闭,服务器将保持禁用状态,直到你从 /mcp 批准它。
  • 启动失败的服务器在 /mcp 中显示为失败。commandargs 中的相对文件路径是一个常见原因,因为它们相对于你启动 Claude Code 的目录而不是 .mcp.json 的位置进行解析。
  • 显示为已连接但列出零个工具的服务器已成功启动但没有返回工具列表。从 /mcp 选择重新连接。如果计数保持为零,运行 claude --debug mcp 来查看服务器的 stderr 输出。

对于配置位置和范围规则,请参阅 MCP

检查 hooks

运行 /hooks 来列出当前会话注册的每个 hook,按事件分组。如果你定义的 hook 没有出现,它没有被读取:hooks 在设置文件中的 "hooks" 键下,而不是在独立文件中。

如果 hook 出现但没有触发,匹配器通常是原因。matcher 字段是一个使用 | 来匹配多个工具名称的单个字符串,例如 "Edit|Write"。{/* min-version: 2.1.191 */}在 Claude Code v2.1.191 或更高版本上,, 也可以作为分隔符,所以 "Edit,Write" 是等效的。在更早的版本上,逗号会进入正则表达式评估,匹配器永远不会匹配,所以如果你不在 v2.1.191 上,请使用 |。拼写错误的工具名称会无声地失败,原因相同。数组值是一个 schema 错误:Claude Code 显示设置错误通知,/doctor 报告验证失败,hook 条目被删除,所以它不会出现在 /hooks 中。

settings.json 的编辑在短暂的文件稳定延迟后在运行的会话中生效。你不需要重新启动。如果保存后几秒钟 /hooks 仍然显示旧定义,再次运行 /hooks 来刷新视图。

如果 /hooks 显示 hook 但它仍然没有触发,下一步是实时观察 hook 评估。使用 claude --debug hooks 启动会话并触发工具调用。调试日志记录每个事件、检查了哪些匹配器以及 hook 的退出代码和输出。有关日志格式,请参阅调试 hooks,有关常见失败模式,请参阅hooks 故障排除

针对干净配置进行测试

{/* min-version: 2.1.169 */}使用 claude --safe-mode 开始,它会启动一个会话,禁用所有自定义,包括 CLAUDE.md、skills、plugins、hooks、MCP 服务器以及自定义命令和代理。身份验证、模型选择、内置工具和权限正常工作。如果问题在安全模式下消失,则其中一个方面是原因;使用上面的针对性检查来找出是哪一个。由你的组织部署的托管设置仍然部分适用,因此策略配置的 hooks 和状态行即使在安全模式下也会运行。

如果问题在安全模式下仍然存在,或你的设置本身可疑,请与从你的常规设置中不加载任何内容的会话进行比较。将 CLAUDE_CONFIG_DIR 指向一个空目录以绕过 ~/.claude 下的所有内容,并从没有 .claude 文件夹、.mcp.jsonCLAUDE.md 的目录启动,以便也跳过项目配置。

cd /tmp && CLAUDE_CONFIG_DIR=/tmp/claude-clean claude

干净会话没有用户或项目设置、hooks、MCP 服务器、plugins 或内存。

  • 如果你的组织部署了托管设置,它们仍然适用,因为它们位于 ~/.claude 之外的系统路径中
  • 在 Linux 和 Windows 上,你将被提示再次登录,因为凭证存储在配置目录下
  • 在 macOS 上,凭证在 Keychain 中,会转移到干净会话

如果问题在这里消失,原因在你的真实 ~/.claude 或项目 .claude 文件中的某处。一次重新引入一个,通过将文件复制到临时目录或从你的项目启动,来找到哪一个。如果它在干净会话中持续存在,原因在你的用户和项目配置之外。运行 /status 来检查是否启用了托管设置,查找影响 Claude Code 的环境变量,然后参阅故障排除

检查常见原因

大多数配置意外可以追溯到一小组位置和语法规则。在假设存在错误之前检查这些:

症状 原因 修复
Hook 永远不触发 matcher 是 JSON 数组而不是字符串 使用单个字符串,其中 | 匹配多个工具,例如 "Edit|Write"。请参阅匹配器模式
Hook 永远不触发 matcher 在 v2.1.191 之前的版本中使用 , 作为分隔符 {/* min-version: 2.1.191 */}Claude Code v2.1.191 或更高版本将 , 视为列表分隔符,如 |。早期版本将逗号评估为字面字符,因此 "Edit,Write" 不匹配任何内容。改用 |,或升级 Claude Code。
Hook 永远不触发 matcher 值是小写的,例如 "bash" 匹配是区分大小写的。工具名称是大写的:BashEditWriteRead
Hook 永远不触发 Hooks 在独立文件而不是 settings.json 中定义 项目或用户配置没有独立的 hooks 文件。在 settings.json 中的 "hooks" 键下定义 hooks。只有plugins加载单独的 hooks/hooks.json。请参阅hook 配置
全局设置的权限、hooks 或 env 被忽略 配置被添加到 ~/.claude.json ~/.claude.json 保存应用状态和 UI 切换。permissionshooksenv 属于 ~/.claude/settings.json。这是两个不同的文件。
settings.json 值似乎被忽略 相同的键在 settings.local.json 中设置 settings.local.json 覆盖 settings.json,两者都覆盖 ~/.claude/settings.json。请参阅设置优先级
Skill 没有出现在 /skills Skill 文件在 .claude/skills/name.md 而不是在文件夹中 使用包含 SKILL.md 的文件夹:.claude/skills/name/SKILL.md
Skill 出现在 /skills 中但 Claude 从不调用它 Skill 在其 frontmatter 中有 disable-model-invocation: true,或其描述与你表述请求的方式不匹配 检查 /skills 中的徽章:一个"user-only"标签意味着 Claude 不会自动触发它。请参阅skill 调用
子目录 CLAUDE.md 指令似乎被忽略 子目录文件按需加载,而不是在会话开始时加载 它们在 Claude 使用 Read 工具读取该目录中的文件时加载,而不是在启动时,也不是在写入或创建文件时。请参阅CLAUDE.md 文件如何加载
子代理忽略 CLAUDE.md 指令 内置的 Explore 和 Plan 代理跳过 CLAUDE.md。自定义子代理以与主对话相同的方式加载它 对于 Explore 或 Plan,在你的委派提示中重新陈述指令。对于自定义子代理,将关键指令放在代理文件体中,它成为代理的系统提示。请参阅启动时加载的内容
清理逻辑在会话结束时永远不运行 没有配置 SessionEnd hook settings.json 中添加 SessionEnd hook。请参阅hook 事件列表
.mcp.json 中的 MCP 服务器永远不加载 文件在 .claude/ 下或使用 Claude Desktop 的配置格式 项目 MCP 配置在存储库根目录下作为 .mcp.json,而不是在 .claude/ 内。请参阅MCP 配置
settings.json 中的 mcpServers 下添加的 MCP 服务器永远不出现 settings.json 不读取 mcpServers 在存储库根目录的 .mcp.json 中定义项目服务器,或运行 claude mcp add --scope user 来添加用户范围的服务器。请参阅MCP 配置
添加的项目 MCP 服务器没有出现 一次性批准提示被关闭 项目范围的服务器需要批准。运行 /mcp 来查看状态并批准。
MCP 服务器从某些目录启动失败 commandargs 使用相对文件路径 对本地脚本使用绝对路径。你的 PATH 上的可执行文件如 npxuvx 可以按原样工作。
MCP 服务器启动时没有预期的环境变量 变量在 settings.json env 中,不会传播到 MCP 子进程 .mcp.json 中设置每个服务器的 env
Bash(rm *) 拒绝规则不阻止 /bin/rmfind -delete 前缀规则匹配字面命令字符串,而不是底层可执行文件 为每个变体添加显式模式,或使用PreToolUse hooksandbox来获得硬保证。

有关每个配置表面的完整参考,请参阅专用页面: