Claude Code 实战经验:深度使用每个功能

标签: | 发表时间:2025-11-05 17:34 | 作者:
出处:https://mp.weixin.qq.com

本文翻译自 Shrivu Shankar 的文章 How I Use Every Claude Code Feature,发布于 2025 年 11 月 2 日。

Claude Code 实战经验:深度使用每个功能 

简评:这是一篇难得的深度实践文章。作者既在个人项目中频繁使用 Claude Code,又在企业环境下为每月消耗数十亿 token 的工程团队构建 AI-IDE 工具,这种双重视角让文章兼具灵活性和严谨性。文章不是泛泛而谈,而是针对每个功能给出了明确的使用场景、实践技巧和常见陷阱。比如为什么要避免  /compact,为什么自定义子智能体反而会带来问题,Skills 和 MCP 的真正定位是什么。作为参考手册,它涵盖了从基础配置到高级特性的完整路径;作为经验分享,它提供了很多反直觉但有效的做法。如果你正在使用或考虑使用 Claude Code,这篇文章能帮你少走不少弯路。

引言

我是 Claude Code 的重度用户。

业余时间,我每周会在虚拟机里运行它好几次,用来折腾个人项目。经常加上  --dangerously-skip-permissions 参数,想到什么就直接让它写。工作中,我所在团队为公司工程团队构建 AI-IDE 的规则和工具,光是代码生成,每月就要消耗 数十亿 token。

CLI 智能体(命令行智能体)现在很热闹。Claude Code、Gemini CLI、Cursor、Codex CLI,核心竞争其实就是 Anthropic 和 OpenAI 两家。但说实话,和其他开发者聊下来,大家选工具的理由往往挺表面的,某个功能用着顺手,或者就是喜欢某种系统提示的风格。到了现在,这些工具都已经很成熟了。很多人过度关注输出风格或 UI 细节。比如智能体那些过分客气的回复,在我看来根本不是问题,反而是个信号:你管得太细了。我的理念是发射后不管,交代清楚任务,设好上下文,然后让它自己干。评价工具要看最终的 PR,而不是它是怎么写出来的。

用了几个月 Claude Code,写这篇文章记录一下对整个生态的理解。我会讲几乎每个功能的用法(以及为什么不用某些功能),从基础的  CLAUDE.md 文件、自定义斜杠命令,到子智能体(Subagents)、钩子(Hooks)和 GitHub Actions。 文章比较长,建议当成参考手册来查,不必一次读完。

CLAUDE.md

要高效使用 Claude Code,代码库里最重要的文件就是根目录的  CLAUDE.md。可以把它看作智能体的宪法,它理解你的代码库如何运作,全靠这个文件。

如何维护这个文件,取决于场景。个人项目里,我让 Claude 随便往里写。

工作中,我们 monorepo(单一代码仓库)的  CLAUDE.md 严格维护,目前 13 KB(预计会涨到 25 KB):

  • • 只记录 30% 以上工程师会用到的工具和 API(比例是我定的)。不够通用的工具,文档放在各自的产品或库里。
  • • 我们甚至给每个内部工具的文档分配了 token 上限,像是在卖广告位。工具介绍写不简洁?那就不配进  CLAUDE.md

实用技巧与常见误区

用久了,我们总结出一套编写  CLAUDE.md 的方法论:

  1. 1.  从护栏开始,不是说明书
    CLAUDE.md 应该很短,只在 Claude 容易出错的地方加说明。别想着写完整手册。
  2. 2.  别用  @ 引用文档
    如果你有详细文档,可能想在  CLAUDE.md 里用  @ 引用。但这会把整个文件塞进上下文,非常臃肿。只写路径?Claude 会忽略。正确做法是推销这个文件,告诉它为什么和何时该读。例如:遇到复杂用法或  FooBarError 错误时,参考  path/to/docs.md 的高级故障排除。
  3. 3.  别只说禁止
    不要写纯否定约束,比如永远不要用某个标志。智能体真需要这个标志时就傻了。永远提供替代方案。
  4. 4.  把  CLAUDE.md 当倒逼函数
    CLI 工具复杂冗长?别写长文档解释,那是在给烂设计打补丁。应该写个简洁的 Bash 包装脚本,提供清晰的 API,然后只给包装脚本写文档。让  CLAUDE.md 尽量短,能倒逼你简化代码库和内部工具。

简化版示例:

    # Monorepo      

