NOTE

笔记

一些碎片化的小知识点,慢慢拼成对世界的理解。

51 条记录最近更新 2026-07-28
2026

建议要允许拒绝

Product

AI 产品里的“建议”不要只追求一键采纳,更要把拒绝做成一个轻动作。因为建议不是结果,建议是一种打断:它闯进用户正在形成判断的地方,问用户要不要改变方向。如果拒绝成本太高,用户很快会从“被帮助”变成“被推着走”。

很多写作、邮件、代码和笔记产品都会犯同一个错:把建议做得越来越主动、越来越满屏,却没有认真设计“不采纳”的体验。用户要么被迫一个个关掉,要么为了省事接受一个差不多的版本。短期看是转化率更高,长期看是在训练用户不再相信这个产品的判断。

这和传统的推荐不一样。推荐商品、视频或文章,用户滑走就结束;但 AI 建议常常落在用户自己的作品、文字、计划和代码上。它进入的是“我正在做的东西”,所以产品不只要问建议准不准,还要问它有没有破坏用户继续思考的节奏。

好的建议系统应该像一个克制的编辑,而不是热情的销售。它可以告诉你哪里可能更好,但必须允许你快速略过、局部采纳、事后撤回,并且不要因为你拒绝了几次就继续在同一处纠缠。一个建议能不能被轻松拒绝,决定了它到底是辅助判断,还是偷走判断。

可以问一个小问题:当我们给产品加 AI 建议时,是否只设计了“怎么让用户点接受”,却没有设计“用户拒绝以后,产品如何安静地退回去”?

过滤器要显示代价

Product

过滤器的产品价值,不是把世界变干净,而是让用户知道“干净”是用什么换来的。邮件、任务、知识库、AI 助手都喜欢说自己能帮你筛掉噪音,但如果被筛掉的东西完全消失,用户得到的不是轻松,而是一种新的不安:我是不是漏了什么?

好的过滤不是黑箱删除,而是有边界的收窄。它应该让用户感到范围变小了,但责任没有被偷走。比如一个智能收件箱可以优先展示重要邮件,但最好仍然保留“为什么它被放在这里”“还有多少被折叠起来”“我能不能一键回看”的线索。这个小小的回看入口,会把筛选从替用户做主,变成替用户节省第一轮注意力。否则产品看起来很聪明,实际是在把判断债务藏到后台。

这对 AI 个人软件尤其重要。AI 很擅长替用户总结、排序、推荐下一步,但越是替用户省下注意力,越要把取舍痕迹留在界面里。尤其当它开始跨资料、跨账号、跨任务替人做判断时,过滤器就不只是信息架构,而是责任边界。真正值得信任的不是“我已经帮你处理好了”,而是“我帮你缩小到这里,剩下的你可以放心检查”。

可以问一个小问题:你的产品里那些让界面更清爽的机制,是在减少用户负担,还是在让用户失去判断自己负担的能力?

钩子是 Agent 的刹车

Product

核心判断

Claude Code Hooks 最值得看的不是“可以自动跑脚本”,而是它承认了一个更成熟的 Agent 产品判断:越强的自动化,越需要确定性的刹车、护栏和交接点

Agent 不能只靠更聪明来获得信任。真正能进入日常工作流的 Agent,必须允许用户把某些关键时刻从模型判断里拿出来,交给稳定、可审计、可复用的规则。

背景与产品现象

Anthropic 在 Claude Code 里把 Hooks 做成了一套正式机制:用户可以配置 shell command、HTTP endpoint,甚至 LLM prompt,让它们在 Claude Code 生命周期的特定节点自动执行。官方文档列出的节点不只是“任务结束后跑一下格式化”,而是覆盖了 session 开始和结束、用户 prompt 提交、工具调用前后、权限请求、通知、子 agent 停止、文件变化、压缩前后等位置。

这件事表面上像开发者工具里的高级配置,实际更像 Agent 产品从“聊天助手”走向“工作系统”的一个分水岭。

因为 Claude Code 这种产品的承诺已经不是回答问题,而是读代码、改文件、跑命令、连接 MCP 工具、跨多个表面工作。它越接近真实工作,用户越不会只问“它会不会做”,而会问另一个问题:它什么时候可以被拦住,什么时候必须留痕,什么时候应该让我接手?

Hooks 的产品价值,就在这里。

真正值得看的不是自动化,而是控制权的位置

很多人看 Hooks,会先想到自动化:保存后格式化、改完后跑测试、提交前跑 lint、通知系统发一条消息。这些当然有用,但不是最核心的产品判断。

更重要的是,Hooks 把控制权放在了 Agent 循环的结构性节点上,而不是放在一个事后补救的设置页里。

传统软件里的设置,多数是在改变软件“平时怎么表现”。但 Agent 产品的问题不是平时表现,而是它每一步都可能根据上下文生成新动作。用户真正需要的,不是再多一个偏好开关,而是在高风险节点上有确定性的介入方式。

PreToolUse 的意义不是“执行工具前可以跑脚本”,而是:在模型准备动手之前,系统允许外部规则先看一眼。PostToolUse 的意义也不是“执行后可以自动处理结果”,而是:每次动作之后,都可以把结果交给另一个确定性系统检查、记录、转发或阻断下一步。

这相当于把 Agent 的黑盒行动拆成一串可插入的产品缝隙。

拆解

1. 这个产品相信什么用户行为

Claude Code Hooks 背后的用户假设很清楚:重度用户不会满足于“相信模型会做好”,他们会逐渐把 Agent 接进自己的真实工程环境、团队规范和个人习惯里。

这类用户不是只想要一个更会聊天的助手,而是想要一个能进入工作流的执行者。但执行者一旦进入工作流,就必须接受已有工作流的约束:代码风格、权限边界、安全检查、测试口径、通知规则、团队审查方式。

所以 Hooks 相信的不是用户喜欢配置,而是用户会在反复使用后形成自己的“不可妥协点”。这些不可妥协点不适合每次都写进 prompt,也不应该寄希望于模型每次都记得。它们应该变成系统级接口。

