Appearance
深入理解Claude Code:从CLAUDE.md到Hooks、Skills、Subagents
不同的指令,要有不同的生命周期。
核心认知:Agent vs ChatBot
Agent和ChatBot的区别在于谁来构建上下文:
- ChatBot:靠人喂,给什么材料用什么材料
- Agent:自己搜网页、读文档、调工具,把有用的内容写进上下文,不够继续找
对于Agent来说,它只能看到上下文内的内容。通过工程手段限定Agent在哪些步骤下能看到哪些东西,就变得尤为重要。
上下文注入方法一览
| 方法 | 加载时机 | Token成本 | 适用场景 |
|---|---|---|---|
| CLAUDE.md | 全程加载 | 全程占Token | 项目事实:构建命令、目录结构 |
| Rules | 按路径加载 | 路径匹配时才占 | 文件级约束:跨目录但非全局的规则 |
| Skills | 按需调用 | 只占描述(几十Token) | 流程模板:部署清单、发布流程 |
| Subagents | 独立窗口 | 主会话零成本 | 隔离任务:深度搜索、日志分析 |
| Hooks | 事件触发 | 不占上下文 | 硬护栏:安全拦截、自动格式化 |
| Output Styles | 注入System Prompt | 永不压缩 | 修改人设:猫娘、Proactive风格 |
| System Prompt Append | CLI参数 | 永不压缩 | 临时指令:一次调用生效 |
详解放大
CLAUDE.md
项目的"说明书",Claude Code启动时自动读入。分两种:
- 根目录CLAUDE.md:始终加载,全程在上下文里
- 子目录CLAUDE.md:碰到该目录时才加载,压缩后丢失,再碰重新加载
正确用法:放事实(构建命令、目录结构)。不是放流程和约束。
Rules
.claude/rules/下的markdown文件,可加路径限定:
yaml
---
paths:
- "src/api/**"
- "**/*.handler.ts"
---
所有API handler必须用Zod做输入校验加路径限定后只在匹配文件时才加载,不浪费Token。
Skills
.claude/skills/下的技能包。启动时只加载名字和描述,被调用时才加载完整内容。
误区:Skill不是提示词。Skill的本质是按约定结构打包的文件夹,调用时把别人打包的文件夹喂给大模型。
Skill vs CLAUDE.md:CLAUDE.md放事实,Skill放流程。
Subagents
.claude/agents/下独立助手,在独立上下文窗口跑任务,跑完只交结论。
Skill vs Subagent:需要看中间过程→Skill。不需要,让它跑完给结论→Subagent。
典型场景:深度搜索、日志分析、依赖审计。可嵌套最深五层。
Hooks
最不像AI的机制——在settings.json里注册,指定事件发生时执行命令。
八种事件:PreToolUse、PostToolUse、PermissionRequest、SessionStart、PreCompact、Stop、SubagentStop、UserPromptSubmit。
五种动作类型:command(确定性)、HTTP、mcp_tool、prompt(模型判断)、agent。
安全铁律:任何提示词防护都不靠谱。绝对性约束用PreToolUse hook做硬护栏,exit code 2直接阻止。
Output Styles / System Prompt Append
- Output Styles:替换默认System Prompt,权重最高,永不压缩
- System Prompt Append:CLI参数追加内容,不替换默认指令
常见误区
| ❌ 错误写法 | ✅ 正确做法 |
|---|---|
| "每次X必须Y"写在CLAUDE.md里 | 用PostToolUse hook自动执行 |
| "绝对不要Z"写在CLAUDE.md里 | 用PreToolUse hook做硬护栏 |
| 30行流程写在CLAUDE.md里 | 放Skill |
| Rule没加路径限定 | 加paths限定 |
| 个人偏好写在项目级文件 | 放本地用户级文件 |
Dynamic Workflows
让Claude自己写编排脚本,协调多个subagent并行工作。解决三个老问题:Agent偷懒、自我偏好、目标漂移。
核心函数:
Agent(prompt, opts?):派发子任务parallel([fns]):并行执行pipeline(items, ...):串行流水线
六种编排模式:
- Classify-and-act:分类分发
- Fan-out-and-synthesize:扇出汇总
- Adversarial verification:对抗验证
- Tournament:锦标赛比较
- Generate-and-filter:生成过滤
- Loop until done:循环直到完成
反向用法:让workflow翻最近50个session,找出反复修正的模式,聚类成规则候选,对抗验证后写进CLAUDE.md。
总结
| 用途 | 用哪个 |
|---|---|
| 项目事实 | CLAUDE.md |
| 文件级规则 | Rules(加路径) |
| 流程模板 | Skills |
| 隔离任务 | Subagents |
| 硬护栏 | Hooks |
| 人格设定 | Output Styles |
| 临时指令 | System Prompt Append |
把所有指令塞进一个CLAUDE.md是最简单的做法,但也是最浪费的做法。
关键词:Claude Code, CLAUDE.md, Skills, Subagents, Hooks, Dynamic Workflows