## Python
- 始终...
- 使用 <command> 测试
... 还有 10 条 ...

## <内部 CLI 工具>
... 10 个要点,聚焦 80% 的使用场景 ...
- <用法示例>
- 始终...
- 禁止 <x>,改用 <Y>

复杂用法或遇到 <错误> 时,参考 path/to/<tool>_docs.md

...

我们还会同步维护一个  AGENTS.md 文件,兼容工程师可能用的其他 AI IDE。

核心要点:把  CLAUDE.md 当作高层护栏和指引。用它来判断哪里需要改进工具,让 AI(和人)都更好用,而不是写成大而全的手册。

精简、上下文与清空

建议编码时至少运行一次  /context,看看 200k 个 token 的上下文窗口用了多少。即使有 Sonnet-1M,我也不信全部上下文都能被有效利用。我们 monorepo 里,新会话基础开销约 20k 个 token(10%),剩下 180k 个用来干活——但很快就会用完。(可以把上下文想象成磁盘空间,工作一段时间后,需要清理消息才能继续)

上下文窗口上下文窗口

我的三种工作流:

  • •  /compact(避免用):尽量别用。自动压缩不透明、容易出错、优化不好。
  • •  /clear +  /catchup(简单重启):我的默认方式。先  /clear 清状态,再运行自定义的  /catchup 命令,让 Claude 读取当前 git 分支的所有改动。
  • •  文档化后清空(复杂任务重启):大任务专用。让 Claude 把计划和进度写进  .md 文件, /clear 清状态,然后新会话读取  .md 继续干。

核心要点:别信自动压缩。简单重启用  /clear,复杂任务用文档化后清空给它创建外部记忆。

自定义斜杠命令

我把斜杠命令当作常用提示词的快捷方式,仅此而已。我只设了两个:

  • •  /catchup:让 Claude 读取当前 git 分支的所有改动。
  • •  /pr:清理代码、暂存改动、准备 Pull Request 的小助手。

如果你有一长串复杂的自定义命令,那就是反模式了。Claude 这种智能体的意义,就是让你输入 几乎任何想法,都能得到有用、可合并的结果。一旦你强迫工程师(或非工程师)为了干活必须学习一堆不知道记在哪的魔法命令,那你就失败了。

核心要点:斜杠命令只是个人快捷方式,别用它替代更直观的  CLAUDE.md 和更好的工具设计。

自定义子智能体

理论上,自定义子智能体(Subagent)是 Claude Code 最强的上下文管理功能。逻辑很简单:一个复杂任务需要 X 个 token 输入上下文(比如如何运行测试),执行中累积 Y 个 token 工作上下文,产出 Z 个 token 答案。运行 N 个任务,主窗口就占  (X + Y + Z) * N 个 token。

子智能体方案是把  (X + Y) * N 的工作外包给专门智能体,它们只返回最终的 Z 个 token 答案,主上下文保持清爽。

但实践中, 自定义子智能体有两个新问题:

  1. 1.  隔离上下文
    创建  PythonTests 子智能体,就把测试相关的所有上下文从 智能体那藏起来了。主智能体无法全局推理一个改动,必须调子智能体才知道怎么验证代码。
  2. 2.  强制人类工作流
    更糟的是,它们把 Claude 框进僵化的、人类定义的工作流。我在命令它 应该如何分配任务,但这恰恰是我希望智能体自己解决的问题。

我的替代方案:用 Claude 内置的  Task(...) 功能生成 通用智能体的克隆。

把关键上下文都放  CLAUDE.md 里,让主智能体自己决定何时、如何把工作分给它的副本。既有节省上下文的好处,又避免了缺点。智能体动态管理自己的协作流程。

我在文章《构建多智能体系统(第二部分)》里把这叫主干-克隆(Master-Clone)架构,强烈推荐它,而不是自定义子智能体鼓励的领导-专家(Lead-Specialist)模型。

核心要点:自定义子智能体是脆弱方案。把上下文给主智能体(通过  CLAUDE.md),让它用  Task/Explore(...) 自己管理任务分配。

恢复、继续与历史记录

我经常用  claude --resume 和  claude --continue。重启出 bug 的终端,或恢复旧会话,都很方便。有时会  claude --resume 几天前的会话,就为了问智能体当时怎么解决某个错误的,然后用这些信息改进我们的  CLAUDE.md 和内部工具。