这也是 Agent 产品成熟后的一个重要变化:早期产品强调 prompt,成熟产品会逐渐把一部分 prompt 变成对象、规则、工作单、钩子和审计记录。因为真正高频的约束,不应该一直停留在自然语言里。

2. 它牺牲了什么

Hooks 牺牲的是新手体验的纯净感。

一个没有 Hooks 的 Agent 产品更容易讲故事:你只要说一句话,它就会帮你完成。这个叙事更顺滑,也更像大众想象里的 AI 魔法。但 Hooks 把这个魔法拆开了:这里有事件,有 matcher,有 JSON input/output,有 exit code,有 decision control。

这会让产品变得更“工程化”,也更难被包装成一个无门槛的消费级体验。

但这是必要的牺牲。因为 Claude Code 面对的不是一次性玩具任务,而是可持续的开发工作。开发者愿意承受一点配置复杂度,换取可预测性、可恢复性和可嵌入性。

这也是很多 Agent 产品迟早要面对的取舍:如果你想进入真实工作,就不能永远保持“一个输入框解决一切”的幻想。你必须暴露一些结构,让用户把信任建立在结构上,而不是建立在模型状态上。

3. 这个判断如何体现在具体体验里

Hooks 的关键设计不是给一个泛泛的“自动化中心”,而是按生命周期拆事件。

SessionStart / SessionEnd 处理的是工作会话边界;UserPromptSubmit 处理的是用户意图进入系统之前;PreToolUse / PostToolUse 处理的是 Agent 每一次工具行动;PermissionRequest 处理的是授权边界;Stop / SubagentStop 处理的是任务结束和子任务结束。

这套划分很重要。它不是让用户从零发明工作流,而是先替用户指出:Agent 工作里哪些时刻天然值得被检查。

好的产品接口通常不是把所有能力摊平给用户,而是帮用户命名关键断点。Hooks 做的正是这件事。它告诉用户:你不必在所有地方控制 Agent,但在这些地方控制是合理的。

这比“多给用户一些设置”更高级。设置是参数,Hooks 是工作流里的制动点。参数改变系统倾向,制动点改变责任边界。

4. 对个人产品 / Agent 产品的启发

对 personal software 和 agent-native 产品,Hooks 的启发不是“也做一个插件系统”,而是:先找出用户最害怕失控的节点,再把这些节点做成可重复使用的界面或接口

个人 AI 工具里,用户的失控点通常不是模型答错一句话,而是这些时刻:准备写入原文件、准备发给别人、准备删除或覆盖、准备跨应用授权、准备把临时内容沉淀进长期记忆、准备把一段含糊输入变成正式产物。

这些地方如果只靠“确认弹窗”,产品会很笨;如果完全自动执行,产品会很危险。更好的做法,是让用户能为这些节点建立稳定规则:哪些动作永远先进入草稿,哪些来源永远不入库,哪些输出必须先生成 diff,哪些任务结束后必须留下摘要和回滚入口。

这就是 Agent-native 产品的一个核心方向:不要只设计“AI 如何行动”,还要设计“AI 行动前后,用户如何把自己的判断嵌进去”。

对个人软件尤其如此。个人软件的信任不是企业权限系统那种重流程,而是用户每天愿不愿意把一点点生活、想法、文件和半成品交给它。这里的控制点必须轻,但不能没有。

5. 哪些不能照抄

不能照抄 Claude Code Hooks 的工程复杂度。

Claude Code 面向开发者,JSON、脚本、exit code、HTTP endpoint 都是可接受语言。换成普通个人软件,这套东西会直接变成门槛。一个写作工具、笔记工具、个人记忆工具、口述工具,不应该让用户先理解生命周期事件再开始使用。

但不能照抄复杂度,不等于不能学习产品判断。

普通用户版本的 Hooks 可能不是代码,而是更具象的规则:

“发出前先让我确认。”

“改原文前只给 diff。”

“只有我标星的内容才进入长期记忆。”

“每天结束时,把未完成项整理成一张明天可继续的卡片。”

“任何跨应用动作都先生成预览。”

这些不是传统意义上的设置,而是普通用户能理解的工作流钩子。它们同样在回答一个问题:当 AI 开始替我做事,我在哪里保留最终判断权?

结论

  1. Agent 产品的信任,不能只靠模型能力增长来解决;能力越强,越需要确定性的刹车和交接点。

  2. Hooks 的真正价值不是自动化脚本,而是把 Agent 生命周期里的关键失控点产品化,让用户能把自己的规则嵌入系统。

  3. 对开发者产品,可以把这些控制点暴露成脚本、事件和 JSON;对个人产品,则应该把它们翻译成更轻的规则、草稿、diff、预览、到期授权和可恢复状态。

  4. 好的 Agent-native 产品不是让用户一直盯着 AI,也不是让 AI 完全黑盒执行,而是把少数最关键的判断节点做清楚:什么时候 AI 可以继续,什么时候必须停下,什么时候该把工作交还给人。

别急着拥有数据

Product

个人软件很容易把“拥有数据”误认为“拥有用户”。但很多时候,用户真正愿意交给一个新产品的,不是原始数据源,而是一个更好用、更贴近日常动作的工作表面。好产品未必先搬家,它可以先寄居在用户已经信任的系统上。

Mimestream 是一个很好的例子。它没有试图重新发明邮箱后端,也没有让用户把邮件迁进一个新系统;它把 Gmail 仍然留在 Gmail,把自己做成一个更像 macOS 原生软件的 Gmail 客户端。它争夺的不是“邮件事实存在哪里”,而是用户每天处理邮件时,手感、速度、快捷键、标签、搜索和多账号切换这些高频表面。

