[BidClub_]
The Pragmatic Engineer · · 98 分钟

与 Boris Cherny 一起打造 Claude Code

Gergely OroszBoris Cherny

YouTube
TL;DR
  • 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 的边角知识会带来风险:即使 findset 也有能够执行任意代码的 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遍”。
Gergely Orosz

You wrote the first ever TypeScript book with O’Reilly.

Boris Cherny

Yeah. I found that book translated into Japanese in this little town in Japan. That was just the coolest moment. Then I realized I didn’t remember TypeScript at all.

Now we’re at the point where Claude Code writes, I think, something like 80% of the code at Anthropic on average. I wrote maybe 10, 20 pull requests every day. Opus 4.5 and Claude Code wrote 100% of every single one. I didn’t edit a single line manually.

Gergely Orosz

Andrej Karpathy posted that he’s never felt as much behind as a programmer as he does now. This is something I really struggle with. The model is improving so quickly that the ideas that worked with the old model might not work with the new model.

One metaphor I have for this moment in time is the printing press in the 1400s, because there was a group of scribes who knew how to write. Some of the kings who employed the scribes were illiterate. If you think about what happened to the scribes, they ceased to be scribes, but now there’s a category of writers and authors. These people now exist, and the reason they exist is because the market for literature expanded a ton.

How did you get into tech, software engineering, and coding in general?

Boris Cherny

It starts a while back. I think there were 2 parallel paths that crossed. When I was maybe 13, I started selling my old Pokémon cards on eBay. I realized that on eBay, you can actually write HTML. I was looking at other people’s Pokémon card listings, and I realized some of them had big colors and fonts and stuff like this.

Then I discovered the blink tag.

Gergely Orosz

What was the name? Was it the blink tag?

Boris Cherny

I put the blink tag on it, and I could sell my card for 99 cents instead of 49 cents or whatever.

The second thing was—this was also, I think, sometime in middle school. We had these old TI-83 graphing calculators. We used them for math. What I realized was that I could get a better answer on the math test if I programmed the answers to the math test into my calculator. So I wrote these little programs.

You just program the answers, and then the test got harder, so I had to program solvers instead of the actual questions because I didn’t know what the coefficients and stuff would be ahead of time. Then the math got more advanced the next year, so I had to drop down from BASIC to assembly to make the program run a little bit faster.

Gergely Orosz

Oh, so in high school you dropped down to assembly?

Boris Cherny

I think this was middle school or high school. It may have been 8th or 9th grade or something like this.

Then I realized that everyone in my class was starting to realize that I had the solver, and they got kind of jealous. So I bought this little serial cable so I could give it to them, too. Then, on the next math test, everyone in the class just got A’s. The teacher was like, “What’s going on?” Eventually, she realized it. She was just like, “Okay, you get away with it once, and knock it off.”

But for me, it was very practical. In school, I studied economics. I actually dropped out to start startups, and I never thought that coding would be a career at all. It was always very practical to me. Coding is a means to build things and to make useful things.

The first startup was—I think my friends and I were trying to get weed. So we started this weed-review startup. We made a website. We called different dispensaries, I think, and then we tried to get weed samples so we could review them for them. It actually kind of blew up.

Then I got more interested because, at the time, no one was testing this stuff. So I got into chemical testing and chemical analysis. After this, I did a bunch of other startups. Then I joined Y Combinator pretty early, and I was the first hire of this Y Combinator startup up in Palo Alto after that.

Gergely Orosz

How did you decide to go from one startup to the other?

Boris Cherny

Kind of vibes, I’d say. Startups are never a linear path. You always pivot. You have to figure out what the market wants and what users want, and it’s never the thing that you think. You always try things, but the idea is always a hypothesis, and then almost always you have to pivot once, twice, or 3 times.

At this medical software company, this was called Agile Diagnosis. This was an early Y Combinator company, back in maybe 2011 or 2012. It was medical software for doctors. The idea was that there were clinical decision protocols, and they varied a lot from hospital to hospital.

Our idea was that there was 1 hospital in Chicago that had a really great protocol specifically for cardiac symptoms. So we thought, wouldn’t outcomes be great if every hospital in the US used the same protocol? We tried to standardize it, and we made this decision-tree software for doctors to use.

I wrote some of the software. The team was just a few of us. It was a pretty small team. The software ran in a web browser, and I remember this was back in the Internet Explorer 6 days. That’s what hospitals were using. I wrote this SVG renderer because it was a visual decision tree.

We launched it, and then we had a DAU chart. The DAUs were flat, and we couldn’t figure it out. We were piloting it with a few hospitals at the time. We were based in Palo Alto, and we were piloting it with a few hospitals, including UCSF.

I rode a motorcycle at the time, so I rode up to UCSF and shadowed doctors for a couple of days just to see how they actually used this. I realized that doctors didn’t have time to sit down and use a computer because you’re seeing a patient, and then you have maybe 5 minutes until the next patient.

In those 5 minutes, you have to walk down the hall, go to the computer station, and open up this totally legacy computer. By the time it boots up, that’s 3 minutes. Then you open up Internet Explorer 6. That takes 30 seconds. Then you have to open up this app that we built and sign in. Your 5 minutes are up. You don’t even have time to use it.

So we rewrote everything to run on Android, and they still weren’t using it. The thing we realized was that doctors were walking around with a bunch of residents behind them. In this kind of situation, it’s a social situation. The thing that matters is that they’re seen as an authority. They don’t want to be seen on their phones.

Then we pivoted again. At that point, we thought, okay, maybe the doctor isn’t the target user. Actually, we wanted it to be used by maybe nurses or X-ray technicians or something like this. At that point, I left because this was actually pretty far off from what I wanted to do.

The most fun thing for me is finding product-market fit because it’s always surprising. You can’t have 1 big idea because the idea is probably going to be wrong. So you form hypotheses, follow them down, and see what’s right.

Gergely Orosz

I find it so interesting how you’re telling us this story, because behind a lot of success stories, we hear the success story, and we hear the path of how it went. But first of all, a lot of startups are like this, and second of all, what struck me is that you were hired as a software engineer, right?

This was back before product engineers or anything was a thing, which we’re now talking about. But you just rode your motorcycle, went there, shadowed the people, understood how they were using it and why they weren’t using it, and got ideas.

I feel this is what makes a great software engineer, back then and even today, right? You weren’t focused on the technology; you were focused on the outcome, though.

Boris Cherny

Yeah. Look, there are different kinds of engineers, and there are different ways to do it. Even on our team right now, I look at an engineer like Jarred Sumner, and he’s just an incredible technical mind. He understands systems better than anyone I’ve met. You need people like this.

You need people with this kind of depth. For me, engineering has always been a practical thing. For me, I've always been a generalist. It doesn't matter if I'm doing design, engineering, user research, or whatever.

My first job ever was when I was, I think, 16. I just wanted to buy an electric guitar, so I started freelancing. I was like, “Okay, I guess I'll make websites.” I think Fiverr wasn't a thing back then, so there were some other freelancing websites. I put up a website and started bidding on stuff. My first paycheck, I spent the entire thing on an electric guitar.

But it was very practical, right? When you're in this kind of setup, you have to do the engineering, the accounting, and the design, and you have to talk to customers. It's just always been like that for me.

1. Lessons from Meta

Gergely Orosz

After a couple of these startups, you ended up at Facebook, now called Meta. You spent 7 years there. Can you just talk us through what you worked on there and what you learned there? You've also had a very remarkable career growth, in terms of 4 promotions over 7 years. What do you take away from that experience?

Boris Cherny

I started on Facebook Groups. That was the first team I worked on. Vlad Kolesnikov hired me. I think he's actually still at Facebook. I think he's on some other team now. It was cool, actually. There was a big group of people I worked with who were these early JavaScript people, too.

I did a bunch of JavaScript stuff, and it's funny—I kept crossing paths with these people. Vlad worked on Bolt.js, which was the framework that powered Ads Manager and later became React.js. I kept crossing paths with these people, and later on there were a bunch more people like this.

Anyway, I was working on Facebook Groups. I was really excited about it because of this mission of connecting people to their community. This was the thing that drew me in. At the time, I was a big Reddit user. I became a Reddit user when I was a teenager because I didn't know anyone else who coded. Even in college, I didn't really know anyone who coded.

Honestly, I was always kind of embarrassed about it because I thought it was this nerdy thing. I thought it was this thing that I knew how to do, but I wanted to be a cool kid, and I couldn't tell people that I coded. It was very nerdy. At some point, I discovered there was a programming community on Reddit, and I was just shocked. There were other people who were into this thing. It was such a weird hobby, so niche. It was just so exciting to find like-minded people like this and get this connection.

I wanted to work on this. I wanted to contribute to this in some way. So I worked on Facebook Groups for a while. There were a bunch of different projects, and I'm happy to get into the details for any of these. Eventually, I became the tech lead for Facebook Groups and grew into this as the work grew.

The work really changed from building to a lot of document writing, coordination, and delegating to others. The culture was changing at the time, so this early Facebook culture was disappearing. Documents were coming in, alignment meetings were coming in, and there was a lot more work around foundational things like privacy and security. Honestly, early on, a lot of corners were cut in order to grow, but at some point you just have to pay that debt. That was the time when that happened.

Then I spent a few years at Instagram afterward. That was also a funny story. My wife got a job offer, and she was really excited about it. She came to me and said, “Hey, I got this offer, but we're going to move. Is that okay?” I said, “Yeah, that's fine. I work in tech. We can work remotely anywhere. Where's the job?” She said, “It's in Nara.” I said, “Where's that?”

Nara is rural Japan, and this was a different time.

Gergely Orosz

Different time zone, yeah.

Boris Cherny

