返回列表
🧠 阿头学 · 💬 讨论题 · 💰投资

AI 编程的新主流程不是写代码,而是先写 plan.md

这篇文章最有价值的判断是“LLM 时代真正稀缺的是规划与编排,不是手写代码”,但作者把个人高配、高风险、强生态绑定的工作流包装成普适方法,这一步明显说过头了。
打开原文 ↗

2026-03-24 原文链接 ↗
阅读简报
双语对照
完整翻译
原文
讨论归档

核心观点

  • 计划文件成为核心资产 作者最站得住脚的观点是:`plan.md` 不只是笔记,而是跨会话、跨中断、跨任务类型的“状态容器”。这比把 AI 当一次性对话框更先进,因为它确实提高了可恢复性、可委派性和验收清晰度。
  • 先调研再计划是有效增益 `/last30days → /ce:plan → /ce:work` 这套链路有明确合理性,尤其是先抓近 30 天社区信息来弥补模型时效性不足,这比直接让模型“凭记忆”做技术选型更靠谱;但它更像舆情雷达,不是严肃证据本身。
  • 多会话并发提升吞吐,但也放大失控风险 同时跑 4-6 个会话确实符合 agent 时代的“异步编排”逻辑,人的角色从执行者转向调度者,这个方向判断是对的;但作者几乎不谈并发幻觉、误操作、上下文污染和错误传播,这个忽略很危险。
  • “不要 IDE”是修辞,不是事实 作者口头上否定 IDE,实际却高度依赖 Zed、Ghostty、GitHub、tmux、Mac Mini、Telegram 等完整工程环境;更准确的判断应是“IDE 降级为协作画布”,而不是“IDE 不要了”。
  • 文章有明显生态带货属性 作者既是 Compound Engineering 的核心贡献者,又反复曝光 Every 生态产品和自己的开源项目,这不是中性经验总结,而是夹带强烈立场的范式推销;但即便如此,其中“计划优先”和“语音降低表达摩擦”两点仍然有真实含金量。

跟我们的关联

1. 对 ATou 意味着什么:最该吸收的不是具体工具,而是“先把任务转成计划文件再执行”的纪律。下一步可以把产品想法、bug、PRD 都先沉淀成统一模板的 plan.md,再决定要不要交给 AI 或人执行。 2. 对 Neta 意味着什么:这篇文章本质上是在定义 agent 时代的新工作流接口,计划文件就是“中间表示层”。下一步可以研究如何把计划、验收标准、上下文引用做成可复用协议,而不是只盯着模型回答质量。 3. 对 Uota 意味着什么:这里暴露出一个真实投资信号——未来价值可能不在“更强聊天模型”,而在“调研-规划-执行”的编排层。下一步应关注谁能把 plan、memory、tooling、review 串成稳定产品,而不是只会秀 demo。 4. 对三者共同意味着什么:作者证明了知识工作正在从“单线程问答”转向“共享文档上的持续协作”,但也同时暴露安全、成本、心智负担都很高。下一步不该照抄他的极客姿势,而该抽象出低风险、低门槛版本。

讨论引子

1. `plan.md` 会不会成为 agent 时代比代码更重要的生产资料,还是这只是个人工作习惯的夸大? 2. “先看最近 30 天社区讨论”到底是在提高判断质量,还是在把决策交给噪音和情绪? 3. 如果必须在“高自主 agent”与“高安全可控”之间二选一,团队应该把边界画在哪里?

@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。

https://github.com/mvanhorn

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

@kevinrose asked what IDE to use. My reply got the most engagement out of 128 answers: "No IDE. Just plan.md files and voice." Here's everything I meant by that.

@kevinrose 问该用什么 IDE。在 128 个回答里,我这句互动最高:不要 IDE。只要 plan.md 文件和语音。下面就是我这句话的全部意思。

1. The Moment You Have an Idea, It's /ce:plan or /ce:brainstorm

1. 一有想法,就用 /ce:plan 或 /ce:brainstorm

The single most important thing I've learned: the moment I have an idea, it's /ce:plan.

我学到的最重要的一件事:只要脑子里冒出一个想法,就立刻 /ce:plan。

Not "let me think about this." Not "let me start coding." /ce:plan. Every time. A crazy product idea? /ce:plan. Someone posts a bug on GitHub? Copy the issue URL, paste it, /ce:plan. Error in your terminal? Screenshot it with Cmd+Shift+4, paste it directly into Claude Code with Ctrl+V, /ce:plan fix this. Claude Code accepts images - screenshots of bugs, error messages, design mockups, Slack conversations - and writes a plan from them.

不是让我想想。不是让我先开始写代码。就是 /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 对话,它都会据此写出一个计划。

Here's what happens under the hood when you run it. /ce:plan launches multiple research agents in parallel. One analyzes your codebase - reads your files, finds patterns, checks your conventions. Another searches your docs/solutions/ for learnings from past bugs. If the topic warrants it, more agents research external best practices and framework docs. All simultaneously.

运行它时,背后发生的事是这样的。/ce:plan 会并行启动多个研究 agent。一个分析你的代码库:读文件、找模式、核对你的约定。另一个去你的 docs/solutions/ 里翻以前 bug 的经验。如果话题值得,还会有更多 agent 去研究外部最佳实践和框架文档。全部同时进行。

Then it consolidates and writes a structured plan.md: what's wrong, what approach to take, which files to touch, acceptance criteria with checkboxes, patterns to follow from your own code. Not generic advice. Grounded in your codebase, your conventions, your history.

然后它会把结果汇总,写成一份结构化的 plan.md:哪里出了问题,要用什么思路,哪些文件需要改,带复选框的验收标准,以及你自己代码里应该沿用的写法。不是泛泛的建议,而是扎在你的代码库、你的约定、你的历史里。