这对 AI 和个人 context 产品尤其重要。很多产品一上来就想接管知识库、任务库、记忆库,于是第一步变成导入、同步、授权、重建结构。用户还没得到价值,就已经被要求相信一个新系统会长期保管自己的一切。更轻的做法是先承认边界:原件继续留在 Notes、Markdown、Gmail、Calendar、Finder 或 Obsidian 里,产品只在上面提供更好的进入、整理、生成和行动。

这里的关键取舍是:不要把“不是数据源”误判成“产品不够核心”。很多个人产品真正的核心,恰恰是在不夺走源头的前提下,稳定改善用户每天碰到源头的那一层界面。可以问一个小问题:这个产品是必须成为新的事实仓库,还是只要成为旧事实上最顺手的操作层?

别把回顾做成监控

Product

回顾型个人软件最容易犯的错,是把“我想记住什么”偷换成“系统能记录什么”。照片、位置、日程、运动、聊天、网页足迹都可以变成素材,但素材越全,产品越不能像监控面板;它要替用户把生活重新剪成少数值得回看的片段,而不是把每天还原成一张精密账单。

这里的关键不是 AI 能不能总结,而是产品有没有克制。一个好的 Journal、年度回顾或个人时间线,不应该把用户推到一堆完整数据前,让他自己承担筛选和解释成本。它更像一个温和的编辑:少给一点,给得准一点,并且允许用户说“这件事不算我”。这种删除权和改写权,本身就是亲密产品的安全感。

反过来,很多个人数据产品会迷恋全量、连续、自动化,仿佛记录越多就越懂用户。但对个人软件来说,过度完整反而会破坏亲密感。人需要的不是被系统证明“你昨天去了哪里、做了什么”,而是被提醒“这里可能有一个你愿意保留的意义”。这也是回顾产品和分析产品的分界:前者帮人理解自己,后者容易把人变成指标。

可以问一个小问题:当产品拥有越来越多私人信号时,它是在帮用户形成自己的叙事,还是在把用户变成一份可查询的行为档案?

钩子要接住失控点

Product

Agent 产品越能替用户做事,越不能只把控制权留在聊天里。真正可长期使用的控制,不是每次都提醒用户“请确认”,而是在最容易出错的节点放下稳定的拦截口:执行前能挡住,执行后能检查,结束时能收尾。智能负责生成可能性,产品负责把失控点变成可治理的接口。

Claude Code 的 Hooks 就是一个值得看的形态。它不是再加一个聊天按钮,而是允许用户在 PreToolUse、PostToolUse、Stop 等生命周期点挂上自己的命令:比如运行格式化、阻止危险命令、记录操作、触发测试。这里的产品判断是,开发者不需要一个永远更会说话的助手;他们需要一个能嵌进既有纪律里的助手。

很多 Agent 产品的问题,是把“人类审批”当作唯一安全机制。审批当然重要,但如果每一步都靠临场判断,用户很快会疲劳,最后不是全拒绝就是全放行。更好的设计,是把反复出现的判断沉淀成规则、脚本、检查和默认防线,让人只处理真正例外的部分。

可以问一个小问题:你的产品里哪些地方还在要求用户一遍遍“看一下有没有问题”?那些地方也许不该继续做成提醒,而该被设计成一个可复用的钩子、检查点或自动回滚口。

提前量才是状态产品的价值

Product

状态产品真正卖的不是“我知道得更多”,而是我能不能比你原来的系统更早给出一个可行动的时间差。航班追踪尤其典型:登机口、延误、行李转盘这些信息本身并不稀缺,机场大屏和航空公司 App 都会告诉你;稀缺的是在事情变坏之前,用户还有没有时间改签、换路线、通知接机的人,或者干脆晚点出门。

Flighty 的产品判断很清楚。它官网强调实时更新、更快提醒和延误预测,还会追踪前序飞机,试图在航空公司正式承认延误之前给出判断。这里的重点不是把航班数据做成一个更漂亮的仪表盘,而是把一堆后台信号压缩成一个问题:这件事会不会改变我下一步怎么行动?

这对很多 AI 和个人软件也成立。状态页、进度条、提醒、监控面板,如果只是证明系统“正在看着”,用户最后还是要自己判断风险。好的状态产品应该少一点信息炫耀,多一点提前量:什么时候我该介入,什么时候可以继续放心,什么时候必须改计划。它不是把用户训练成更勤快的观察员,而是替用户守住那个还来得及改变结果的窗口。

可以问一个小问题:你的产品里那些“状态信息”,到底是在增加可见性,还是在给用户创造真正能行动的时间差?

口述产品要负责成稿

Product

口述产品真正要替用户省掉的,不是敲键盘这件事,而是把一段松散、犹豫、带口头禅的想法,收束成一段可以直接进入工作流的文字。识别准确只是入场券,负责成稿才是产品责任

Wispr Flow 这类产品有意思的地方,不只是“语音转文字”,而是它把自己放在所有 App 的输入层:邮件、聊天、文档、代码工具里,用户说的是半成品,产品交出去的应该是接近可发送、可粘贴、可继续编辑的文本。这里的关键不是模型有多聪明,而是产品愿不愿意替用户承担“从说话到写作”的那段脏活。

很多 AI 语音功能会停在 transcript:我把你说的话记下来了,剩下请你自己整理。这个边界看似安全,其实把最大的摩擦还给了用户。真实使用里,人不是为了得到一份口水稿才开口,而是想跳过键盘,把意图落到某个具体场景里。不同场景需要不同收口:Slack 要短,邮件要完整,备忘录要保留粗糙,代码注释要清楚。

可以问一个小问题:如果一个输入工具只能证明“我听懂了”,却不能证明“这段话已经适合放到这里”,它到底是在替用户表达,还是只是把编辑债务换了一种形式?

云同步卖的是本地感

Product

核心判断

Dropbox 的核心判断不是把文件放上云,而是把云藏进一个用户仍然愿意相信的本地文件夹。同步产品真正卖的不是存储空间,而是一种“本地感”:东西就在我这里,但它又会替我出现在别处。