This was 12 hours or something of a difference.

Gergely Orosz

Something like that, yeah.

Boris Cherny

It was like 2021.

Gergely Orosz

Wow.

Boris Cherny

Then I tried to find a team that would sponsor me, because there were these arcane HR rules about the time zone you had to be in, the team you had to be colocated with, and so on. There was a little nascent team for Instagram in Tokyo. Will Bailey was running the team. He was also the guy who made Instagram Stories, so he was my manager for a while. We decided to grow that team together, and I worked remotely from Nara while most of the team was in Tokyo.

During this time, I was hacking on Instagram, and the stack was just insane. Facebook had the single best web-serving stack in the world. The way that everything was optimized—from the Hack language to the HHVM runtime, to GraphQL as the transport layer, to the client libraries like Relay and all the rest of the stuff—it was just amazing. And React. There was no other development stack in the world that was this good. It was just fully optimized.

Then I went to Instagram, and it was Python, where the type checker didn't work. Click-to-definition didn't work. It was this hacked-together Django, and then a fork of the CPython runtime. Nothing really worked.

I joined the Labs team in Japan. The idea was to find the next big thing for Instagram. We tried some stuff, but what I very quickly realized was that I was just not effective at working on the stack because it was such a terrible stack. So I went and started working on Dev Infra because we needed to fix it.

There were a few projects that we worked on. One was migrating from Python to the big Facebook monolith. Another one was migrating Instagram to GraphQL. These projects are actually in progress. They're things that involve hundreds of engineers and many years of work. It's a big codebase. It's a big migration.

Gergely Orosz

Now it's faster with the tools that we have—the AI tools—and migrations are a pretty good use case for them, though.

Boris Cherny

Yeah, it's the perfect use case for it.

I started getting deeper into this. By the time I left Instagram, I was working on Dev Infra and leading a bunch of these migrations. That's also where I intersected with Fiona Fung, who is now the manager for the Claude Code team. I worked with her, and she was such an amazing leader. She had this incredible depth and history in tech. I thought, there's no better manager for this team.

Then I also started working on code quality. The work on Instagram expanded a bit, and by the time I left, I was leading code quality for all of Meta. I was responsible for the quality of the codebases across Instagram, Facebook, Messenger, WhatsApp, Reality Labs—kind of all these codebases.

At Meta, it was a program called Better Engineering. The idea was—I think it started in 2016 or 2018 or something—but Zuck mandated that every engineer at the company spend 20% of their time fixing tech debt.

Gergely Orosz

Oh, interesting.

Boris Cherny

Mhm. Some of this is bottom-up, where a team knows best the tech debt that it has to fix. Some of it is top-down, where you need to do very big migrations, migrate to new language features or new frameworks, and things like this.

And at Facebook scale, there are tens of thousands of these migrations every year. I was leading all this, and I realized very quickly that it just needed a little bit more order to it. There were no goals, no one knew what the outcomes were, and there wasn't any tracking. So we developed a bunch of stuff. One of the ideas was a centralized way to prioritize the different code-quality efforts. The second thing was figuring out the impact of code quality on engineering productivity, which turned out to be significant.

Gergely Orosz

How did you measure? What did you find there?

Boris Cherny

There was a bunch of stuff. I think some of this has been published. I don't know if all of it has, but essentially, you try to do causal analysis and causal inference. This is the methodology. You try to figure out what the factors are that make engineers more productive. Some of it is code quality, and some of it is outside of code quality.

For example, Meta returned to the office instead of working from home. That was partially driven by this, because we found some fairly strong correlations that we thought were causal. Code quality actually contributes double-digit percent to productivity. It turns out even at the biggest scale.

Gergely Orosz

Yep.

Boris Cherny

About this, code quality actually contributes double-digit percent to productivity. It turns out even at the biggest scale.

Gergely Orosz

This is kind of comforting to hear because I think it's rare to have a place where you actually measure this, but I think we feel it. When you have a clean, modular codebase, it can get easier to work with, and I think reasoning could also be easier for LLMs to work with it. My hunch would be yes, it should be, right? But I think there's just very little data. That's the feeling that I would have.

Boris Cherny

Yeah, I think a lot of the big companies have published about this. I think Facebook published something, Microsoft publishes a bunch about this, and Google does, too. If every time that you build a feature, you have to think about whether you use framework X, Y, or Z, these are all options that you can consider because the codebase is in a partially migrated state where all of these are around the code somewhere, you're going to have a bad time as an engineer. As a new hire, you're going to have a bad time. As a model, you might just pick the wrong thing, and then the user has to course-correct you.

Actually, the better thing to do is just always have a clean codebase. Always make sure that when you start a migration, you finish the migration. This is great for engineers, and nowadays, it's great for models, too.

2. Joining Anthropic

Gergely Orosz

And then you joined Anthropic, and I've heard the story—which you can confirm or give more color to—that your first pull request was rejected by Adam.

Boris Cherny

He was my ramp-up buddy. So, I joined Anthropic. I was trying to figure out what to do next, and I met a bunch of people at all the different labs. Anthropic was just the obvious choice for me because of the mission. This is the thing that, personally, I know that I need the most. Also, just seeing all this change that's happening, it's important to have some sort of framework to think about this and to think about our role in it.

I'm also a really big sci-fi reader. That's definitely my genre. I'm a big reader. I have a giant bookshelf at home and stuff. I just know how bad this thing can go. I felt like this is a place that has serious thinkers. People are taking this very seriously and thinking about what we can do to make this thing go better.

When I joined Anthropic, I did a bunch of ramp-up projects, just various stuff that I was hacking on. I wrote my first pull request by hand because I thought that's how you write code. That used to be how you wrote code. But even at Anthropic at the time, there was this thing called Claude, and it was the predecessor to Claude Code.

It was super janky. It was Python, it took 40 seconds to start up, it was research code, and it was not agentic. But if you prompted it very carefully and held the tool just right, it could write code for you. Adam rejected my PR, and he was like, “Actually, you should use this Claude thing for it instead.”

I was like, “Okay, cool.” It took me half a day to figure out how to use this tool because you had to pass in a bunch of flags and use it correctly. But then it spit out a working PR. It just one-shotted it.

Gergely Orosz

Oh.

Boris Cherny

This was in 2024—September or August, something like that. I think, for me, this was my first feel-the-AI moment at Anthropic, because I was just, “Oh my God.” I didn't know the model could do this. I was used to tab completions, line-level completions in an IDE. I had no idea that it could just make a working pull request for me.

3. The origins of Claude Code

Gergely Orosz

Yeah, and then when you joined Anthropic, we've covered this in a deep dive, but we could recap briefly on how Claude Code came to be out of what seemed like a side project or just a cool hack.

Boris Cherny

Yeah, I started hacking on a bunch of different stuff. I was working on some things in product. I worked on reinforcement learning for a little bit just to understand the layer under the layer at which I was building.

This is still advice that I give to a lot of engineers: always understand the layer under. It's really important because that just gives you the depth, and you have a little bit more leverage to work at the layer that you actually work at. This was the advice 10 years ago. It's still the advice today. But the layer under is a little bit different now.

Before, it was, like, understand the JavaScript VM and frameworks and stuff if you're writing JavaScript. Now it's, like, understand the model. So, I was hacking on a bunch of different stuff. Some things shipped, and some things didn't ship.

At some point, I just wanted to understand the public Anthropic API because I'd never used it before. I didn't want to build a UI. I just wanted to hack something up quite quickly because we didn't have Claude Code back then. We were still writing code by hand.

I wrote this little Bash tool, and all it did was hit the Anthropic API. It was essentially a chat-based application, but just in the terminal, because that's what AI used to be. I still think about it: engineers are the first adopters. When we started to move out of conversational AI to agentic AI, it took a little bit, but engineers understood it pretty quickly.

I think now, when you ask non-engineers what AI is, they would say it's this conversational AI. It's a chatbot or something. That's why I'm actually very excited for Claude Cowork, this new product that we launched, because it's going to bring the same thing that engineers saw very early to everyone else.

When I think about Claude Cowork, I think back to this moment that we're talking about, very early on. Claude Code originally wasn't Claude Code. It was a chatbot, because that's what I thought AI was. But we had to figure out what the next thing was.

At the time, I built this chatbot. It was somewhat useful, but it was just a chatbot. The next thing I tried was getting it to use tools. Tool use had just come out, and I didn't know what it was. I was like, “What's the experiment?”

I gave it a single tool, which was the Bash tool, and I didn't know what to do with the Bash tool. I actually didn't know if it could even do this, but I asked it, “What music am I listening to?” It just wrote a little AppleScript program using osascript or whatever to open up my music player and then query it to see what music it was listening to.

It one-shotted this with likely Sonnet 3.5. This was actually my second feel-the-AGI moment very quickly after the first one. The model just wants to use tools. That's just what I realized: if you give it a tool, it will figure out how to use it to get the thing done. And I think at the time, when I think about the way that people were approaching AI and coding, everyone essentially had this mental model: you take the model and you put it in a box.

And you figure out what the interface is. How do you want to interact with this model? What do you need it to do? Essentially, if you have a program, you stub out some module, stub out some function, and say, “Okay, this is now AI.” Otherwise, the rest of the program is just a program.

This is just not the way to think about the model. The way to think about it is that the model is its own thing. You give it tools. You give it programs that it can run. You let it run programs. You let it write programs. But you don't make it a component of this larger system in this way.

This is a version of the bitter lesson. The bitter lesson is a very specific framing, but there are many corollaries to it. One of the corollaries is: just let the model do its thing. Don't try to put it in a box. Don't try to force it to behave a particular way.

Gergely Orosz

What were the first ways you saw this? Was it giving it tools, giving it access to Bash, then later to the file system, and then to more tools?