往深了说,Claude Code 把所有会话历史存在  ~/.claude/projects/,可以挖掘原始数据。我有脚本运行元分析(meta-analysis),找常见的异常、权限请求和错误模式,帮助改进面向智能体的上下文。

核心要点:用  claude --resume 和  claude --continue 重启会话,挖掘历史记录里埋藏的上下文。

钩子(Hooks)

钩子很重要。个人项目我不用,但企业级代码仓库里,它们对引导 Claude 行为至关重要。钩子是确定性的必须做规则,配合  CLAUDE.md 里应该做的建议。

我们用两种钩子:

  1. 1.  提交时阻塞(Block-at-Submit)
    主要策略。我们有个  PreToolUse 钩子,包裹所有  Bash(git commit) 命令。钩子检查  /tmp/agent-pre-commit-pass 文件是否存在,测试脚本只有在所有测试通过时才创建这个文件。文件不存在?钩子阻止提交,逼 Claude 进测试-修复循环,直到构建成功。
  2. 2.  提示型(Hint)
    简单的非阻塞钩子。智能体做次优操作时,提供即发即忘式的反馈。

我们特意不用写入时阻塞(block-at-write)钩子(比如在  Edit 或  Write 操作上)。中途打断智能体会让它困惑甚至沮丧。更有效的方法是让它完成工作,提交时再检查最终结果。

核心要点:用钩子在提交时强制状态验证(提交时阻塞)。别在写入时阻塞,让智能体完成计划,再检查最终结果。

规划模式

用 AI IDE 做 大型功能变更,规划必不可少。

个人项目,我全用内置规划模式。这是在 Claude 开工前跟它对齐的方式,既定义如何构建,也设定检查点,也就是它需要停下来展示工作的地方。常用这功能能培养直觉:知道提供哪些最精简的上下文,就能得到好计划,而不会让 Claude 在实现时搞砸。

我们 monorepo 里,已经在推广基于 Claude Code SDK 的自定义规划工具。和原生规划模式类似,但经过深度提示工程,输出和我们现有的技术设计格式一致。它还能开箱即用地强制执行内部最佳实践,从代码结构到数据隐私和安全。让工程师能随心所欲地规划新功能,像资深架构师一样,至少宣传是这么说的。

核心要点:复杂变更一定要用内置规划模式,在智能体开工前对齐计划。

技能(Skills)

我同意 Simon Willison 的观点: 技能(Skills)可能比 MCP 更重要。

关注我帖子的话,你会知道我在大多数开发工作流里已经放弃 MCP,转而构建简单的命令行工具(详见《AI 无法阅读你的文档》)。我对智能体自主性的心智模型已经演变成三个阶段:

  1. 1.  单次提示:一个巨大提示包含所有上下文。(脆弱,不可扩展)
  2. 2.  工具调用:经典智能体模型。手动创建工具,为智能体抽象现实。(更好,但引入新的抽象和上下文瓶颈)
  3. 3.  脚本化:让智能体访问原始环境——二进制、脚本、文档——它 即时写代码与它们交互。

基于这个模型,智能体技能是显而易见的下一步。它们是脚本化层的正式产品化。

如果你像我一样,已经偏爱命令行工具而非 MCP,那你一直在隐式享受技能(Skills)的好处。 SKILL.md 文件只是更组织化、可共享、可发现的方式,用来记录这些 CLI 工具和脚本,并暴露给智能体。

核心要点:技能是正确的抽象。它们将基于 脚本化的智能体模型正式化,比 MCP 代表的僵化、类 API 模型更健壮、更灵活。

MCP(Model Context Protocol)

技能出现不代表 MCP 已死(参见《MCP 的所有问题》)。以前很多人构建了糟糕、上下文沉重的 MCP,包含几十个工具,这些工具只是简单镜像 REST API(比如  read_thing_a()read_thing_b()update_thing_c())。

脚本化模型(现通过技能正式化)更好,但需要安全方式访问环境。在我看来,这才是 MCP 新的、更专注的角色。

MCP 不应是臃肿的 API,而应是简单、安全的网关,提供几个强大、高层工具:

  • •  download_raw_data(filters…)
  • •  take_sensitive_gated_action(args…)
  • •  execute_code_in_environment_with_state(code…)

这种模型里,MCP 的作用不是为智能体抽象现实,而是管理认证、网络和安全边界,然后退居幕后。它为智能体提供入口点,智能体随后用脚本和 markdown 上下文执行实际工作。