这对个人软件和 Agent 产品都很重要。越是复杂的后台能力,越不应该首先以能力本身出现,而应该被压进一个用户已经相信的对象里。

背景与产品现象

今天再看 Dropbox,很容易把它看成一个已经被 iCloud Drive、Google Drive、OneDrive 包围的老云盘。但 Dropbox 最值得拆的地方,恰恰不是“云盘”这个品类,而是它早期把一个很抽象的基础设施问题,做成了一个用户几乎不用学习的产品动作:把文件放进一个文件夹。

Dropbox 官方帮助文档里,对同步的描述很朴素:文件同步后,用户可以在电脑、网页、手机和平板上访问和管理;如果你在一个设备上新增或修改文件,这个文件会自动在其他地方保持更新。它还明确区分了 available offline 和 online-only:前者默认可离线访问,占用本机和 Dropbox 空间;后者仍然会出现在电脑的 Dropbox 文件夹里,但打开时需要联网。Selective sync 则允许用户把某些文件夹从硬盘移走,但不从 Dropbox 账户里删除。版本历史也不是一个抽象保险条款,而是让用户查看、比较并恢复一段时间内的旧版本。

这些功能单独看都不新鲜。但组合起来,它们表达的是一个很强的产品信念:用户不想先理解云,用户想继续相信文件夹。

真正值得看的不是同步,而是幻觉边界

大众常常把 Dropbox 的产品价值理解成“自动同步”。这当然是事实,但不是最锋利的产品判断。

真正值得看的是:Dropbox 做了一种可控的幻觉。它让用户感觉文件仍然在自己的电脑里、仍然遵守文件夹的秩序、仍然能被 Finder 或 Explorer 打开;同时,它又在后台改变了文件的分布方式、备份方式、跨设备可达性和多人协作可能性。

这里的关键不是欺骗用户,而是控制幻觉边界。好的产品幻觉不是让用户误会系统没有复杂性,而是让用户在不需要管理复杂性的情况下,仍然知道自己能在哪里介入:我要不要离线保存?我要不要只保留线上?我要不要恢复旧版本?我要不要把某个文件夹排除出本机?

这比“把所有东西都搬到云端工作台”更难。因为它不是替换用户的旧世界,而是在旧世界里偷偷增加一层新能力。

拆解

1. 这个产品/团队相信什么用户行为

Dropbox 相信的用户行为不是“用户愿意管理云端资料库”,而是“用户已经会管理文件夹”。

这是一个非常克制的判断。它没有要求用户先建立项目、空间、知识库、数据库、权限模型;它只是把同步能力挂在一个已有心智上。用户要做的第一个动作不是配置系统,而是把文件拖进去。

这也是为什么 Dropbox folder 这个对象这么重要。它不是 UI 里的一个列表,而是操作系统里的一个普通位置。用户可以用旧工具打开、拖拽、重命名、复制、删除。产品把新能力寄生在旧动作上,因此初始学习成本非常低。

很多 AI 产品今天正好反过来:明明想解决用户已有工作流里的问题,却先发明一个新的入口、新的空间、新的对象层,让用户把材料搬进去,再从头学习它的秩序。结果不是增强工作流,而是制造第二套工作流。

2. 它牺牲了什么

Dropbox 牺牲的是“云产品的显性控制感”。

如果从工程或平台角度看,把文件都放在一个网页工作台里,权限、状态、协作、计费、推荐、搜索都更容易被产品统一管理。但 Dropbox 选择把核心体验放回本地文件系统,意味着它必须尊重大量旧世界的混乱:本地磁盘空间不够、网络断开、同名冲突、离线编辑、系统文件限制、用户误删、多个设备状态不一致。

这让产品表面变简单,后台反而更脏。

但这正是产品取舍。Dropbox 没有把复杂性转嫁给用户,让用户去理解“云端主副本”“同步队列”“缓存策略”;它把大部分复杂性收进系统,只在必要时暴露成用户能理解的选择:这个文件是否离线可用,这个文件夹是否同步到本机,这个版本是否恢复。

好的个人产品也应该有这种牺牲。不要为了让系统模型干净,就逼用户接受一个不自然的产品模型。

3. 这个判断如何体现在具体功能或体验里

Dropbox 的几个功能其实都围绕同一个边界展开:什么东西看起来在本地,什么东西真正占用本地,什么东西可以从过去恢复。

Available offline 保留了最强的本地感:没有网络也能打开。Online-only 则保留视觉存在感,但释放硬盘空间。Selective sync 更进一步,允许某些文件夹完全不留在硬盘上,只存在于 Dropbox 账户里。版本历史处理的是另一种心理成本:当同步把改动传播到所有地方时,用户需要知道自己仍然有回头路。

这几个功能的价值不只是“省空间”或“防误删”。它们共同解决的是同步产品最核心的信任问题:当一个产品替我在多个地方移动和更新文件时,我如何判断它没有把我的控制权偷走?

答案不是给用户一个庞大的控制台,而是在关键断点上给出可理解的状态和恢复能力。

4. 对个人产品 / Agent 产品的启发

对 personal software 来说,Dropbox 的启发是:源对象要尽量留在用户已经相信的地方。

如果用户相信 Markdown 文件,就不要急着把它们变成只能在应用里理解的“智能笔记对象”。如果用户相信文件夹,就不要过早把所有东西抽象成数据库。如果用户相信日历、任务、文档、剪贴板,就让 AI 能力长在这些旧对象上,而不是要求用户进入一个全新的 AI 工作台。

对 Agent 产品来说,启发更直接。Agent 的后台能力会比同步更复杂:它会读上下文、调用工具、跨应用执行、生成中间结果、可能失败。越是这样,越需要一个“本地文件夹式”的产品对象,让用户知道:任务在哪里,材料在哪里,结果在哪里,哪些东西只是缓存,哪些东西是事实,哪里可以恢复。

Agent-native 不是把一切都变成聊天,也不是把一切都藏进自动化。它需要找到自己的 Dropbox folder:一个旧心智能接受、但能承载新能力的稳定容器。

