CLAUDE.md 是它的新员工手册

刚装好 Claude Code 冲进项目直接开始提问,不是不行,但那样每次会话它都要从零摸索项目结构,既慢又容易抓不到重点。正确的起手动作是先跑一次 /init——这是 Claude Code 的内置命令,它会扫项目结构、读 README 和 package.json、看一眼配置文件,然后在项目根目录生成一份 CLAUDE.md。这份文件就是写给未来每次会话的"项目说明书",每次启动它自动读一遍。

CLAUDE.md 写什么、不写什么

好的 CLAUDE.md 不是项目文档的复制品,而是专门给 AI 看的提示——告诉它那些它自己不会一眼看出来的东西。一份典型的版本大致长这样:

# CLAUDE.md

This file provides guidance to Claude Code when working with code in this repository.

## Project Overview
Next.js 15 + TypeScript 的博客,用 Contentlayer 处理 MDX。

## Build & Dev
- pnpm dev     # 本地开发,默认 3000 端口
- pnpm build   # 生产构建
- pnpm lint    # ESLint
- pnpm test    # Vitest,pnpm test:watch 监听模式

## Architecture
- app/ 用 App Router,所有页面在这
- components/ui/ 是 shadcn 组件,不要手改,要改跑 pnpm ui:add xxx 重新生成
- 内容在 content/posts/*.mdx,通过 contentlayer 自动生成类型
- 数据库用 Drizzle ORM,schema 在 db/schema.ts

## 惯例
- 组件用 function 声明,不用箭头
- 样式一律 Tailwind,不写 .module.css
- 新增接口同步更新 types/api.ts

## 已知坑
- Contentlayer 修改后要 rm -rf .contentlayer 才生效

写的时候可以记三条原则:不写它自己能读代码看出来的东西(别列目录结构,它有 Glob);要写不明显的规则——约定、历史决策、踩过的坑、命名习惯、那些"看着别扭但别去改"的地方;越短越好——这份文件每次会话开头都会读进上下文,冗余直接转化为 token 浪费。

CLAUDE.md 的作用范围是分层的。项目根目录的 CLAUDE.md 提交到 git 团队共享;CLAUDE.local.md 放个人偏好(加到 .gitignore 不提交);~/.claude/CLAUDE.md 是全局的对所有项目生效,适合写"用中文回复"、"解释先给结论再展开"这种跨项目偏好。三层叠加生效,任何一处规则都能被下一层覆盖或补充。

它是怎么"看"你的项目的

理解 Claude Code 的上下文构成对用好它很关键。它不会把整个项目一股脑塞给模型,实际上下文是动态拼出来的——系统 Prompt(工具定义)、CLAUDE.md 全文、本次会话的消息历史、每次工具调用读到的文件内容,四部分叠起来。所以它回答一个问题前经常会先做几个动作:Grep 搜关键字、Glob 找相关文件、Read 把几个文件读进来。看它查什么就知道它在想什么——这是以后调试它跑偏时最直接的信号。

第一次对话建议怎么开

/init 生成的 CLAUDE.md 先审一遍,不对的地方改掉、漏的补上。然后问一个能检验它理解程度的问题:

> 这个项目的入口是哪?路由怎么组织的?

它说得对,说明理解到位;说得不对,不要每次都去纠正,直接告诉它"把 xxx 规则加进 CLAUDE.md"——它会自己改,下次开始就记住了。这一步是把 CLAUDE.md 从一份初始生成的模板,迭代成真正贴合你项目的说明书。

接下来可以给它一个稍微完整的任务试水:

> 给我写个最小的 todo CRUD:
> - 页面在 /todos
> - 用现有的 Drizzle schema,加一个 todos 表
> - API 路由放 app/api/todos/route.ts
> - UI 复用 shadcn 组件
> 写完跑 pnpm build 确认没报错

一条指令覆盖读代码、改多个文件、跑命令、自修报错的完整闭环,你会直观地看到 Claude Code 和 Copilot 的本质区别。

CLAUDE.md 要持续维护

CLAUDE.md 不是写一次就结束的文件。用的过程中你会发现 Claude 反复在同一个地方犯错——比如总是用箭头函数写组件,或者总去改你不想动的配置文件。这种情况不要在每次会话里口头纠正,直接:

> 把"组件必须用 function 声明"加进 CLAUDE.md

它会自己把这条写进去,从此每次会话自动带上,你也就不用再讲第二遍了。这种"发现问题 → 沉淀到说明书"的循环,是 Claude Code 用得越久越顺手的关键。

另外顺手说一下 /clear 的时机:独立任务结束一次 /clear、讨论开始绕圈子一次 /clear、会话超过一小时考虑 /compact 保留摘要或者干脆重开。为什么上下文管理这么重要,下一篇讲上下文窗口、权限系统、计划模式这三个核心心智模型时会讲透。

参考资料

版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。

(采用 CC BY-NC-SA 4.0 许可协议进行授权)

本文标题:初次见面:项目初始化与 CLAUDE.md

本文链接:https://www.sshipanoo.com/blog/ai/claude-code/05-初次使用/

本文最后一次更新为 天前,文章中的某些内容可能已过时!