Boris Cherny

That's right. We gave it Bash, then—I say “we,” but it was just me for the first 3 months. Then the team grew. It was Bash and file edit; that was the second one.

Gergely Orosz

One of the interesting things we talked about last time, in the deep dive, is that when you built it and it started to actually write code with all the tools that you had, there was an internal debate inside Anthropic about whether you should just keep it to yourselves. It was suddenly spreading across engineering and making all of you a lot more productive, right?

Boris Cherny

Yeah, that's right. In the end, the decision was to release it so that we could study safety in the wild.

When you think about safety—and I keep talking about the word “safety”—the reason Anthropic exists as a lab is safety. This is the reason it was founded. This is the reason it exists. If you ask anyone at Anthropic why they chose it, it's because of safety.

If you think about model safety, there are different layers at which to think about it. There’s alignment and mechanistic interpretability. This is at the model layer. Then there are evals, and this is kind of like putting the model in a petri dish and synthetically studying it in this way.

Then you can study it in the wild and see how it actually behaves. You can see how users talk about it. You can see what the risks are in the wild, and you actually learn a lot this way. By doing this, we've been able to make the model much safer. In hindsight, it was totally the right decision.

Gergely Orosz

It's amusing to hear about it from your perspective because, from the outside, what I saw—and what a lot of engineers saw—was, “Oh, Anthropic released Claude Code. Oh, wow.” For the first release, I think it was with the Sonnet 4 release. Did it come out with Sonnet 4 originally or Sonnet 4.5?

Boris Cherny

I think it was Sonnet 4. That was the general availability in February, but I think it was a research preview before that.

Gergely Orosz

When it came out, my interpretation was, “Oh, this thing can write code pretty well.” Over time, it became a lot more capable. From our perspective, it was this really capable coding tool that we just started to adopt and use for all sorts of increasingly productive parts of our work.

It has become, I believe, one of the fastest-growing developer tools. I'm always surprised to hear the story that it actually came from research and the goal was to understand how people use the model. On the other hand, some startups have been deliberately trying to build developer tools to get adoption, and yet this research tool is getting a lot more adoption.

Boris Cherny

Anthropic is a research lab. We're a safety lab. Product is this kind of thing tacked onto the side. Product exists so that we can serve research better and make the model safer. This is how we think about everything.

There was also this funny moment early on when we had this launch review and were deciding whether to launch it. I remember this moment because we were in the room. I think there was Mike Krieger, there was Dario, and there were some other folks in the room. We were deciding what we should do.

We were looking at the internal adoption chart, which was just vertical. It was insane. Nowadays, it's 100%, right? Just 100%. Every technical employee at Anthropic uses Claude Code every day. It's pretty much 100%.

For nontechnical employees, it's also getting quite close to 100%. It's increasing very quickly. Half of the sales team uses Claude Code, and I think that's increasing. It's crazy.

Dario had this question: “How did it grow this fast? Are you forcing people to use it?” I said, “No. We offer this tool. People vote with their feet.” We just let people use the tool that they prefer.

Gergely Orosz

You don't seem like the person who would be forcing people to use your tool.

Boris Cherny

Yeah. The way we did it, we just launched the thing, listened to the users, talked to people, saw how they used it, followed up, and made it better.

Now we're at the point where Claude Code writes, I think, something like 80% of the code at Anthropic on average. It writes all my code, for sure.

Gergely Orosz

This started for you in November, when it started to write all of your code. When did that switch come, and what happened to make you trust it to write your code? How much do you trust it? How much do you review that code, for example?

Boris Cherny

The switch was instant when we started using Opus 4.5. This was before it came out; we were dogfooding it for a little bit. It was just right away. It's such a more capable model. I found that I didn't have to open my IDE anymore. I just uninstalled my IDE because I didn't need it at that point.

I actually did that a month later because I didn't even realize that I wasn't using it anymore.

Gergely Orosz

A lot of us had similar experiences once Opus 4.5 was out in public, especially over the winter break. I had a similar experience. I just realized that, if I'm being honest with myself, it actually writes code as good as I would have written in the stack that I'm very familiar with, in my code base and my side projects where I know it—and just a lot better than what I could write for a code base that I'm not as familiar with or technologies that I'm not as familiar with.

Boris Cherny

Yeah, I'll be honest: it writes better code than I do.

Gergely Orosz

I don't want to go there. I still like to keep my pride, but it's probably true.

Boris Cherny

Yeah, yeah. I realized this because, in December, I was traveling a little bit. I was on a coding vacation. We were talking about this before, but I went to Europe. We were just in a different time zone, kind of nomading around.

It was so fun because I was just coding all day, every day, which is my favorite thing to do. I wrote maybe 10–20 pull requests every day, something like that. Opus 4.5 and Claude Code wrote 100% of every single one. I didn't edit a single line manually.

I realized at the end of that month that Opus introduced maybe 2 bugs, whereas if I'd written that by hand, that would have been, you know, like 20 bugs or something like that.

4. Boris's Claude Code workflow

Gergely Orosz

Can we talk about your development workflow? You have written some threads about this, which is awesome, on social media, on Threads and on X. Can you tell us how you use Claude Code today in terms of parallelism, and the tips and tricks that you and the team have learned and share across the team?

Boris Cherny

There's no one right way to use Claude Code. I can share some tips and things, but I think the wrong conclusion to draw would be to just copy these and use them.

The way we built Claude Code is that we built it to be hackable because we know every engineer's workflow is different. There's no one way to do things. There aren't 2 engineers who have the same workflow. Every engineer is different.

Gergely Orosz

Workstation setup, right? Keyboards, monitor placement—all that. Everyone has it differently.

Boris Cherny

Yeah, it's like we're craftspeople, right? You choose your tools. We care deeply about it. There's no one right way to do it.

For me, the way I generally do it is that I have 5 terminal tabs. Each one has a checkout of the repository, so it's 5 parallel checkouts. Usually, I'll round-robin and start Claude Code in each one.

Almost every time I start in plain mode, so that's Shift+Tab twice in the terminal. I also overflow as I run out of tabs. There's only so many terminal tabs.

I used to use the web a lot for this, so claude.ai/code is the place that I overflow to. Nowadays, I actually use the desktop app. It's more convenient. Claude Code has been in our desktop app for many months. It's just a code tab in the Claude app.

I really like it because it has built-in worktree support. That's existed for a while, and it's quite nice for parallelism. You have multiple—you don't need multiple checkouts. You just have one, and we automatically set up Git worktrees for you, so you get this kind of environment isolation.

The reason I do that is that I really hate fiddling with Git worktrees on the command line because it's kind of fiddly. You need to know to change directories and—

Gergely Orosz

For those of us who aren't as familiar with it, it's when you can check out something and, instead of having a separate local folder, it's almost like checking out a separate branch, right? You can work on it separately without having conflicts, only at merge time.

Boris Cherny

That's right. Imagine that you have a folder, but maybe Git makes 5 copies of that folder in a way that's very cheap and kind of easy to throw away. So, you get this kind of isolation. You can work in parallel, and the Claude Code sessions don't interfere.

Gergely Orosz

Yeah, so you know how support for this, which I think you recently added, like native support, but for your workflow, you just stuck with the old one of checking out into separate folders, right?

Boris Cherny

Yeah, exactly. Over time, I'm using the desktop app more and more for this.

Gergely Orosz

Mhm.

Boris Cherny

I just don't need these separate checkouts, and I have a bunch of Claude Code sessions running in parallel, so I don't have to think about it. The other surprise hit is the iOS app for me. Every day, I wake up and start a few agents on my phone.

Gergely Orosz

Oh, the native one, yeah?

Boris Cherny

The native one, yeah. It's just the Claude app. It's the Code tab in the Claude app, and it's the same exact Claude Code.

Gergely Orosz

Except it runs in the cloud, right?

Boris Cherny

It runs in the cloud, yeah, so you have to configure the environment. Your environment's pretty simple, so we just use hooks. You just use the SessionStart hook and configure it. This is kind of one of the benefits of making Claude Code really hackable: it's very easy to do this kind of configuration.

5. Parallel agents

This is something, honestly, I would never have predicted. If you told me 6 months ago that I'd be writing maybe a third, maybe half, something like that, of my code on a phone, that's crazy. But that's what I'm doing today.

Gergely Orosz

And you're using parallel agents. At what point did you start using them, and how has it changed your work?

One thing that I notice about myself is that I don't really use that many parallel agents. I may have 2 at a time, but I'm someone who likes to be in charge, especially with Claude. Claude is a tool that you can follow along with. It tells you what it's doing. You can also have, for example, Learning mode, which shipped a lot earlier, where you can actually follow along. It gives you tasks.

I feel that staying in 1 tab and following along—the model's pretty fast as well—I can kind of keep in touch. I'm assuming at some point you must have done this, but what happened when you changed to parallel? Do you feel you're losing any control, or does it not really matter that much?

Boris Cherny

Yeah, I think there are kind of 2 modes to think about, or 2 workflows to think about. When you're new to a codebase, Learning mode is awesome. I highly recommend it. For people who are onboarding to the Claude Code team, and people who onboard to Anthropic, the thing that we recommend is: for people who haven't tried it, you do /config.

In Claude Code, you pick the output style, and you can do Learning or Explanatory. We usually recommend Explanatory because that tends to be better for new codebases that you haven't been in before.

For me, once you're familiar with a codebase, you just want to be productive, right? You just want to ship as much as you can and be effective doing that. So, the role really switches. I don't really go deep into tasks anymore. I start a Claude Code session in Plan mode and have it kick something off.

With Opus 4.5, I think it got there. With 4.6, it just really, really does it. Once there's a good plan, it will one-shot the implementation almost every time. So, the most important thing is to go back and forth a little bit to get the plan right.