5. 哪些不能照抄

不能照抄的是“同步一切”。

Dropbox 的模型适合文件,因为文件本来就是用户可见、可移动、可备份的对象。但个人 AI 里的上下文、记忆、偏好、行动日志并不全都应该被同步成同一种东西。把所有痕迹都做成永久资料,只会制造信息债务。

也不能照抄“本地感”等于本地优先。Dropbox 给的是一种体验上的本地感,不等于它天然解决了所有数据主权、可移植性和冲突恢复问题。对 Dewey 关心的 local-first personal context 产品来说,源文件、派生索引、AI memory、同步状态之间的边界必须更明确:哪些是用户拥有的原件,哪些只是可重建缓存,哪些可以被 AI 改写,哪些必须先经过确认。

最危险的照抄,是只学它的无感,把复杂性完全藏起来。无感适合同步成功时;一旦失败,产品必须让用户看见状态、理解风险、恢复控制。

结论

  1. 同步产品的核心不是“云端能力”,而是让用户继续相信一个本地对象。

  2. 好的基础设施产品应该把复杂性藏进旧动作里,但在离线、占用、冲突、恢复这些边界上诚实暴露。

  3. 个人 AI 产品不要急着发明新工作台;先找到用户已经信任的文件、任务、日历或文档对象,再把智能能力压进去。

  4. Agent 产品也需要自己的“Dropbox folder”:一个用户能进入、能检查、能恢复、能带走的稳定容器。没有这个容器,自动化越强,失控感越强。

模板要替用户做取舍

Product

个人软件里的模板,不应该只是一个“从这里开始”的空壳。真正有价值的模板,是产品替用户先做了一部分取舍:哪些字段必须出现,哪些步骤可以省掉,哪些内容未来还会被重新使用,哪些东西不值得保存。

很多 AI 工具把 prompt、workflow、agent 配置做成模板市场,看上去降低了开始成本,实际常常把选择成本提前抛给用户。用户还没形成自己的工作流,就先面对一堆看似专业的路径:会议纪要模板、研究模板、周报模板、知识库模板。结果不是更快开始,而是更早进入“我应该选哪一个”的犹豫。

好的模板更像一个小型产品主张,而不是素材集合。它不追求覆盖所有场景,而是让用户在第一次使用时感到:这个产品已经理解了这类工作的默认节奏。比如个人知识工具里的读书笔记模板,最重要的未必是字段完整,而是把“摘录、判断、后续行动”之间的关系摆清楚;如果只给十几个字段,用户反而会把写笔记变成填表。

可以问一个小问题:如果你的产品提供模板,它是在帮助用户少做决定,还是只是把产品还没想清楚的结构,包装成了用户可选择的自由?

别把整理当完成

Product

个人 AI 工具很容易把“整理”做成一种漂亮的幻觉:自动分组、自动打标签、自动生成摘要,看起来资料被安置好了,用户也获得了一点秩序感。但产品上更重要的问题是:下一次回来时,用户是不是更容易继续行动了? 如果答案是否定的,整理只是把未完成的判断换了一个更干净的容器。

这类误区在个人知识库、稍后读、AI memory 产品里尤其常见。系统把一堆材料变成主题、卡片、集合,界面瞬间变得有结构;但真正的使用场景往往不是“欣赏我的资料被整理得多好”,而是某一天要写东西、做决定、找证据、恢复一个中断的项目。那时用户需要的不是更多分类名,而是能回到原始语境、看见为什么留下它、知道下一步可以怎么用。

所以自动整理最好不要被设计成终点,而要被设计成中间层。好的整理应该像临时脚手架:可折叠、可修改、可丢弃,并且始终把用户带回材料和动作之间的关系。比如一条摘要旁边应该能看到来源、相关任务、最近一次使用场景;一个标签应该能解释它为什么存在,而不是只给用户增加一个新的维护对象。

可以问一个小问题:这个功能是在帮用户减少下一次进入的成本,还是只是在把“我还没想清楚”包装成“已经整理好了”?后者短期很有成就感,长期会变成另一种信息债务。

进度要暴露判断

Product

Agent 产品里的进度,不应该只是告诉用户“我还在工作”。真正有价值的进度,是把机器正在做的判断暴露出来:它现在相信什么、卡在哪个分叉、接下来会冒什么风险、什么时候需要人介入。

很多 AI 产品会把长任务包装成一个旋转中的状态:正在分析、正在执行、正在生成。这个界面看似安抚用户,实际把最重要的信息藏起来了。用户不知道它是在检索资料、改写方案、调用工具,还是已经沿着一个错误假设跑了很远。等结果回来以后,用户只能整包验收或整包推翻。

Agent-native 产品要处理的不是“等待焦虑”,而是“判断接力”。当任务变长,用户真正想知道的不是百分比,而是自己是否还同意当前方向。一个好的进度面板,应该像一份轻量工作日志:刚刚完成了什么,当前选择了哪条路径,哪些地方证据不足,下一步会动到什么对象。进度的产品价值,不是展示忙碌,而是降低中途接手的成本。

这也提醒我们,不要把 agent 做成一个黑盒员工,再用拟人化语气解释它为什么慢。更好的方向是把它做成一个能持续交代工作状态的协作者。可以问一个小问题:你的产品里,用户等待时看到的是动画,还是一组足够让他改变方向的判断?

分享链接不是协作

Product

协作产品最容易偷懒的地方,是把“能分享”当成“能协作”。但一个链接只解决了访问权问题,没有解决理解成本、责任边界和下一步动作。真正好的协作入口,应该让接收者一打开就知道:现在是什么状态,为什么轮到我,我能做的最小动作是什么。

这也是 Google Docs、Figma 这类产品长期厉害的地方。链接本身很轻,但它们没有把协作停在链接上:评论锚在具体段落或画布对象上,修改历史能还原脉络,通知通常指向某个待处理位置。接收者不是被丢进一个完整文件里重新读一遍,而是被带到一个“需要我介入”的局部现场。

