← 返回
70 min 2025-10

The Secrets of Claude Code From the Engineers Who Built It

概要

  • Claude Code 的诞生完全出于意外:Boris 在 Anthropic 用 API 原型搭了一个终端聊天工具,给模型 bash 工具后发现它自发写 AppleScript 自动化——"模型就是想用工具",这个发现催生了整个产品。前身 Cliop 是 Python 写的研究项目,启动需要 1 分钟,Boris 加入后手写第一个 PR 被 Adam Wolf 拒绝——"你手写的?用 Cliop。"
  • 产品哲学的核心是 latent demand(潜在需求):构建足够可 hack 的产品,观察用户如何"滥用"它,然后为此构建功能。Boris 将这种方法论追溯到 Meta 时期——Facebook Dating 源于发现 60% 的个人主页浏览来自异性非好友,Marketplace 源于 40% 的 Groups 帖子是买卖帖。Claude Code 的 hooks、slash commands、plugins 都是这一哲学的产物。
  • Anthropic 内部 70-80% 的技术员工每天使用 Claude Code,反馈频道每 5 分钟一条帖子。自 1 月以来公司规模翻倍,但人均生产力(以 PR 衡量)增长近 70%。内部有越来越多的人每月 Claude Code 花费超过 1000 美元,常见用例是大规模代码迁移——10 个 sub agent 并行处理。
  • "模型会吞噬 scaffolding"是团队的核心信念:每一代新模型都会让部分 harness 变得多余。Boris 昨天刚从 system prompt 删了约 2000 tokens(Sonnet 4.5 不再需要)。Plan mode 预计最终会被 unship——当模型能自行判断何时该规划。团队不怕做"3 个月后会被扔掉"的功能,但希望确实会被扔掉。
  • Claude Code 的未来形态正在从 CLI 向多形态扩散:IDE 扩展 → Web/Mobile(@claude on GitHub, 手机端操作) → 最终 Quads 监控 Quads。最近的模型可以自主运行约 30 小时,下一代预期数天。终端不是最终形态,但团队激光聚焦于让 CLI 成为最智能、最可定制的版本。
  • 贯穿全场的核心线索是 latent demand——从模型自发用 bash 写 AppleScript,到内部数据科学家自学终端用 Claude Code,到非编码用例爆发催生 Agent SDK 改名,Boris 和 Cat 的每一个产品决策都是在回应同一个信号:观察模型和用户"想做什么",然后为其铺路。

Claude Code 的意外诞生:从被拒的 PR 到"模型就是想用工具"

核心要点:Claude Code 不是有意设计的产品,而是从 API 原型实验中偶然长出来的——关键转折点是给模型 bash 工具后它自发开始自动化。

  • Claude Code 前身叫 Cliop,是一个用 Python 写的研究项目,启动需要 1 分钟,要跑一堆索引,"非常重的东西"
  • Boris 加入 Anthropic 后手写了第一个 PR,结果被 ramp-up buddy Adam Wolf 直接拒绝——"你手写的?你在干什么?用 Cliop。"Boris 试了 Cliop,给了任务描述,"one shot 了这个东西",尽管当时用的还是 Sonnet 3.5,还需要手动修 bug
  • Boris 后来用 Anthropic API 做原型,为了省事在终端搭了个聊天应用。关键时刻是给模型 bash 工具——"模型就开始用 bash 了,写 AppleScript 自动化各种东西。这是我见过最疯狂的事。当时我只用过 IDE 里一行两行的自动补全"
  • Cat 的 magic moment 更晚——"大概是 Sonnet 4 / Opus 4 的时候,我才觉得'天哪,这东西真的能用了'"
"The model just wants to use tools. We gave it bash and it just started using bash, writing AppleScript to automate stuff." —— Boris

工具哲学:少即是多——持续删减专用工具

