Warp Internal Doc · CS146S Week 5
How Warp uses Warp to build Warp:一份来自 Warp 内部的「编码强制令」
The Coding Mandate — Warp's internal engineering practice
📄 公开 Notion 文档🏢 Warp 工程团队内部规范🐶 Dogfooding 实践
Warp 团队要求每一个编码任务都从「在 Warp 里发一条 prompt」开始——这不是一句口号,而是一套写清楚了升级路径、质量红线和落地技巧的内部规范。它坦率到什么程度?连「实在不行就手写代码,我们毕竟要真的交付软件」都白纸黑字写了进去。这份文档是观察一家 AI 工具公司如何吃自己狗粮(dogfooding)的一手样本。
⚡
TL;DR
01
🎯 一段话读懂全文
Warp 的编码强制令(Coding Mandate)=
每个编码任务先在 Warp 里发 prompt;成功就在内部频道分享,10 分钟没进展就报反馈、可换竞品工具试、最后允许手写。理由有三:提示编码在很多任务上真的更快、dogfooding 是改进产品的最好方式、用竞品能建立「产品还差在哪」的直觉。同时立了一条硬红线:
你对提交评审的代码负全责,「AI 写的」永远不是借口。落地技巧包括:告诉 agent 怎么造而不只是要什么、拆小任务别 one-shot、动手前先看计划、把重复指令沉淀成 rules、把重复流程沉淀成 prompts、给 agent 配 MCP 上下文、所有问题优先做成 eval。
📜
强制令本体:五步升级流程
02
原文标题就叫 The Coding Mandate:「Warp 的编码强制令:每个编码任务都从 Warp 开始」。它不是「只许用 Warp」,而是一条明确的升级路径:
每个编码任务,从在 Warp 里发一条 prompt 开始
这是不可跳过的第一步。
成功了?把战果分享到 #warped-it 频道
让「用 prompt 干成活」的案例在团队里可见。
10 分钟后觉得是在浪费时间?报反馈
把失败情况发到对应的 #feedback- 频道;附上你的 prompt、会话 id 等,团队可以定位问题、甚至围绕它构建一个 eval;这也是大家互相交流「怎么用 Warp 写代码」技巧的机会。
接着,鼓励你换一个 AI 编码工具再试(如 Cursor、Claude)
如果换了工具运气更好——请汇报什么顺利、什么不顺利。
最后,直接手写代码
原文原话:「我们毕竟要真的交付软件,如果手写仍然是最快的,你就应该手写。」
🤔
为什么要有强制令:三个理由
03
① 用 prompt 写代码,在很多任务上确实更快
- 省去手写代码的时间;
- 支持多线程开发(同时推进多个任务);
- 在你不熟悉的代码区域尤其有用——随着代码库增长,「不熟悉的部分」会越来越多,Warp 能帮你快速学懂这些新地盘。
② Dogfooding(吃自己的狗粮)是改进产品的最好方式
- 强制令的很大一部分动机,就是让全员使用并反馈自己正在造的东西;
- 原文说得很重:「我们要求用户这样工作,并把公司押注在这上面,那我们最好足够相信这套工作流,愿意自己先用。」
③ 用竞品能建立「可能改进什么」的直觉
使用竞争对手的产品,能帮团队直观感受自家产品可能差在哪、以及什么是可能做到的。
🚨
红线:你对提交的代码负全责
04
⚠️ 原则(接近原文语气)
你必须像亲手写的一样理解你提交评审的每一行代码。agent 模式生成的代码,必须达到与手写代码相同的质量标准:结构良好(well-factored)、测试充分(well-tested)、遵守团队关于注释、API、import、测试文件位置等编码约定。
「这是 AI 写的」永远不能成为 bug 或劣质代码的借口——AI 是工具,不是软件团队里可以担责的一方。
此外,团队常规的 How We Code 规范在提示编码时依然全部适用(小 PR、feature flag 等等)。
🏗️
别只说要什么,要告诉 agent 怎么造
05
原文的表述:如果你只对 agent 说「我要一个像 X 那样工作的功能」,它产出的代码大概率达不到团队标准。正确姿势是把工程决策交代清楚:
- 数据模型应该长什么样;
- 我们想要什么样的 API;
- 代码应该放在哪里;
- 应该写哪些测试。
只给目标、放任 agent 自己「摸着结果走」(goal seek),最终会浪费大量时间——产出的代码也许「能跑」,但不可维护、不可测试、不可组合。
❌ 只给结果
「给我做一个像 X 那样的功能。」→ 代码能跑,但结构、测试、可维护性大概率不达标。
✅ 给工程方案
「数据模型这样设计、API 长这样、代码放这里、写这些测试。」→ agent 沿着你的工程决策产出达标代码。
🧩
拆小任务,不要 one-shot 大改动
06
- 让 agent 做小而自包含的修改和提交、频繁核对方向,效果会好得多;
- 反模式:试图让 agent 一口气(one-shot)完成需要产出大量代码的复杂修改——one-shot 适合简单改动,不适合复杂功能;
- 让 agent 边做边频繁写测试,是逼它增量工作的好办法;
- 经常查看进行中的改动,确认它推进的方式和你亲手写时一致——目前可以用 GitHub UI 或其他 PR 审查工具,以后 Warp 会更原生地支持这种审查流;
- 让 Warp 一路替你写好提交信息、按步提交,需要时可以随时回滚。
🧠
确保你理解 Warp 在做什么
07
- 在 Warp 动手改代码之前,先要一份解释或计划;
- 对计划进行迭代,让它给出多种可选方案和不同实现思路——确保在它开始产出 diff 之前,你已经把大图景想清楚;
- 反过来也可以:让 Warp 端到端做一个大改动「看看什么是可能的」,但要有心理预期——之后得回头把它拆成可理解的小块,才能达到团队质量线。
📈
投资学习,把心得共享出来
08
- 用得越多,你会逐渐建立起「该给什么上下文、什么样的提示最有效」的直觉;
- 请把这些知识分享给团队——原文的判断:「提示编码是一门全新的学科,我们各自的直觉都不一样,一起学才快。」
- 用好 Warp 的高级能力来优化工作流:
- 用 rules、prompts 和 WD(Warp Drive)对象作为持久上下文;
- 用
@ 标注文件;
- 做 UI 改动和调试时附上图片;
- 多试不同的模型;
- 在本地架设多份 warp-internal 和 warp-server 副本,才能有效地多线程并行开发。
📣
报告问题:第一反应是做成 eval
09
原文作者强调「怎么强调都不过分」:只要有什么不好用,就报到对应的 #feedback- 频道。值得报告的情形包括:
- 服务端错误或客户端 bug;
- agent 绕圈子,烧请求、浪费时间;
- agent 忘记上下文;
- 缺少能帮你完成任务的功能;
- 高延迟、AI 表现变笨、diff 应用错位……等等。
🧪 处理反馈的第一直觉
原文:「在反馈处理侧,我们对这些问题的第一直觉应该是
为它们构建 eval。」——把一次性的坏体验固化成可回归的评测用例,这与业界 AI 工程实践中「eval 驱动开发」的思路一致。
🔌
基础设施三件套:MCP / Rules / Prompts
10
① 配好 MCP server,让 agent 随手拿到上下文
原文列出「每个人都应该配上」的服务器:Sentry、Linear、Notion、Slack(原文此处还留了一个开放的「<what else>」占位,意为清单待补充)。并附一句经验:「agent 模式修 panic、从 Linear 快速进入状态的能力,会让你吃惊。」
② 把重复出现的约定沉淀成 rules
凡是你发现自己反复对 agent 交代的事(跑哪个 linter、unwrap/expect 的代码约定、import 规则、测试文件位置等),就花点时间做成 Warp Drive rules。
③ 把重复出现的流程沉淀成 prompts
凡是你发现自己在重复执行的任务,就值得做成一条 Warp Drive prompt。作者自己的例子:生成 commit、创建和编辑 PR 描述、解决合并冲突等,都做成了 prompt。
📖
术语表(增补)
11
- Coding Mandate
- 编码强制令:Warp 内部「每个编码任务从 prompt 开始」的强制工作流。
- dogfooding
- 「吃自己的狗粮」:公司内部使用自家产品,以第一视角发现并改进问题。
- #warped-it / #feedback-
- Warp 内部 Slack 频道:前者晒「用 prompt 干成活」的战果,后者按主题收集失败反馈。
- eval
- 可重复运行的 AI 行为评测用例;Warp 把用户反馈的坏案例优先固化成 eval 来防回归。
- one-shot
- 试图让 agent 一次性完成整个复杂改动;原文视为复杂功能场景下的反模式。
- goal seek
- 只给目标、放任 agent 自行摸索实现路径;原文认为这会产出「能跑但不可维护」的代码。
- Warp Drive(WD)
- Warp 中承载 rules、prompts 等可复用对象的地方——原文将「WD objects」与 rules、prompts 并列称为 agent 的持久上下文。
- feature flag
- 功能开关,把新功能的发布与代码合入解耦;属于 Warp 常规工程规范的一部分。
- panic
- 程序的运行时崩溃(Rust 术语);原文说 agent 修 panic、从 Linear 进入状态的能力会让你吃惊。
一句话带走
强制令的本质是:把「先试 AI」变成默认,把「人负全责」变成底线,把「每次失败」变成 eval。五步升级路径保证了它不教条(手写代码仍是合法终点),质量红线保证了它不失控(AI 永远不是借口),而「rules / prompts / MCP + 反馈进 eval」的闭环,则把个人经验持续沉淀为团队资产。