我唯一还在用的 MCP 是 Playwright,这合理,因为它是复杂、有状态的环境。我所有无状态工具(如 Jira、AWS、GitHub)都已迁移到简单 CLI 工具。

核心要点:用 MCP 当数据网关。给智能体一两个高层工具(比如原始数据转储 API),然后智能体对其进行脚本化操作。

Claude Code SDK

Claude Code 不只是交互式命令行,它还是强大的 SDK,用来构建全新的智能体,编码和非编码任务都行。大多数新的业余项目,我已经把它当默认智能体框架,不用 LangChain/CrewAI 之类的了。

三种主要用法:

  1. 1.  大规模并行脚本
    大规模重构、bug 修复或迁移,我不用交互式聊天。写简单的 Bash 脚本,并行调用  claude -p "in /pathA change all refs from foo to bar"。比让主智能体管理几十个子智能体任务更可扩展、可控。
  2. 2.  构建内部聊天工具
    SDK 非常适合把复杂流程封装成简单聊天界面,给非技术用户用。比如安装程序出错时,回退到 Claude Code SDK 来修复问题。或者内部的 v0-at-home 工具,让设计团队在我们内部 UI 框架里随意写前端原型,想法高保真,代码更直接能用到生产。
  3. 3.  快速智能体原型
    最常用。不限于编码。任何智能体任务有想法(比如用自定义 CLI 或 MCP 的威胁调查智能体),我都用 Claude Code SDK 快速构建测试原型,再考虑完整部署。

核心要点:Claude Code SDK 是强大、通用的智能体框架。考虑更复杂框架前,先用它做批量代码处理、构建内部工具、快速原型新智能体。

Claude Code GHA

Claude Code GitHub Action(GHA)可能是我最喜欢但最容易被忽视的功能。概念很简单:就是在 GHA 里运行 Claude Code。但正是这种简单性让它如此强大。

类似 Cursor 的后台智能体或 Codex 托管 Web UI,但可定制性更强。你控制整个容器和环境,获得更多数据访问权限,更重要的是,比任何其他产品都强的沙盒和审计控制。还支持所有高级功能,比如钩子和 MCP。

我们用它构建自定义的随处 PR 工具。用户可以从 Slack、Jira,甚至 CloudWatch 警报触发 PR,GHA 修复 bug 或添加功能,返回一个充分测试的 PR。

因为 GHA 日志就是完整的智能体日志,我们有运维流程定期在公司层面审查这些日志,查找常见错误、Bash 错误或不一致的工程实践。这形成数据驱动的飞轮:Bug → 改进的 CLAUDE.md / CLI → 更好的智能体。

    $ query-claude-gha-logs --since 5d | claude -p "see what the other claudes were getting stuck on and fix it, then put up a PR"

核心要点:GHA 是将 Claude Code 投入运营的终极方式。它把 Claude Code 从个人工具变成工程系统中的核心、可审计、可自我改进的部分。

settings.json

最后,一些关键的  settings.json 配置,业余和专业工作都很有用:

  • •  HTTPS_PROXY /  HTTP_PROXY
    调试神器。用它检查原始流量,看 Claude 在发什么提示。对后台智能体来说,也是精细网络沙盒的强大工具。
  • •  MCP_TOOL_TIMEOUT /  BASH_MAX_TIMEOUT_MS
    我会调高这些值。喜欢运行长时间、复杂的命令,默认超时太保守。说实话,不确定现在有了 Bash 后台任务后是否还需要,但我保留着以防万一。
  • •  ANTHROPIC_API_KEY
    工作中我们用企业 API 密钥(通过 apiKeyHelper)。从按席位许可证转为按使用量定价,更适合我们的工作模式。
    • • 考虑了开发者使用量的 巨大差异(我们见过工程师间使用量差 1:100 倍)。
    • • 工程师能试非 Claude Code 的 LLM 脚本,都在单一企业账户下。
  • •  permissions
    偶尔自审允许 Claude 自动运行的命令列表。

核心要点settings.json 是高级定制的强大位置。

结论

内容很多,希望对你有帮助。如果还没用过 Claude Code 或 Codex CLI 这样的 CLI 智能体,值得试试。关于这些高级功能,好的指南很少,唯一的学习方法就是亲自上手。

相关 [claude code 经验] 推荐:

Claude Code 实战经验:深度使用每个功能

