与 Boris Cherny 一起打造 Claude Code
与 Boris Cherny 一起打造 Claude Code
摘要
- Claude Code 现在负责编写 Anthropic 约80%的代码,公司内部技术员工的采用率实际上已达100%,销售团队约一半、财务团队全员也在使用。 Cherny 每天提交20–30个 PR,其中“每一个、100%”都由 Opus 4.5 和 Claude Code 编写;按这个节奏持续一个月,只出现了“可能两个 bug,而如果我自己手写,可能会有20个”。
- Opus 4.5 是能力阈值,而不是渐进式斜坡:“开关是瞬间切换的”——Cherny 直接卸载了 IDE。 连续一个月里,他没有手动编辑过一行代码。对所有押注 AI 编程护城河的人而言,推论是:模型升级可能重置整个打法。“旧模型上有效的想法,新模型上可能无效”——因此,每隔几个月重新尝试失败过的想法,如今是理性的做法。
- 验证正在成为新的瓶颈,也是人类仍将长期承担的角色:Anthropic 的每个 PR 都会在 CI 中接受 Claude 审查,它“可能能抓住约80%的 bug”;但由于“我们的主要客户群是企业”,上线生产环境前仍由人类批准全部变更。 通过 lint、类型检查器,以及带并行去重 agent 的 best-of-N,团队又把确定性工程化地加了回来。
- 产品架构的核心判断是:不要把模型关进盒子里:Claude Code 的设计押注是不对模型设限。 RAG(一套本地向量数据库)被弃用,因为“Agent-X search 的表现胜过一切”——它其实“只是 glob 和 grep 的 fancy 说法”。持续兑现回报的押注是:“让模型做它自己的事。”
- Cowork 的起跑增速比 Claude Code 更快——它基于同一套 agent SDK,在约10天内完成,目标是那些已经在使用 Claude Code 的非工程师(监控番茄植株、找回婚礼照片)。 Claude Code 本身“并不是一夜爆红”;它在5月、Opus 4 / Sonnet 4 发布后才迎来拐点。新的 agent team(swarm)默认选择加入,部分原因是它们“会消耗大量 token”——这本身就是让它们采取 opt-in 的理由。
- 宏观叙事是印刷术:印刷材料的成本在30–50年间下降约100倍,产量增长约10,000倍,抄写员“从此不再是抄写员,但出现了一个作家和作者的类别……文学市场大幅扩张”。 Cherny 对赢家的判断是跨学科通才——“今年会属于通才”——以及“ADHD 之年”,因为如今的工作是管理并行运行的 Claude,而不是深度投入单线程编码。
精读
1. 编码是手段,不是身份——从 blink tag 到 assembly
- Cherny 的起点极其务实:约13岁时,他因为 eBay 商品页允许使用 HTML、blink tag 能让 Pokémon 卡片以“约99美分而不是49美分”卖出,才开始学 HTML。后来他又写 TI-83 程序帮助自己通过数学考试:先是硬编码答案,再到求解器;到了8年级或9年级,他进一步从 BASIC 下沉到 assembly,让程序运行得更快,还做了一根串行线缆,让全班都拿到了 A。
- 他明确总结过这条主线:“我从没想过编码会成为一份职业……编码是用来构建东西、做出有用东西的手段。”他学的是经济学,后来辍学创业;16岁做自由网页开发拿到的第一笔工资,全花在了一把电吉他上。
2. 骑摩托去找用户——Agile Diagnosis 的敏捷诊断课
- 在 YC 时期的医疗创业公司 Agile Diagnosis(约2011–12年),DAU 一直不增长,于是 Cherny 骑摩托去了 UCSF,跟着医生工作,发现医生每位患者之间只有5分钟,而启动一台老旧的 IE6 电脑、再登录系统,就已经把这5分钟耗光了。团队重写 Android 版本仍然失败:跟在主治医生身边的住院医生“不想被人看到自己在用手机”。真正的阻碍是社交场景,而不是软件。
- 他提炼出的普适经验是:“你不可能只有一个大想法,因为这个想法很可能是错的。所以你要提出假设……然后看看什么才是对的。”找到产品市场匹配“总是令人意外”——这套习惯后来反复出现在 Claude Code 的故事里。
3. Meta:代码质量值两位数生产力,也推动了 RTO
- 7年时间、4次晋升:先在 Facebook Groups 做技术负责人,随后因为妻子的工作搬到日本奈良,加入 Instagram(时差约12小时)。两边的技术栈反差鲜明:Facebook 拥有“全世界最好的 Web 服务技术栈”——Hack、HHVM、GraphQL、Relay、React;Instagram 则是“类型检查器无法工作的 Python”。于是他转去 Dev Infra,着手修复这套基础设施。
- 最终,他在“Better Engineering”项目下负责 Meta 全公司的代码质量。这是 Zuck 推动的要求:每名工程师将20%的时间用于技术债务;在 Facebook 的规模上,每年要完成数万次迁移。因果推断研究发现,代码质量对工程生产力的贡献“类似两位数百分比”;同一分析中的相关性也“部分推动了”Meta 的回办公室决策。
- 用他的话说,这件事今天之所以重要,是因为一个只迁移了一部分的代码库会同时伤害工程师、新员工和模型:“作为一个模型,你可能会选错东西……所以开始一次迁移后,一定要确保把它完成。”
4. Anthropic 的第一个 PR:因为是手写的而被拒
- Cherny 选择 Anthropic,是因为安全使命:“我是重度科幻读者……我只是知道这东西可能造成多严重的后果。”他的第一个 pull request 是手写的,“因为我以为代码就该这么写”,结果被带教伙伴 Adam 拒绝;Adam 把他指向 Claude Code 那个粗糙的 Python 前身——启动需要40秒,还不是 agent,但“如果你非常仔细地写 prompt,并且恰到好处地控制这个工具,它就能替你写代码”。
- 在花了半天时间反复调整 flag 后,“它一次就写出了”一个能工作的 PR——这是他第一次“感受到 AI”的时刻,大约发生在2024年8月至9月:“我以前习惯的是 tab 补全……完全不知道它竟然可以直接替我做出一个能工作的 pull request。”
5. “模型就是想用工具”——起源与 bitter lesson 的推论
- Claude Code 最初只是 Cherny 为了学习 Anthropic 公共 API、独自做出的 bash 聊天机器人——“因为我当时以为 AI 就是这样”。工具调用上线后,他只给模型一个 bash 工具,然后问它自己在听什么音乐;模型写了一个 AppleScript 查询播放器,并且“一次就完成了”,很可能用的是 Sonnet 3.5。“这是我第二次感受到 AGI 的时刻……模型就是想用工具。”
- 由此产生的设计哲学,是本期最值得引用的工程判断:其他人都把模型当成大型程序里的一个桩模块。这个框架是错的。“模型是它自己的东西。你给它工具……但不要把它变成更大系统中的一个组件。”他称之为 bitter lesson 的推论:“让模型做它自己的事。不要试图把它关进盒子里。”
6. 为了在真实世界研究安全而发布——随后曲线垂直上升
- 团队内部关于是否发布的争论,最终以安全为理由得到解决:对齐和机制可解释性研究模型层,评测则把模型放进“培养皿”;但只有发布出去,才能观察它在真实世界中的行为——“事后看,这完全是正确的决定。”
- 在与 Mike Krieger 和 Dario 参加发布评审时,内部采用率曲线“简直是垂直的”,Dario 于是问:“你们是在强迫大家使用吗?”Cherny 回答:“没有。我们提供这个工具。大家用脚投票。”如今,技术员工日常使用率约100%,非技术员工的使用率“已经非常接近100%”,销售团队约一半;Anthropic 全部代码中约80%由它编写。
- Cherny 对产品在研究型实验室中作用的框架是:“产品有点像挂在旁边的东西。产品存在,是为了让我们更好地服务研究,也让模型更安全。”
7. Opus 4.5 翻转开关:卸载 IDE、每天20个 PR、零手动编辑
- “我们开始使用 Opus 4.5 时,开关是瞬间切换的……我不再需要打开 IDE。我直接把 IDE 卸载了。”直到一个月后,他才意识到自己已经不再使用 IDE。12月的一次“编码假期”里,他边旅行边在欧洲各地生活,每天提交10–20个 PR,没有一个经过手动编辑;整个月大约只有2个 bug,而他估计如果由自己编写,会有20个。
- 主持人坦白说,在熟悉的技术栈里,模型写出的代码和他自己一样好,在陌生技术栈里甚至更好;Cherny 则进一步说:“我老实讲,它写的代码比我更好。”这也不同于他在 Instagram 时期的状态——那时他按代码提交量计位居前2或前3,其中很多是迁移工作;如今每天20–30个 PR 都是实质不同的工作,“Claude 直接把那些迁移做了,我不需要参与。”
8. 工作流:plan mode 下并行运行5个 Claude,三分之一代码来自手机
- 他说自己的配置是——同时也强调 Claude Code 刻意保持可 hack,因为“没有两个工程师会有完全相同的工作流”:5个终端标签页、5个并行的仓库 checkout,通常在不同 Claude 会话之间轮流切换;超出的任务则交给桌面端应用,后者原生支持 Git worktree。
- 核心纪律是迭代计划,而不是迭代码。“有了4.6之后……只要计划足够好,它几乎每次都能一次性完成实现。”因此,工作循环是:在第一个标签页发出 prompt,趁它运行时切到第二个,收到通知后再回来。
- 真正出乎意料的爆发点是移动端:他每天早上通过 iOS 应用启动 agent,环境则由 session-start hook 配置。“如果6个月前有人告诉我,我可能会在手机上写三分之一、一半的代码,我会觉得太疯狂了。但我今天就是这么做的。”
9. 代码审查:Claude 能抓住约80%的 bug,但仍由人类签字
- 他在 AI 之前的做法已经接近自动化:把每条 review 评论记录在电子表格里,任何累计3–4次的问题就变成一条 lint 规则。如今的循环是:“当同事提交 pull request,而我觉得这件事可以写成 lint 规则时,我就直接 @Claude:请为此写一条 lint 规则。”这套流程通过 GitHub 应用完成,他“每天都会”使用。
- 当前的流水线是:Claude 在本地运行测试;随后,一个未经 prompt、在 Opus 4.5 中自然出现的行为是,它会在子进程中自行启动,端到端验证自己——“嘿,我还正常工作吗?”接着,基于 agent SDK 的 Claude 会在 CI 中审查 Anthropic 的每个 pull request,抓住“可能80%的 bug”;上线生产环境前,始终由人类工程师进行第二轮审查。
- 对于主持人提出的 LLM 作为审查者存在非确定性问题,他的答案是:类型检查器、lint、构建等确定性层继续保留;同时通过 best-of-N 提高 Claude 的确定性。开源的 code-review skill 会“启动并行 agent 来做事,再启动并行去重 agent 检查误报”。实现 best-of-N,本质上就是一句话:“Claude,启动3个 agent 来做这件事。”他会在哪里跳过人工审查?个人副项目:“你可以直接 YOLO 到 main。”早期内部版本的 Claude Code 确实直接提交到 main,但面对企业客户,人类“至少目前仍要留在流程里”。
10. 简单架构,瑞士奶酪式安全——三层拦截 prompt injection
- 架构被刻意做得很简洁:“核心查询循环,加上几个工具……这些工具我们一直在删。”真正复杂的是安全,而安全从来不是单一机制:“它总是瑞士奶酪模型……你要计算那个概率里有多少个9,再选择阈值。”
- 针对网页抓取中的 prompt injection,团队设置了3层防护:对齐训练——“Opus 4.6 是我们发布过的对齐程度最高的模型,因为我们教会模型更能抵抗 prompt injection”;运行时分类器,对看起来遭到注入的请求进行拦截并重试;以及由 sub-agent 先总结抓取内容,再把结果交给主 agent。
- 权限同样是分层处理:分类器、静态分析、用户 allowlist;默认策略偏保守,因为 Unix 的边角知识会带来风险:即使
find和set也有能够执行任意代码的 flag。权限提示的设计可以追溯到2024年9月最初的内部版本;当安全团队质疑让模型运行 bash 是“不可解决的问题”时,Cherny 与联合创始人 Ben Mann 一起头脑风暴,得出的原则是:“如果你不确定,就问人类。”
11. RAG 被删除:“Agent-X search 只是 glob 和 grep 的 fancy 说法”
- 早期 Claude Code 使用本地 TypeScript 向量数据库和云端 embedding,效果“相当不错”,但索引会与刚写入的代码发生偏移,还带来棘手的权限问题:“如何确保一个恶意的 IT 人员无法访问别人的数据?”在尝试递归式模型索引以及普通的 glob/grep 后,“Agent-X search 的表现胜过一切”——而它“只是 glob 和 grep 的 fancy 说法”。这个想法部分借鉴自 Meta 工程师:由于点击跳转定义坏了,他们会在全局索引里搜索
foo(。 - 关于迭代成本,他得到的元层经验是:“从统计上看,我们写的代码几乎全部都会被丢弃。”就连 spinner 也经历了约100次迭代,其中约80次被丢弃——“写代码、试东西、看看感觉好不好,实在太容易了。”
12. 没有头衔,没有 PRD——展示,而不是写文档
- Anthropic 的每个人都叫“技术员工”,Cherny 认为这是一种结构性乐观:如果 Slack 名字下面写着“软件工程师”,“我不会向你提产品问题。但当每个人的头衔都是技术员工时,默认假设就是每个人什么都做。”他认为这“预示了未来……每个专业都在朝这个方向走”。
- PRD 几乎不存在——“最好直接发一个 PR。”经济账已经翻转:“过去构建成本很高,所以开枪之前必须非常谨慎地瞄准……现在构建成本很低,但我们也不知道瞄准的方向。”仅 agent team 一项,几个月里就经历了“可能数百个版本”的原型迭代;“如果一开始从 Figma 的静态 mock 开始,我们根本不可能把它发布出来。”
- 其底层是对自身判断的克制,他原话是:“我个人大概有一半时间是错的……我的大多数想法都很糟糕,至少一半很糟糕。而且直到我尝试之前,我不知道是哪一半。”压缩版文件读取视图经历了约30个原型、一个月内部 dogfooding、十几个 bug 和十几次调整,随后在 GitHub issue 上直接与持不同意见的用户公开迭代。
- 采用率通过传染式扩散:一名数据科学家用 Claude Code 跑 SQL,并在终端里生成 ASCII 图表;“第二周,整排数据科学家都开始运行它。”如今团队里,“工程师写代码,工程经理写代码,设计师写代码,数据科学家写代码,财务负责人也写代码。”
13. Plugins 是一个周末的 swarm 做出来的
- 最直观地展示这一趋势的是:工程师 Daisy 拿了一个早期版本的 Swarms、一个容器和处于危险模式的 Claude,对它说:“你的任务是构建 plugins。提出一份规范,创建一个 Asana 看板,拆分成任务。”整个周末,它启动了几百个 agent,创建了100个 Asana 任务,并完成了实现——“这基本就是我们最终发布的 plugins 版本。”
- Cherny 顺带谈到工具:Asana 这类协作系统“过去是给人用的,但我认为现在同样是给模型用的”。他自己不使用任何 ticketing system。
14. Cowork:10天完成,增长曲线比 Claude Code 更陡
- 构建 Cowork 的信号来自潜在需求——非工程师“为了使用一个并非为他们设计的产品而不断绕路”:有人用 Claude Code 配合摄像头监控番茄植株,“天啊,我太开心了,我们的植物发芽了”;有人从损坏的硬盘中找回婚礼照片;Anthropic 自己的财务和销售团队也在使用。几个人在约10天内完成了产品,完全用 Claude Code 构建,技术栈是 Electron/TypeScript;Cowork 创造者 Felix 曾是 Electron 的早期工程师。
- 真正复杂的地方不在 UI——它只是 Claude 桌面应用中的一个 tab,底层使用同一套 agent SDK——而在于面向非技术用户的安全:随产品发布的虚拟机、操作系统级集成,避免用户误删家庭照片;后端分类器;以及重新设计的权限模型。由于非工程师的工具存在于浏览器而不是 CLI 中,权限模型还要与 Chrome 扩展配合。Cherny 自己的用法是让 Cowork 并排打开团队状态表格和 Slack,再向工程师询问更新——“它直接一次完成。”
- 值得标记的商业信号是:“Claude Code 刚推出时,实际上并不是一夜爆红……第一个大的拐点是在5月,当时我们发布了 Opus 4 和 Sonnet 4。”相比之下,Cowork“比 Claude Code 刚开始时的增长轨迹陡得多。它直接就成了爆款——我确实没想到”。先支持 macOS,Windows “可能在这期播客上线时”就会推出;背后的产品哲学是“我们总是在产品还没完全准备好时就提前一点发布”。企业隐私则是一把双刃剑:“如果有人报告 bug,我实际上无法调出你的日志。”
15. Agent team:不相关的上下文窗口作为 test-time compute
- 刚发布的 agent team(swarm)背后的概念是“不相关的上下文窗口”:sub-agent 从零开始,只知道自己的 prompt,不像在同一个窗口中处理第二个任务。“当窗口彼此不相关时,投入更多 token 会带来更好的结果。这实际上是一种 test-time compute。”
- 团队从约2024年9月至10月开始实验,但“到了 Opus 4.6,一切才真正连上了”——内部评测显示,对于复杂度“超过单个 Claude 能够构建范围”的任务,效果明显提升,于是触发了发布。它被刻意作为 opt-in 的研究预览,因为“会消耗大量 token。不是每个人、每次都想用它。”团队也没有规定统一配置——“很多魔力来自不相关的上下文窗口……我不认为存在一种适用于所有情况的配置。”
16. Karpathy 问题:初学者心态是一项核心能力
- 谈到 Karpathy 那篇“作为程序员从未感觉如此落后”的文章时,他说:“这件事真的让我很挣扎。模型进步太快,旧模型上有效的想法,新模型上可能无效……没有多少其他技术会这样。我确实没有太多经验可以借鉴。”他的答案是“智识上的谦逊”,以及永久保持初学者心态。
- 实际的反转是:过去,“我们试过了,没用”这种 gatekeeping 可能成立;现在,“每隔几个月重新尝试同一个想法,其实一点也不疯狂,因为模型在进步,而它可能突然就能用了”。一个例子是开发者关系工程师 Tariq 让 Claude Code 自己生成发布视频——“这不是我会尝试的事,因为我不会觉得模型已经准备好。但他直接做了,而且居然就能用。”
17. 悲伤、抄写员与印刷术
- 主持人直接说出了这种失落:身份认同、招聘流程和薪酬体系,都建立在编码很难这件事上,“而现在感觉有什么东西被非常迅速地夺走了”。Cherny 没有回避:他写过第一本 O’Reilly TypeScript 书,在一个小镇书店里发现它被翻译成了日文——“最酷的时刻;然后我意识到,我已经完全不记得 TypeScript 了”;他创办了世界上最大的 TypeScript meetup,直到今天仍然“总是先从类型开始思考”。“这里面确实有美感,也当然有艺术。但归根结底……它是达成目的的手段,而不是目的本身。”
- 他用来描述当下的隐喻是15世纪的印刷术。抄写员占人口比例不到1%,为经常不识字的国王工作;随后印刷材料成本在接下来30–50年里下降“约100倍”,产量在接下来50–100年里增长“约10,000倍”,而识字率达到约70%还用了另外200–300年,因为学会阅读很难。“如果当时人们要预测印刷术出现后会发生什么,没有人会预测到麦克风会成为一种东西。”
- 充满希望的部分是:抄写员“从此不再是抄写员,但出现了一个作家和作者的类别。这些人如今存在。而他们存在的原因是文学市场大幅扩张”。主持人进一步延伸:不识字的国王雇佣抄写员,与企业主雇佣工程师,本质上都对应着同一个关系——让别人表达自己无法亲自构建的东西。
18. 通才之年——以及他对安全问题的改观
- 过去一年里,他修正了一项判断:“老实说,我不确定安全问题到底有多大……但从内部看到过去一年出现的新风险后,我对它的担忧大幅增加。现在,安全是最重要的事。”
- 最该放下的能力是:“对代码风格和编程语言抱有非常强的意见……模型可以使用任何语言,如果你不喜欢,它也可以直接替你重写。”仍然有价值的是做事有条理、以假设驱动——尽管“我不知道6个月后你是否还需要这种能力”——以及对自己职责边界之外保持好奇。他预测,下一个万亿美元创业公司“可能只有1个人”,同时思考工程、产品、商业和设计。“今年会属于通才。”
- 他最具挑衅性的判断,同时也加了“对社会而言可能有一半危险”的限定:“这就像 ADHD 之年。”对他而言,工作已经变成在不同 Claude 之间来回切换,“不再那么强调深度工作,而是看我有多擅长上下文切换”。主持人补充说,真正的元技能是适应力,因为“无论下一个模型是什么,它都会再次改变”。他推荐的书包括 Cixin Liu 的短篇小说、Stross 的《Accelerando》(“本质上是未来50年的产品路线图”),以及《Functional Programming in Scala》——要把练习做完;他所有练习“可能都做过3遍”。