What I do is I start one. I enter Plan mode. I give it a prompt. As it's chugging along, I go to my second tab and start the second Claude, also in Plan mode. I get it chugging along, then go to the third tab, then the fourth one. Then maybe I'll go back to the first one when I get notified that it's done, and I'll keep track of that.

Gergely Orosz

Do you keep notifications on, or do you turn them off?

Boris Cherny

I actually operate in both modes. Sometimes I use Focus mode on the Mac, so I just have it off, but also sometimes I use the system notifications.

Gergely Orosz

And you're very, very productive with PRs. I think it was very visible even around the holiday breaks on social media. You actually responded to, I think, someone who reported a bug or feature request. I'm not sure which one it was. Then an hour or 2 later, it was done because you did it.

You've also talked about the number of pull requests you've done in a day, not to show off, but just as context. What does a pull request typically involve in terms of complexity? Are some super trivial, or are some actually larger pieces of work as well?

Boris Cherny

Yeah, pull requests each vary a lot. Sometimes it's a few lines; sometimes it's a few hundred or a few thousand lines. They're all just very, very different. It's changed so much. Back when I was at Instagram, I think I was one of the top 2, maybe top 3 most productive engineers at Instagram just by volume of code written.

I've always coded a lot. Coding is a way that I can express myself, and it's a way that my brain thinks, also. Now I just get to do it. But I think with Claude Code, the kind of code that you write if you are very productive is such that the number of PRs sort of undersells what's happening.

I think people who used to be very productive in the old days, before AI assistants, wrote a lot of code that maybe was code migrations or something like this. People who shipped 20 or 30 PRs every day, a lot of it was pretty much a one-liner, or kind of migrating A to B or whatever. Nowadays, I ship 20 or 30 PRs every day, but every PR is just completely different. Some of them are thousands of lines, some of them are hundreds, some of them are dozens, and some of them are one-liners.

6. Code reviews

None of these are code migrations, because Claude Code just does those, and I don't need to be part of that.

Gergely Orosz

When you're shipping this much code into production, the obvious question that comes up for any, I guess, software professional is: well, what about the review?

The way teams used to work—and I'm not sure if Instagram did this, but a lot of other companies did this—is you make a pull request, you put it up there, and there's a mandatory human reviewer. At Google, there are actually 2, because there's 1 on code quality as well. How has this workflow changed? How does the Claude Code team think about code review, and how has it changed over time?

Boris Cherny

I'll start by talking about how code review used to work for me. I also used to be one of the most prolific code reviewers.

Gergely Orosz

Oh, okay. So, both.

Boris Cherny

Yeah, writers and code reviewers. That's actually one of the benefits of being in a different time zone. I'm not superhuman; I just didn't have any meetings.

The way that I approached code review was that every time I had to comment about something, I would drop it in a spreadsheet. I would describe the issue. So, let's say someone named a parameter badly in a function, I would put that in a spreadsheet. If someone used a bad React pattern or something, I would put that in a spreadsheet.

Over time, I would tally up the spreadsheet, and anytime that a particular row had more than 3 or 4 instances, I would write a lint rule for it. So, I would just automate it with static analysis.

For me, I've always tried to automate myself away because there are just so many things to do. There are very few other fields where you're able to do this. This is something we're uniquely able to do. I've always enjoyed it because it gives me more free time, and I get to do the work I actually enjoy.

Today, the way this looks is a little different, but it mirrors this a little bit. When Claude Code writes code, generally it'll run tests locally, and this is something Claude often decides to do when it's relevant, or it'll write new tests. So, you get this kind of verification.

When we make changes to Claude Code, Claude will also test itself. It'll launch itself in a subprocess, verify itself, and test itself end to end.

Gergely Orosz

This is for your internal Claude Code implementation? So, you have this test suite so it can test itself?

Boris Cherny

Yeah, that's right. That's right. But it'll literally launch itself just in a Bash process and kind of just see, “Hey, do I still work?”

So, it'll do this. This is something that we just didn't code in. With Opus 4.5 especially, it just started spontaneously doing this. It just wants to kind of check.

So, we do this, and then we also run `claude -p`. This is the Claude Agent SDK in CI. Every pull request at Anthropic is code-reviewed by Claude Code. That actually catches maybe 80% of bugs, something like this.

It's the first round of code review. Claude will automatically address some of these. Some of them it'll leave to a human because it's not sure what to do. There's always an engineer who does the second pass of code review, and there always has to be a person in the loop approving the change.

I think it depends how it's used.

Gergely Orosz

Yeah, I'd agree with that. If you're building some personal side project, you can just YOLO straight to main. Even before AI, you would not have reviewed it. You just trust yourself, or you ship to production or SSH into production and make some changes. You get that kind of stuff, right?

Boris Cherny

Exactly. The very first versions of Claude Code that were internal, I committed straight to main. But then, as soon as you have users—and for Anthropic, our main customer base is enterprises, and this is what we care about the most—for us, for safety reasons, security is really important, and privacy is important. These are all related.

It's also very important for our customers. Because this is an enterprise product, it has to be secure. We have to make sure that it meets a certain bar. So, we definitely use a lot of automation, but at least for now, there has to be a human in the loop just to make sure.

Gergely Orosz

One thing that's known about LLMs is that they're nondeterministic. By putting an LLM as a reviewer—Claude doing a review—it will give good feedback, but how would you deal with the fact that you can't be sure it's always going to give that feedback? You cannot be sure that even if it's capable of catching an issue, it will necessarily catch it. Are you doing anything in this loop to do deterministic things?

For example, linting is very deterministic, as you very well know. Have you thought of marrying some of these ideas? Are you using linters on the codebase, or have you found no need for them?

Boris Cherny

Yeah, absolutely. We have type checkers, we have linters, and we run the build. Claude is actually so good at writing lint rules. What I do now—I used to tally stuff up in a spreadsheet—is, when a coworker puts up a pull request and I'm like, “This is lintable,” I'll just ask Claude, “Please write a lint rule for this,” in that PR, on their PR.

You can run `/install-github-app` or something like this in Claude Code, and it'll install the GitHub app. Then you can tag @Claude on any pull request or any issue. I use this every single day. It's very, very useful.

You want these deterministic steps. Also, though, there are ways to get Claude to be a little bit more deterministic. For example, you can do best of N; you can have it do multiple passes.

Gergely Orosz

Mhm.

Boris Cherny

And this is actually quite easy to do. For example, the code review skill that we use internally is open source, and it's available in the Claude Code repo. All we do is launch parallel agents to do stuff, and then launch parallel deduping agents to check for false positives.

Essentially, best of N—the way you implement it is, all you say is, “Claude, start 3 agents to do this.” And that's it.

Gergely Orosz

How does Claude Code work in terms of architecture? As an engineer, how can I imagine it's set up? We covered some of this in the deep dive, and I think you told me that you had some pretty complex ideas when you started, and you just simplified a lot of it?

Boris Cherny

Yeah, yeah. It's very simple. There's not much to it. There's a core query loop, and there are a few tools that it uses. We delete these tools all the time. We add new tools all the time. We're just always experimenting with it.

There's kind of this core agent part of it. Then there's the TUI part of it. And then there's actually a ton of different pieces around security, making sure that everything Claude Code does is safe, and that there's a human in the loop for when it happens.

Gergely Orosz

And by safety, do you mean, as a user, what it's doing on my computer, or also Anthropic monitoring use cases that could be deemed unsafe?

Boris Cherny

Yeah, there's kind of a couple of versions of this. Safety—there are just many, many layers. For things like safety and security, there's no one perfect answer. It's always a Swiss cheese model. You just need a bunch of layers, and with enough layers, the probability of catching anything goes up. You just have to count the number of nines in that probability and pick the threshold that you want.

For something like prompt injection, for example, we do this generally at 3 different layers. Let's think about something like web fetch. Claude fetches a URL, reads the contents of that web page, and then does something in Claude Code. One of the risks for something like this is prompt injection. Maybe there's an instruction on that website saying, “Hey, Claude, delete all the folders,” or something like that.

We think about this in a number of ways. The most basic way is that it's an alignment problem. Opus 4.6 is the most aligned model we've ever released because we've taught the model how to be more resistant to prompt injection. You can read about this on the model card, and I think it was part of the release.

The second part is that we have classifiers at runtime. If there's a request that seems to be prompt-injected, we block it, and we make the model try again. The third layer is that, for something like web fetch, we summarize the results using a subagent and then return that summary to the main agent.

Again, this reduces the probability of prompt injection. You can see how this isn't just one mechanism. It's a layer, and by having a bunch of these different layers, it just reduces the probability a lot.

Gergely Orosz

One interesting technical choice that you also mentioned is using RAG or not—retrieval-augmented generation. You mentioned how, in the earlier version of Claude Code, you used a vector database to speed up search, and you later threw this away. Can you talk about how this worked? This was another example where, I guess, the model got better?

Boris Cherny

Yeah, I mean, this is one of those things where we try so many different things. We try so many different tools, and statistically, most of them we throw away. Even something like the spinner in Claude Code, I think it's gone through like 100 iterations, I want to say. Just the spinner. Out of those, we landed maybe 10 or 20 in production, and 80 of them I probably just threw away because they didn't feel good enough.

Statistically, almost all the code we write, we throw away, because it's just so easy to write this code, try stuff, and see what feels good. For something like RAG, we tried a bunch of different approaches early on. The first one was RAG for retrieval, because I was just reading up on how people were doing retrieval, and it seemed like all the papers were talking about RAG.