很多 AI 产品会在这里犯新错:生成一个报告、页面、表格或任务结果,然后给一个分享按钮,仿佛下一步自然会发生。其实 AI 生成物更需要协作设计,因为它的来源、取舍和不确定性往往不在结果表面。只把结果发出去,别人很难判断哪些地方已确认,哪些地方只是模型猜测,哪些地方需要人工拍板。

分享不是终点,而是一次交接。 如果一个产品希望工作在多人之间流动,就不能只设计“把东西发出去”,还要设计“别人如何接得住”。可以问一个小问题:这个分享动作发出去之后,接收者的第一秒,是在理解上下文,还是已经能做判断?

把意图压成对象

Product

AI 个人软件里,自然语言最好的位置,不是再开一个聊天窗口,而是把一句含糊的意图压成一个可编辑、可执行、可复用的对象。用户说“下周三提醒我问进展”,产品真正交付的不是一段理解说明,而应该是一条已经填好时间、对象和动作的提醒。

这类体验的关键,不在模型多会聊天,而在产品有没有自己的硬边界:什么会变成任务,什么会变成日历,什么只是草稿,什么必须先让用户确认。自然语言只是入口,最终留下来的应该是产品系统里能被看见、修改、撤销、同步的东西。它把表达成本降下来,但不能把产品责任也一起降没。

很多 AI 功能做反了:它把原本可以落到对象上的动作,留在对话里反复解释。看起来更智能,实际更难复用。用户下次回来时,面对的是一段聊天记录,而不是一个已经进入工作流的安排、文档、列表或状态。好的设计应该让用户感觉“我说了一句话,但产品已经替我放到了正确的位置”。

所以这里的判断不是“要不要支持自然语言”,而是自然语言之后有没有一个稳定容器承接结果。可以问一个小问题:这个功能听懂用户之后,留下的是一段话,还是一个用户明天真的能继续使用的对象?如果只是前者,它更像演示;如果是后者,才开始接近产品。

版本历史不是保险箱

Product

核心判断

版本历史最重要的产品价值,不是「出事以后能恢复」,而是让用户在动手之前就知道:我可以试、可以改、可以回头。

对个人软件和 Agent 产品来说,历史记录不是保险箱,而是行动许可。它决定用户敢不敢把真实工作交给产品,也决定产品能不能从「只读助手」走向「可编辑的合作者」。

背景与产品现象

很多成熟创作工具都把版本历史做成了基础设施,而不是高级功能。Google Docs 把入口放在右上角的 Last edit 旁边,用户可以查看谁改了什么、恢复早期版本、复制一个早期版本,也可以给重要版本命名。Figma 的版本历史允许用户沿时间线查看文件快照、恢复、复制某个版本、分享特定版本链接;它还会自动保存 checkpoint,官方说明里写到每 30 分钟记录一个新 checkpoint。Notion 的页面历史则把恢复能力和付费层级绑定:不同计划能回看 7 天、30 天、90 天或更久,并且会按编辑节奏记录版本。

这些功能听起来都像「防丢数据」。但如果只从防丢看,就会低估它们的产品意义。

真正值得看的,是它们都在解决同一个更深的问题:当一个工具承载真实工作物时,用户的最大阻力不是不会用,而是不敢改。

文档、设计稿、知识库、项目计划、个人笔记,一旦变成真实资产,用户就会变保守。越重要的东西,越不敢尝试;越多人协作,越不敢大改;越依赖 AI,越怕一次自动操作把原本可理解的结构弄乱。

所以版本历史不是一个角落里的「后悔药」。它是产品在告诉用户:这里允许你动手。

真正值得看的不是恢复,而是试错半径

大众容易把版本历史看成恢复按钮:删错了,回滚;改坏了,找回;协作冲突了,查责任。

这当然重要,但还不够。

更关键的是,版本历史改变了用户对风险的感知半径。没有历史记录时,任何改动都像直接写进现实;有历史记录时,改动变成一个可以比较、命名、复制、撤回的过程。用户不再需要在「保持安全」和「大胆探索」之间二选一。

Figma 这类工具尤其明显。设计稿不是线性文本,而是一大片空间;很多修改不是一句话能说清楚的 diff。Figma 让用户在历史版本里浏览画布、复制资产、导出资源、复制某个版本成为新文件,这不是单纯恢复,而是把过去版本做成可重新利用的工作材料。

Google Docs 的命名版本也类似。命名不是技术能力,而是产品语义:它允许团队把某个状态标记为「交付前」「客户版」「重写前」「最终稿」。一旦版本可以被命名,历史就不只是机器自动留下的时间戳,而变成团队共同理解的里程碑。

Notion 的页面历史则暴露了另一个事实:历史记录本身也是产品承诺。免费版、Plus、Business、Enterprise 能回看的时间不同,说明「你能放心多久」其实会变成商业包装的一部分。用户买的不只是更多存储,而是更长的心理安全期。

拆解

1. 这些产品相信什么用户行为

它们相信用户不是一次性把东西做对,而是在真实材料上反复试。

这和很多 AI 产品的隐含假设相反。很多 AI 功能默认相信用户要的是一次性生成:给我一段文案、给我一个总结、给我一个计划、给我一版设计。但真实工作不是这样。真实工作更像在原件上推进:先改一点,看一眼;删掉一段,发现不对;复制一版,换个方向;合并别人的意见,再回头比较。

版本历史承认了这种行为。它不要求用户每一步都想清楚,也不把「犯错」包装成异常。它默认工作就是会反复,就是会有人改坏,就是会出现「我想回到三小时前那个状态」的时刻。

这是一种非常成熟的产品世界观:好工具不是假设用户永远理性,而是给非理性的探索留结构。

2. 它牺牲了什么

版本历史牺牲的是界面的简单叙事。