/ce:work takes that plan and builds it. Breaks it into tasks, implements each one, runs tests, checks off criteria. Context gets lost? Start a new session, point it at the plan, pick up where you left off. The plan is the checkpoint that survives everything.

/ce:work 会拿着这个计划去把它做出来。把计划拆成任务,逐项实现,跑测试,把验收项一条条勾掉。上下文丢了?开一个新会话,把 plan 指过去,就能从中断处继续。计划就是能穿越一切的检查点。

Traditional dev is 80% coding, 20% planning. This flips it. As @jarodtaylor put it: "If you spend 80% of your time planning it with Opus and then let subagents swarm on it..." The thinking happens in the plan. The execution is mechanical.

传统开发是 80% 写代码,20% 做计划。这里完全反过来。正如 @jarodtaylor 说的:如果把 80% 的时间用 Opus 做规划,再让 subagents 一拥而上……真正的思考都发生在 plan 里,执行反而变成机械动作。

Compound Engineering is the plugin that makes this real. From @EveryInc:

Compound Engineering 就是把这套东西落地的插件。来自 @EveryInc:

/plugin marketplace add EveryInc/compound-engineering-plugin

/plugin marketplace add EveryInc/compound-engineering-plugin

I became a superfan. Then I became a contributor, the #3 contributor on GitHub, 21 commits, behind only the core team. @kevinrose introduced me to it a few weeks ago.

我先成了铁粉。后来还成了贡献者,在 GitHub 上是第 3 名贡献者,21 个 commit,只排在核心团队后面。几周前 @kevinrose 才把它介绍给我。

I have 70 plan files and 263 commits on /last30days. The gap is early commits before I had this discipline. My rule now: unless it's literally a one-line change, there's always a plan.md first.

/last30days 里,我有 70 个计划文件和 263 个 commit。差值是早期的 commit,那时还没养成这套纪律。现在的规矩是:除非真的就是改一行,否则一定先有 plan.md。

2. Get Voice-Pilled

2. 做个语音党

I couldn't stand voice notes before LLMs. Apple's built-in dictation made me want to throw my phone. But voice-to-LLM is different. The transcription doesn't have to be perfect because Claude Code understands context. It guesses what the mic got wrong. You can mumble, trail off, restart a sentence. Voice finally works because the listener is smart enough to fill in the gaps.

在 LLM 之前,我特别讨厌语音备忘。苹果自带的听写功能让我想把手机扔出去。但语音对着 LLM 不一样。转写不需要完美,因为 Claude Code 能读懂上下文,会猜出麦克风听错的地方。你可以含糊、说到一半停住、重新起一句。语音终于能用了,因为听的人够聪明,能把空缺补上。

Monologue (@usemonologue, from Every - same company that makes Compound Engineering) pipes speech into whatever app is focused. You talk, it types into Claude Code. WhisperFlow is great too. Pick one. I bought a gooseneck microphone for the office.

Monologue(@usemonologue,来自 Every,也就是做 Compound Engineering 的那家公司)会把语音直接灌进当前聚焦的应用。你说,它就把字打到 Claude Code 里。WhisperFlow 也很好。随便选一个。我在办公室买了个鹅颈麦克风。

I'm dictating this right now from Full Self-Driving in my Tesla, dropping off my kids. This paragraph was spoken, not typed.

我现在就在特斯拉的 Full Self-Driving 里,一边送孩子,一边口述这段。这个段落是说出来的,不是打出来的。

3. Run Four to Six Sessions at Once

3. 同时跑四到六个会话

This is how I actually spend my day. Four to six Ghostty windows, each running a separate Claude Code session. One is writing a plan. One is building from a different plan. One is running /last30days research. One is fixing a bug I found while testing the last thing.

我一天大概就是这么过的。开四到六个 Ghostty 窗口,每个窗口跑一个独立的 Claude Code 会话。一个在写计划,一个在按另一个计划搭建,一个在跑 /last30days 调研,一个在修我测试上一件东西时发现的 bug。

While /ce:plan spins up research agents in one window, I switch to another window and /ce:work a plan that's already written. While that builds, the third window gets a new bug pasted in. By the time I cycle back to the first window, the plan is done and waiting in Zed.

一个窗口里 /ce:plan 正在拉起研究 agent 时,我会切到另一个窗口,对已经写好的计划 /ce:work。它在构建时,第三个窗口又会贴进来一个新 bug。等我转回第一个窗口,计划已经写完,在 Zed 里等着了。

This is why bypass permissions (next section) is non-negotiable. If every session asks "Allow?" on every action, you can't context-switch. They all need to run autonomously. Check in, react, move on. GitHub is there if you break or ruin everything.

所以 bypass permissions(下一节)没有商量的余地。每个动作都要弹一次 Allow?,根本没法切上下文。所有会话都得能自驱运行。看一眼,做反应,继续走。真把东西弄坏了也无所谓,GitHub 在那里兜底。

This is also why my MacBook dies in about an hour. Six Claude sessions in parallel. Just ordered the new MacBook Pro.

这也是为什么我的 MacBook 大概一小时就没电。六个 Claude 会话并行跑。刚下单了新款 MacBook Pro。

4. Three Settings That Change Everything

4. 改三个设置,体验全变

Claude Code's default mode asks permission for every edit, every command. You need three config changes.

Claude Code 默认模式会对每一次编辑、每一个命令都要权限确认。要改三处配置。

"Dangerously skip permissions" (yes, that's what it's actually called). ~/.claude/settings.json:

"Dangerously skip permissions"(对,它就叫这个)。~/.claude/settings.json:

{ "permissions": { "allow": [ "WebSearch", "WebFetch", "Bash", "Read", "Write", "Edit", "Glob", "Grep", "Task", "TodoWrite" ], "deny": [], "defaultMode": "bypassPermissions" }, "skipDangerousModePermissionPrompt": true }

{ "permissions": { "allow": [ "WebSearch", "WebFetch", "Bash", "Read", "Write", "Edit", "Glob", "Grep", "Task", "TodoWrite" ], "deny": [], "defaultMode": "bypassPermissions" }, "skipDangerousModePermissionPrompt": true }

skipDangerousModePermissionPrompt: true is the key. Without it, Claude asks you to confirm every session. You can also Shift+Tab to toggle it. Credit: @danshapiro (Glowforge founder, author of Hot Seat). When I set up a friend's Claude Code, the AI actively tried to stop him from enabling this. You have to be direct. It's your computer.

skipDangerousModePermissionPrompt: true 才是关键。没有它,Claude 每个会话都会让你确认一次。也可以用 Shift+Tab 来切换。感谢 @danshapiro(Glowforge 创始人,《Hot Seat》作者)。我给一个朋友配置 Claude Code 时,AI 还会主动劝他别开这个。得直接一点。这是你的电脑。

Sound when Claude finishes. Add to the same file:

Claude 结束时的提示音。 在同一个文件里加上:

{ "hooks": { "Stop": [ { "hooks": [ { "type": "command", "command": "afplay /System/Library/Sounds/Blow.aiff" } ] } ] } }

{ "hooks": { "Stop": [ { "hooks": [ { "type": "command", "command": "afplay /System/Library/Sounds/Blow.aiff" } ] } ] } }

Walk away. Come back when you hear the sound. With four to six sessions running, you need to know which one just finished. Credit to Myk Melez.

可以走开。听到声音再回来。四到六个会话同时跑时,需要立刻知道是哪一个刚结束。感谢 Myk Melez。

Zed autosave. In Zed settings (Cmd+,):

Zed 自动保存。 在 Zed 设置里(Cmd+,):

{ "autosave": { "after_delay": { "milliseconds": 500 } } }

{ "autosave": { "after_delay": { "milliseconds": 500 } } }

This is the Google Docs-like trick. Zed saves every 500 milliseconds. Claude Code watches the filesystem. When Claude edits a file, changes appear in Zed instantly. When you type in Zed, Claude sees it within a second. Ghostty on one half, Zed on the other, both looking at the same file. It feels like collaborating on a Google Doc except one collaborator is an AI.

这招有点像 Google Docs。Zed 每 500 毫秒保存一次。Claude Code 会盯着文件系统。Claude 改了文件,Zed 里立刻出现变化;你在 Zed 里打字,Claude 一秒内就能看到。Ghostty 一半屏,Zed 另一半屏,都盯着同一个文件。感觉就像在 Google Doc 里协作,只不过其中一个协作者是 AI。

5. Research Before You Plan

5. 先调研,再写计划

Before I /ce:plan , I often run /last30days on it first.

在 /ce:plan 之前,我常常先对同一件事跑一遍 /last30days。

I was deciding between Vercel's agent-browser and Playwright. Instead of reading docs, I ran /last30days Vercel agent browser vs Playwright. In a few minutes: 78 Reddit threads, 76 X posts, 22 YouTube videos, 15 HN stories. Agent-browser uses 82-93% less context tokens. Playwright dumps 13,700 tokens just for tool definitions. @rauchg's post got 964 likes.

我当时在 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 个赞。

Fed the entire output into /ce:plan integrate agent-browser. The plan came out grounded in what the community actually knows right now, not six-month-old training data.

我把完整输出喂给 /ce:plan integrate agent-browser。计划里写的就是社区此刻真实在说什么,而不是六个月前的训练数据。

/last30days is open source (4.5K stars, github.com/mvanhorn/last30days-skill). It searches Reddit, X, YouTube, TikTok, Instagram, HN, Polymarket, and the web in parallel. I do this for everything. Before I pick a library, before I build a feature, before I write this article. I ran /last30days Compound Engineering to get fresh community quotes for section 1. Research, plan, build. That's the real loop.

/last30days 是开源的(4.5K stars,github.com/mvanhorn/last30days-skill)。它会并行搜索 Reddit、X、YouTube、TikTok、Instagram、HN、Polymarket,以及网页。我什么都这么做:选库之前、做功能之前、写这篇文章之前。我还跑了 /last30days Compound Engineering,给第 1 节补上最新的社区引用。先调研,再写计划,再动手搭建。这才是真正的循环。

6. Turn Any Meeting into a Plan.md

6. 任何会议都能变成一个 plan.md

I had lunch with a potential candidate. We discussed a new product idea that wasn't being worked on at the company. We also talked about food, restaurants, kids. An hour and a half of normal conversation with product brainstorming woven through it.

我和一个潜在候选人吃了午饭。聊了一个公司里没人推进的新产品想法,也聊了吃的、餐厅、孩子。一个半小时的普通聊天,中间穿插着产品头脑风暴。

I had Granola running. After lunch, I pasted the full transcript - ninety minutes mixed with tangents about sushi - into Claude Code: /ce:plan turn this into a product proposal.

我开着 Granola。饭后,我把完整的转写记录贴进 Claude Code:/ce:plan turn this into a product proposal。

Here's what made it magic: Claude Code already knows where our product code lives on GitHub. It also has access to my company strategy folder - every prior strategy plan.md I've written. So when it processed the Granola transcript, it wasn't just extracting ideas from lunch conversation. It was cross-referencing against our actual codebase and every strategic decision we've made before. Granola context + codebase + prior strategy plans = gold.

