Umm,我使用Claude Code 翻车了

发布时间:2026/7/23 17:13:59
Umm,我使用Claude Code 翻车了 上周我让 Claude Code 帮我改个 bug。就一句话「把登录接口的超时时间调一下」。它改完了我检查的时候也没仔细看——结果它顺手把我的.env文件里的数据库连接串改坏还自作主张git commit了。等我在测试环境跑起来发现连不上库回滚日志才看到那一笔提交「fix: adjust login timeout」。这一下字是真的整得我后背发凉。其实问题不在 Claude Code 笨他可聪明了喵的比我们聪明太多了在于我只是把它当成了一个「听话的实习生」却没给它任何边界和限制。这次事之后我重新把 Claude Code 啃了一遍从权限模型到 hooks 到子代理把那些普通入门教程不爱写的深层功能全摸了一遍。下面是我自己整理的一些小功能和玩法按踩坑后补课的顺序来讲照着做能避坑。先说清楚它到底是个什么东西很多人第一次见 Claude Code以为它就是个「能聊天的工具」「能在终端里补全代码的工具」。错而且是根本性的错。它是 Anthropic 出的一个agentic CLI——能读整个项目、改文件、跑命令、提 PR本质上是一个能在你终端里自主干活的 Agent。补全工具是「你写它猜」Claude Code 是「你吩咐它干」。你跟它说「给这个模块加单元测试」它会自己读代码、写测试、跑测试、修到通过为止全程不需要你一行行点。理解这一点太关键了因为后面所有配置——CLAUDE.md、权限、hooks——都是围绕「怎么管好一个会自己动手的 Agent」展开的。你把它当补全工具用就只用了它 10% 的能力还容易翻车。第一步装好、登进去环境要求 Node.js 18 及以上。一行命令全局安装npmi-ganthropic-ai/claude-code装完直接在终端敲claude启动。第一次运行会弹浏览器让你登录 Anthropic 账号授权登录完回到终端就能看到交互界面了。当然我们还可以安装claude code桌面版作者就是懒人一个直接桌面可视化操作简单。几个实操里容易卡住的点我替你趟过了如果npm i -g报权限错误EACCES别急着sudo更干净的做法是把 npm 的全局目录指到用户目录或者直接用npx anthropic-ai/claude-code临时跑不用全局装。想确认装对了跑claude --version能打印版本号就说明没问题。桌面版登录有个问题哈朋友们那就是需要跳转网页登录网页登录后又调回来需要魔法魔法都知道吧我相信大家既然看到Claude Code标题进来那肯定知道魔法怎么用的我就不说了怕被关小黑屋后来我发现CLAUDE.md 才是灵魂翻完车我第一件事是查「它怎么知道在项目里该遵守什么规矩」。答案很简单就是CLAUDE.md——项目根目录下一个普通的 markdown 文件是专门写给 Claude 看的「项目记忆」umm就是一个文件他会根据里面的要求来工作。里面写什么技术栈、常用命令、代码约定、不能碰的文件。比如我那个项目的初版长这样# 项目约定 - 技术栈Node 18 TypeScript Prisma - 启动命令npm run dev - 跑测试npm test - 数据库迁移前必须先备份 - 禁止修改 .env 和 migrations/ 下已有的文件看到最后那句了吗——「禁止修改 .env」就是我踩坑之后补上去的保命条款。你不用从零手写Claude Code 自带/init命令进项目后敲/init它会扫一遍你的代码自动生成初版 CLAUDE.md其实还有一个README.md,但是两个目的差不多只是针对的对象不一样下面做个区分你再改改就行。还有一层全局记忆放在~/.claude/CLAUDE.md对所有项目生效。比如你全局都要求「注释用中文」「提交信息用 conventional commits 格式」「不要用 var」写在这里一次从此每个项目都继承。一个小提醒CLAUDE.md 会被原样塞进上下文所以别往里塞几百行废话越精炼越准它越听话越多越耗token。我一般控制在 30 行以内只放真正影响它行为的东西。翻车的根源权限模型没搞懂回到开头那次事故。本质上来说是我没管权限——Claude Code 默认能读写文件、能跑 git 命令它觉得改.env是「修配置」就动手了而且因为我没拦它还提交了。Claude Code 有4 种权限模式这是进阶使用的命门AskUserMode默认每次要动文件、跑命令都问你最安全新手建议一直开着。AcceptEdits文件编辑自动同意但跑命令仍要你确认。适合你已经信任它的改文件能力、但怕它乱跑 shell。PlanMode只读先出方案让你点头再动手。做大范围重构前切到这个先跟它对齐思路比直接开干稳得多。BypassPermissions全部自动通过最快但也最危险。我那次事故就是手滑开过它。哦对了还有Auto模式也是慎用settings.json 里还能玩出花项目根目录.claude/settings.json是个宝库。除了权限你还能配不少东西permissions细粒度工具黑白名单比命令行--permission-mode更精确。env注入环境变量不用每次在 shell 里 export。model 覆盖指定用哪个模型省得每次手动切。hooks 路径告诉 Claude Code 去哪找你的 hooks 脚本一个能直接用的示例{permissions:{allowedTools:[Read,Edit,Bash(npm test:*)],deniedTools:[Bash(rm:*)]},env:{NODE_ENV:development},model:claude-sonnet-4-6}这段的意思是只允许读、编辑、跑npm test开头的命令封掉所有rm命令注入NODE_ENV默认用 sonnet 档模型干日常活儿。注意Bash(npm test:*)这种写法是指令前缀匹配冒号后面是通配很灵活。Hooks给 Claude 装个保险丝这是我最想安利的功能也是那次事故后我第一个补上的。Hooks 让你在某个动作「前」或「后」插入自己的脚本等于给 Claude 装了根保险丝。PreToolUse工具调用前触发你的脚本返回拒绝码就能把这次调用拦下来。PostToolUse工具调用后触发比如自动格式化、跑完弹通知。挡危险删除的 hooks 配置长这样放进settings.json的hooks字段{hooks:{PreToolUse:[{matcher:Bash,hooks:[{type:command,command:if echo \$TOOL_INPUT\ | grep -qE rm -rf|git reset --hard; then echo 危险命令被拦截; exit 1; fi}]}],PostToolUse:[{matcher:Edit,hooks:[{type:command,command:prettier --write $TOOL_FILE 2/dev/null || true}]}]}}这段干了两件事任何 Bash 命令里带rm -rf或git reset --hard直接拦掉exit 1 即拒绝每次文件被编辑后自动跑 prettier 格式化保持代码风格统一。你也能在 PostToolUse 里加个notify-sendLinux或osascriptmacOS弹桌面通知跑长任务时去倒杯咖啡它干完了叫你。Subagents把脏活累活外包出去复杂任务一个会话的上下文会爆。子代理Subagents让你把活拆给「专人」干。在.claude/agents/*.md定义一个 agent描述它的角色、能用的工具、用什么模型--- name: test-writer description: 专门给指定模块编写并跑通单元测试 tools: Read, Edit, Bash(npm test:*) model: claude-sonnet-4-6 --- 你负责给指定模块编写完整的单元测试确保 npm test 通过后交付。 只做测试不要改动业务代码。定义好之后主会话里说「让 test-writer 去给 auth 模块补测试」它就会派这个子代理去干干完把结果回报给你。关键是上下文隔离——子代理的对话不占主会话的上下文长项目里这招能救命。成本控制别让账单爆炸讲真长会话是真的烧钱尤其你开Auto和BypassPermissions 让它疯狂跑命令的时候。三个实用招/cost随时看这轮会话花了多少 token 和钱心里有数。模型切换简单活儿用便宜模型。比如 settings.json 里把默认model指向 sonnet 档重活儿再临时切 opus 档别一律上最贵的。/compact上下文太长时手动压缩丢掉早期无关的对话给后续腾空间也省钱。我的习惯是每开一个大任务前先/cost记个底数跑完对比一下慢慢就摸准「哪类活儿该用什么档位的模型」。另外把大任务拆给 Subagents也能避免主会话上下文无限膨胀。成本控制还有个方法接入第三方APIAPI哪里获取我之前文章说过分享过两个自己用的大家可以自行查找。但是有个问题Claude Code接入API相对来说麻烦需要修改json文件给大家推荐用CCSwitch这个软件吧一件修改使用嘎嘎方便真实踩坑复盘最后把那次事故和后来又踩的几个坑一并交代都是血泪误改重要文件根因是 CLAUDE.md 里没写「禁止修改清单」也没用deniedTools兜底。现在我是双保险——CLAUDE.md 写禁令 settings.json 里deniedTools封Bash(rm:*)和类似危险操作。权限太松改错地方别图省事一直开着 BypassPermissions。日常我用 AcceptEdits大改动切 PlanMode 先过方案只有 CI 里才用 bypass。context 爆了开始答非所问长任务开了十几轮它明显在胡说。及时/compact或者把任务拆给 Subagents 隔离上下文别硬撑。Claude Code 强是真强但它是个「能干但没分寸」的实习生。你给它边界——CLAUDE.md 定规矩、权限模式控范围、hooks 兜底——它能帮你扛掉一半重复的活儿你不管它它就敢动你的.env还顺手帮你提交。到这里我们来说一下CLAUDE.md和README.me的区别CLAUDE.md给 AI 的记忆/项目规范指令库。告诉 Claude 关于你这个项目的个性化上下文和准则防止 AI 在编码时“瞎发挥”。针对对象给Claude Code看README.md项目的第一门面。告诉人这个项目是做什么的、怎么安装、怎么快速上手使用、示例代码以及贡献指南等。针对对象给使用AI的人看的你用 Claude Code或同类 AI 编码工具翻过车吗最离谱的一次是什么