一个没有历史的工具,可以假装当前状态就是唯一事实。界面很干净,模型很简单:这里是一份文档、一张画布、一个页面。但加入版本历史后,产品必须承认同一个对象其实有多重时间层:当前版、过去版、命名版、自动保存版、复制版、可恢复版。

这会带来复杂性。用户可能不知道该恢复还是复制;团队可能要处理权限;产品要决定历史保留多久、哪些变化可见、哪些变化可以删除、谁能看见谁改了什么。

Figma 没有把所有历史都做成同等重量。自动 checkpoint 是底层安全网;命名版本是人为标记;复制版本是重新分叉;Dev Mode 里还会围绕交付状态呈现版本。这说明版本历史不是一张简单列表,而是围绕不同使用场景分层。

Google Docs 也一样。它把「查看早期版本」「恢复」「复制」「命名」拆成不同动作。恢复是覆盖当前事实,复制是保留分支,命名是制造语义锚点。好的版本历史不会把这些都混成一个巨大撤销按钮。

3. 这个判断如何体现在具体体验里

版本历史做得好,通常会有三个体验特征。

第一,它离当前工作足够近。Google Docs 把入口放在 Last edit 附近,本质上是在说:历史不是设置项,而是当前文件状态的一部分。用户看到「最后编辑」时,自然会追问「谁改的、改了什么、能不能回去」。入口长在这个问题旁边,才合理。

第二,它允许用户在恢复之前先看。Figma 的版本可以被浏览,Notion 的历史可以查看某个时间点页面样子,Google Docs 可以看到不同版本和修改者。这里的关键不是「恢复」,而是「恢复前的判断」。没有预览的恢复按钮会制造新的风险;有预览的历史才真正降低风险。

第三,它区分回滚和分叉。恢复早期版本是一种强动作,会改变当前状态;复制一个早期版本则更温和,它让用户把过去拿出来继续探索,但不伤害现在。对创作工具来说,分叉往往比回滚更重要,因为很多时候用户不是想否定当前版本,而是想从旧方向重新长出一个新方向。

这三个特征合在一起,才让历史记录从「事故处理」变成「日常工作的一部分」。

4. 对个人产品 / Agent 产品的启发

对 Dewey 关心的个人软件和 Agent-native 产品,版本历史的启发很直接:只要产品开始替用户改东西,就必须设计时间层。

如果一个个人知识工具允许 AI 整理笔记,它就不能只给用户一个整理后的结果。它至少要让用户知道:改了哪些文件、原文在哪里、能不能只接受其中一部分、能不能恢复到整理前、能不能把这次整理保存成一次可命名的操作。

如果一个 coding agent 替用户改仓库,它不该只在聊天里说「我完成了」。它需要把这次改动变成可审查的版本边界:哪些文件被改、为什么改、测试结果是什么、如果撤回会影响什么。Git 已经解决了底层版本问题,但产品层仍然要解决用户的理解问题。不是所有用户都愿意从 commit、diff、stash、branch 里拼出「我是否安全」。

如果一个个人上下文产品承诺「帮你记住我」,也不能只做越来越大的记忆库。它需要回答:这条记忆什么时候生成的?依据是什么?被哪次对话改过?我能不能回到上周的偏好?我能不能复制一份旧状态用于新项目?记忆如果没有版本,就会从帮助变成不可解释的性格漂移。

Agent 产品尤其需要这一层。因为 agent 的风险不在于生成错一句话,而在于它可能连续执行多个动作,把错误扩散到多个对象里。没有版本边界的 agent,只能靠用户事前少授权、少使用来保护自己;有版本边界的 agent,才有机会让用户放心增加委托深度。

5. 哪些不能照抄

不能照抄的第一点,是把版本历史做成完整时间机器。

个人产品不一定需要 Figma 或 Google Docs 那种成熟复杂度。早期产品更应该先抓住一个关键动作:让用户能看到本次改动,并且能恢复或复制改动前状态。历史系统可以很小,但边界必须清楚。

不能照抄的第二点,是把历史藏到高级菜单里。对低频事故来说,菜单可以接受;对 AI 改写、批量整理、自动执行来说,历史必须出现在动作完成的现场。用户刚刚让 agent 改完东西时,最需要的不是一句「Done」,而是「查看改动」「接受」「撤回」「保存为版本」。

不能照抄的第三点,是用技术版本代替产品版本。文件系统快照、数据库日志、Git commit 都可能存在,但如果用户看不懂、找不到、不会恢复,它们就不是产品能力。产品版本要有人的语言:整理前、客户版、发布版、自动清理前、AI 修改前。

结论

  1. 版本历史不是备份功能,而是行动许可。 它让用户敢于在真实材料上试错,而不是只在玩具示例里体验产品。

  2. Agent 产品必须把时间层做进体验。 只要 agent 会改文件、改任务、改记忆、改设置,就需要让用户看见「改动前 / 改动后 / 可恢复 / 可分叉」。

  3. 好的历史记录要支持判断,而不只是恢复。 预览、命名、复制、分叉,都是为了让用户在回头之前先理解发生了什么。

  4. 早期个人产品不需要复杂版本控制,但需要清楚的改动边界。 最小可行版本不是完整时间线,而是每次重要操作后,让用户知道产品改了什么,并且能安全撤回。

真正成熟的个人软件,不是承诺用户永远不会搞乱东西,而是让用户知道:就算我大胆动手,也不会失去对自己材料的控制。

剪贴板不是仓库

Product

个人软件里的剪贴板、历史记录、最近项目,常被做成一个小型资料库:可搜索、可分类、可永久保存。但它真正高频的产品价值,往往不是“帮我管理更多东西”,而是把刚刚断掉的动作接回来

用户复制一段话、截一张图、切到另一个窗口时,脑子里通常还有明确意图:我要贴到哪里、改成什么、发给谁。这个意图很短命。一旦产品要求用户命名、归档、选择集合,刚才那条线就断了。好的 clipboard 产品不急着把内容变成资产,而是先保护这几分钟里的上下文,让用户能从“我刚才复制过什么”迅速回到“我本来要做什么”。

