一个常见场景
我正在用 Claude Code 重构一个复杂组件,光标在函数体里游走,AI 正在输出代码。突然瞥到侧边栏:登录按钮的 loading 状态还没处理。

这个念头很清晰,也很急——但它跟当前任务无关。
如果现在说出来,AI 会立刻把我的话追加到对话最下面进行排队,等当前会话回复完就立刻发送出去,但这也意味着切换了上下文,刚才那半段重构逻辑可能就断了。
如果打开系统备忘录、微信文件传输助手,或者另一个对话窗口,手指离开键盘的那一刻,心流已经碎了。
更大概率是:纠结片刻,选择相信自己的记忆力,然后遗忘。

对话即全部的设计缺陷
Claude Code、Codex、Pi(一款可高度自定义的 AI 编码工具)这些工具把输入框设计成了一条单行道:你打下的每个字,要么发给模型,要么删除。没有中间状态。
但在真实开发里,大量想法是"后续优化点":文案调整、边界情况、待确认的接口字段、想试的第三方库。它们不该现在进入对话队列,但也不该消失。
开发者需要的是一个缓冲区——不是备忘录,不是 TODO 列表,而是对话的暂停键。
我考虑过的弯路:多开会话
一个直觉的解法是开一个新的 AI 对话会话,配合 git worktree 并行推进多个任务,理论上互不干扰。
但实际体验是:每个会话独立上下文,开发完各自测试、各自提交,最后合并。如果当前正在进行大型重构,改动面已经很大,再叠加另一个会话的修改,合并时的冲突密度会指数级上升。更隐蔽的成本是心智负担——你要同时记住哪个会话改了什么、测了什么、还差什么。这不是多线程,是多任务抢占,切换开销很高。
所以我的选择是单线程顺序执行:当前任务做完,再取出下一个想法。不并行,不合并,不维护多个上下文。代价是慢一点,收益是稳很多。
初衷:不是笔记工具,是缓冲层
我给 pi 写了一个 /note 扩展。它的核心逻辑极其简单:

/note 登录页 loading 状态还没处理这条内容被写进本地 JSON 文件,不调用任何发送 API,模型完全无感知。当前任务继续跑,你的念头被暂存。
等当前任务真正完成后,你再敲:
/note它会列出当前目录下所有未发送的 note,你选择一条,它自动作为用户消息发出,同时标记为"已消耗"。已消耗的 note 不再出现在默认列表里,但数据还留着,可追溯。
如果你想先放进输入框里改几个字再发:
/note edit我做与不做的事
做:
按工作目录隔离。你在项目 A 记的 note,不会出现在项目 B 的选择列表里。跨目录场景用 --all显式开启,避免无意识混淆。消耗机制。note 被发送或编辑后自动标记 sentAt,不再打扰你,但保留在 JSON 里,方便事后追溯。 零依赖。纯 Node.js 内置模块,不碰 npm。安装就是复制一个文件,卸载就是删除。 自动迁移。早期版本把数据存在旧路径,新版读取时静默迁移,用户无感知。
不做:
不同步云端。本地暂存而已,不需要网络、不需要账号、不需要冲突解决。 不做富文本。纯文本最轻,也最不容易腐烂。你要格式化,发出去之后让 AI 帮你排。 不做知识库式沉淀。note 是临时缓冲,不是给你长期归档想法的地方——消耗后的数据留着只是为了可追溯,不是鼓励你把它当笔记软件用。 不自动发送。 /note命令需要你手动选择,给你最后一次确认的机会。AI 工具已经够容易误触了,缓冲层不能再增加误触。不做智能分类、标签、优先级。这些功能会让 230 行代码膨胀到 2000 行,而用户真正需要的只是"先记下来,稍后发出去"。
一个完整的工作流
# 正在写 API,突然想到前端要配合调整/note 用户列表接口增加分页后,前端 table 要加 pageSize 切换# 当前任务继续...# 后端写完了,切到前端目录/note→ 选择并发送那条关于 table 的 note# AI 收到上下文,继续衔接三条命令构成闭环:写入、选择发送、选择编辑。没有学习成本,没有界面切换,手不离开键盘。
结语
好的工具不是增加功能,而是减少认知负担。
这个扩展只有 230 行代码,没有后台服务,没有配置界面,甚至没有一个独立的进程。它只是在你和 AI 的对话之间,插入了一个很小的停顿——让你决定,什么该现在说,什么该稍后说。
缓冲区存在的意义,不是存储,而是让你不必在错误的时机做出正确的决定。
如果你也想试试,源码在这里:pi-note[1]
你平时是怎么处理开发中的临时想法的?开新会话、记备忘录、还是硬靠脑子记?欢迎在评论区聊聊你的 workflow。
pi-note: https://github.com/ec50n9/pi-note
夜雨聆风