二、细节梳理篇

Q7. CLAUDE.md / AGENTS.md 是什么? 加载顺序和优先级如何?

参考答案:

  • CLAUDE.md (Claude Code) / AGENTS.md (Codex): 是项目/用户级别的”持久 prompt 注入”, 在每次 session 启动时被自动加载到 system prompt, 用于声明”我希望 agent 一直记住的规则”.

  • 加载层级 (Claude Code):

    1. Managed policy —— 企业管控级, 由 IT 部署, 不可被覆盖.

    2. User —— ~/.claude/CLAUDE.md, 个人全局规则.

    3. Project —— 仓库根 ./CLAUDE.md, 项目级规则.

    4. Local —— CLAUDE.local.md, 个人在该项目的私有覆盖 (通常 gitignore).

  • 优先级: 后加载者覆盖先加载者 (project 覆盖 user, 但 managed 不可被覆盖).

  • 建议:

    • 每个文件 < 200 行, 太长可用 @path/to/file.md 引用拆分.

    • 不要写”项目背景介绍”, 要写”agent 必须遵守的硬规则”.


Q8. Hooks 是什么? 列举几种你常用的 hook 场景.

参考答案:

  • Hook: Claude Code/Codex 在生命周期事件 (例如 PreToolUse、PostToolUse、SessionStart、Stop) 上注册的确定性回调, 由 harness 而非 LLM 执行, 因此不会被模型遗忘或绕过.

  • 类型 (Claude Code): command (shell)、http (POST endpoint)、prompt (单轮 LLM 评估)、agent (多轮 LLM)、mcp_tool.

  • 常见场景:

    1. PostToolUse 命中 Edit|Write → 自动跑 prettier/eslint/gofmt.

    2. PreToolUse 命中 Edit(/.env*) → 阻止 (exit 2) 防止误改密钥.

    3. Stop → 发桌面通知告诉我 Claude 已经空闲.

    4. SessionStart → 输出当前 git 状态、环境变量, 让 agent 一上来就知道现状.

    5. PreToolUse 命中 Bash(rm -rf *) → ask 模式, 强制用户确认.


Q9. Permission Mode 有哪些? 各自适合什么场景?

参考答案:

模式 行为 适合场景
default 每个工具第一次使用时询问 不熟悉的新项目
acceptEdits 自动放行文件编辑和 fs 命令 已熟悉的项目, 想加速迭代
plan 只读模式, 禁止写操作 代码 review 或方案设计
auto 后台分类器判断是否安全 信任分类器的”半自动”模式
dontAsk 没在 allowlist 的一律拒绝 严格白名单生产场景
bypassPermissions 全部放行 (仍保留 rm -rf / 等熔断) 沙箱 / 容器 / dev container 内部

Q10. /compact 时, 哪些上下文会被保留, 哪些会丢失?

参考答案:

  • 会保留 (重新注入):

    • System prompt

    • 项目根 CLAUDE.md + 未带 paths: 限定的 rules

    • Auto memory (从磁盘重读)

    • 对话摘要 (由 Claude 生成的 conversation summary)

    • 前 N 个高优先级 skill 描述 (25K token 预算内)

  • 会丢失:

    • 历史的 tool call 详细输出 (例如读过的文件内容、bash 输出)

    • 路径范围限定的嵌套 CLAUDE.md / .claude/rules/*.md (等到下次匹配文件被读到时才会重新触发)

    • MCP tool 的完整 schema (只保留名字, 等下次调用时再 fetch)

  • 实践建议: 不要把”必须长期记住的事情”放在对话里, 要么写进 CLAUDE.md, 要么用 auto memory 显式保存.


Q11. Plugin 和 Skill 的关系是什么?

参考答案:

  • Skill: 单个能力单元 (一个 SKILL.md + 附属资源).

  • Plugin: 一个打包发布的扩展包, 可以包含多个 skill, 同时还可以打包:

    • sub-agent 定义

    • hooks

    • MCP server

    • LSP server

    • 二进制可执行

    • 默认 settings

  • 通过 .claude-plugin/plugin.json 描述元信息, 安装后 plugin 内的 skill 用命名空间调用: /<plugin-name>:<skill-name>, 避免冲突.

  • 简言之: skill 是零件, plugin 是装好的整车.


Q12. 什么是 ToolSearch / Deferred Tools? 为什么要这样设计?

参考答案:

  • 现象: 启动时, MCP 工具和部分内置工具的完整 JSON schema 不会立刻加载, 只把名字告知模型. 当模型需要某个工具时, 通过 ToolSearch 把 schema 拉进来.

  • 原因:

    1. 节省 token —— 一个大型 MCP server 可能有几十上百个 tool, 全部 schema 加起来轻松上万 token.

    2. 降低注意力噪声 —— 不相关的工具长期挂在 prompt 里会干扰模型决策.

    3. 按需加载 —— 只有真正要用时才把详细签名带进来.

  • 代价: 第一次使用某工具会多一次 ToolSearch round trip; 但比起 token 节省, 这笔交易很划算.