这也是很多个人 AI 工具容易做重的地方。它们看见历史,就想总结;看见素材,就想入库;看见片段,就想生成结构。可在很多场景里,用户不需要第二大脑,只需要一个可靠的“刚才”。如果 AI 介入,也应该先帮用户恢复动作:补全刚才要发的句子、找回刚才那张截图、把刚才复制的几段按原意拼起来,而不是立刻宣布自己在建立长期记忆。

可以问一个小问题:这个功能是在替用户保存人生资料,还是在替用户接住一个即将滑走的动作?前者很容易做成沉重的系统,后者才更像个人软件里真正会被天天用的小能力。

演示时刻不是使用频率

Product

AI 产品最容易误判的一件事,是把“演示时刻”当成“使用频率”。一次发布会、一条短视频、一个看起来像魔法的自动化流程,确实能让人相信技术已经到了。但产品真正要回答的不是“它能不能在镜头前完成一件惊艳的事”,而是“用户明天还会不会为同一件小事再次打开它”。

很多 AI 硬件和 agent 产品都踩过这个坑:它们把最复杂、最跨场景、最像未来的任务放在台前,试图证明自己无所不能。可日常使用恰好相反。用户不是每天都需要一个替自己规划旅行、打电话、跨应用采购的万能代理;用户更常遇到的是一小段话要改、一张票据要归档、一次会议要收口、一个文件要找到。频率通常长在无聊的小动作里,不长在宏大的能力宣言里。

这不是说 demo 不重要。demo 的价值是让用户看见可能性,但它不能替代产品里的重复路径。一个好的 AI 产品,应该把魔法压缩成稳定、可预期、低成本的日常动作:触发入口在哪里,结果会落到哪里,失败后谁负责,下一次是否更省力。只要这些问题没有被产品化,再强的模型也只是一次性表演。

可以问一个小问题:如果把最惊艳的演示删掉,这个产品还剩下哪一个用户愿意每天重复的小动作?如果答案不清楚,真正缺的可能不是能力,而是使用频率。

先定验收口径

Product

Agent 产品越能独立执行,越不能把“开始干活”当成第一步。更好的第一步,是先帮用户形成一个可验收的口径:这件事完成后,什么算对,什么算不够,哪些边界不能碰。

很多 AI 产品的问题,不是能力弱,而是太急着表现能力。用户说一句“帮我优化这个页面”“帮我整理这些资料”,系统立刻进入生成或执行,看起来很顺。但等结果回来,用户才发现双方从来没有共享过标准:是要更快、更美、更完整,还是更容易继续维护?没有验收口径,所有输出都会变成主观试卷,用户只能靠感觉批改。

Coding agent 是一个很清楚的例子。真正让人放心的不是它会写很多代码,而是任务能落到 diff、测试、PR 描述、失败用例这些可检查对象上。它们把“我觉得差不多”变成“这些条件过了没有”。这不是工程细节,而是产品关系的变化:AI 不再只是给答案的人,而是和用户共同维护一套完成标准。

所以,agent-native 产品可以少问一点偏好,但不能省掉验收。最轻的做法也许不是复杂表单,而是在执行前用一句话改写目标、列出 2-3 个检查点,让用户能点头、删改或跳过。可以问一个小问题:你的产品现在是在更快地产出结果,还是在更早地帮用户定义什么叫结果成立?

日历要把时间变成入口

Product

日历产品一个容易被低估的判断是:它不该只是更漂亮地展示时间,而应该在正确时刻把“接下来该做什么”压成一个入口。日程不是信息块,而是用户从一种状态切到另一种状态的门。门做得好,用户不需要重新搜会议链接、翻文档、找参会人、回忆上下文;门做得差,日历就只是一个准时提醒你开始焦虑的表格。

这也是为什么 Cron / Notion Calendar 这类产品的关键,不只是界面更干净,而是把 join meeting、参会人、关联文档、跨时区、可用时间这些动作贴在事件本身上。传统日历把事件当成一条记录:标题、地点、开始时间、结束时间。更好的日历把事件当成一个临界点:到这个时间,用户应该能直接进入会议、准备材料、改期、联系对方,或者判断这件事是否还值得占用时间。

对 AI 和个人工作流产品来说,这个判断更重要。很多 assistant 会做“今日摘要”,但摘要常常只是另一张待读清单。真正有用的做法,是把上下文挂回即将发生的时间对象上:会议前给出相关笔记和上次承诺,会议后把待办落到原事件或项目里,而不是生成一段漂在聊天里的总结。时间对象天然带着意图、边界和紧迫性,比泛泛的 inbox 更适合承载下一步。

可以问一个小问题:你的产品里有没有一些对象,本来只是“记录”,但其实更应该被设计成“入口”?如果用户每次都要从记录旁边再找动作,说明产品还没有把场景切换真正收口。

批量不是效率的证明

Product

AI 产品很容易把“批量处理”当成高级能力:一次总结十篇文章、一次整理一百条笔记、一次替你清空收件箱。但对个人软件来说,批量本身不是效率,真正要看的,是这些对象背后的判断是否足够同质。如果每一项都需要不同的取舍,批量只是在把决策债务打包。

好的批量功能应该先缩小判断面,而不是扩大处理量。比如不是“帮我整理所有资料”,而是“把明显重复的收起来,把可能有用但不确定的放到待看,把需要我拍板的单独列出来”。产品的价值不在于替用户一次性做完,而在于把一堆混杂对象切成几类可快速确认的状态。

这也是很多 AI workflow 看起来很强、用起来很累的原因:它们把输出规模做大了,却没有把复核成本变小。用户表面上少点了几次按钮,实际多了一层不放心——我是不是漏看了?它是不是误删了?哪些改动值得接受?

可以问一个小问题:当一个功能声称“批量完成”时,它到底是在消灭重复劳动,还是在制造一批需要用户逐个验收的新工作?