真正神奇的是:Claude Code 已经知道我们的产品代码在 GitHub 的哪里。它也能访问我的公司战略文件夹,里面是我以前写过的每一份战略 plan.md。所以它处理 Granola 的转写时,不只是从午饭聊天里抽取点子,而是在对照我们的真实代码库,以及之前做过的每一个战略决策。Granola context + codebase + prior strategy plans = gold.

One-shotted an incredible proposal. Goals, user stories, technical approach, milestones. Ignored the parts about restaurants. Sent it to the candidate that evening.

一次就生成了很棒的提案。目标、用户故事、技术路线、里程碑。把餐厅那部分直接忽略了。当晚就发给了候选人。

He's now working with us full time on that product.

他现在已经全职和我们一起做那个产品。

Granola now has MCP support, so I use it directly inside Claude Code. No more copy-pasting. Every meeting's context flows straight into the plan.

Granola 现在也支持 MCP 了,所以我直接在 Claude Code 里用它,不用再复制粘贴。每次会议的上下文都会直接流进 plan。

7. Use Plan Files for Everything, Not Just Code

7. plan 文件用在一切事上,不只写代码

I was writing a strategy doc for my company. Claude Code and the markdown file open side by side. Talked into Monologue: "Give me three approaches for the go-to-market. Outline the pros and cons of each."

我在写公司的一份战略文档。Claude Code 和 markdown 文件并排开着。我对着 Monologue 说:"给我三个 go-to-market 的方案,把每个的优缺点写出来。"

Three options appeared in Zed. "Option two is closest but the language in option one is better. Combine them." Updated instantly. "Now address the biggest risk." Added. "Second paragraph is too long." Shortened.

三套方案立刻出现在 Zed 里。我说:"第二个最接近,但第一个措辞更好,把它们合并。" 它马上更新。我说:"现在把最大风险补上。" 它加上。我说:"第二段太长。" 它缩短。

Claude Code pulls in our GitHub, so it understands the current product. It also has access to all my prior strategy plan.md files. When I'm writing new positioning, it has the full context of every strategic decision I've made before. That compounding context is what makes each plan better than the last.

Claude Code 会拉取我们的 GitHub,所以它懂当前产品。它也能访问我以前写过的所有战略 plan.md。每次我写新的定位,它都带着我所有历史战略决策的完整上下文。那种复利式的上下文,才让每一份新计划都比上一份更好。

Strategy docs, product specs, competitive analysis, this article. Same workflow. Talk, plan, iterate.

战略文档、产品规格、竞品分析、这篇文章。都是同一套流程。说出来,写计划,反复迭代。

8. Run a Mac Mini for Remote Claude Code

8. 用 Mac Mini 远程跑 Claude Code

I have a Mac Mini set up for OpenClaw, but there are two other things I've done with it:

我有一台 Mac Mini 专门给 OpenClaw 用,但我还用它做了两件事:

Telegram from your phone. Claude Code has a Telegram integration. I message my Mac Mini from my phone via Telegram. At dinner, think of a bug, type /ce:plan fix the timeout issue into Telegram. Plan is waiting in Zed when I'm back at a screen. Claude Code even uses my OpenClaw AgentMail to email me plan files when I'm away.

手机上的 Telegram。 Claude Code 有 Telegram 集成。我用手机在 Telegram 上给 Mac Mini 发消息。吃饭时想到一个 bug,就在 Telegram 里输入 /ce:plan fix the timeout issue。等回到屏幕前,Zed 里已经躺好 plan 了。我不在电脑旁时,Claude Code 甚至会用我的 OpenClaw AgentMail 把计划文件发到邮箱。

tmux on airplane flights. Credit: Nathan Smith. Claude Code doesn't handle airplane wifi well. Connection drops, session dies and it does not even tell you. But tmux into your Mac Mini first and the session runs on that machine. Your laptop is just a window. WiFi drops for 20 minutes over the Atlantic? Reconnect. Session is exactly where you left it and it did work.

飞机上的 tmux。 感谢 Nathan Smith。Claude Code 对飞机 wifi 的适应很差,断线了会话就挂掉,而且还不提示。但如果先 tmux 进 Mac Mini,让会话跑在那台机器上,你的笔记本就只是一个窗口。大西洋上 wifi 断 20 分钟?重连就行。会话还在原地,而且它确实在干活。

Shipped features the entire flight back from Europe.

从欧洲飞回来的那趟航班,全程都在发功能。

I Also Use This Workflow for Open Source

这套流程我也用来做开源

If you look at my GitHub profile (github.com/mvanhorn), here are some of the projects I've been merged into recently, all with plan.md files before any lines of code were written:

如果你看一下我的 GitHub 主页(github.com/mvanhorn),下面这些是我最近被合并进去的一些项目,而且每一个都是在写任何一行代码之前就先有 plan.md:

  • Python - defaultdict repr infinite recursion, man page text wrapping
  • Python - defaultdict repr 无限递归,man page 文本换行
  • OpenCV - HoughCircles return type, YAML parser heap-overflow
  • OpenCV - HoughCircles 返回类型,YAML 解析器堆溢出
  • Vercel Agent Browser - Appium v3 vendor prefix, WebSocket fallback, batch command workflows (#5 contributor)
  • Vercel Agent Browser - Appium v3 vendor prefix,WebSocket fallback,批量命令工作流(#5 贡献者)
  • OpenClaw - browser relay, rate limit UX, iMessage delivery, Codex sandbox detection, voice calls
  • OpenClaw - browser relay,rate limit UX,iMessage 投递,Codex 沙箱检测,语音通话
  • Zed - $ZED_LANGUAGE task variable, Reveal in Finder tab context menu, git panel starts_open setting
  • Zed - $ZED_LANGUAGE task variable,Reveal in Finder 标签页右键菜单,git 面板 starts_open 设置
  • Paperclip - SPA routing, plugin domain events, promptfoo eval framework (#3 contributor)
  • Paperclip - SPA 路由,plugin domain events,promptfoo 评估框架(#3 贡献者)
  • Compound Engineering - plan gating, serial review mode, skills migration, NTFS colon handling (#3 contributor)
  • Compound Engineering - plan gating,串行评审模式,skills 迁移,NTFS 冒号处理(#3 贡献者)

My Wife Is Mad at Me

我老婆对我很不爽

I carry my laptop everywhere. Four to six Ghostty tabs plus Zed. She is not thrilled. The Mac Mini + Telegram helps. But when I want multiple plans evolving in parallel in real time, I need the laptop. She really wants me to stop bringing it to school drop off.

我走到哪都背着电脑。四到六个 Ghostty 标签页,再加上 Zed。她当然不开心。Mac Mini + Telegram 有点帮助。但当我想要多个计划实时并行推进时,还是得靠笔记本。她真的很希望我别再把电脑带去学校接送了。

Sorry, sweetie.

对不起,亲爱的。

This Article Was Written with This Workflow

这篇文章就是用这套流程写的

This is a markdown file in Zed. Claude Code is running in Ghostty. I talked into Monologue: "the theme is wrong, rewrite the opening." "Add the Granola story." "Don't call Zed my IDE." Claude rewrites. Changes appear in Zed. I react. Seven complete rewrites.

这是 Zed 里的一份 markdown 文件。Claude Code 跑在 Ghostty 里。我对着 Monologue 说:"主题不对,重写开头。" "把 Granola 的故事加进去。" "别把 Zed 叫成我的 IDE。" Claude 就改。改动立刻出现在 Zed 里。我再看,再反应。一共完整重写了七次。

That's everything I know. A voice app, a plan file plugin, three config changes, four to six parallel sessions, a Mac Mini, and meetings that turn into product proposals. No IDE. No code. Talk, plan, build. From a desk, from a couch, from a car.

这就是我知道的一切。一个语音 app,一个 plan 文件插件,三项配置改动,四到六个并行会话,一台 Mac Mini,再加上把会议变成产品提案的能力。不要 IDE。不要代码。说出来,写计划,去搭建。桌边、沙发上、车里都行。

Bonus: When You Run Out of Tokens

彩蛋:当你把 tokens 用光时

This kind of efficiency will blow through your $200/month Claude Max plan. Four to six parallel Opus sessions all day adds up.

这种效率会把你 $200/month 的 Claude Max 套餐烧得飞快。一天四到六个并行 Opus 会话,账单很快就对上了。

The answer: also get the $200/month Codex plan. Install the Codex CLI, and Compound Engineering can build with Codex credits instead. I just shipped /ce:work --codex to Compound Engineering - it merged today - that delegates implementation to Codex when Claude credits run low.

答案是:再买一个 $200/month 的 Codex 套餐。装上 Codex CLI,Compound Engineering 就能改用 Codex 的额度来构建。我刚把 /ce:work --codex 加进 Compound Engineering,今天就合并了:当 Claude 的额度不够时,把实现工作委派给 Codex。

Some friends use Codex for code reviews of Claude Code work and vice versa. Others prefer Codex's code output but call it from Claude Code for orchestration. The two plans complement each other. Claude for planning, Codex for heavy implementation.

有些朋友用 Codex 来做 Claude Code 产出的代码评审,反过来也一样。也有人更喜欢 Codex 的代码输出,但用 Claude Code 来做编排和调度。两套方案互补:Claude 负责规划,Codex 负责重实现。

I also have a "night-night" mode I run to work while I sleep but explaining that is for another time.

我还有一个 "night-night" 模式,睡觉时让它跑,但那就以后再说。

Bonus 2: The Disney World Play-by-Play

彩蛋 2:迪士尼世界全程复盘

To show this workflow soup to nuts on something that isn't code, here's a real example from today. I was at the soccer field watching my kids game. Another parent and I were talking about Disney World trips. I pulled out my laptop and showed her.

为了把这套流程从头到尾展示一遍,而且选一个非代码的例子,这里给一个今天的真实案例。我在足球场看孩子比赛,顺便和另一位家长聊起了 Disney World 的行程。我掏出笔记本给她演示。

Step 1: /last30days Disney World. Two minutes later, the full picture. 66 Reddit threads (11,804 upvotes), 34 X posts, 8 YouTube videos. Price shock is the dominant conversation - an $8,500 trip report on r/DisneyPlanning hit 183 comments. Six rides closed in March alone. Buzz Lightyear reopens April 8 with new blasters. Rock 'n' Roller Coaster is becoming a Muppets ride. DinoLand is demolished.

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: "What will be open / not open in Pairl April 16th to be specific" (typos and all - CC doesn't care). Claude checked the refurbishment calendar, cross-referenced the last30days data, gave me the full open/closed list.

Step 2: "更具体地说,Pairl April 16th 哪些开放 / 哪些不开放"(连拼写错误也一样,CC 不在乎)。Claude 去查了检修日历,把 last30days 的数据交叉对照,给了我完整的开放/关闭清单。

Step 3: /ce:plan I'm going to be at Disney World for one day. I want to do at least three parks, maybe four, probably four, because I'm crazy. I want to do Guardians at Epcot, do a few rides at Hollywood Studios, do a few rides at World, do the Everest ride at Animal Kingdom, and at least one Avatar ride. Plus: "What is the strategy to get all the Genie Plus and the other things to make this work? Also, one week before, don't I have to look up something? What do I buy when? Help me set the reminders. I don't care about food. I do not have a hotel. happy to pay the $25 for one time pass"

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's research agents spun up, cross-referenced with the last30days data, and wrote a structured plan.md: park order (AK -> HS -> Epcot -> MK), exact Lightning Lane booking strategy, three alarm reminders for April 13/14/15 at 7:00 AM, which rides need Single Pass ($14-22 each) vs Multi Pass, height requirements for my kids.

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: Opened the plan in Zed. Reviewed it. Said for the other parent to make her plan "So I'm going on a trip to Disney World, and I'm doing three days in the parks. Tell me the most efficient routes, what passes to get, what extras to have... it's an eight and five-year-old." Claude wrote a new 305-line plan with Rider Switch protocols, day-by-day itineraries, and a "measure your 5-year-old in shoes this week" warning.

Step 4: 在 Zed 里打开 plan。过了一遍。然后让另一位家长这样写她的 plan:"我准备去 Disney World 玩一趟,进园玩三天。告诉我最高效的路线,要买哪些 passes,要加购哪些 extras...孩子分别 8 岁和 5 岁。" Claude 写出一份新的 305 行计划,包括 Rider Switch 的流程、按天的行程表,以及一个提醒:"这周穿鞋量一下你家 5 岁孩子的身高。"

Step 5: "csn you pushCan you publish this last one on a Vercel site in light mode? That's easy to see." (More typos. Still doesn't matter.) Claude built a clean HTML page and deployed it.

Step 5: "csn you pushCan you 把最后这个用 light mode 发布到一个 Vercel 站点上?这样更容易看。"(更多拼写错误,依然没关系。)Claude 构建了一个干净的 HTML 页面并部署了。

Live at disney-plan-ebon.vercel.app

在线地址 disney-plan-ebon.vercel.app

Step 6: Dropped the .md file into OpenClaw via Telegram. Said "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 read the plan, set up calendar events on my work calendar AND cron job backups that ping me on Telegram. Double coverage for every critical booking window. Apr 13 at 3:50 AM PT: "BUY Multi Pass NOW." Apr 16 at 3:50 AM: "BUY Single Passes NOW." Both 10 minutes before the 7 AM ET window opens. Auto-delete after firing.

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 分钟提醒。触发后自动删除。

Voice to research to plan to website to automated reminders. At a soccer field.

语音到调研,到计划,到网站,到自动提醒。发生在足球场边。

That's the workflow. It works for code, strategy, open source, articles, and apparently Disney World.

这就是这套流程。它能用在代码、战略、开源、文章上,而且显然也能用在 Disney World。

/last30days is open source. 4.5K stars. 70 plan files and counting. @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

/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

@kevinrose asked what IDE to use. My reply got the most engagement out of 128 answers: "No IDE. Just plan.md files and voice." Here's everything I meant by that.

https://github.com/EveryInc/compound-engineering-plugin

1. The Moment You Have an Idea, It's /ce:plan or /ce:brainstorm

The single most important thing I've learned: the moment I have an idea, it's /ce:plan.

Not "let me think about this." Not "let me start coding." /ce:plan. Every time. A crazy product idea? /ce:plan. Someone posts a bug on GitHub? Copy the issue URL, paste it, /ce:plan. Error in your terminal? Screenshot it with Cmd+Shift+4, paste it directly into Claude Code with Ctrl+V, /ce:plan fix this. Claude Code accepts images - screenshots of bugs, error messages, design mockups, Slack conversations - and writes a plan from them.

Here's what happens under the hood when you run it. /ce:plan launches multiple research agents in parallel. One analyzes your codebase - reads your files, finds patterns, checks your conventions. Another searches your docs/solutions/ for learnings from past bugs. If the topic warrants it, more agents research external best practices and framework docs. All simultaneously.

Then it consolidates and writes a structured plan.md: what's wrong, what approach to take, which files to touch, acceptance criteria with checkboxes, patterns to follow from your own code. Not generic advice. Grounded in your codebase, your conventions, your history.

/ce:work takes that plan and builds it. Breaks it into tasks, implements each one, runs tests, checks off criteria. Context gets lost? Start a new session, point it at the plan, pick up where you left off. The plan is the checkpoint that survives everything.

Traditional dev is 80% coding, 20% planning. This flips it. As @jarodtaylor put it: "If you spend 80% of your time planning it with Opus and then let subagents swarm on it..." The thinking happens in the plan. The execution is mechanical.

Compound Engineering is the plugin that makes this real. From @EveryInc:

/plugin marketplace add EveryInc/compound-engineering-plugin

I became a superfan. Then I became a contributor, the #3 contributor on GitHub, 21 commits, behind only the core team. @kevinrose introduced me to it a few weeks ago.

I have 70 plan files and 263 commits on /last30days. The gap is early commits before I had this discipline. My rule now: unless it's literally a one-line change, there's always a plan.md first.

2. Get Voice-Pilled

I couldn't stand voice notes before LLMs. Apple's built-in dictation made me want to throw my phone. But voice-to-LLM is different. The transcription doesn't have to be perfect because Claude Code understands context. It guesses what the mic got wrong. You can mumble, trail off, restart a sentence. Voice finally works because the listener is smart enough to fill in the gaps.

Monologue (@usemonologue, from Every - same company that makes Compound Engineering) pipes speech into whatever app is focused. You talk, it types into Claude Code. WhisperFlow is great too. Pick one. I bought a gooseneck microphone for the office.

I'm dictating this right now from Full Self-Driving in my Tesla, dropping off my kids. This paragraph was spoken, not typed.

3. Run Four to Six Sessions at Once

This is how I actually spend my day. Four to six Ghostty windows, each running a separate Claude Code session. One is writing a plan. One is building from a different plan. One is running /last30days research. One is fixing a bug I found while testing the last thing.

While /ce:plan spins up research agents in one window, I switch to another window and /ce:work a plan that's already written. While that builds, the third window gets a new bug pasted in. By the time I cycle back to the first window, the plan is done and waiting in Zed.

This is why bypass permissions (next section) is non-negotiable. If every session asks "Allow?" on every action, you can't context-switch. They all need to run autonomously. Check in, react, move on. GitHub is there if you break or ruin everything.

This is also why my MacBook dies in about an hour. Six Claude sessions in parallel. Just ordered the new MacBook Pro.

4. Three Settings That Change Everything

Claude Code's default mode asks permission for every edit, every command. You need three config changes.

"Dangerously skip permissions" (yes, that's what it's actually called). ~/.claude/settings.json:

{ "permissions": { "allow": [ "WebSearch", "WebFetch", "Bash", "Read", "Write", "Edit", "Glob", "Grep", "Task", "TodoWrite" ], "deny": [], "defaultMode": "bypassPermissions" }, "skipDangerousModePermissionPrompt": true }

skipDangerousModePermissionPrompt: true is the key. Without it, Claude asks you to confirm every session. You can also Shift+Tab to toggle it. Credit: @danshapiro (Glowforge founder, author of Hot Seat). When I set up a friend's Claude Code, the AI actively tried to stop him from enabling this. You have to be direct. It's your computer.

Sound when Claude finishes. Add to the same file:

{ "hooks": { "Stop": [ { "hooks": [ { "type": "command", "command": "afplay /System/Library/Sounds/Blow.aiff" } ] } ] } }

Walk away. Come back when you hear the sound. With four to six sessions running, you need to know which one just finished. Credit to Myk Melez.

Zed autosave. In Zed settings (Cmd+,):

{ "autosave": { "after_delay": { "milliseconds": 500 } } }

This is the Google Docs-like trick. Zed saves every 500 milliseconds. Claude Code watches the filesystem. When Claude edits a file, changes appear in Zed instantly. When you type in Zed, Claude sees it within a second. Ghostty on one half, Zed on the other, both looking at the same file. It feels like collaborating on a Google Doc except one collaborator is an AI.

https://github.com/mvanhorn

5. Research Before You Plan

Before I /ce:plan , I often run /last30days on it first.

I was deciding between Vercel's agent-browser and Playwright. Instead of reading docs, I ran /last30days Vercel agent browser vs Playwright. In a few minutes: 78 Reddit threads, 76 X posts, 22 YouTube videos, 15 HN stories. Agent-browser uses 82-93% less context tokens. Playwright dumps 13,700 tokens just for tool definitions. @rauchg's post got 964 likes.

Fed the entire output into /ce:plan integrate agent-browser. The plan came out grounded in what the community actually knows right now, not six-month-old training data.

/last30days is open source (4.5K stars, github.com/mvanhorn/last30days-skill). It searches Reddit, X, YouTube, TikTok, Instagram, HN, Polymarket, and the web in parallel. I do this for everything. Before I pick a library, before I build a feature, before I write this article. I ran /last30days Compound Engineering to get fresh community quotes for section 1. Research, plan, build. That's the real loop.

6. Turn Any Meeting into a Plan.md

I had lunch with a potential candidate. We discussed a new product idea that wasn't being worked on at the company. We also talked about food, restaurants, kids. An hour and a half of normal conversation with product brainstorming woven through it.

I had Granola running. After lunch, I pasted the full transcript - ninety minutes mixed with tangents about sushi - into Claude Code: /ce:plan turn this into a product proposal.

Here's what made it magic: Claude Code already knows where our product code lives on GitHub. It also has access to my company strategy folder - every prior strategy plan.md I've written. So when it processed the Granola transcript, it wasn't just extracting ideas from lunch conversation. It was cross-referencing against our actual codebase and every strategic decision we've made before. Granola context + codebase + prior strategy plans = gold.

One-shotted an incredible proposal. Goals, user stories, technical approach, milestones. Ignored the parts about restaurants. Sent it to the candidate that evening.

He's now working with us full time on that product.

Granola now has MCP support, so I use it directly inside Claude Code. No more copy-pasting. Every meeting's context flows straight into the plan.

7. Use Plan Files for Everything, Not Just Code

I was writing a strategy doc for my company. Claude Code and the markdown file open side by side. Talked into Monologue: "Give me three approaches for the go-to-market. Outline the pros and cons of each."

Three options appeared in Zed. "Option two is closest but the language in option one is better. Combine them." Updated instantly. "Now address the biggest risk." Added. "Second paragraph is too long." Shortened.

Claude Code pulls in our GitHub, so it understands the current product. It also has access to all my prior strategy plan.md files. When I'm writing new positioning, it has the full context of every strategic decision I've made before. That compounding context is what makes each plan better than the last.

Strategy docs, product specs, competitive analysis, this article. Same workflow. Talk, plan, iterate.

8. Run a Mac Mini for Remote Claude Code

I have a Mac Mini set up for OpenClaw, but there are two other things I've done with it:

Telegram from your phone. Claude Code has a Telegram integration. I message my Mac Mini from my phone via Telegram. At dinner, think of a bug, type /ce:plan fix the timeout issue into Telegram. Plan is waiting in Zed when I'm back at a screen. Claude Code even uses my OpenClaw AgentMail to email me plan files when I'm away.

tmux on airplane flights. Credit: Nathan Smith. Claude Code doesn't handle airplane wifi well. Connection drops, session dies and it does not even tell you. But tmux into your Mac Mini first and the session runs on that machine. Your laptop is just a window. WiFi drops for 20 minutes over the Atlantic? Reconnect. Session is exactly where you left it and it did work.

Shipped features the entire flight back from Europe.

I Also Use This Workflow for Open Source

If you look at my GitHub profile (github.com/mvanhorn), here are some of the projects I've been merged into recently, all with plan.md files before any lines of code were written:

  • Python - defaultdict repr infinite recursion, man page text wrapping

  • OpenCV - HoughCircles return type, YAML parser heap-overflow

  • Vercel Agent Browser - Appium v3 vendor prefix, WebSocket fallback, batch command workflows (#5 contributor)

  • OpenClaw - browser relay, rate limit UX, iMessage delivery, Codex sandbox detection, voice calls

  • Zed - $ZED_LANGUAGE task variable, Reveal in Finder tab context menu, git panel starts_open setting

  • Paperclip - SPA routing, plugin domain events, promptfoo eval framework (#3 contributor)

  • Compound Engineering - plan gating, serial review mode, skills migration, NTFS colon handling (#3 contributor)

My Wife Is Mad at Me

I carry my laptop everywhere. Four to six Ghostty tabs plus Zed. She is not thrilled. The Mac Mini + Telegram helps. But when I want multiple plans evolving in parallel in real time, I need the laptop. She really wants me to stop bringing it to school drop off.

Sorry, sweetie.

This Article Was Written with This Workflow

This is a markdown file in Zed. Claude Code is running in Ghostty. I talked into Monologue: "the theme is wrong, rewrite the opening." "Add the Granola story." "Don't call Zed my IDE." Claude rewrites. Changes appear in Zed. I react. Seven complete rewrites.

That's everything I know. A voice app, a plan file plugin, three config changes, four to six parallel sessions, a Mac Mini, and meetings that turn into product proposals. No IDE. No code. Talk, plan, build. From a desk, from a couch, from a car.

Bonus: When You Run Out of Tokens

This kind of efficiency will blow through your $200/month Claude Max plan. Four to six parallel Opus sessions all day adds up.

The answer: also get the $200/month Codex plan. Install the Codex CLI, and Compound Engineering can build with Codex credits instead. I just shipped /ce:work --codex to Compound Engineering - it merged today - that delegates implementation to Codex when Claude credits run low.

Some friends use Codex for code reviews of Claude Code work and vice versa. Others prefer Codex's code output but call it from Claude Code for orchestration. The two plans complement each other. Claude for planning, Codex for heavy implementation.

I also have a "night-night" mode I run to work while I sleep but explaining that is for another time.

Bonus 2: The Disney World Play-by-Play

To show this workflow soup to nuts on something that isn't code, here's a real example from today. I was at the soccer field watching my kids game. Another parent and I were talking about Disney World trips. I pulled out my laptop and showed her.

Step 1: /last30days Disney World. Two minutes later, the full picture. 66 Reddit threads (11,804 upvotes), 34 X posts, 8 YouTube videos. Price shock is the dominant conversation - an $8,500 trip report on r/DisneyPlanning hit 183 comments. Six rides closed in March alone. Buzz Lightyear reopens April 8 with new blasters. Rock 'n' Roller Coaster is becoming a Muppets ride. DinoLand is demolished.

Step 2: "What will be open / not open in Pairl April 16th to be specific" (typos and all - CC doesn't care). Claude checked the refurbishment calendar, cross-referenced the last30days data, gave me the full open/closed list.

Step 3: /ce:plan I'm going to be at Disney World for one day. I want to do at least three parks, maybe four, probably four, because I'm crazy. I want to do Guardians at Epcot, do a few rides at Hollywood Studios, do a few rides at World, do the Everest ride at Animal Kingdom, and at least one Avatar ride. Plus: "What is the strategy to get all the Genie Plus and the other things to make this work? Also, one week before, don't I have to look up something? What do I buy when? Help me set the reminders. I don't care about food. I do not have a hotel. happy to pay the $25 for one time pass"

Claude's research agents spun up, cross-referenced with the last30days data, and wrote a structured plan.md: park order (AK -> HS -> Epcot -> MK), exact Lightning Lane booking strategy, three alarm reminders for April 13/14/15 at 7:00 AM, which rides need Single Pass ($14-22 each) vs Multi Pass, height requirements for my kids.

Step 4: Opened the plan in Zed. Reviewed it. Said for the other parent to make her plan "So I'm going on a trip to Disney World, and I'm doing three days in the parks. Tell me the most efficient routes, what passes to get, what extras to have... it's an eight and five-year-old." Claude wrote a new 305-line plan with Rider Switch protocols, day-by-day itineraries, and a "measure your 5-year-old in shoes this week" warning.

Step 5: "csn you pushCan you publish this last one on a Vercel site in light mode? That's easy to see." (More typos. Still doesn't matter.) Claude built a clean HTML page and deployed it.

Live at disney-plan-ebon.vercel.app

Step 6: Dropped the .md file into OpenClaw via Telegram. Said "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 read the plan, set up calendar events on my work calendar AND cron job backups that ping me on Telegram. Double coverage for every critical booking window. Apr 13 at 3:50 AM PT: "BUY Multi Pass NOW." Apr 16 at 3:50 AM: "BUY Single Passes NOW." Both 10 minutes before the 7 AM ET window opens. Auto-delete after firing.

https://github.com/mvanhorn/last30days-skill

Voice to research to plan to website to automated reminders. At a soccer field.

That's the workflow. It works for code, strategy, open source, articles, and apparently Disney World.

/last30days is open source. 4.5K stars. 70 plan files and counting. @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

📋 讨论归档

讨论进行中…