跳转到主要内容
当 Claude 忽略了一条指令或你配置的功能没有出现时,通常是因为文件没有加载、从你预期之外的位置加载,或者被另一个文件覆盖了。本指南展示了如何检查 Claude Code 实际加载了什么,以便你能够缩小范围。 对于安装、身份验证和连接问题,请参阅故障排除

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

/context 命令显示当前会话中占用上下文窗口的所有内容,按类别分解:系统提示、内存文件、skills、MCP 工具和对话消息。首先运行它来确认你的 CLAUDE.md、规则或 skill 描述是否存在。 对于特定类别的详细信息,请使用专用命令:
命令显示内容
/memory加载了哪些 CLAUDE.md 和规则文件,加上自动内存条目
/skills来自项目、用户和插件源的可用 skills
/agents配置的子代理及其设置
/hooks活跃的 hook 配置
/mcp连接的 MCP 服务器及其状态
/permissions当前生效的已解析允许和拒绝规则
/doctor配置诊断:无效的键、schema 错误、安装健康状况
/status活跃的设置源,包括是否启用了托管设置
如果内存文件在 /memory 中缺失,请根据CLAUDE.md 文件如何加载检查其位置。子目录 CLAUDE.md 文件在 Claude 使用 Read 工具读取该目录中的文件时按需加载,而不是在会话开始时加载。 如果 /memory 确认文件已加载但 Claude 仍然没有遵循特定指令,问题可能在于指令的编写方式,而不是是否加载。CLAUDE.md 适用于你会给新队友的指导类型,例如项目约定、构建命令和文件位置。 当指令足够模糊以至于可以多种方式解释、两个文件给出相互矛盾的方向,或者文件变得足够长以至于单个规则获得较少关注时,遵守度会下降。编写有效的指令涵盖了保持高遵守度的特异性、大小和结构模式。
CLAUDE.md 和权限解决不同的问题。CLAUDE.md 告诉 Claude 你的项目如何工作,以便它做出好的决定。权限hooks无论 Claude 决定什么都强制执行限制。对于”我们在这里这样做”使用 CLAUDE.md。对于安全边界和任何必须永远不会发生的事情,使用权限或 hooks,你需要一个保证而不是指导。

检查已解析的设置

设置在托管、用户、项目和本地范围内合并。当存在时,托管设置总是优先。在其余的中,更接近的范围按本地、项目、用户的顺序覆盖更广泛的范围。某些设置也可以由命令行标志或环境变量设置,它们充当另一个覆盖层。当设置似乎不适用时,你设置的值通常被另一个范围或环境变量覆盖。 运行 /doctor 来验证你的配置文件并显示无效的键或 schema 错误。运行 /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"。拼写错误的工具名称会无声地失败,因为匹配器永远不会匹配。数组值是一个 schema 错误:Claude Code 显示设置错误通知,/doctor 报告验证失败,hook 条目被删除,所以它不会出现在 /hooks 中。 settings.json 的编辑在短暂的文件稳定延迟后在运行的会话中生效。你不需要重新启动。如果保存后几秒钟 /hooks 仍然显示旧定义,再次运行 /hooks 来刷新视图。 如果 /hooks 显示 hook 但它仍然没有触发,下一步是实时观察 hook 评估。使用 claude --debug hooks 启动会话并触发工具调用。调试日志记录每个事件、检查了哪些匹配器以及 hook 的退出代码和输出。有关日志格式,请参阅调试 hooks,有关常见失败模式,请参阅hooks 故障排除

常见原因

大多数配置意外可以追溯到一小组位置和语法规则。在假设存在错误之前检查这些:
症状原因修复
Hook 永远不触发matcher 是 JSON 数组而不是字符串使用单个字符串,其中 | 匹配多个工具,例如 "Edit|Write"。请参阅匹配器模式
Hook 永远不触发matcher 值是小写的,例如 "bash"匹配是区分大小写的。工具名称是大写的:BashEditWriteRead
Hook 永远不触发Hooks 在独立的 .claude/hooks.json 文件中没有独立的 hooks 文件。在 settings.json 中的 "hooks" 键下定义 hooks。请参阅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 没有出现在 /skillsSkill 文件在 .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 指令子代理不总是继承项目内存将关键规则放在代理文件体中,它成为子代理的系统提示。请参阅子代理配置
清理逻辑在会话结束时永远不运行没有配置 SessionEnd hookSessionStartSessionEnd 都存在。请参阅hook 事件列表
.mcp.json 中的 MCP 服务器永远不加载文件在 .claude/ 下或使用 Claude Desktop 的配置格式项目 MCP 配置在存储库根目录下作为 .mcp.json,而不是在 .claude/ 内。请参阅MCP 配置
添加的项目 MCP 服务器没有出现一次性批准提示被关闭项目范围的服务器需要批准。运行 /mcp 来查看状态并批准。
MCP 服务器从某些目录启动失败commandargs 使用相对文件路径对本地脚本使用绝对路径。你的 PATH 上的可执行文件如 npxuvx 可以按原样工作。
MCP 服务器启动时没有预期的环境变量变量在 settings.json env 中,不会传播到 MCP 子进程.mcp.json 中设置每个服务器的 env
Bash(rm *) 拒绝规则不阻止 /bin/rmfind -delete前缀规则匹配字面命令字符串,而不是底层可执行文件为每个变体添加显式模式,或使用PreToolUse hooksandbox来获得硬保证。

相关资源

有关每个配置表面的完整参考,请参阅专用页面:
  • .claude 目录参考:每个配置文件位置及其读取方式
  • Settings:优先级顺序和完整的键列表
  • Hooks 参考:事件名称、有效负载和 --debug hooks 输出格式
  • MCP:服务器配置、批准和 /mcp 输出
  • 故障排除claude doctor、平台问题和安装问题