The way I did it was like a local vector database. I think it was written in TypeScript, and it just lived on the user's machine. Then I was using some embedding model that was in the cloud to compute embeddings before storing it. That worked pretty good, but there are a lot of issues with RAG.

For example, I was finding that the code drifted out of sync. If I make a local function, it's not yet indexed, and so RAG isn't going to find it. There's also this question of how exactly the index is permissioned. Who can access it? I can access it, but then how do we encode that in permission policies? How do we make sure no one else can access it? How do we make sure that, if there's a rogue IT person within the company, they can't access someone else's data? This is really, really important for us to think about.

And so we just decided it was sort of working, but it also had a lot of downsides. We tried a bunch of other stuff. One of them was just using the model to index everything recursively. That was kind of a cool idea. There was another version where we just tried glob and grep. We tried a bunch of different stuff. It turned out that Agent-X search just outperformed everything.

Gergely Orosz

And what is Agent-X search?

Boris Cherny

It's just a fancy word for glob and grep. That's all it is.

Gergely Orosz

Nice. So, the model both got good enough, and you realized that it can use these tools pretty efficiently.

Boris Cherny

Yeah. And this was partially inspired, honestly, by my experience at Instagram. At Instagram, click-to-definition didn't work because the dev stack was just broken like half the time. I think now it's better. And so what engineers would do instead is, let's say you're looking for the definition of the function `foo`.

7. Permissions and sandboxing

