
@kevinrose 问该用什么 IDE。在 128 个回答里,我这句互动最高:不要 IDE。只要 plan.md 文件和语音。下面就是我这句话的全部意思。
https://github.com/EveryInc/compound-engineering-plugin
1. 一有想法,就用 /ce:plan 或 /ce:brainstorm
我学到的最重要的一件事:只要脑子里冒出一个想法,就立刻 /ce:plan。
不是让我想想。不是让我先开始写代码。就是 /ce:plan。每次都这样。一个离谱的产品想法?/ce:plan。有人在 GitHub 上提了个 bug?把 issue URL 复制过来,粘贴一下,/ce:plan。终端里报错?用 Cmd+Shift+4 截图,Ctrl+V 直接贴到 Claude Code 里,然后 /ce:plan fix this。Claude Code 支持图片输入:bug 截图、错误信息、设计稿、Slack 对话,它都会据此写出一个计划。
运行它时,背后发生的事是这样的。/ce:plan 会并行启动多个研究 agent。一个分析你的代码库:读文件、找模式、核对你的约定。另一个去你的 docs/solutions/ 里翻以前 bug 的经验。如果话题值得,还会有更多 agent 去研究外部最佳实践和框架文档。全部同时进行。
然后它会把结果汇总,写成一份结构化的 plan.md:哪里出了问题,要用什么思路,哪些文件需要改,带复选框的验收标准,以及你自己代码里应该沿用的写法。不是泛泛的建议,而是扎在你的代码库、你的约定、你的历史里。
/ce:work 会拿着这个计划去把它做出来。把计划拆成任务,逐项实现,跑测试,把验收项一条条勾掉。上下文丢了?开一个新会话,把 plan 指过去,就能从中断处继续。计划就是能穿越一切的检查点。
传统开发是 80% 写代码,20% 做计划。这里完全反过来。正如 @jarodtaylor 说的:如果把 80% 的时间用 Opus 做规划,再让 subagents 一拥而上……真正的思考都发生在 plan 里,执行反而变成机械动作。
Compound Engineering 就是把这套东西落地的插件。来自 @EveryInc:
/plugin marketplace add EveryInc/compound-engineering-plugin
我先成了铁粉。后来还成了贡献者,在 GitHub 上是第 3 名贡献者,21 个 commit,只排在核心团队后面。几周前 @kevinrose 才把它介绍给我。
/last30days 里,我有 70 个计划文件和 263 个 commit。差值是早期的 commit,那时还没养成这套纪律。现在的规矩是:除非真的就是改一行,否则一定先有 plan.md。
2. 做个语音党
在 LLM 之前,我特别讨厌语音备忘。苹果自带的听写功能让我想把手机扔出去。但语音对着 LLM 不一样。转写不需要完美,因为 Claude Code 能读懂上下文,会猜出麦克风听错的地方。你可以含糊、说到一半停住、重新起一句。语音终于能用了,因为听的人够聪明,能把空缺补上。
Monologue(@usemonologue,来自 Every,也就是做 Compound Engineering 的那家公司)会把语音直接灌进当前聚焦的应用。你说,它就把字打到 Claude Code 里。WhisperFlow 也很好。随便选一个。我在办公室买了个鹅颈麦克风。
我现在就在特斯拉的 Full Self-Driving 里,一边送孩子,一边口述这段。这个段落是说出来的,不是打出来的。
3. 同时跑四到六个会话
我一天大概就是这么过的。开四到六个 Ghostty 窗口,每个窗口跑一个独立的 Claude Code 会话。一个在写计划,一个在按另一个计划搭建,一个在跑 /last30days 调研,一个在修我测试上一件东西时发现的 bug。
一个窗口里 /ce:plan 正在拉起研究 agent 时,我会切到另一个窗口,对已经写好的计划 /ce:work。它在构建时,第三个窗口又会贴进来一个新 bug。等我转回第一个窗口,计划已经写完,在 Zed 里等着了。
所以 bypass permissions(下一节)没有商量的余地。每个动作都要弹一次 Allow?,根本没法切上下文。所有会话都得能自驱运行。看一眼,做反应,继续走。真把东西弄坏了也无所谓,GitHub 在那里兜底。
这也是为什么我的 MacBook 大概一小时就没电。六个 Claude 会话并行跑。刚下单了新款 MacBook Pro。
4. 改三个设置,体验全变
Claude Code 默认模式会对每一次编辑、每一个命令都要权限确认。要改三处配置。
"Dangerously skip permissions"(对,它就叫这个)。~/.claude/settings.json:
{ "permissions": { "allow": [ "WebSearch", "WebFetch", "Bash", "Read", "Write", "Edit", "Glob", "Grep", "Task", "TodoWrite" ], "deny": [], "defaultMode": "bypassPermissions" }, "skipDangerousModePermissionPrompt": true }
skipDangerousModePermissionPrompt: true 才是关键。没有它,Claude 每个会话都会让你确认一次。也可以用 Shift+Tab 来切换。感谢 @danshapiro(Glowforge 创始人,《Hot Seat》作者)。我给一个朋友配置 Claude Code 时,AI 还会主动劝他别开这个。得直接一点。这是你的电脑。
Claude 结束时的提示音。 在同一个文件里加上:
{ "hooks": { "Stop": [ { "hooks": [ { "type": "command", "command": "afplay /System/Library/Sounds/Blow.aiff" } ] } ] } }
可以走开。听到声音再回来。四到六个会话同时跑时,需要立刻知道是哪一个刚结束。感谢 Myk Melez。
Zed 自动保存。 在 Zed 设置里(Cmd+,):
{ "autosave": { "after_delay": { "milliseconds": 500 } } }
这招有点像 Google Docs。Zed 每 500 毫秒保存一次。Claude Code 会盯着文件系统。Claude 改了文件,Zed 里立刻出现变化;你在 Zed 里打字,Claude 一秒内就能看到。Ghostty 一半屏,Zed 另一半屏,都盯着同一个文件。感觉就像在 Google Doc 里协作,只不过其中一个协作者是 AI。
5. 先调研,再写计划
在 /ce:plan 之前,我常常先对同一件事跑一遍 /last30days。
我当时在 Vercel 的 agent-browser 和 Playwright 之间犹豫。与其啃文档,不如直接跑 /last30days Vercel agent browser vs Playwright。几分钟内就出来了:78 个 Reddit 线程、76 条 X 帖子、22 个 YouTube 视频、15 个 HN 帖子。agent-browser 用的上下文 token 少 82-93%。Playwright 光工具定义就要塞 13,700 个 token。@rauchg 的那条帖子拿了 964 个赞。
我把完整输出喂给 /ce:plan integrate agent-browser。计划里写的就是社区此刻真实在说什么,而不是六个月前的训练数据。
/last30days 是开源的(4.5K stars,github.com/mvanhorn/last30days-skill)。它会并行搜索 Reddit、X、YouTube、TikTok、Instagram、HN、Polymarket,以及网页。我什么都这么做:选库之前、做功能之前、写这篇文章之前。我还跑了 /last30days Compound Engineering,给第 1 节补上最新的社区引用。先调研,再写计划,再动手搭建。这才是真正的循环。