核心要点:Claude Code 约有一打工具,团队每周都在增删,核心原则是尽量减少模型的选择负担。

  • 当前 Claude Code 有约 12 个工具(a dozen),"大多数周我们都会增减工具"
  • 最近删掉了 OS 工具——之前需要它来执行目录权限限制,但后来在 bash 里实现了同样的权限系统,OS 工具就不需要了。"少一个工具对模型来说就是少一点 context 里的选择"
  • 保留专用工具的两个理由:UX(可以给用户更好地展示结果,毕竟还有人在 loop 里)和权限控制(比 bash 更高效地执行文件访问限制)
  • "双重用途"设计原则——工具既是给工程师用的也是给模型用的,Boris 发现"为人类设计的优雅工具,翻译到模型上效果也好"。模型也能调用 slash commands,"这意味着我们定义一个工具,然后双方都能用"
"Everything you can do, Claude Code can do. There's nothing in between." —— Boris

Ant-fooding 文化与团队分工

核心要点:70-80% 的 Anthropic 技术员工每天使用 Claude Code,反馈频道每 5 分钟一条帖子。Cat 负责产品化和发布,Boris 负责技术方向,但功能创意来自团队每个人。

  • "Ant-fooding" 是 Anthropic 内部版的 dog-fooding——员工昵称是"ant"(蚂蚁)
  • 70-80% 的技术员工日常使用 Claude Code,反馈频道每 5 分钟 一条帖子,信号极快
  • Cat 自定位为"supporting role":确保定价和包装与用户共鸣、shepherding 功能走完发布流程、设定 ant-fooding 的质量门槛
  • 功能创意来自团队每个人——to-do lists 和 sub agents 是 Sid 做的hooks 是 Dixon 做的plugins 是 Daisy 做的
  • Boris 的产品直觉体现在一个小例子:他在两个终端间来回切换觉得烦,让 Claude 想个办法,Claude 提议了感叹号 bash mode,Boris 说"make it pink and then ship it"——这个功能一直保留至今

Slash commands、hooks 与可组合扩展体系

核心要点:Claude Code 的设计哲学是让系统的每个部分都可扩展——slash commands、hooks、plugins 共同构成了一个允许用户"hack"产品的体系。

  • Boris 常用的 slash commands:/commit(用 Haiku 模型执行,更便宜更快)、/pr/feature-dev(Sid 创建,结构化引导:先写 spec → 详细 plan → to-do list → 逐步实现)、/security-review/code-review(内部所有 code review 都由 Claude 做第一轮,人类只做最终审批)
  • Slash commands 支持模板系统:可以预嵌 bash 命令,并预授权特定操作(如 git commit、git push、gh)——运行 slash command 后不再被权限弹窗打断
  • Hooks 的典型用例:stop hook——在 agent turn 结束后自动运行测试,如果不通过就返回 "keep going" 让模型继续修。"这把非确定性的东西变成了确定性的结果"
  • Hooks 的诞生故事本身就是 latent demand 的例子:用户反馈"Claude Code 在问我权限但我出去喝咖啡了,能不能 ping 我的 Slack?"——于是 Dixon 做了 hooks,不是 Anthropic 自己做 Slack 集成,而是暴露扩展点让用户自己实现

Plan mode 与"模型会吞噬 scaffolding"的趋势

核心要点:团队深信每一代新模型都会让部分 harness 变得多余——他们不怕做"3 个月后会被扔掉"的功能,反而希望如此。

  • Boris 昨天刚从 system prompt 删了约 2000 tokens——"因为 Sonnet 4.5 不需要了,但 Opus 4.1 还需要"
  • Plan mode 预计最终会被 unship——"当模型能从你的意图判断应该先规划时,就不需要单独的 plan mode 了"
  • 这条边界随每个新模型移动:以前需要 plan mode 才能成功的任务,新模型可以直接 one-shot。"过去是 scaffolding 的东西,被更先进的模型吸收进模型本身"
  • 但目前仍然重要:Plan mode 能让成功率轻松提升 2-3 倍,是新手最常犯的错误之一——以为模型什么都能一步搞定
  • Boris 和 Dan 都用相同的"throwaway prototyping"方法:先让 Claude 盲做一遍,看它在哪里出错,从中学习,然后清掉重来——"这在过去不可能,因为你不会花钱让工程师 yolo 做一个没 spec 的功能"
