第一次用 Claude Code,我照着惯例输入了/init。因为这曾经是claude 创始人的经典做法。
它静默地跑了一小会儿,然后告诉我:CLAUDE.md已生成。我打开一看,里面列了构建命令、测试步骤、目录结构、编码规范。规规矩矩,没什么毛病。
但问题恰恰就在这儿:这份文件,跟我项目里那些自动生成的 README 模板一模一样。它写的是“这个项目的构建命令是什么”,而不是“这个项目在踩坑时不要做什么”。它没有告诉我团队约定的 PR 规范,没有提醒我某个模块的历史包袱,没有写清楚哪些依赖是动不得的。
然后我又跑了两次。每次都是同样的静默流程,同样的自动生成,同样的“看起来没错但总觉得差点什么”。我盯着一份没有灵魂的CLAUDE.md,感觉自己像在跟一个只会背简历的人相亲。
后来我才知道,它有个交互模式
这个交互模式藏在一个环境变量后面:CLAUDE_CODE_NEW_INIT=1。
设置它之后,再跑/init,一切都变了。
它不再闷头扫描然后扔一份文档给你。它会先问你:你想创建哪些东西?CLAUDE.md、Skills、Hooks(钩子脚本),你勾选。
即使你的项目里面已经有一份Claude.md,他也会像一个老师知道你优化这份文档
这里你可以选择 start fresh来重新写一份文档,接着他会问你是否设置skill,hook
然后他会问你,你的git工作流是怎样的
怎么部署的
问完了之后,就开始创建文件了
接着,它会启用子智能体去深度探查你的代码库。遇到信息缺失的地方,它会继续追问你:这个项目有什么历史坑?团队的 PR 规范是什么?部署步骤有没有特别之处?那些默认/init根本不会去问、但恰恰最该被记录下来的东西,现在都会变成对话的一部分。
最让我舒服的一点是:它在写入文件之前,会先输出一份提案预览给你审核。你确认之后,它才落地。以前是“它写完了你才知道写了什么”,现在是“你先看清楚它准备写什么,再决定要不要”。
默认模式生成的CLAUDE.md,原则是“把能推断的都写进去”。但问题是,能自动推断的东西,往往不值得写。构建命令你跑一次npm run就知道了,目录结构你看一眼就明白了。真正有价值的信息是那些Claude 自己推不出来的:团队约定、历史决策、踩过的坑、不能动的依赖。
交互模式遵循的原则恰恰相反:只写 Claude 无法自动推断的规则。它生成的CLAUDE.md更短、更精,但每一句都是“必须知道”的。
它还多了一个能力:可以导入 Codex CLI 或 Gemini CLI 的旧配置。如果你从别的 AI 工具迁过来,它会识别出旧配置,并提供迁移选项。省去了手动搬运的麻烦。
大型仓库、团队项目、或者从别的工具迁移过来的时候,我会先设置CLAUDE_CODE_NEW_INIT=1,再跑/init。简单的小项目,默认模式就够了,不值得为它走一遍问答流程。
有时候,让工具多问你几句,比让它自作聪明地替你决定,要值钱得多。