十个月前我第一次在终端里敲下 npm install -g @anthropic-ai/claude-code 的时候,预期其实很低。那会儿AI编程助手已经满天飞,多一个命令行工具又能怎样。真正用满十个月之后,我的开发习惯已经被它改得面目全非:从早期只会追问“帮我写个函数”,到现在把几十个项目的技术债、测试策略、代码规范全部沉淀成Skill;从死磕官方模型,到在Claude Code里灵活切换DeepSeek等第三方模型处理不同场景。这篇文章不是官方文档的复述,而是我在十个月里踩坑、重建流程之后,觉得最值得写下来的东西。如果你刚安装完Claude Code,或者正在纠结要不要从纯聊天式AI转过来,这篇应该能帮你省下好几个月的摸索时间。
1. 第一个月的混乱:安装、登录与“它根本不听我的”
1.1 安装命令和前置依赖:Node版本比想象中更讲究
Claude Code最主流的安装方式还是npm全局安装:
bash复制npm install -g @anthropic-ai/claude-code
但如果你在Windows上直接这么跑,大概率会遇到各种路径问题。我的经验是:Windows用户优先用WSL2,在Linux子系统里安装,然后通过VSCode的Remote-WSL连接。直接在PowerShell里跑不是不行,只是后续很多命令执行、文件权限、路径转换都会给你添乱。macOS和Ubuntu相对顺畅,唯一要留意的是Node版本。官方要求Node 18+,但我实际用下来,Node 18和Node 20的体验差距很大:Node 18在处理某些长会话时偶尔会内存吃紧,Node 20及以上稳定得多。所以如果你用nvm管理版本,建议直接切到最新的LTS。
安装完成之后敲 claude,它会要求你登录。这里有一个容易懵的点:Claude Code的登录不是“输入API Key”,而是走浏览器OAuth授权。它会自动拉起浏览器,你登录Anthropic账号并授权即可。如果你是在服务器上用,没有浏览器,可以用 claude setup-token 或者环境变量方式注入token,但那是后话。第一个月我反复折腾的其实是“到底该订阅Pro还是用API按量付费”。我的结论是:重度使用(每天都用、跑长任务)选订阅划算;偶尔用一下、或者需要精细化控制预算,就充值API,但API的token消耗速度远超你想象,一个复杂重构跑掉几美元很正常。
1.2 第一次对话的“翻车”:Claude Code不是聊天框
安装完之后第一个下午,我把它当ChatGPT用,在终端里贴了一段报错,问它“怎么解决”。它确实回答了,但回答完没有停下来,而是自作主张开始修改项目文件、运行测试、甚至尝试提交commit。那一瞬间我意识到:Claude Code是一个agent(智能体),不是聊天框。它会读你的项目结构、打开文件、执行命令,它的默认行为是“完成任务”,而不是“回答问题”。
这个认知转变很重要。如果你希望它只分析不要动手,必须明确说“不要修改任何文件,只给我结论”。如果你希望它动手,也要先让它列出计划,确认后再执行。我第一个月最常犯的错就是在prompt里写“你看着办”,然后看着它把代码改得面目全非。后来我学会了一个万能句式:“先花10分钟阅读项目结构并输出执行计划,等我确认后再动手。”这十个字能避免大部分灾难。
1.3 权限和命令执行边界:什么时候该按“允许”,什么时候该拦
Claude Code执行每个命令之前,默认都会弹出一个确认提示,让你选择允许一次、允许本次会话、还是拒绝。新手第一反应是全部点“允许”,因为弹窗很烦。我第一次就全允许了,结果它跑了 rm -rf 删掉了一个缓存目录,虽然没删到源码,但那一刻后背发凉。
正确做法是先在配置文件里把敏感命令直接放进deny列表,比如强制删除、强制推送、批量修改权限等。然后再根据项目情况添加allow列表。我把这套规则分成两类:一类是全局规则,放在 ~/.claude/settings.json;另一类是项目级规则,放在项目根目录的 .claude/settings.json。项目级规则优先,这样不同项目可以有不同的信任边界。这个配置文件值得花时间认真写,它直接决定了Claude Code是“得力助手”还是“定时炸弹”。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 配置文件的进化:我从settings.json里挖出的效率项
2.1 permissions、hooks与statusLine:最值得先配的三件事
Claude Code的配置文件是JSON格式,路径是 ~/.claude/settings.json 或项目下的 .claude/settings.json。十个月用下来,我觉得最值得精雕细琢的三个字段是:
json复制{
"permissions": {
"allow": [
"npm run lint",
"git status",
"git diff"
],