"If anything, we hope that we will get rid of it in three months." —— Cat

Sub agents 的实战:从代码迁移到费用审计对手模式

核心要点:Sub agents 的核心价值不是拟人化分工,而是"不相关的 context window"——两个不知道彼此存在的上下文,往往比一个大 context 产出更好。

  • Boris 常用的 sub agents:plannercode review(同步用 sub agent,CI 用 slash command——因为同步时 code review 的内容跟他接下来做的事不相关,不想污染 context)
  • 内部大规模用法:10 个 sub agent 并行做代码迁移(lint rules、测试框架迁移),主 agent 先做 to-do list 然后 map-reduce 分发。"内部有越来越多的人每月花超过 1000 美元 在 Claude Code 上,常见用例就是大规模迁移"
  • 内部 /code-review slash command 里嵌套了多层 sub agents:一组负责找问题(claude.md 合规、git history、明显 bug),然后另一组 5 个 sub agents 专门检查这些结果是否为 false positive。"最终结果很棒——找到所有真正的问题,去掉了误报"
  • Dan 的非技术用例:用对手模式 sub agents 做费用报销——一个代表自己(pro-Dan),一个代表公司(auditor),两个 agent "do battle" 来确定哪些是合理费用
  • 灵感来源:Reddit 帖子有人做了前端 dev + 后端 dev + 设计师 + 测试 + PM 的 sub agent 组合。Boris 的评价:"有点可爱,可能太拟人化了,但真正的价值是不相关的 context windows"
"The value is actually the uncorrelated context windows where you have these two context windows that don't know about each other." —— Boris

从 Claude Code SDK 到 Agent SDK:非编码用例爆发

核心要点:改名时已有数千家公司在用,大量用例根本不是编码——底层原语足够通用,只要有 agent loop + 联网 + 写代码能力,几乎什么都能做。

  • Cat 发现了大量非编码使用场景:博客写作管理、邮件助手、市场研究(Cat 自己用来调研全球各公司的工程师数量做排名)、健康助手、金融分析、法律助手
  • Boris 的私人项目:刚搬新家,用 Agent SDK 做了一个购物顾问——输入需求,agent 搜索评价、价格、照片,展示不同沙发选项,反复迭代直到满意。"感觉就像跟一个真正的购物助手一起工作"
  • Boris 还有一个邮件回复 agent——Dan 调侃"我就知道回复我的不是你",Boris 回击"所以才延迟七天,agent 只是在非常认真地工作"
  • Noah Brier 上 Every 播客时展示的 Obsidian 笔记+思维导图用例在内部引起共鸣——"用 Claude Code 做这个组合的人数量惊人"

Latent demand 产品哲学

核心要点:Boris 的核心产品方法论是 latent demand——构建足够开放的产品让用户"滥用",然后观察他们在用什么,接着为此而建。

  • 来自 Boris 在 Meta 的经验:
  • Facebook Dating:发现 60% 的个人主页浏览来自与自己性别相反且不是好友的人——"也许我们做个约会产品能利用这种现有需求"
  • Facebook Marketplace:当时 40% 的 Facebook Groups 帖子是买卖帖——"人们已经在用这个产品买东西了,围绕它做产品大概率能行"
  • Claude Code 版本的 latent demand:用户说"Claude Code 一直在问权限但我出去喝咖啡了,能不能 ping 我的 Slack?" → 于是做了 hooks
  • 数据科学家 Brandon 自学终端和 JS 来用 Claude Code——"这些 code-adjacent 的人在 hack 产品,说明有需求让它对非纯工程师更易用"
  • 团队的平衡策略:激光聚焦于"为最好的工程师做最好的产品",但保持足够的可 hack 性让其他人也能用——"Cat 刻意把自己放在'普通用户'桶里,不用 Vim、没有疯狂的 tmux 设置,如果她会用某个功能,普通工程师也会用"