- -
本文翻译自 Shrivu Shankar 的文章 How I Use Every Claude Code Feature,发布于 2025 年 11 月 2 日. Claude Code 实战经验:深度使用每个功能 . 简评:这是一篇难得的深度实践文章. 作者既在个人项目中频繁使用 Claude Code,又在企业环境下为每月消耗数十亿 token 的工程团队构建 AI-IDE 工具,这种双重视角让文章兼具灵活性和严谨性.

如何使用claude code开发完整的响应式web应用

- -
Claude Code 是由 Anthropic 开发的一款智能编码工具,能够通过自然语言指令辅助开发者快速生成代码、优化工作流程并构建应用. 以下是一个基于 Claude Code 开发完整响应式 Web 应用的指南,结合了现代 Web 开发技术(如 React 和 Tailwind CSS),并通过实际案例展示具体步骤.

Claude Code发布4个月,用户已经11.5万了,开发者:200 美元/月不算贵

- - 机器之心
在「写代码」这件事上,大模型是真的在提高生产力,开发者也愿意花钱买时间. 都说「写代码」是当前 AI 大模型最有希望的应用,事实果真如此吗. 根据 Anthropic 最近公布的一项数据,他们的 Claude Code 已经吸引了 11.5 万名开发人员,并在一周内处理了 1.95 亿行代码. 而这款工具,才刚刚发布 4 个多月.

HTML5 Code Jam经验分享——IT’S COOL!!!(来自Rich团队)

- iDesperadO - HTML5研究小组
如题,就是这个活动:http://www.mhtml5.com/events/code-jam. 另外也秀一下我们的研发成果——网页版的大富翁:http://jinjiang.github.com/rich-game. 源码:https://github.com/jinjiang/rich-game.

Clean-Code: 注释

- We_Get - 博客园-首页原创精华区
别给糟糕的代码加注释-----------------重新写吧. 这是书中的关于注释一章的第一句话,怎么说呢,这句话个人感觉很对,但是实际上却很少这么做,. 糟糕的代码不是自己写的,别人写的代码,还是让别人自己去维护吧,出了问题也是别人的. 糟糕的代码目前可以正常工作,软件开发中有一条古老哲言:如果它能工作就不要动它,很多程序员都遵守这条准则.

聊聊Code Review

- - 梦想风暴
hopesfish评论《 那一点的调用》时,问了一个关于Code Review的问题:. 想请教一下,TW的筒子是如何做code reivew或者鼓励客户做code review的. 我在翻阅博主的帖子的时候,似乎对这块没有特别强调,而是更多偏重于TDD,我觉得TDD的问题是一碰到没有责任心的程序猿,就很容易流于形式了.

Code Review 从失败中总结出来的几个经验 - 小二十七 - 博客园

- -
资深的程序员都知道 Code Review 可以对代码质量,代码规范,团队代码能力提升带来很大的提升,还有著名的技术专家“左耳朵耗子”也说过:. 我认为没有 Code Review 的公司都没有必要呆(因为不做 Code Review 的公司一定是不尊重技术的). 出自《程序员的练级攻略 - 修养篇》.

Java Code Review清单

- - ImportNew
使用可以表达实际意图(Intention-Revealing)的名称. DRY(Don’t Repeat Yourself)原则,(拒绝重复). 用代码来解释自己的做法(译者注:即代码注释). *参考自: http://techbus.safaribooksonline.com/book/software-engineering-and-development/agile-development/9780136083238.

我的code review规则

- vento - 我的宝贝孙秀楠 ﹣C++, Lua, 大连,程序员
1) 是否有语法错误,编译错误,编译警告. 做法:下载最新代码,将编译警告级别提升到最高,检查output信息. 2)是否符合需求,完成requirement文档要求的内容,不能多,也不能少. 注意:即使发现有问题代码,如果与需求关联不大,不要涉及. 应该让每次enhancement和bug fix最简洁,牵涉范围最小,影响到组件最少.

Google Code Jam Japan開催

- Adam - スラッシュドット・ジャパン
あるAnonymous Coward 曰く、Googleによって毎年開催されているプログラミングコンテストGoogle Code Jamですが、今年は初めて日本人向けの日本語でのコンテストGoogle Code Jam Japanが開催されるようです(Google Japan Blog). 予選は10月1日にオンラインで開催され、予選開催中にも参加登録を受け付けるとのこと(スケジュール).