"对话"这个陷阱
每一款个人 AI 产品都先发"聊天",因为聊天是最容易演示的那一面。你打字进去,模型打字出来,用户点头,种子轮的故事自己写好了。
这也是个陷阱。
对话不会"完成",它只是"飘走"。一段交流的终点,要么是用户走神了,要么是屏幕黑了 — 下一次打开 App,光标又回到一个空空如也的输入框。上一次聊的内容现在是档案。两天前压在你心上的事,得从头再讲一遍。产品看上去很忙、参与度很高、Session 时长很好看 — 然后一无所产。
过去三年发布的每一款通用 AI 产品,长的就是这个形状。2023 年的 ChatGPT 看起来像"工作的未来"。2026 年的 ChatGPT 还看起来像"工作的未来",因为它的形状,跟 2023 年的一模一样。每一次会话独立。记忆零碎地存在。任务长在你脑子里,长不进系统里。
去年下半年,我们一直在加更多聊天功能。更好的人格,更准的上下文召回,更顺滑的情绪指示。每一项都推动了某项指标。但没有一项推动那个真正重要的指标:用了 iSpirit,你说过想做的事,有没有更多被做完?
答案是没有。我们也知道为什么 — 我们一直在打磨那个输入框。真正缺的不是更好的对话,而是一层把对话裹起来的东西:它能记得你"开始过什么",并替你把它往前走。
"目标"作为工作的单位
我们做出的改动,描述起来很短,但在架构里承重很大:工作的单位是目标,不是对话。
iSpirits 里的一个目标,就是 Postgres 表里的一行。它有标题、视野、状态、归属(你)。它还挂着一组任务 — 另一张表,join 进来 — 任务上还有依赖、产出、反馈、审计日志。一共 6 张表(goals、goal_tasks、goal_task_dependencies、goal_task_outputs、goal_task_feedback、goal_task_audit_log)。看起来像是一套项目管理的数据库结构,因为它差不多就是。
让它从"项目管理工具"变成"运行时"的,是夜里跑在它上面的那段东西。
目标有起点、过程、终点。对话没有。
你不会"打开"一个目标管理 App 去打字。你也不会像查聊天一样去查目标。你写下你希望几个月后是什么样,你的灵宠把它分解成任务 — "未来塑造者"向导先把澄清问完,然后一个 CEC 子代理把真正的分解从头到尾跑完 — 从那一刻起,这个目标就活在系统里,不管你登不登录。
最后这一句,就是全部要点。在你两次使用之间,这款产品的工作,是把这个目标向前推到它能在没有你的情况下被推到的那一步,把推不动的部分浮出来给你。下一次对话发生时,它已经骑在已经发生过的工作之上。
在创建那一刻,任务被分进三类
每个目标上的任务都会落进三个桶之一。不是"投递时分",是"创建时分" — 由那个一开始替你分解目标的向导决定。三类是模型里的一个枚举:TaskClass.DIGITAL、TaskClass.ACTION、TaskClass.DECISION。每一类在运行时都被路由到不同的地方。
- 数字类。这件事完全活在屏幕上。调研、起草、分析、一次竞品扫描、一次文献阅读、一封邮件草稿、一张对比表格。任务里没有任何东西需要现实世界。路由到:云端执行中心(CEC)。一个子代理过夜把它接走、从头做完,把产出以
GoalTaskOutput的形式写进你的日记。 - 行动类。这件事只能由你、在现实世界里做。打个电话。谈一次话。完成一次锻炼。开车去某地。按下"发送"。路由到:早晨简报。运行时起草一段一句话的上下文(这件事是什么、它在目标里为何重要、需要带什么),浮现在 /progress.html 上。
- 决策类。这件事是一道岔路。两个或更多的合理选项都成立;缺的是你的判断,而不是更多信息。路由到:同一个页面,但展现成一组结构化的选项集合。灵宠先把选项 — 通常 2 到 4 个 — 起草出来,每个配一段简短的理由,然后等你。
属于你的那部分,你留在循环里:行动、电话。不属于你的那部分,你不在循环里:思考之间的杂活。这套分类,几乎就是这个运行时面对用户的全部契约 — 所以它住在一个被刻意做得"不可灵活"的枚举里:三个值,没有"其他",没有半截方案。"半截"是六个月后会变成八个桶、每个桶都没做好的形状。
夜里跑的那一段
每天 UTC 22:00,一个叫 nightly_goal_runtime 的 cron 醒来。它走一遍每一位开了 runtime flag 的创业者套餐用户、每位用户名下每一个活动目标、每个目标里每一个"就绪"的任务 — 也就是依赖都已经满足的任务。它把每个就绪任务派往各自的车道。
数字类去 CEC。运行时把每个目标的数字派单上限设在每晚 3 个,一半是为了尊重你的额度预算,一半是因为一夜之间扔出 15 份草稿不算"前进" — 那叫噪音。每个目标 3 个、可顺延到接下来几个晚上,是一个目标"在向前走、但早上不会撞墙"的速率。
行动类走一遍简报生成器。聊天里那个"引用了 N 段记忆"徽章背后用的同一个上下文引擎 — 同一个向量库、同一个阈值、同一套按用户隔离 — 把你打那个电话之前最可能想要的几条信息装到一起:之前几次类似谈话、相关的日记片段、你说过自己最在意的那些价值观、它们在这件事里如何相关。简报很短。我们试过更长的;更长的更糟。
决策类走一个小型的专门生成器,它会同时表态且展示替代方案 — 我们最初跑的是普通的"这里是 5 个选项",一个月里看到用户根本不挑,才上的这个版本。"选择疲劳"是真的;它的解药不是更少选项,而是"一个被推荐的选项,加上第二、第三可见"。
运行时每走一步自主动作,都会被追加进 goal_task_audit_log。每一步。没有"AI 悄悄做了点事"那一层。如果你想知道某个任务为什么动了、用了什么上下文、生成了什么 — 那行日志就在那里,带着时间戳。
早晨简报 — 以及它要遵守的那条规则
到了你本地 08:00 上下半小时,另一个 cron 触发。它把过夜里发生的事汇成一条短短的笔记,推到你手机上。三件数字类完成。两个决策待定。今天一件行动。一点开,就是 /progress.html,左中右三条车道并排展开。
关于这条早晨推送,有两个工程细节,后来发现承担了大部分实际效果。
它每 30 分钟跑一次,但不会每 30 分钟就发一次。它会查每个用户的本地时间,只在他们 08:00–08:30 这个窗口里发。悉尼的用户在旧金山还没吃午饭之前就拿到了。里斯本的用户在纽约还没起床之前就拿到了。Cron 是全球的,体验是本地的。
没东西可说时,直接跳过。一个空的早晨,不发推送。一个唯一能写出"啥都没发生但跟你打个招呼"的早晨,也不发推送。运行时内部会跟踪四种"跳过"分类 — skipped_time、skipped_idempotency、skipped_empty、errors — 而第二常见的"不发"理由,就是"empty"。
这条规则,是我们设计纪律里最难守住的一条。消费软件的默认做法,是用人造参与度去填满空白早晨。"保护连续打卡"的弹窗。"你好久没打开 App 了"那种轻轻一推。我们在源头就把它们禁掉了。"在没什么可说时还要发的摘要",本质上就是包装成关心的垃圾信息;最简单的做法,就是让运行时从能力上根本生成不了这种文案。
它还有一道每用户 20 小时的幂等窗口,所以一个慢的早晨 cron 加上一次紧跟的重跑,也不会双推。最简单的错误,要靠最简单的护栏来避免。
/progress — 用户看到的
这套运行时所有别的架构选择,最后都汇到一个页面:/progress.html。三栏。数字 已完成在左,昨晚的产出排在最上面,每一条都能展开成完整内容。行动 今日在中间,简报一点击可见,每条下面就一个"我做完了"的按钮。决策 待定在右,选项集合摆在那里,一键挑一个。
这个页面没有输入框。这是刻意的:它是一个"关于运行时做了什么、用户接下来要做什么"的页面。聊天的输入框依然在(聊天还在,作为环境性反思仍然有用),只是它不再是重心。"进度"是重心。
暂停、恢复、归档的控件直接落在每一个目标上。暂停一个目标,就停掉这个目标的夜间走查。归档,就把审计日志冻结。两种操作都没有"你确定吗"弹窗。审计日志可恢复;用户的判断不该被"摩擦测试"。
为什么先开放给创业者用户
这个运行时眼下被两道开关挡着:GOAL_RUNTIME_ENABLED 是全局开关,创业者套餐用户门是发布边界。挑创业者 — 独立创业者、独立工程师、技术型操盘手 — 是有原因的,一半产品、一半伦理。
产品那一半:独立创业者这一群人的"目标",最容易被分解成数字 / 行动 / 决策三类 — 也就是这个运行时所期望的那种形状。把上线落地页发出去分得很干净。在三种 GTM 角度里挑一个分得很干净。Schema 在他们身上从第一天起就管用,不用我们为了照顾更杂乱的生活领域去事后改型。我们一定会推到那些群体 — 策略文档里写得很清楚,第 7 个月扩到"传承者(Legacy-Makers)",第 9 个月扩到"梦想家(Dreamers)" — 但我们不想为了更早覆盖更多人,带着一个我们已经知道形状偏掉的运行时过去。
伦理那一半:对一个人的目标进行"夜间自动走查",这件事很重。创业者是平均上最有可能大声、迅速告诉我们"哪一次自主行动越界了"的群体,也是最有可能在感觉不对时去翻审计日志的群体。他们的反馈形状,对我们决策是一种制衡 — 这种制衡,广义市场暂时给不了。把"自主性"先发给最会狠狠批评它的人,这是正确的发布顺序。
这个运行时不是什么
留一段"反向定义",因为这是被问得最多的问题。
它不是 Agent 群。每个被派出去的任务只有一个执行槽 — 跟"云端执行中心"那篇里的"朴素"是同一种朴素。多 Agent 编排在 2025 年很热闹;我们下了相反的赌注,目前为止这赌注还在持续兑现。
它不是一个生产力 App。没有看板、没有积分、没有"任务连续打卡"。运行时把你的目标当作"它在你旁边一起做"的事,不是当作一张可以打分的图。任何东西你都能暂停;什么都不会反过来催你。
它不是常开的。目标在你设上去时开始跑,在你按暂停时停下来,在没东西就绪时安静下来。一个用户可以同时开一个活动目标,也可以开四个,两种都正常。
来试试
如果你曾经设过一个真正想做的目标,然后看着它"飘走" — 不是因为你不再想做,而是因为你和它之间那些数字化的小步骤,一直没被做完 — 这个运行时,就是 iSpirits 用来关上这个回路的那一部分。
免费版让你创建目标、手动跑。真正的夜间走查 — 配 CEC 派单 + 早晨推送 — 在 Plus 及以上。$12/月。额度可结转。