哪些内容会改变 Claude Code 在 Claude.md 中的行为(附免费生成器)

HN Code LLM Research 2026-08-13T01:14:48.372875

1. 你的项目

无需上传任何内容。文件由本页面中的 JavaScript 在本地生成。

这一行通常是整个文件里最有价值的内容。
要包含的规则
- 直接运行测试/代码检查,不要先问 - 不要在显而易见的代码上写叙述性注释 - 未经要求不要自动创建 summary .md 文件 - 未经要求绝不 commit 或 push - 不要超出要求范围做重构 - 通过实际运行来验证,而不是口头保证"应该能跑"
Generate CLAUDE.md

2. 你的文件

把这个文件保存为仓库根目录下的 CLAUDE.md 并提交。

填写上面的表单,然后点击 Generate。
复制到剪贴板 | 下载 CLAUDE.md

为什么大多数 CLAUDE.md 文件根本没起作用

  • 形容词是隐形的。"写干净、可维护的代码"——模型本来就知道这一点。这种话只占你的上下文额度,却不会改变任何输出结果。而"用 pytest 而不是 unittest;测试文件放在代码旁边,命名为 test_*.py"——这样的话每次都会改变输出。
  • 只写仓库自己说不出来的东西。如果一个有能力的外人花两分钟读代码就能搞清楚的事,那就不该写进这个文件。如果是别人看了代码也看不出来的——比如不明显的构建步骤、必须保持运行的服务、某个看起来没用但其实有用的目录——这些才正是该写进来的。
  • 授权是调整行为的杠杆。明确允许那些枯燥的操作(跑测试、代码检查、类型检查),才能换来一个会自己验证工作成果、而不是停下来问你六遍的 agent。
  • 禁令要有具体的对象。"对 git 操作小心点"——等于没说。"未经我允许,绝不 git push"——这才可执行,也才会被遵守。
  • 越短越有效。每次运行时每一行都会被重新读一遍。紧凑的 40 行文件远比 300 行的强,因为长文件里真正重要的规则会被不重要的稀释掉。

四个完整的 CLAUDE.md 示例

真实、完整的文件——不是片段。

复制一份,改掉名称,删掉不适用于你的行。这里的每一行都有它的价值:告诉 Claude 一些它光看仓库代码无法自己推断出来的信息。 ### 1. Python API 服务(FastAPI + Postgres)
# CLAUDE.md
## 这是什么 这是一个面向客户门户的计费 API,基于 Postgres 16,后端使用 FastAPI + SQLAlchemy。`app/` 是服务主体,`worker/` 是独立的 Celery 进程,两者共享同一套数据模型。要让整个链路端到端跑通,这两个进程必须同时运行。 ## 常用命令 - 测试:`pytest -q`(需要先启动 Postgres:`docker compose up -d db`) - 运行:`uvicorn app.main:app --reload` - 代码检查/格式化:`ruff check . && ruff format .` - 数据库迁移:`alembic upgrade head` —— 千万不要修改已经提交过的迁移文件 ## 约定 - 测试文件放在对应代码旁边,命名为 `test_*.py`,使用 pytest,不用 unittest。 - 涉及金额一律用 `Decimal`,绝不用 `float`;金额以最小单位(分)存储。 - 所有外部 HTTP 请求统一走 `app/clients/`,不允许在路由里直接写 `requests`。 - 新增接口必须定义 Pydantic 响应模型,不能直接返回裸 dict。 ## 最容易踩的坑 `app/models/` 同时被 API 和 worker 引用。如果新增一个没有默认值的非空列,部署时 worker 会比 API 先启动,就会直接挂掉。所以新增列时,永远先让它保持可空。 ## 这些操作不用请示 跑测试、跑 ruff、对本地开发库执行 `alembic upgrade head`、查看日志、在 `tests/` 目录下新增文件。 ## 禁止事项 - 除非我明确要求,否则不要 `git push`。 - 除了本地开发库,不要对任何其他环境执行数据库迁移。 - 不要擅自添加新依赖;如果确实需要,先告诉我加哪一个、为什么加。 ### 2. TypeScript 前端(Next.js App Router)
# CLAUDE.md

查看原文