Compounding engineering 与 memory 模式

核心要点:Dan 在 Every 实践的"compounding engineering"——每个新功能不仅解决当前问题,还通过编码学习让下一个功能更容易构建。内部也看到了 diary/log 模式在记忆方面的潜力。

  • Dan 的做法:每个功能完成后,把所有学习(plan 的哪些部分需要修改、测试发现了什么问题)编码回 prompts、sub agents 和 slash commands,下次做类似的事时自动捕获
  • Fiona(Claude Code 团队新 manager)的案例:10 年没写过代码,加入第一天就 land PRs——"不仅 Claude Code 让重新上手代码变得容易,我也不需要 ramp up 任何 context,因为之前的人都把学习编码进去了"
  • 内部有人每个任务都让 Claude Code 写一篇日记(diary entry):做了什么、尝试了什么、为什么没成功。还有 agent 定期审阅过去的日记,综合提炼为观察
  • Boris 认为 memory 的难点是:"我说'把按钮变粉色',不代表我希望未来所有按钮都是粉色的"——从单次指令中很难判断哪些值得记住。从大量日志中综合提取 pattern 可能是更好的方式
  • 近 100% 的 Claude Code 内部测试由 Claude 编写——"不好的就不 commit,好的留下"。内部 lint rules 也 100% 由 Claude 编写

形态演进与"Quads 监控 Quads"的未来

核心要点:终端不是最终形态。团队正在实验 CLI → IDE 扩展 → Web/Mobile → 多 agent 协调等多种形态,同时激光聚焦让 CLI 成为最智能的版本。

  • 当前形态矩阵:CLI(核心)→ IDE 扩展(VS Code GUI,更无需终端)→ @claude on GitHub(手机操作,Boris 在开车等红灯时在 GitHub 上 @claude 修 issue)→ Web/Mobile(Claude Code on the web)
  • 模型自主运行时间持续增长:最近的模型约 30 小时,下一代预期数天。这带来新问题——"你不想关笔记本",Boris 亲身经历在做 DSPy prompt optimization 时保持笔记本打开不敢合盖
  • 下一步是 Quads 监控 Quads——需要新的形态让人类能 inspect 多 agent 状态,同时优化 agent 间通信带宽。Boris 预测未来几个月到一年会出现更多形态
  • 非技术用户的门槛问题:Cat 讲了市场团队一位同事第一次用终端时收到"大概 30 个弹窗要她接受各种权限"。VS Code GUI 扩展和 Web 版是降低门槛的第一步

生产力衡量与 AI 驱动开发的新挑战

核心要点:Anthropic 自 1 月以来规模翻倍,但人均 PR 增长近 70%——不过 PR 数量远不能完全反映 AI 带来的生产力提升。

  • PR 为最简指标,自 1 月以来人均增长近 70%
  • 但 PR 捕捉不到的部分更重要:原型更容易做、以前"在 cut line 以下"的功能现在可以顺手做掉、探索新方向的成本大幅降低
  • 新的产品管理挑战:"因为能 ship 的太多了,产品容易变得不够 cohesive——这里加个按钮、那里加个 tab、再来个小功能,最后失去了组织原则"
  • 更多代码也意味着更多维护负担:code review 需要更仔细、需要自动化 code review(内部已实现)、删除代码变得更重要
  • Boris 的偏好:"我最喜欢的 diff 是红色的 diff"(删除代码)

删除文化与 unshipping 原则

