二、细节梳理篇
Q7. CLAUDE.md / AGENTS.md 是什么? 加载顺序和优先级如何?
参考答案:
CLAUDE.md (Claude Code) / AGENTS.md (Codex): 是项目/用户级别的”持久 prompt 注入”, 在每次 session 启动时被自动加载到 system prompt, 用于声明”我希望 agent 一直记住的规则”.
加载层级 (Claude Code):
Managed policy —— 企业管控级, 由 IT 部署, 不可被覆盖.
User —— ~/.claude/CLAUDE.md, 个人全局规则.
Project —— 仓库根 ./CLAUDE.md, 项目级规则.
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.
常见场景:
PostToolUse 命中 Edit|Write → 自动跑 prettier/eslint/gofmt.
PreToolUse 命中 Edit(/.env*) → 阻止 (exit 2) 防止误改密钥.
Stop → 发桌面通知告诉我 Claude 已经空闲.
SessionStart → 输出当前 git 状态、环境变量, 让 agent 一上来就知道现状.
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 拉进来.
原因:
节省 token —— 一个大型 MCP server 可能有几十上百个 tool, 全部 schema 加起来轻松上万 token.
降低注意力噪声 —— 不相关的工具长期挂在 prompt 里会干扰模型决策.
按需加载 —— 只有真正要用时才把详细签名带进来.
代价: 第一次使用某工具会多一次 ToolSearch round trip; 但比起 token 节省, 这笔交易很划算.