6. 任何会议都能变成一个 plan.md
我和一个潜在候选人吃了午饭。聊了一个公司里没人推进的新产品想法,也聊了吃的、餐厅、孩子。一个半小时的普通聊天,中间穿插着产品头脑风暴。
我开着 Granola。饭后,我把完整的转写记录贴进 Claude Code:/ce:plan turn this into a product proposal。
真正神奇的是:Claude Code 已经知道我们的产品代码在 GitHub 的哪里。它也能访问我的公司战略文件夹,里面是我以前写过的每一份战略 plan.md。所以它处理 Granola 的转写时,不只是从午饭聊天里抽取点子,而是在对照我们的真实代码库,以及之前做过的每一个战略决策。Granola context + codebase + prior strategy plans = gold.
一次就生成了很棒的提案。目标、用户故事、技术路线、里程碑。把餐厅那部分直接忽略了。当晚就发给了候选人。
他现在已经全职和我们一起做那个产品。
Granola 现在也支持 MCP 了,所以我直接在 Claude Code 里用它,不用再复制粘贴。每次会议的上下文都会直接流进 plan。
7. plan 文件用在一切事上,不只写代码
我在写公司的一份战略文档。Claude Code 和 markdown 文件并排开着。我对着 Monologue 说:"给我三个 go-to-market 的方案,把每个的优缺点写出来。"
三套方案立刻出现在 Zed 里。我说:"第二个最接近,但第一个措辞更好,把它们合并。" 它马上更新。我说:"现在把最大风险补上。" 它加上。我说:"第二段太长。" 它缩短。
Claude Code 会拉取我们的 GitHub,所以它懂当前产品。它也能访问我以前写过的所有战略 plan.md。每次我写新的定位,它都带着我所有历史战略决策的完整上下文。那种复利式的上下文,才让每一份新计划都比上一份更好。
战略文档、产品规格、竞品分析、这篇文章。都是同一套流程。说出来,写计划,反复迭代。
8. 用 Mac Mini 远程跑 Claude Code
我有一台 Mac Mini 专门给 OpenClaw 用,但我还用它做了两件事:
手机上的 Telegram。 Claude Code 有 Telegram 集成。我用手机在 Telegram 上给 Mac Mini 发消息。吃饭时想到一个 bug,就在 Telegram 里输入 /ce:plan fix the timeout issue。等回到屏幕前,Zed 里已经躺好 plan 了。我不在电脑旁时,Claude Code 甚至会用我的 OpenClaw AgentMail 把计划文件发到邮箱。
飞机上的 tmux。 感谢 Nathan Smith。Claude Code 对飞机 wifi 的适应很差,断线了会话就挂掉,而且还不提示。但如果先 tmux 进 Mac Mini,让会话跑在那台机器上,你的笔记本就只是一个窗口。大西洋上 wifi 断 20 分钟?重连就行。会话还在原地,而且它确实在干活。
从欧洲飞回来的那趟航班,全程都在发功能。
这套流程我也用来做开源
如果你看一下我的 GitHub 主页(github.com/mvanhorn),下面这些是我最近被合并进去的一些项目,而且每一个都是在写任何一行代码之前就先有 plan.md:

