同步项目文档
审计并更新 Claude Code 的项目级上下文文件。对于 CLAUDE.md、技能和记忆自主化处理;设置部分仅给出建议,因其需要用户明确授权。
阶段 1 — 定位
如果项目使用 git:
git log --oneline -20
git status --short
然后运行 git diff HEAD~5 -- <下方关键文件> 查看近期基础设施变更。
如果没有 git 仓库,直接读取目录结构和关键文件。
查找以下文件是否存在:
| 查找目标 | 示例 |
|---|---|
| 包/依赖配置 | package.json, pyproject.toml, Cargo.toml, go.mod, pom.xml, requirements.txt, Gemfile |
| 命令 | Makefile, justfile, scripts/, package.json 脚本, taskfile.yml |
| 基础设施 | docker-compose.yml, fly.toml, render.yaml, Procfile, vercel.json, k8s/ |
| 应用配置 | config.*, settings.*, config/, application.yml |
| 环境变量模板 | .env.example, .env.template, .env.sample |
目标:了解已完成的工作、正在进行的任务以及哪些关键文件发生了变化。
阶段 2 — 审计并更新 CLAUDE.md
检查所有项目级指令文件:
ls CLAUDE.md .claude/CLAUDE.md CLAUDE.local.md .claude/rules/ 2>/dev/null
如果不存在 CLAUDE.md:调用位于 sub-skills/init/SKILL.md 的 init 技能,然后继续。
如果存在 CLAUDE.md,读取它并根据阶段 1 中的来源逐节核对:
命令 — 与实际命令源对比。修复已更改的命令,添加有用的新命令,删除已删除的命令。
架构/结构 — 将描述的模块和关键文件与磁盘上实际存在的进行对比。添加新增内容;删除已删除或重命名的内容。
配置/环境变量 — 与实际配置文件对比。添加新的运行时相关设置;删除或更正过时的设置。
约束和注意事项 — 检查近期工作是否解决了任何已记录的约束。
环境变量模板:验证其是否列出了配置所需的所有变量。缺失的变量会破坏新环境搭建。
@import 引用:扫描 @path/to/file 行并验证每个导入的文件仍然存在。缺失的导入会静默破坏上下文加载。
大小:如果文件超过 200 行,标记它——超出后遵循率会下降,上下文成本上升。建议将详细信息移入 .claude/rules/ 主题文件。
.claude/rules/:如果该目录存在,检查任何路径作用域的规则文件是否引用了当前代码库中不存在的命令、模块名称或文件路径。修复或标记过时的规则。
CLAUDE.local.md:如果存在,给予与 CLAUDE.md 相同的检查——它是被 git 忽略的个人补充文件,也可能会过时。
精确操作:更新过时的内容,保留准确的内容不动。它将被未来的 Claude 会话读取。
阶段 3 — 审计项目技能
ls .claude/skills/ 2>/dev/null
读取每个技能。分为两类:
基础设施耦合型技能(运行、部署、迁移、CI、集成)引用具体内容——命令、服务、端口、环境变量、文件路径。根据阶段 1 逐项核对:
- 引用的命令是否仍然存在?
- 服务名称、端口和 URL 是否仍然匹配?
- 配置中的环境变量是否仍然存在?
- 文件路径和模块名称是否仍然有效?
对小的差异直接修复。对于运行/启动技能的重大重构(新的启动顺序、主要服务变更),先询问:
"运行技能看起来严重过时。从头用
/run-skill-generator重新生成(可能会丢失自定义的注意事项)还是手动重写过时的部分?"
如果不存在运行技能且启动过程不简单:建议使用 /run-skill-generator(如果可用),否则回退到 /run。
流程/工作流技能(PR 模板、提交风格):仅在 git 日志显示所描述的流程已更改时才进行检查;否则保持不动。
阶段 4 — 记忆
记忆路径根据 git 仓库根目录(或非仓库时的 pwd)推导:
REPO=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
echo "$HOME/.claude/projects/$(echo "$REPO" | sed 's|/|-|g')/memory/"
如果记忆已存在:调用 consolidate-memory。
如果不存在:在创建任何内容之前先询问——
"没有项目记忆。自动记忆已经开启,Claude 会随时间逐步构建它——但你想我现在用这个代码库的关键事实来填充初始记忆吗?这样你的下一个会话就能立刻正确了解情况。"
如果回答是:用未来的会话可能会浪费时间去重新推导的非显而易见的事实来填充初始记忆:
- 令人惊讶的约束(并发模型、版本固定、意外的默认值)
- 当前正在进行的工作及其原因
- 已融入代码的非显而易见的决策
创建 MEMORY.md 作为简洁的一行一条的索引。详细说明放在单独的主题文件中(例如 architecture.md、constraints.md)——MEMORY.md 保持在 200 行以内,以便适应会话上下文窗口。
阶段 5 — 设置
检查 .claude/settings.json 中是否存在引用已不存在脚本或命令的过时钩子。
识别经常出现的只读命令(测试运行器、代码检查工具、健康检查、git log、git diff),这些命令允许执行而不提示是安全的。
不要写入 settings.json——以建议形式呈现。指向:
update-config:用于添加权限、环境变量或修复钩子fewer-permission-prompts:从实际会话历史中发现所需权限
阶段 6 — 紧凑化
所有发现结果现在都已写入磁盘。在收尾之前,提醒用户运行 /compact 命令以从全新状态开始处理上下文。
总结
打印变更摘要:
## 项目同步完成
**CLAUDE.md**:<变更内容,或“无需更改”>
**技能**:<已更新的内容,或“准确”>
**记忆**:<已合并 / 已填充初始记忆 / “无需更改”>
**设置建议**:<建议的许可,或“无需添加”>
**Git 状态**:<未提交的文件 + 正在进行的工作,一句话概括>
运行 `git diff` 查看文件变更。