核心要点:Boris 的原则是 unship 某个功能时必须同时 ship 更好的替代品。Dan 坦承 Every 在这方面做得不好,感叹产品因为 AI 让 shipping 太容易而变得臃肿。

  • Boris 来自 Instagram 的经验:Instagram 非常有原则——"功能不到 50% WAU 使用就删掉"。相比之下 Facebook 从不 unship——只是把功能移到"没人看的溢出菜单里",形成"功能墓地"
  • 经典案例:Facebook unship pokes 时引发内部元老强烈反对——"出于情感原因不愿放手",尽管数据显示几乎没人用
  • 社会成本:"你真的不想成为那个告诉同事'unship 你做的东西'的人"
  • 实际操作:thinking 功能的 toggle 方式就经历了多次 unship——最初用自然语言("think about this"),但出现"don't think"误触问题(模型以为要思考),后来改用 tab 键 toggle,并 unship 了大部分 thinking 触发词,"保留了 ultra think 纯粹出于情感原因——那个彩虹 UI 太酷了"

Progressive disclosure 与模型教用户使用产品

核心要点:Claude Code 通过渐进式披露、利用已有心智模型的术语(hooks、plugins)、以及让模型自己教用户来降低复杂性。

  • 渐进式披露的典型例子:Control+O 可以看模型看到的完整原始 transcript——但只在工具结果被折叠时才提示这个快捷键,不在一开始就暴露
  • 术语选择策略:hooks、plugins 这些词在开发者生态里有成熟的含义——"确保我们构建的东西和开发者第一反应想到的一样"
  • 新方向:"模型教用户使用产品"——用户可以问 Claude Code 关于它自己的问题,它会查阅自己的文档回答。更进一步,用户看到模型调用 slash command,会意识到"原来我也可以这样做"
  • Todos 功能的原型迭代量惊人:Sid 做了 3-4 个原型,然后 Boris 又做了大约 20 个版本——"大概一天之内"。Plan mode 也重建了 3 次
  • 内部文化从"写文档"转向"做 demo"——"你想让人对你的东西兴奋?给我看 15 秒它能做什么"。Boris 认为这不仅适用于产品,也适用于所有创意工作——"以前要 pitch 一部电影,现在你可以做个 Sora 视频"

附录:关键人/机构/产品/数据

项目详情
Boris ChernyClaude Code 技术负责人,前 Meta(参与 Marketplace),产品哲学核心是 latent demand
Cat OlssonClaude Code 产品负责人,负责定价、发布流程,自居"普通用户"视角
Dan ShipperEvery CEO,Claude Code 重度用户,提出 compounding engineering 概念
Adam WolfBoris 的 ramp-up buddy,拒了他手写的第一个 PR
SidClaude Code 团队成员,创建 to-do lists、sub agents、feature-dev slash command
DixonClaude Code 团队成员,构建了 hooks 功能
DaisyClaude Code 团队成员,构建了 plugins 功能
FionaClaude Code 团队新 manager,10 年没写代码第一天 land PRs
EnigoClaude Code 团队成员,构建了 issue 自动 dedup + 主动 PR 功能
BrandonAnthropic 数据科学家,自学终端来用 Claude Code
Noah BrierEvery 播客嘉宾,展示了 Obsidian+Claude Code 用例
CliopClaude Code 前身,Python 研究项目,启动需 1 分钟
Agent SDK原 Claude Code SDK,改名时已有数千家公司使用
Sonnet 4.5当前 Claude Code 北极星模型,extended thinking 带来显著性能提升
70-80%Anthropic 技术员工每日使用 Claude Code 的比例
~70%自 1 月以来人均 PR 增长幅度
~2000 tokensBoris 昨天从 system prompt 删除的量(Sonnet 4.5 不再需要)
~30 小时最近模型的最大自主运行时间
1000+ 美元/月内部 power user 的 Claude Code 月度花费
50% WAUInstagram 的 unship 门槛——低于此就删