1 CLAUDE.md
CLAUDE.md是什么?
每次会话都会载入的持久上下文。
1.1 使用场景
- 适用于整个项目的布局、构建命令、约定
- 适用于整个项目的需要重复更正的规则和纪要
1.2 文件位置
| 范围 | 位置 | 目的 |
|---|---|---|
| 用户指令 | ~/.claude/CLAUDE.md | 所有项目的个人偏好 |
| 项目指令 | ./CLAUDE.md或./.claude/CLAUDE.md | 项目的团队共享指令 |
| 本地指令 | ./CLAUDE.local.md | 项目的个人特定偏好,可添加到.gitignore |
1.3 编写建议
- 不超过200行:超过200行的文件会消耗更多上下文并分散注意力,降低遵守度。
- @path/to/import 导入其他文件:导入的文件在启动时自动展开并加载到上下文中。递归导入的最大深度为4。
1.4 参考文献
参考文献
2 skills
2.1 使用场景
- 定义做某种特定场景的使用习惯/工作流
- 定义使用某种特定工具的教程
2.2 文件位置
| 范围 | 位置 | 目的 |
|---|---|---|
| 用户指令 | ~/.claude/skills | 所有项目的个人技能 |
| 项目指令 | ./.claude/skills/ | 项目的团队共享技能 |
在~/.claude/plugins/caches/<插件名称>/skills中还包含一些插件集成的技能也会被读取,但这是Claude Code插件系统自动管理的,一般无需手动干预
2.3 示例
txt~/.claude/skills/summarize-changes/SKILL.md
---
description: Summarizes uncommitted changes and flags anything risky. Use when the user asks what changed, wants a commit message, or asks to review their diff.
---
## Current changes
!`git diff HEAD`
## Instructions
Summarize the changes above in two or three bullet points, then list any risks you notice such as missing error handling, hardcoded values, or tests that need updating. If the diff is empty, say there are no uncommitted changes.2.4 参考文献
参考文献
3 rules
CLAUDE.md、skills和rules的区别是什么?
特性 CLAUDE.md skills rules 生效机制 全局上下文(整体载入对话上下文) 初始只加载描述,模型按需加载 特定文件/目录匹配不同规则 场景 项目架构说明、核心开发规范、技术栈概览 规范、工具使用手册等 具体代码风格、特定框架的最佳实践、自动化Lint约束
3.1 使用场景
- 需要针对特定路径编写特定的、具体的项目约定(代码风格、组织结构)
3.2 文件位置
| 范围 | 位置 | 目的 |
|---|---|---|
| 用户指令 | ~/.claude/rules/ | 所有项目的个人规则偏好 |
| 项目指令 | ./.claude/rules/ | 项目团队共享的规则偏好 |
3.3 示例
以下是针对项目中src/api任意文件夹下的任意ts文件生效的规则。
txt./claude/rules/api.md
---
paths:
- "src/api/**/*.ts"
---
# API 开发规则
- 所有 API 端点必须包括输入验证
- 使用标准错误响应格式
- 包括 OpenAPI 文档注释3.4 参考文献
参考文献
4 Hooks
Hooks是什么?
Hooks是指在ClaudeCode会话期间在某一事件触发后执行匹配的hook处理程序的集合。
4.1 使用场景
- 需要在某一场景下一定要执行某一动作,不会因为模型注意力涣散导致漏执行。(例如在会话结束后一定执行脚本检测是否需要代码审查)
- 需要实时记录执行过程
| 事件 | 什么时候触发 |
|---|---|
SessionStart | 当一个会话开始或恢复时 |
Setup | 启动Claude Code带有 —init-only, —init 或 —maintenance 在 -p 模式. CI或脚本中的一次性准备时 |
UserPromptSubmit | Claude Code处理它前、提交一个prompt后 |
UserPromptExpansion | 用户类型命令扩展进提示词中时、在发送给模型之前。:可以在此时取消添加扩展 |
PreToolUse | 工具调用执行前:可以在此时禁止使用这个工具 |
PermissionRequest | 工具调用需要权限请求时 |
PermissionDenied | 自动模式拒绝了工具调用时:包括没有分类器决定的拒绝情况,使用JSON的hookSpecificOutput.retry: true来告诉模型,它可能会重试被拒绝的工具调用。当分类器未产生决定时,会忽略retry |
PostToolUse | 工具调用成功后 |
PostToolUseFailure | 工具调用失败后 |
PostToolBatch | 并行工具调用完整批量解析后,下一次模型调用前 |
Notification | Claude Code发送通知时 |
MessageDisplay | 展示assistant消息文本时 |
SubagentStart | 派生子agent时 |
SubagentStop | 子agent结束时 |
TaskCreated | 通过TaskCreate创建任务时 |
TaskCompleted | 任务被标记为完成时 |
Stop | 模型结束响应时 |
StopFailure | 由于API错误结束了一轮循环(turn)时 |
TeammateIdle | 当agent团队 队友即将闲置时 |
InstructionsLoaded | 当CLAUDE.md or .claude/rules/*.md文件加载进上下文时 |
ConfigChange | 当一个配置文件在对话时变更时 |
CwdChanged | 当工作目录变更时:例如当执行了cd命令。对于像direnv一样的响应式环境管理很有用。 |
DirectoryAdded | 在会话过程中通过/add-dir或者SDK register_repo_root控制请求添加了一个工作目录时 |
FileChanged | 当一个在磁盘上被监控的文件变更时:matcher字段指定监听哪个文件名 |
WorktreeCreate | 通过—worktree,isolation: “worktree”创建工作分支时:为后台会话创建工作树时,会替换默认的Git行为 |
WorktreeRemove | 在会话退出、子agent结束或删除后台会话后移除工作树时 |
PreCompact | 上下文压缩前 |
PostCompact | 上下文压缩完成后 |
Elicitation | MCP服务在工具调用期间需要用户输入时 |
ElicitationResult | 用户对MCP启发(机器学习过程)做出响应后,且响应被发送回服务器前 |
SessionEnd | 当一个会话终止时 |
4.2 参考文献
参考文献
5 自动记忆
~/.claude/projects/<project>/memory/
├── MEMORY.md # 简洁索引,加载到每个会话
├── debugging.md # 关于调试模式的详细笔记
├── api-conventions.md # API 设计决策
└── ... # Claude 创建的任何其他主题文件
其中的MEMORY.md充当记忆目录的索引。
5.1 启用或禁用自动记忆
- 环境变量
CLAUDE_CODE_DISABLE_AUTO_MEMORY=1 - 配置:
json
{
"autoMemoryEnabled": false
}5.2 存储位置
~/.claude/projects/<project>/memory/
可自定义记忆存储路径:
json
{
"autoMemoryDirectory": "~/my-custom-memory-dir"
}参考文献