Instead of click-to-definition, what you would do is use the global index, which is quite good at Meta, and then search for “foo(”. This worked pretty well. It's funny because this works pretty well for the model, too. It's interesting how one idea from one area can come to the other.

Gergely Orosz

One of the more advanced parts of Claude Code that we also previously talked about is the permission system. Can you talk about what was complex about it? And you recently open-sourced sandboxing, right?

Boris Cherny

Permissioning is really complex. Like everything else that has to do with security, it's a Swiss cheese model. There are a number of classifiers that run to make sure the command is safe, and there's also static analysis that we do to make sure the command is safe.

As a user, you can also allowlist particular patterns that you know to be safe. For example, some standard Unix utilities we pre-allow because we know they're read-only, and we know they can't exfiltrate data or anything like this. We just won't prompt you for permission.

But actually, quite a few tools fall into this category because even something like the find command has a way to execute arbitrary code as part of that command. There are system flags that you use for this. Or even something like the set command—there are ways to use this. There's just all this arcana about these various Unix utilities where they're actually not as safe as you think.

We want to be fairly conservative by default about what we allow. As a user, though, you can configure an allowlist. You can say, for example, “These patterns are allowed; these patterns are not allowed.” We let you define that, and we also check this allowlist to make sure that it's safe.

Gergely Orosz

And then you have this neat permission system where every time you run a command that needs permission, you can decide to run it once, to run it for either the session or whatever makes sense, or just globally allow it to go forward, right?

Boris Cherny

That's right. This is a funny artifact. This was actually in the very first version of Claude Code. This is the way permissions worked. This was the very first release, in September 2024—the first internal release.

I remember that, at the time, we weren't sure whether agentic safety could even be solved. There was actually a lot of pushback internally from the safety teams because they were like, “Okay, you can't just let the model run Bash commands. That's unsafe. So what do you do? This is not a solvable problem, so we can't launch this.”

I brainstormed with Ben Mann. He started the Labs team, and he's one of the founders at Anthropic. He's also the person who hired me at Anthropic. We came up with permission prompts as the way to do this: if you're not sure, just ask the human, and then they can decide.

8. Engineering culture at Anthropic

Gergely Orosz

I want to ask you about how software engineering is done in general at Anthropic. One of the first questions, which is, I guess, a more formal one from the outside, is titles, or the lack of them. Everyone at Anthropic has the same title: Member of Technical Staff. Why did this happen, and what does this result in? Everyone basically has no titles, right? Except for one.

Boris Cherny

I think it's kind of an acknowledgment that everyone is just figuring stuff out. If you kind of squint and look at the work people are doing, it's all quite similar, and it's quite generalist.

If you talk to the average software engineer, they might not just be doing coding. They might also be doing a little design. They might also be talking to users. They might be writing their own product requirements. They might be writing software and also doing research. They might be writing product code and also infrastructure code.

At Anthropic, there are a lot of generalists. From my background, this is one of the reasons that I gravitated toward it. I think “Member of Technical Staff” just encodes this in the way that people talk to each other, even if they don't know each other.

Without this title, the default would have been that I see your name on Slack and, under your name, it says “software engineer.” Then I'm like, “Okay, I guess you're the coding person, so I'm not going to ask you product questions.” But when everyone's title is “Member of Technical Staff,” by default you assume everyone does everything. It kind of inverts this relationship between people, even if you don't know each other well.

Gergely Orosz

In a way, it's kind of this optimism built into the structure. I think it's also a glimpse of the future, because I think this is where software engineering is going. I think this is where every discipline is going: toward more of this generalist model.

Definitely, it feels like it in software engineering. I've heard this funny comment by Marc Andreessen, where he said that there's this Mexican standoff happening in the tech world. The designers are saying that they're now doing product management and engineering work. The engineers are saying that they're doing design work. Everyone thinks they're doing the work of the others, and they're kind of standing there saying, “I'm doing your work as well.”

But in reality, everyone's role is expanding, mostly thanks to AI, because it makes it easier for an engineer to do product work, or for a product person to do engineering work, and so on. So, just what you've said.

Boris Cherny

I remember back in June or July of last year, I walked into the office. There's a row of data scientists who sit right next to the Claude Code team, at least they did at the time. I walked in, and our data scientist on the Claude Code team had Claude Code up on his monitor.

I was like, “This is interesting, because you're a data scientist. Why are you using a terminal? You didn't have Node.js installed, because we depended on Node.js back then.” I was like, “Are you dogfooding it? Are you just trying to figure out how this thing works or something?”

He was like, “No, I'm using it to run queries.” He was just using it to run SQL, and it had little ASCII visualizations in the terminal. The next week, the entire row of data scientists had Claude Code running on their computers.

This expanded. If you look at the team today, on the Claude Code team, everyone codes. The engineers code, our engineering manager codes, designers code, data scientists code, and our finance guy codes. Everyone on the team codes.

Part of it is that Claude Code just makes it so easy. You don't really have to understand the codebase; you can just dive in and make small changes quite easily. But I think another thing is that people are able to use Claude Code to do their jobs more, whether it's financial forecasts, data science, or whatever. By doing this, it's actually quite an easy crossover to just use it to write a little bit of code, too. It's just a way to dip your toe in the water.

Gergely Orosz

One other interesting thing about how you work is that Kat Wu was talking about how she is—I guess your title is the same, but people might gravitate toward a role a little bit more, and I understand she's a little bit more in a product role.

You said that PRDs are just not really written inside Anthropic. PRDs, or product requirement documents, are a well-known artifact across big tech and increasingly larger startups, where you write a spec, and the idea is that you write down your thoughts, people align, you send it over, and now you know what to build. But apparently, you're not doing much of this, or any of it.

Boris Cherny

Some of this, I think, is because Anthropic is still a startup, so you don't actually have to align with that many people. Usually, you can just kind of talk about it or do it in Slack or whatever.

But, yeah, part of it is that Cat used to be an engineering manager. She's extremely technical. I think this is the way that our product team thinks about it, too: it's better to just send a PR. You're doing a lot of prototyping instead.

Gergely Orosz

That's also something where, when we talked about how you were building Claude Code early on, you were showing—actually, you had a whole thread about the number of prototypes. I think you did 15 or 20 prototypes for the to-do list, and all of them were interactive and working.

What surprised me compared to my past tech experience—and you said that you did this in a day and a half—was that you tried all 20 of them out and got a feeling for them, which is incomprehensible to me. It would have taken a week or 2 weeks, and people would not have done 20. They would have done 3.

So, are you seeing an increase in prototyping and in building and showing instead of writing things?

Boris Cherny

Yeah, absolutely. On our team, the culture is that we don't really write stuff. We just show. It's a little hard to reflect back on the time before, because I think now prototyping everything is so baked into the way that we build. Everything is prototyped multiple times.

We launched agent teams this week. This is our implementation of swarms. It's very exciting because it just lets Claude do more work for longer, more autonomously. You have a bunch of different uncorrelated context windows, and you have this kind of communication between agents. They can just do more.

This is something that Daisy, Suzanne, Karen, and other folks on the team prototyped for months. They tried, all in all, probably hundreds of versions of this before they got a user experience that felt really good.

It was just really hard to get right. There’s just no way we could have shipped this if we had started with static mocks in Figma or a pure PRD or something like this. It’s a thing that you have to build, and you have to feel, and you have to see how it feels. To me, one of the big takeaways from that was that we probably should prototype more and be more daring, or just release your priors about how long it took to build a prototype or who needed to build it. Back then, it was always an engineer who needed to build it, but that’s probably not true anymore.

Gergely Orosz

Yeah, that’s right. I mean, we’re in this world right now where we just don’t know what the right answer is. I think back in the old way of building, the cost of building was high, and so you had to actually spend a lot of effort to aim very carefully before you took your shot. Because after you took your shot, it was very hard to course-correct. You could only take so few shots.

But now it has changed. The cost of building is very low, but also we don’t know where we’re aiming. So we have to try, and we have to see what feels good. It’s very exploratory. I think also a big part of it is humility where, personally, I’m wrong half the time. I’d say most of my ideas are bad. At least half of them are bad, and I don’t know which half until I try them. And then you get feedback from others as well, sometimes.

Boris Cherny

That’s right. I have to try it myself, and then I have to see what others think because my intuition doesn’t always match others.

Gergely Orosz

When you were showing these prototypes of how the tasks were built, you were telling me that you built the prototypes, and then your process was always that you first looked at them, tried them out, and got a feel for them. For the ones that you felt were good, you showed them to others, and sometimes they gave you feedback like, “No, this doesn’t work.” Then, when it felt good, you shared it even more broadly. So I feel like it’s a mix, right? Sometimes you can decide already, and sometimes you get feedback, and eventually some good ideas come out of it.

Boris Cherny

Yeah, and there are a lot of examples of this. We launched this condensed view for file reads and file search because the model is so agentic now. I felt like half the screen was these file reads, and I actually don’t care. I read a thing; I don’t really care what it is. So we condensed this down to make the output a little more readable.

I really liked it after probably 30 prototypes or something like this. It took so much effort to make that feel really good and clean. We rolled it out to employees at Anthropic for about a month, and we had everyone dogfood it. I fixed another dozen bugs and made another dozen tweaks based on all this feedback.

We launched it externally, and almost all users liked it, but there were a few users who didn’t because they wanted more expanded output. On the GitHub issue, I was just going back and forth with people, asking, “What don’t you like?” People gave a lot of feedback. I shipped another version, and then some people liked it and some people didn’t. So I iterated on it again and made it good.

I think it’s actually almost there, where people can configure it the way they want, but the default is still really good. This is just the process: we get it right some of the time, and we have to learn from our users. We want to hear from people so we can get it right.

Gergely Orosz

Do you use ticketing systems for your work, where you capture, “All right, here’s the work,” or do you just pretty much do the work as it comes in?

Boris Cherny

At Anthropic, we leave it up to teams. On the Claude Code team, we leave it up to every person. Different people use this differently. For example, I don’t use a ticketing system. Some people like to use Asana or notes or something like this.

One of the coolest things that I saw was maybe 3 months ago or something. We launched plugins, and the way we launched them was that Daisy had a very early version of swarms for a weekend. She let the swarm run and told it, “Your job is to build plugins. You have to come up with a spec, then you have to make an Asana board and split it up into tasks. Then all the different agents have to build it.”

She set up a container and set up Claude in dangerous mode, and she let it run for the entire weekend. It spawned a couple hundred agents. They made 100 tasks on the Asana board, and then they implemented them. That’s pretty much the version of plugins that we shipped. These kinds of coordination systems used to be for humans, but I think nowadays they’re just as much for models.

9. Claude Cowork

Gergely Orosz

Let’s talk about Claude Cowork. It’s one of the very important things about this: it looks great. I tried it out. Inside Claude, you have the Cowork tab, and it feels like a much more visual way of running agents and interacting with them. One of the surprising things I heard was that it was built in 10 days. Can you take us through what it took to build it and what that actually means? Was it from the idea, or from the decision to build it? How big was the team building it?

Boris Cherny

The team was really small. It was just a few people. For a long time, we felt that there was some product to be built for non-engineers. The reason we felt this is that, for a long time, people using Claude Code were non-engineers. In the product world, when you see latent demand—when you see people jumping through hoops to use a product that was not designed for them—that’s a really good sign that it’s time to build another product just for them.

There are all these people on Twitter. There’s this one guy who was using Claude Code to monitor his tomato plants, and I just loved this. He had a webcam set up, and Claude was like, “Oh my God, I’m so happy that our plant is budding.” It had a webcam and was monitoring it every day, and it was so happy that the tomatoes were growing.

There was someone who was using Claude Code to recover photos from a corrupted hard drive, and they were his wedding photos. Our entire finance team at Anthropic uses Claude Code, and our sales team uses Claude Code. So there are all these non-engineers who were using it.

At that point, Claude Code was available in a lot of form factors. We started in a terminal, then expanded and added support for IDEs. We have extensions for every VS Code-based IDE and every JetBrains-based IDE. There are also iOS and Android apps, the desktop app, the web app, and Slack and GitHub apps. We can expand it to all these places to make Claude Code easier for engineers.

Ultimately, though, none of these are built for non-engineers. Claude Code evolved a lot, but it still felt like there was a gap and a product that could make this even easier for people. For the last couple of months, the team was hacking around and just seeing what the right product was.

At some point, someone came up with the idea, “What if we just take Claude Code and add some guardrails?” For example, Cowork works with a virtual machine. This is one of the many ways that we make sure it’s really safe, especially for nontechnical users who don’t want to read Bash commands to figure out what it’s doing. They were hacking on this for something like 10 days or something. It was fully built with Claude Code, and then we shipped it.

Gergely Orosz

Can you give us a sense of the complexity behind an app like this? Can we walk through what parts needed to be built? From the outside, it’s a little hard to tell: is this just a nice UI wrapper, or is it a few hundred lines of code? I’m being provocative here, obviously. Or, behind the scenes, is it actually a really complex piece of software?

The reason I ask is that Uber is a great example. People look at the app and it looks really simple. I worked there, and I know it’s really, really complex because you don’t see a lot of the complexity. There are a lot of regional things and back-end things that are all hidden. So, just from looking at how Claude Code works, it’s hard to tell how much of this is additional business logic that needed to be carefully thought out versus whether it’s actually just a nice, thin wrapper on top of the model.

Boris Cherny

In some places, I think there’s less complexity than you would think, and in some places there’s more complexity. On the product side, it’s quite simple because it’s just the Claude desktop app. You download the Claude app; it’s a single desktop app. It has a tab for Cowork, a tab for Code, and a tab for Chat, so it’s just one app and we’re able to inherit a lot of that product logic.

There’s some UI rendering code. Under the hood, it’s just the same Claude Code running. It’s the same Claude Agent SDK that powers Claude Code. A lot of the complexity is actually about safety, because, as I said, we know the user is nontechnical and we want to make sure they have a good experience.

For example, if someone launches the app and then deletes a bunch of family photos, that’s really not good. We wanted to make sure that we protect against this so you can’t accidentally do that. That’s where a lot of the guardrails came from. There are a bunch of classifiers running on the back end.

This is for safety and, again, extra mitigations for things like prompt injection and risks like this around security. On the front end, there’s an entire virtual machine that we ship. There are a bunch of operating system-level integrations to make sure people don’t accidentally delete things. So, just around safety, there’s a lot there.

Then we also have to rethink the permission system because we inherit the permission system from Claude Code. But also, for Claude Cowork, a big part of the value is not just running locally, but using all of your tools the way that Claude Code uses them. The thing is, for non-technical users, your tools aren’t really available as CLIs. Some of them are available over MCP, and many of them are available in a browser.

Claude Cowork is really, really good when you pair it with a Chrome extension. This is the way that I usually use it. For example, I use it every week to do project management for the team. We have a spreadsheet that tracks, at a really high level, what everyone’s working on. This is kind of my personal way of project-managing. Other people, like I said, use Asana, or other people use notes, or whatever.

For my own tasks, I don’t use anything, but for the team overall, I have the spreadsheet. I have Claude Cowork check in, and I just ask it every week, “Hey, can you look at the rows for any status that has not been filled out? Can you just ping the engineer on Slack?” It’ll open one tab in Chrome for the spreadsheet, and it’ll open another tab with Slack. Then it’ll just start messaging engineers in Slack. It just one-shots it.

There’s one engineer’s name that, for some reason, it can’t autocomplete, but everything else it just gets. From a safety point of view, we also thought pretty deeply about this Chrome extension, how it works, and how the permissioning model should interact with this local permissioning model. So there’s also a bunch of code to make sure that feels smooth.

Gergely Orosz

What’s the tech stack behind this? I assume a lot of it will be similar to the Claude app, but is it Electron, TypeScript, those kinds of things, or something else?

Boris Cherny

Yeah, just Electron and TypeScript. Actually, some of the people working on it are early Electron folks. Felix, who’s the creator of Claude Cowork, was a really early engineer on Electron, and he helped build it.

Gergely Orosz

Oh, amazing. Claude Cowork launched on macOS only. What was the reason for both choosing this platform first and, for now, only choosing this platform?

Boris Cherny

Windows is coming soon. I think probably by the time this podcast comes out, we’ll have Windows support. We just wanted to start early and start learning.

Everything we do at Anthropic is kind of like the way that I told my own story. One of the things I like about Anthropic is that it really matches the way that people here think about it. We don’t have high certainty about the things that we build. Our intuition is often wrong, and so we just have to learn from users and figure out what people actually want. We spend a lot of time listening to people and understanding the feedback deeply.

This is the way that we build a product. We always launch a little bit before it’s ready. We did this for Claude Code. When we launched Claude Code initially, it didn’t even support Windows. It also didn’t support a lot of different stacks, and then, over the coming weeks, we added support for every stack.

10. Observability and privacy

Now Claude Code supports every single stack: Windows, whatever weird Linux distro you use, and macOS. We support everything. For Claude Cowork, we also just wanted to launch early. We wanted to start with Mac, as that was just the starting point. But, yeah, it’s going to support everything.

Gergely Orosz

One thing you mentioned is getting feedback. I’m curious, both for Claude Code and for Claude Cowork, how do you go about things like observability and monitoring when you’re rolling out? Do you use any feature flags?

I’m more interested in whether you built custom tools for this or decided to use certain vendors. Especially for observability, I’m sure that this is both important, but it also sounds like pretty high scale in terms of the number of users. This will not be a small operation, will it?

Boris Cherny

There are some off-the-shelf vendors that we use, and there’s some custom code that we use, so it’s a mix of both. There’s nothing too surprising about it.

One thing about Anthropic that’s kind of interesting is that, because we’re an enterprise company and we care a lot about privacy and security, we can’t see people’s data. If someone reports a bug, I actually can’t pull up your logs to see what’s going on. A lot of work goes into figuring out how to log events and things like this in a privacy-preserving way. This is just very important to the way that we operate.

Gergely Orosz

For Claude Cowork, what kind of learnings have you had so far? It’s been out for, I think, a few weeks now. Did you see something unexpected? Are you shaping the product based on feedback that you’re getting?

Boris Cherny

Every day, the team is landing so many fixes. The most surprising thing is just how much people are loving it, to be honest.

When Claude Code first came out, it actually wasn’t an overnight hit. This is something people think it was, but it was sort of a slow takeoff at the beginning. I think the first big inflection was in May, when we released Opus 4 and Sonnet 4. That’s when it really clicked, and that’s when our growth became exponential.

At the beginning, it was a research preview. People didn’t really know how to use it. Some people got it immediately, but most people didn’t. It took a little while.

For Claude Cowork, it’s a much steeper growth trajectory than Claude Code was at the beginning. It’s just been an instant hit, and that’s actually been very surprising. I didn’t really expect that.

11. Agent swarms

Gergely Orosz

One of your new releases, which came out just very recently—it was, I think, yesterday or the day before when we’re recording this podcast—was Agent Teams. As I understand it, the idea with Agent Teams, or agent swarms, is that instead of a single agent, you can have a lead agent, and it can delegate to its different teammates. How did you start experimenting with this, and how did you decide to ship it now?

Boris Cherny

We’re always doing experiments. There are all sorts of ways to get more mileage out of Claude Code. One way is by extending context. Another way is auto-compacting context, so it’s essentially infinite context, and that’s what we have right now. Another way is using subagents, so you have multiple agents working together. There are just a lot of different approaches to get a little bit more mileage out of the context window.

There’s this one idea called uncorrelated context windows. That’s what we call it, and the idea is that you have multiple context windows, but they essentially start fresh. They don’t know about each other. An example of a correlated context window is if you have the model do a task and then have it do a second task in that same context window. In this case, the second task knows about the first one because it’s in the same window.

But for something like a subagent, it’s uncorrelated because the main agent prompts the subagent, but the subagent’s context window is fresh. Besides that prompt, it doesn’t know what’s in the parent context window. You can see this a little bit, for example, in subagents versus skills. When you run a skill, or a slash command, it sees the parent context window, whereas for a subagent, it doesn’t.

There are some cases where you want that context, and there are some cases when you don’t. There’s this interesting thing where uncorrelated context windows, and just throwing more context and more tokens at the problem, gives you better results when the windows are uncorrelated. It’s actually a form of test-time compute to do this.

For something like Agent Teams, we’ve been experimenting with this for a while, I think since maybe October or September or something like this. It really just felt like, with Opus 4.6, it clicked. The model figured out really how to use this. Sometimes you see these cute exchanges where the agents are talking to each other and discussing something, and it’s very cool to see. It’s very humanistic in a way.

Other times, you just get very good results. We had a bunch of internal evaluations, for example, where we had Claude build something very, very complex—something more complex than what a single Claude would build. We saw the results really, really improve with Opus 4.6 with Agent Teams. That’s why we felt it was the right time to release it.

We also wanted to be careful. The reason you have to opt into it, and the reason it’s a research preview, is that it uses a ton of tokens because it’s just a bunch of Claudes running. Not everyone wants this all the time. So we’re just excited to see how people use it and hear the feedback.

It’s something you want for fairly complex tasks. You probably don’t want this for every task. The main Claude decides the roles for the subagents. We don’t have a regimented way to do this. It’s context-specific, and I wouldn’t say there’s one right way to do it.

I think a lot of the magic of this comes out of the idea of uncorrelated context windows. It’s less about the specific configuration of the agents. But it’s something that people should experiment with.

Gergely Orosz

I don’t think there’s a one-size-fits-all. Have you seen use cases—even though I know it’s still research—where this approach, this swarm approach, looks promising?

Boris Cherny

Well, I guess I said before that plugins were fully built with swarms. There are a bunch of other features since then that are built in this way. So, yeah, I think for anything where you see a single Claude struggling, swarms can help. It’s interesting to look at.

Gergely Orosz

Talking about change in general, with Andrej Karpathy you had a really interesting exchange back in December. He posted that he’d never felt as far behind as a programmer as he did then because of the progress with AI, and then you shared the story about how you started to debug a memory leak the old-fashioned way, and Claude one-shotted it.

I think it was a reflection of how everyone is feeling—that things are changing so fast—and during the holiday break, I started to feel that things had really shifted. How did you come to terms with this, or start to embrace this change?

Boris Cherny

This is something I really struggle with. The model is improving so quickly that the ideas that worked with the old model might not work with a new model. The things that didn’t work with the old model might work with a new model. It’s weird because there are just not a lot of other technologies like this, so I don’t really have a lot of experience to draw on to figure out how I should approach this. It’s been this new skill that I’ve had to learn.

In a way, it’s like you just always have to bring this beginner mindset. Honestly, I’m using the word humility a lot, but you always just have to bring this kind of intellectual humility. All of these ideas that were bad before are now good, and the inverse. I think that’s honestly it. It’s something I constantly have to remind myself about.

Gergely Orosz

And back in the old world, when someone tried an idea again and we’d tried it in the past and it didn’t work, usually the feedback was, “Why are you doing this again?” We used to call this a bit of gatekeeping, but it was somewhat valid.

With architecture, someone would come and say, “Why don’t we do microservices?” and someone would say, “We tried it and it didn’t work.” If you tried it a year, 2, or 3 years ago, it was kind of valid, right? Because not much had changed.

Boris Cherny

Yeah, that’s right. And something like microservices is funny because every 10 years it goes in and out of style. But now, I think it’s the first time ever where it’s actually not crazy to just try the same idea every few months, because the model improves and it just works.

I actually see this with engineers on the team. People who are newer to the team, and people who are newer to engineering, sometimes do things in a better way than I do. I just have to look at them, learn, and adjust my expectations.

An example of this is that when we release features, sometimes I’ll screenshot myself using them on X or Threads or whatever, just to talk about it. But recently, Tariq, our DevRel guy—he actually codes a lot; he’s amazing—started automating this.

He’s having Claude Code generate its own videos for its launches, and he just started doing this. This is something I thought would be possible, maybe, but it’s not something I would have tried because I wouldn’t have thought the model was ready. He just did it, and it just kind of worked.

12. LLMs and the printing press analogy

Gergely Orosz

One thing that I’ve felt is a bit odd, and I think a lot of developers can relate, is that I’ve come to terms with this starting with Opus 4.5. Similar models, like GPT-5.2, gave me a similar vibe as well. The models have just been really good at writing code, and I realize that I don’t think I’ll handwrite code when I want to get stuff done. If I actually want to get the pleasure of writing it, I can still do it.

But one thing I reflected on is that it’s just been so much effort to get good at coding. I remember when I was learning: I started by hacking around, then went to university, then learned C and C++, and it was just bloody hard. Actually, going through my first few jobs, I started to become better at it; I became better at debugging. There was a point where a lot of my identity was tied to being good at coding.

That’s how we used to get jobs or higher-paying jobs. When I was an engineering manager, when we designed the interview loop at Uber, we talked with managers about what we needed to screen for, and we said, “What do developers do most of their time? About 50% of the time, they code.” Therefore, about 50% of the signal was all about coding.

There were a lot of things tied into coding because it’s just hard. I think we all know that it takes grit; it takes some level of intelligence to get good at it. There’s a sense of loss: I think it’s great, on one end, that the model can do it, but it feels like something really quickly got taken away that I personally didn’t think would happen this quickly. I think a lot of other people are feeling that.

Some people move on a bit easier, but there’s definitely this sense of grief. How did you think about it? Again, you’re an example: you wrote so much code at Facebook and also outside of it. I know it was just a tool for doing it, but not many people could do what you did. And now the models can also work as well as you did, if not better.

Boris Cherny

That’s the challenge. I think it’s something that used to be a thing that we did as software engineers; it’s becoming something that everyone is able to do.

When I started coding, it was a very practical thing and a way to get things done. At some point, I just fell in love with the art of coding, and with languages and the tools themselves. At some point, I fell down this rabbit hole. I wrote Programming TypeScript, a book about a programming language.

Gergely Orosz

You wrote the first-ever TypeScript book with O’Reilly.

Boris Cherny

Yeah, yeah, that’s right. It was funny, actually. There was this amazing moment for me in my little town in Japan. I went to the bookstore and found that book translated into Japanese in this tiny town, and that was just the coolest moment. Then I actually realized I don’t remember TypeScript at all, because I was only writing Python for a couple of years at that point.

At some point, I started the first and biggest TypeScript meetup in the world. That was in San Francisco, and I got to meet a lot of my heroes. There was Chris Kowal, who wrote General Theory of Reactivity. There was Ryan Dahl, the guy who made Node.js. It was one of the first times that I went really deep into this community, and into the language and the tools themselves.

For something like TypeScript, there’s this beauty in the types, in the type system, because Anders Hejlsberg is just brilliant. The idea of conditional types, and that anything can be a literal type—there are these very deep ideas that even the most hardcore functional languages do not have. Even something like Haskell doesn’t go this far, and Anders just took it and pushed it much further than it had been pushed.

Joe Pamer and a bunch of other folks explored a lot of these ideas and thought about this. I think for them it was also very practical, right? They had these large, untyped JavaScript codebases. How do you gradually migrate to something typed? You have to come up with these very beautiful ideas to do this.

For me, Scala was another rabbit hole that I fell into—the functional programming world. Still, when I write code and when the model writes code, I always think in the types first. What matters is the type signature. That matters more than the code itself, and getting that right.

So there is this beauty to it. There’s an art to it, for sure. But in the end, it’s a practical thing. In the end, this is a thing that we use to build things, and it’s a means to an end. It’s not an end to itself.

Gergely Orosz

I think one metaphor I have for this moment in time that we’re in is the printing press in the 1400s or whatever.

Boris Cherny

Mhm.

Gergely Orosz

Because at that moment, it was actually quite similar, right? There was a group of scribes who knew how to write. It was, as I understand it—of course, we never lived it—but as I imagine it, a hard process to learn. You needed to get the equipment. You probably needed some sponsorship or to be selected. You needed to practice because you had to produce the same thing over and over again, and few people could do that. I assume it was either high-prestige or highly paid, or who knows. Let’s assume it was. But then the printing press came along.

Boris Cherny

Yeah. Yeah, and at least in Europe, you had to have a lord or a king or something employ you, and then you had to go through years of training. There was this class of scribes that knew how to write. They were employed by someone like this, often the king or queen themselves, who were not literate. So it was this very, very niche skill, and less than 1% of the population was literate in Europe back then.

And then the printing press came out, and what happened? The cost of printed material went down something like 100× over the next, I think, 30 or 50 years, or something. The quantity of printed materials went up like 10,000× in the next 50–100 years. This was the first effect.

Literacy took a little while to catch up. So, I think global literacy went up to something like 70%, but that took another 200 or 300 years, because learning to read is just very hard. Learning to write is hard. It takes a lot of effort. It takes an education system. It takes infrastructure to have paper and ink and the free time to do this instead of working on a farm.

So it kind of took the early stages of industrialization to actually get there. But I think this effect of making it so this thing that was locked away in an ivory tower is now accessible to everyone—this is just… None of the things around us would exist today without this. If we weren't literate, if the people that built this microphone weren't literate, it would have just been very hard to have a modern economy. None of these things would exist.

And I just think about back then: if people had to predict what would happen when the printing press came out, no one would have predicted that the microphone would become a thing. So, I just feel like this is the best analogy for the moment that we're in right now.

Gergely Orosz

And it's interesting that you say that some of the kings were illiterate even though they were employing the scribes, because if we're being honest with ourselves, we have business owners who know what they want to build and are employing software engineers because they themselves cannot write code. I think we like to mock the CEOs who are coming to the scene. They might even have a drawn prototype or a whiteboard and say, “This should be easy,” but of course they don't understand how difficult it is.

But there seems to be a bit of an analogy where there's a person who wants what they want, but until now they needed to hire a software specialist who can build that, and there's always that disconnect between the idea and the person. Just like with the printing press, what would happen if they could actually express themselves? Like, the king could actually read or write their own letters. They wouldn't need that middleman, and things would become more efficient.

I mean, of course, for the scribe, it's not necessarily the best news, but the smart scribes can also do this, so someone needs to write the books, run the press, et cetera.

Boris Cherny

Yeah, exactly. And if you think about what happened to the scribes, they ceased to be scribes, but now there's a category of writers and authors. These people now exist. The reason they exist is because the market for literature just expanded a ton.

And I guess also, if we think about back then, a scribe's work was read by a few people, and with the printing press, there are a lot more authors. Some of them are not really read, but some of them have wider reach than they could imagine. There are new careers that exist because of that.

Gergely Orosz

Yeah, I love the analogy. And the most exciting thing for me is that it's just so impossible to say today what will happen after this transition happens. The economy as we know it would not have existed without it. So, what's next? What is the thing that we can't even predict today that will exist because anyone can do this?

13. Standout engineer archetypes

We cannot predict, but I think we can look at what is working right now. If you look around in your environment, whether that be the team at Anthropic—software engineers, builders, or members of technical staff, however you call them—who, to you, are standouts? What are they doing? What skills have they built up, and how have they changed the way they work?

Boris Cherny

It's hard to name individuals because, honestly, these are the strongest people I've ever worked with in my career. There are all sorts of different archetypes. There are some people that are really amazing prototypers: take something from 0 to 0.5, just figure out what are some cool ideas, what is the technology unlock.

There are other people that are amazing at finding product-market fit, so kind of 0.5 to 1, or maybe 0 to 1. There are other people that span different disciplines, and I'm just seeing more and more of these people. Like I said, people that span product engineering and infrastructure engineering, or product and design, or design and engineering. I think I'm just seeing a lot more of these hybrids.

Gergely Orosz

What's a belief that changed from last year to this year? Something that you either believed, or a conviction that you had, that you've either revised or completely thrown away?

Boris Cherny

I think one thing I wasn't sure about is how big a problem safety is, to be totally honest. I joined Anthropic because, like I said, I read a lot of sci-fi, and I kind of know how bad this thing can go if it goes bad. It wasn't something I was sure about. But seeing it from the inside, and then seeing the new risks that have arisen in the last year, it just makes me much, much more worried about it.

So, I think it was kind of an important thing for me. Now it's just the most important thing for me: how do we make sure this thing goes well?

14. What skills still matter for engineers

Gergely Orosz

I think it's safe to say you were a really great software engineer even before all the AI things started, and you seem to be a very productive engineer—of course, part of a team as well, but also individually. What are some skills of being a software engineer that are still as valuable, or maybe even more valuable, than before? And what are the ones that are maybe not as valuable and are best left behind?

Boris Cherny

Probably—okay, so the stuff that's left behind, or best left behind, is maybe very strong opinions about code style and languages and things like this. I can't wait to get past these endless language debates and framework debates and all this stuff. The model can just use whatever language and framework, and if you don't like it, it can just rewrite it for you. So, it just doesn't matter anymore.

I think something that still matters a lot today is being methodical and hypothesis-driven. This matters both in product design, in this world where everything is being disrupted and we need to figure out what to build next, and this is something everyone is thinking about. But it also matters for engineering day-to-day, something like debugging. You just have to be very methodical about it.

The model can do this and it can help a lot. But I think we're still in this transition point where you still need to have the skill. I don't know if you're still going to need to have it in 6 months.

Other skills that I think are more valuable are being curious and being open to doing things beyond your swim lane. So, if you're working on engineering, but you really understand the business side, you can just build really awesome products.

And I think the next billion-dollar product, after Claude Code—whatever the next startup is that becomes the next trillion-dollar startup—might just be 1 person that has some cool idea and whose brain is able to think across engineering and product and business, or design and finance and something else. People are going to become more and more multidisciplinary, and this will become more and more rewarded. So, in some ways, I think this will be the year of the generalist.

I think the other skill that's actually been rewarded a lot is having a short attention span. I've seen that rewarded now.

Gergely Orosz

Oh, yeah. It's like teenagers are using TikTok and all this stuff, and I think in some ways it's kind of dangerous for society because you want people that can think deeply and can contemplate ideas and aren't just moving on to the next idea very quickly.

Boris Cherny

But in some ways, I think this year is kind of the year that's going to reward it. It's like the year of ADHD. Because the work for me has become jumping between Claudes. It's become managing Claudes. And so it's not so much about deep work; it's about how good I am at context-switching and jumping across multiple different contexts very quickly.

Gergely Orosz

Could I add that, from what I understood from what you said, maybe you could add one thing, which is adaptability? You're saying, of course, that it's ADHD and you can jump across, but of course earlier you were very good at focusing deeply on one thing as well.

What strikes me about you—and maybe this is true for other people as well—is that you're just very open to adapting your working style and seeing what works well for this stage, especially when things are changing. I think the one certain thing we can be sure of is that whatever the next model that comes out, it will change again, and you need to be curious and open to adapting how you work, right?

Boris Cherny

Yeah.

15. Book recommendations

Gergely Orosz

And as a closing question, what's a book or books that you would recommend?

Boris Cherny

I've gone down a Cixin Liu rabbit hole. He's the Three-Body Problem guy, but he actually has a lot of other really good books. I really love his short stories. He has a couple of books of short stories. I'm a big fan.

For people who are new to sci-fi and want a little bit harder sci-fi, I really love Accelerando by Stross. This is a book I would totally recommend. It's essentially the product roadmap for the next 50 years, with takeoff kind of starting to happen and kind of an AI singularity. And then it ends up with this kind of group of lobster consciousnesses orbiting Jupiter.

And it’s just amazing, and the thing that I think it really captures is just the pace, this quickening, quickening, quickening pace of how this feels. It really matches the feeling right now. And then on the technical side, I would strongly recommend Functional Programming in Scala. Even if language choice just doesn’t matter as much anymore, I think there is this art to functional programming that just teaches you how to code better.

If you read this book, I think what’s really important is to do the exercises also, and I’ve gone through and done all of them probably like 3 times over, and it’s just amazing. It really just knocks this idea of functional types into your head, and it’s just a thing you can’t stop thinking about.

Gergely Orosz

Boris, thanks so much. This was awesome.

Boris Cherny

Yeah, thanks, Greg.

Gergely Orosz

This was a really interesting conversation, and the thing that I keep coming back to is Boris’s printing press analogy: the idea that medieval scribes were this tiny elite who could write, employed by kings who themselves were often illiterate, and that we software engineers might be in a similar position today. We are the scribes. We spent years mastering this craft, and now the printing press is arriving.

But what Boris told me is that the scribes did not disappear. They became writers and authors, and the entire market for written work expanded beyond anything anyone could have predicted. I do find this hopeful, and I also appreciate that Boris didn’t sugarcoat it.

16. Claude Code's architecture

The other thing that stuck with me is just how differently the Claude Code team built software. No PRDs, no mandatory ticketing system, designers and data scientists and finance people all writing code and building dozens or hundreds of prototypes before shipping a feature. And Boris is shipping 20 to 30 pull requests a day without editing a single line by hand.

And there are different verification systems in place: Claude Code reviewing its code, automated lint rules, best-of-N passes, and human code review.

与 Boris Cherny 一起打造 Claude Code — 文字稿与摘要 | BidClub