原文出处: https://spiess.dev/blog/how-i-use-claude-code
一个月前,我订阅了 Claude Max。在此之前,我已经使用包括 Claude Code 在内的 AI 代理一段时间了,但随着统一价格的推出,我的使用量猛增,它已成为我许多任务的日常驱动力。我发现自己现在去 VS Code 的次数少了很多。
由于 AI 代理目前对每个人来说都是新事物,我想分享一些我最近注意到模式可能会很有趣。以下是我如何使用 Claude code。
开始新对话 (Start New Threads)
如果说我希望你从这篇文章中学到一件事,那就是你应该更频繁地调用 /clear
。
AI 代理往往随着对话时间的延长而变得更不可预测。当你提出不同问题时尤其如此。我发现即使这意味着重复一些指令,创建一个新的提示通常会更有效。
一旦我开始更积极地这样做,我的结果就显著改善了。而且我绝对不是唯一一个提出这个建议的人。
创建精确的提示 (Create Precise Prompts)
我觉得这不言而喻,但是当你与一个患有失忆症的新毕业生(我喜欢这样想 Claude)一起工作时,写下你脑海中所有的上下文是很重要的。这很难,坦率地说,我自己在这方面也做得不太好,但是你能给 Claude 提供的上下文越多,它就会越有效。如果你正在考虑一些边缘情况,一定要向 Claude 提及。如果你记得“过去在这个代码库中,我们曾针对这类问题使用过类似的模式”,把它写下来!提示越精确,Claude 的表现就越好。读心术技术目前还没有实现。
尝试思考任何隐含的上下文。例如,如果你要求 Claude 创建一个现代设计,它可能不知道你所说的现代是什么意思。提供示例可能会更好(例如,创建一个类似 Linear 的应用程序 UI 设计)。
让 Claude Code 使用 Claude Code
你知道你可以将 Claude Code 的工具用作 MCP 服务器 (claude mcp serve
) 吗?当我发现这一点时,我研究了它公开了哪些工具,并注意到一个名为 Task
的工具。这个工具的前提是启动一个子代理,该子代理将拥有与主代理相同的工具访问权限(除了它不能生成另一个子任务),并报告结果。
知道这个功能可用在你遇到需要监督者处理更复杂问题时非常方便。以下是我最近如何使用此功能以四种不同角色对同一问题进行深入研究的示例:
1 | > 阅读当前目录中的文件,以推断构建 Tailwind Plus 组件的模式。你应该生成4个具有略微不同优先级的子任务(例如,设计颜色导出、可访问性导出、移动/响应式专家、整体风格专家)并比较它们的结果。 |
这太棒了,而且可以并行完成。这是一种保持主任务上下文窗口有序并让 Claude 保持专注的好方法。
告诉 Claude 去思考
就像我们这些血肉之躯的老人类一样,Claude 默认是懒惰的。例如,当你告诉 Claude 做某事时,它会选择阻力最小的路径。如果你告诉它至少做三件事,我敢打赌它一件多余的事都不会做。
对于使用扩展思维能力也是如此。为了获得更好的结果,尤其是在规划过程中,我建议告诉 Claude ultrathink
。
编辑之前的消息
每当你过于急切地点击发送,或者只是觉得之前的消息可以更精确以获得更好的结果时,你可以按两次 Escape
键跳转到之前的消息并分叉对话。我一直用这个方法来优化提示,或者只是让 Claude 再试一次。
哦,如果你想回到之前的状态,可以用 --resume
标志启动 Claude,以列出所有先前的对话线程。
Yolo 模式
这可能是我极不负责任的行为,但我现在大多使用 --dangerously-skip-permissions
运行 Claude(感谢 Peter 带坏了我)。并非所有事情都需要这样做,但是如果我让 Claude 处理一些长时间运行的任务,我真的不想每分钟都因为它使用了一个新的终端命令而不得不切换回它。
我在我的 zsh 配置文件中这样设置:
1 | alias yolo="claude --dangerously-skip-permissions" |
有趣的是,既然 Claude 可以为所欲为,我也更频繁地遇到速率限制配额警告了。
MCP 服务器
我个人对 MCP 服务器并不特别兴奋,因为它们没有真正给我带来任何价值。在大多数情况下,我发现它们只是用我大部分时间都不需要的东西消耗宝贵的 token。Claude Code 内置的工具对我来说已经足够了(尤其是在按照我这里概述的方式使用时)。
过去,我使用过 Playwright MCP。虽然看到 Claude 启动浏览器、点击按钮和截屏非常引人入胜,但我发现它只是快速填满上下文窗口,而并没有真正带来更好的结果。
Claude SDK
Claude 有一个 SDK。它非常强大,特别是如果你乐于处理 stream-json 输出格式的话。但即使对于小事情,能够直接将提示传递给 claude
并让它打印回回复也带来了极大的便利。
例如,我的路径中有一个 gcauto
可执行文件,它执行以下操作:
1 |
|
所以现在每当我提交东西时,我只需将它们暂存然后运行 gcauto
。
规划模式 (Planning Mode)
Claude Code 有一个内置的规划模式,当你按两次 Shift+Tab
时会触发。在这种模式下,Claude 不会写入你的文件系统。
不过,我个人喜欢用另一个模型进行规划,只是为了增加一点趣味性。在过去的几周里,我一直在 Google AI Studio 中直接使用 Gemini 2.5 Pro。我真的不知道这怎么可能,但我好像甚至不需要为此付费?
让 Claude 阅读文档 (Let Claude RTFM)
我一开始犯的一个菜鸟错误是告诉 Claude 用框架 x 建立一个新项目。当然,这行得通,但我注意到 Claude 经常使用过时的设置和项目结构,尤其是对于快速发展的前端框架!
我现在做的是让 Claude 先阅读手册。这可以通过不同的方式完成:
- 粘贴文档链接,让 Claude 先阅读。
- 让 Claude 找出最先进的技术。
- 使用
Task
工具让 Claude 对特定主题进行深入研究。
深度研究任务的示例如下:
1 | > 创建一个深度研究任务,以找出如何将网站从 tailwind 3 迁移到 4,然后向我展示结果的简短摘要。 |
语音输入 (Voice Input)
像 Superwhisper 这样的应用程序使口述提示变得非常容易。我发现当我想写一个较长的提示时,这非常有效,因为它能更快地将我的想法表达出来。
这对于任何 LLM 输入字段都非常有效,真的,因为 LLM 通常能够理解你的意思,即使转录质量差且充满错误。
尽早暂存,经常暂存 (Stage Early, Stage Often)
我在 Claude Code 中缺少的一个功能是自动创建文件系统快照的能力。我经常遇到 Claude 过于兴奋并开始进行大量更改而我并不希望它这样做的情况。如果在我已经获得一些好的更改之后发生这种情况,这可能会把工作目录搞得一团糟。
为了避免这种情况,我开始尽早并经常地暂存(即 git add
)更改。如果我对一次操作的结果满意,我通常会暂存所有内容,这样我就知道以后可以轻松地恢复到这个状态。
Git Worktrees
我对 Claude Code 非常着迷,以至于我现在在我的机器上为我从事的每个主要项目至少保留两个工作树。这使我可以在同一个仓库中让 Claude 处理两个不同的问题。
设置起来也非常简单!就像创建一个分支,但代码会放在不同的目录中。在你的 git 仓库中运行:
1 | git worktree add ../tailwindcss.com-2 chore/upgrade-next |
然后,瞧,你现在就有另一个工作目录让 Claude Code 尽情发挥了。
尝试一次性工作 (Experiment with One-Off Work)
有了 AI,代码变得非常廉价。这意味着你现在可以构建一些你只使用一次的东西,而不会对此感觉糟糕。任何你希望能够让你当前任务更轻松的东西都可以凭空创造出来。以下是我最近构建的一些东西的示例,这些东西在编码代理出现之前是绝对不值得我花时间的:
- 一个可视化我在工作中进行大规模迁移时当前进度的仪表板。
- 一个 Chrome 扩展程序,可以显示网站正在使用的 Tailwind CSS 版本(或者,天哪,它是否根本没有使用 Tailwind CSS)。
- 一个用于上传 Claude Code 对话记录以供公开共享的 CLI 和后端。
- 一个用于汇总我的 Claude Code API 费用以查看我从 Max 计划中获得了多少价值的 CLI(哦,太多了……)。
- 一个在 git GUI 中试验 Claude Code 的 Electron 应用程序。
如果可能,不要试图一次完成 (If Possible, Don’t Attempt to One-Shot)
我目前专注于一个大规模的更改,需要在此过程中接触许多 Tailwind Plus 组件。我最初幼稚的想法是创建一个包含大量细节的、经过深思熟虑的完美提示,这样 AI 肯定可以一次性完成所有这些工作……这肯定是可以实现的,对吧?
嗯,剧透一下,我用这种方法惨败了。它不仅没有按照我的意愿完成任务,而且还使我无法审查更改或进行任何有意义的修改。我不得不重新开始。
这次我首先向 Claude Code 询问了有关这些问题。在编写任何代码之前,我们讨论了可能的更改。只有当我确信它知道我想要什么时,我才让它更改一个组件。经过一些测试和反馈后,我让它再做两个。然后再做五个,直到最后我才让它扩展开来,完成剩余的工作。
虽然这显然不如创建一个完美的提示那么引人注目,但它让我更快地达到了最终结果,并且具有更紧密的反馈循环和监督。与手动在数百个不同组件中进行此更改相比,我仍然节省了大量时间。
这很可能是我操作不当的问题。我看到很多人声称他们成功地完成了一次性的大型任务(其中一些人说 Claude 可以连续工作数小时)。然而,根据我自己的经验,错误会迅速累积,LLM 经常会在上下文窗口不断增大的情况下失去思路(即使是进行了大量的子代理调用,甚至尝试了 Gemini 2.5 Pro)。如果有人能与我分享他们的秘诀,我会非常高兴!
自主反馈还是人机回圈? (Autonomous Feedback or Human in the Loop?)
与上述问题相关,这也是我仍在努力解决的一个领域。每当我看到人们称赞 AI 代理时,他们都会提到一些自主反馈循环的重要性,以便 LLM 可以自行改进结果。
然而,我还没有能够有效地做到这一点。当我尝试设置单元测试或 linter 反馈时,Claude 会阅读它,然后表示一切正常,而实际上仍然存在许多问题/警告。当我设置它以便它可以导航到页面并截屏时,上下文窗口很快就充满了 token。可以说,我的体验并不好。
我更喜欢自己运行开发服务器。每当 Claude 回复我时,我会自己查看一下,然后要么按原样复制粘贴任何最终的堆栈跟踪,要么给出一些关于我希望如何更改的提示。我个人认为这种方法更有可能让我得到我想要的结果。
尽早中断,经常中断 (Interrupt Early, Interrupt Often)
每当我看到出现问题时,我通常会立即按 Escape
键中断 Claude,让它恢复最新的更改,然后引导它朝着我想要的方向发展。当然,这只有在你一直盯着看的情况下才有效,坦率地说,我经常不这样做。
配置你的终端 (Configure Your Terminal)
Claude Code 有一个隐藏的 /terminal-setup
命令,它会查看你当前的终端设置并进行一些更改,例如允许使用 Shift+Enter
添加新行或注册正确的提示音类型。虽然我没能用 Warp 解决换行的问题,但现在每当 Claude 需要人工输入时,我的终端都会发出提示音。
连接你的 IDE (Connect Your IDE)
另一个相对较新的功能是,你可以连接 Claude 以查看你在 IDE 中打开了哪些文件,并读取 linter 警告等。这可以在你从 IDE 的终端内运行 claude
时设置,或者通过运行 /ide
命令来设置。如果你想告诉 Claude “修复我的 linter 问题”,这会非常方便。
自定义命令 (Custom Commands)
你可以在 Claude Code 中创建自定义斜杠命令。如果你发现自己不止一次编写类似的提示,这可能是你节省更多时间的机会。
我设置了一些东西来清理 Claude 非常急于创建的临时脚本或辅助文件,不管好坏。
将图片粘贴到 Claude (Paste Images into Claude)
你可以将图片粘贴到 Claude Code 中。只需直接复制图片或将文件拖到终端中,它就会作为附件添加到你的下一条消息中。当我想要进行一些小的视觉更改时,我有时会使用这个功能。
结论 (Conclusion)
Claude Code 从根本上改变了我处理许多编程任务的方式。虽然它并不完美,需要调整你的工作流程,但生产力的提升是实实在在的。关键在于找到自动化和人工监督之间的正确平衡,并愿意尝试不同的方法。
随着 AI 编码助手的不断发展,我预计这些模式中的许多都会发生变化。但就目前而言,这些技术使我的日常编码生活效率显著提高,而且,恕我直言,也更有趣了。