-
Python - defaultdict repr 无限递归,man page 文本换行
-
OpenCV - HoughCircles 返回类型,YAML 解析器堆溢出
-
Vercel Agent Browser - Appium v3 vendor prefix,WebSocket fallback,批量命令工作流(#5 贡献者)
-
OpenClaw - browser relay,rate limit UX,iMessage 投递,Codex 沙箱检测,语音通话
-
Zed - $ZED_LANGUAGE task variable,Reveal in Finder 标签页右键菜单,git 面板 starts_open 设置
-
Paperclip - SPA 路由,plugin domain events,promptfoo 评估框架(#3 贡献者)
-
Compound Engineering - plan gating,串行评审模式,skills 迁移,NTFS 冒号处理(#3 贡献者)
我老婆对我很不爽
我走到哪都背着电脑。四到六个 Ghostty 标签页,再加上 Zed。她当然不开心。Mac Mini + Telegram 有点帮助。但当我想要多个计划实时并行推进时,还是得靠笔记本。她真的很希望我别再把电脑带去学校接送了。
对不起,亲爱的。
这篇文章就是用这套流程写的
这是 Zed 里的一份 markdown 文件。Claude Code 跑在 Ghostty 里。我对着 Monologue 说:"主题不对,重写开头。" "把 Granola 的故事加进去。" "别把 Zed 叫成我的 IDE。" Claude 就改。改动立刻出现在 Zed 里。我再看,再反应。一共完整重写了七次。
这就是我知道的一切。一个语音 app,一个 plan 文件插件,三项配置改动,四到六个并行会话,一台 Mac Mini,再加上把会议变成产品提案的能力。不要 IDE。不要代码。说出来,写计划,去搭建。桌边、沙发上、车里都行。
彩蛋:当你把 tokens 用光时
这种效率会把你 $200/month 的 Claude Max 套餐烧得飞快。一天四到六个并行 Opus 会话,账单很快就对上了。
答案是:再买一个 $200/month 的 Codex 套餐。装上 Codex CLI,Compound Engineering 就能改用 Codex 的额度来构建。我刚把 /ce:work --codex 加进 Compound Engineering,今天就合并了:当 Claude 的额度不够时,把实现工作委派给 Codex。
有些朋友用 Codex 来做 Claude Code 产出的代码评审,反过来也一样。也有人更喜欢 Codex 的代码输出,但用 Claude Code 来做编排和调度。两套方案互补:Claude 负责规划,Codex 负责重实现。
我还有一个 "night-night" 模式,睡觉时让它跑,但那就以后再说。
彩蛋 2:迪士尼世界全程复盘
为了把这套流程从头到尾展示一遍,而且选一个非代码的例子,这里给一个今天的真实案例。我在足球场看孩子比赛,顺便和另一位家长聊起了 Disney World 的行程。我掏出笔记本给她演示。
Step 1: /last30days Disney World。两分钟后,全貌就出来了。66 个 Reddit 线程(11,804 个 upvote)、34 条 X 帖子、8 个 YouTube 视频。价格震惊是最主流的话题:r/DisneyPlanning 上一篇 $8,500 的行程报告收了 183 条评论。光 3 月就有 6 个项目关闭。Buzz Lightyear 4 月 8 日重新开放,换了新的 blasters。Rock 'n' Roller Coaster 正在变成一个 Muppets 主题的项目。DinoLand 被拆了。
Step 2: "更具体地说,Pairl April 16th 哪些开放 / 哪些不开放"(连拼写错误也一样,CC 不在乎)。Claude 去查了检修日历,把 last30days 的数据交叉对照,给了我完整的开放/关闭清单。
Step 3: /ce:plan 我会在 Disney World 待一天。我至少想跑三个园区,也许四个,大概率四个,因为我疯了。我想在 Epcot 去玩 Guardians,在 Hollywood Studios 玩几个项目,在 World 玩几个项目,在 Animal Kingdom 去坐 Everest,还要至少一个 Avatar 的项目。再加上:"要怎么把 Genie Plus 和其他那些东西都安排好,才能让这套行程跑得通?另外,出发前一周是不是得查点什么?什么时候买什么?帮我把提醒都设好。我不在乎吃。我没订酒店。happy to pay the $25 for one time pass"
Claude 的研究 agent 拉起了,和 last30days 数据交叉对照,写出一份结构化的 plan.md:园区顺序(AK -> HS -> Epcot -> MK),精确的 Lightning Lane 预订策略,4 月 13/14/15 日早上 7:00 的三个闹钟提醒,哪些项目需要 Single Pass(每个 $14-22)对比 Multi Pass,以及孩子的身高要求。
Step 4: 在 Zed 里打开 plan。过了一遍。然后让另一位家长这样写她的 plan:"我准备去 Disney World 玩一趟,进园玩三天。告诉我最高效的路线,要买哪些 passes,要加购哪些 extras...孩子分别 8 岁和 5 岁。" Claude 写出一份新的 305 行计划,包括 Rider Switch 的流程、按天的行程表,以及一个提醒:"这周穿鞋量一下你家 5 岁孩子的身高。"
Step 5: "csn you pushCan you 把最后这个用 light mode 发布到一个 Vercel 站点上?这样更容易看。"(更多拼写错误,依然没关系。)Claude 构建了一个干净的 HTML 页面并部署了。
在线地址 disney-plan-ebon.vercel.app

Step 6: 通过 Telegram 把 .md 文件丢进 OpenClaw。然后说:"can you make a plan to add all these reminders to YOU with dobel safeties in case you mess up day before / calendar etc." OpenClaw 读了 plan,在我的工作日历里建了日程事件,同时加了 cron job 备份,用 Telegram 给我推送。每个关键预订窗口都有双保险。Apr 13 at 3:50 AM PT: "BUY Multi Pass NOW." Apr 16 at 3:50 AM: "BUY Single Passes NOW." 都是在 7 AM ET 窗口开启前 10 分钟提醒。触发后自动删除。
https://github.com/mvanhorn/last30days-skill
语音到调研,到计划,到网站,到自动提醒。发生在足球场边。
这就是这套流程。它能用在代码、战略、开源、文章上,而且显然也能用在 Disney World。
/last30days 是开源的。4.5K stars。70 个 plan 文件还在继续涨。 @slashlast30days - github.com/mvanhorn/last30days-skill Compound Engineering: @EveryInc Monologue: @usemonologue (from Every) Granola: granola.ai (now with MCP) Ghostty: ghostty.org Zed: zed.dev
