摘要

过去二十四小时里,我和 ChatGPT 的协作表面上涉及很多不同的问题:Control Tower 怎么判断我的每一句话,什么应该成为一个新的 Q,什么只是对旧问题的补充;一个 Worker 到底什么时候算真的在工作;任务做完以后为什么不能立刻显示“完成”;Control Room 应该展示什么;AI 遇到可以自行判断的事情是否还要不停问我“要不要继续”;网站修改应该怎样提交、验证和上线;Vercel 的 Preview 应该怎样节省;CI 到底是流程的一部分还是绝对门槛;正式上线以后为什么必须留下 Change Log;甚至还有未来原生 iOS App 应该从什么方式开始。

如果把这些问题拆开来看,它们似乎只是产品设计、开发流程和 AI 使用习惯上的一系列细节。但连续看下来,我发现这一天真正被反复修改的其实不是某一个页面,也不是某一段代码,而是我和 AI 之间的协作协议本身

我不断提出问题、观察结果、指出不合理的地方、补充限制条件;ChatGPT 则把这些自然语言里的要求转换成定义、状态、规则、数据关系和工作流。有些方案是 ChatGPT 先提出的,我再判断是否合理;有些规则是我非常明确地要求的,系统随后负责把它形式化;还有一些东西是在来回纠正中共同形成的。

到最后,我们处理的不再只是“AI 怎么替我完成一个任务”,而逐渐变成另一个问题:

一个人如果长期和多个 AI、Worker、Skill、代码仓库、部署系统以及自己的个人网站一起工作,怎样才能让这些东西真正构成一个连续、可追踪、不会轻易丢失上下文的协作系统?

这篇文章记录的,就是这二十四小时里这套系统是怎样一点点被逼出来的。

关键词: 人机协作;ChatGPT;Control Tower;任务调度;Q Normalizer;RUN;可观察性;闭环系统;用户验收;AI Agent;个人数字系统

ChatGPT macOS Chat Bar

图 1|OpenAI 官方 ChatGPT macOS Chat Bar 截图。文章中的许多协作都从这样的自然语言输入开始。


目录

  1. 研究对象:这一天真正被修改的是什么
  2. 从“我的每句话”开始:先接住,再判断
  3. 一个重要纠正:Message 不等于 Q
  4. Q 为什么必须成为整个系统的锚点
  5. RUN:把“有人在处理”变成可以验证的事实
  6. 从直线流程改成回环:为什么“做完”以后还不能结束
  7. 我真正想看的 Control Room,不是任务看板
  8. 六个问题:我打开 Control Room 时必须立刻知道什么
  9. 从“管理任务”到“观察系统”:超级投影控制中心
  10. 我不想继续当 AI 之间的人工中转站
  11. 自主执行与用户控制之间的边界
  12. 从频繁部署到“多 Git,少 Deploy”
  13. Preview、CI 与真实发布:工具不能反过来绑架流程
  14. 一个新的发布原则:没有 Change Log,就不算完整上线
  15. 从网页继续向外:原生 iOS App 的现实路线
  16. 把错误也纳入系统:工作总结不是进度汇报
  17. 这二十四小时里,我和 ChatGPT 实际是怎样分工的
  18. 从对话到制度:自然语言如何逐渐变成协议
  19. 一个更大的变化:我开始设计的不是 AI,而是人与 AI 的关系
  20. 结语:真正重要的不是“AI 能做什么”

1. 研究对象:这一天真正被修改的是什么

如果只看表面,这一天很容易被写成一份开发日志。

我提出一个问题,ChatGPT 分析;我再提出另一个要求,系统继续修改;有时候讨论 Control Room,有时候讨论 Q,有时候讨论 Worker,有时候讨论 Git、Vercel、CI、iOS App。把它们逐条列出来,会得到很多互相并不相同的事项。

但这不是我今天真正经历的东西。

我越来越在意一个以前很容易被忽略的问题:AI 的能力越来越多以后,人的工作会不会反而变成管理 AI?

一个任务交给一个 Worker,一个问题交给另一个 Skill,代码在 GitHub,部署在 Vercel,状态又在另外一个地方。每一个工具单独都可能工作正常,但如果最后仍然需要我自己记住:

“这个东西交给谁了?”

“刚刚是不是卡住了?”

“它说完成了,到底是真的完成了吗?”

“这个问题是不是已经处理过?”

“这次又新开了一个任务,还是刚才那个任务的延续?”

“部署成功以后,我是不是还得自己记得去更新记录?”

那其实只是把原来的手工劳动换成了另一种手工劳动。

所以这一天,我反复修改的核心对象,逐渐变成了:

我
↓
自然语言
↓
Control Tower
↓
Q
↓
Manager / Skill / Worker
↓
RUN
↓
真实执行
↓
验证
↓
Evidence
↓
我验收
↓
回到原 Q

我并不是一开始就把它完整地画成这样。很多规则,都是在实际使用过程中发现哪里不对,再一点一点加进去的。

这一点很重要。

它不是先写了一份漂亮架构,然后让现实去服从架构;恰恰相反,是现实不断暴露问题,架构才被迫变得更严格。


2. 从“我的每句话”开始:先接住,再判断

我今天反复强调的一件事,是 Control Tower 必须成为真正的总入口。

所谓总入口,并不是说我以后必须使用某一种固定句式,也不是要求我每次先说“我要创建一个任务”。

我想要的其实恰恰相反。

我平常怎么说话,就继续怎么说。

一句问题、一句突然想到的事情、一句修改意见、一句“这个好像不对”、一句“这个已经好了”、一句对刚才方案的补充,都应该先经过同一个入口。

也就是说,系统应该适应人的表达,而不是要求人先学会像数据库一样说话。

这导致了今天一个非常重要的要求:

我的每一句输入,都应该先经过 Control Tower。

但很快又出现了第二个问题。

“每句话都经过 Control Tower”,并不等于“每句话都生成一个新任务”。

这两个概念如果不分开,系统马上就会失控。


3. 一个重要纠正:Message 不等于 Q

这是今天非常关键的一次定义澄清。

人类对话是连续的。

比如我先提出一个问题,ChatGPT 问我 A 还是 B,我回答“A”。

这个“A”当然是有意义的。

但如果系统因为“A”有意义,就再创建一个新的 Q,那么原本只有一个问题的对话,很快会变成:

Q1:原来的问题
Q2:选择 A
Q3:确认 A
Q4:补一句说明
Q5:说“对”
Q6:说“这个好了”
……

最后数据库记录的不是问题,而是聊天碎片。

所以我们进一步把两个东西拆开:

Message ≠ Q

Message 是我的一次输入。

Q 则是:

值得独立进入 Control Tower、未来有必要单独追踪和回看的最小语义单元。

于是,我的每一句话虽然都会进入 Intake,但 Intake 首先做的是关系判断。

它需要分辨:

IGNORE
    无独立价值的寒暄、重复、语气内容

LINK_EXISTING_Q
    对原问题的补充、纠正、延续、回答

EVIDENCE_OR_ACCEPTANCE
    对已有结果的验证、通过、不通过、反馈

NEW_Q
    真正独立的新问题、新任务、新决定、新想法、新事实

SPLIT_TO_N_Q
    一句话里面实际上包含多个独立事项

这不是为了让数据库显得专业。

它解决的是一个很现实的问题:如果 Q 的身份不稳定,整个后面的系统都会失去意义。

因为 RUN、Issue、代码修改、Git commit、Deployment、Evidence,最后都必须知道自己到底是在解决哪个问题。

所以 Q 并不是“问题列表里的一张卡片”。

Q 是整条链条的身份锚点。


4. Q 为什么必须成为整个系统的锚点

这一天另外一个逐渐明确的认识是:一个问题在真实协作中可能经历很多次执行。

第一次执行可能成功。

也可能失败。

可能运行到一半中断。

可能因为权限问题暂时等待。

也可能方案本身需要修改,于是重新启动第二次执行。

所以:

一个 Q
不一定
只有一个 RUN

更合理的关系是:

                ┌── RUN-1
                │
Q-001 ──────────┼── RUN-2
                │
                └── RUN-3

Q 代表“我要解决的到底是什么”。

RUN 代表“某一次具体解决尝试”。

这个区别看起来只是一个数据模型上的问题,但它实际上改变了很多行为。

比如一个 Worker 中途停止。

过去最容易发生的事情是:重新开一个 Worker,重新问一次,重新生成一套东西。

这样表面上很快,实际上历史被打断了。

我今天要求的逻辑更接近:

先检查原 RUN
    ↓
还能安全恢复?
    ↓
是 ───→ 继续同一个 RUN
    ↓
否
    ↓
保留原 RUN 的真实状态
    ↓
再创建 linked RUN

也就是说,一次中断不应该自动擦掉一次执行的身份。

甚至连“停止思考”到底意味着什么,也不能随便猜。

它可能是网络、平台、工具、用户操作、上下文、额度,甚至只是一次无法判断原因的中断。

如果没有证据,就只能记录:

INTERRUPTED

不能因为看起来像限流,就自作主张写:

THROTTLED

这个细节让我觉得很重要,因为它实际上触及了一个更大的原则:

AI 系统不能为了让状态看起来完整,而制造它并不知道的事实。

“不知道”应该成为一种合法状态。


5. RUN:把“有人在处理”变成可以验证的事实

以前我们很容易使用一个模糊词:

“处理中”。

但我今天越来越不满意这个词。

“处理中”到底是什么意思?

有人接单了吗?

Worker 已经真正开始执行了吗?

它只是排队了吗?

它卡住了吗?

它正在等我点一个授权吗?

结果已经出来,只是在验证吗?

还是其实根本已经没人处理,只是页面上还挂着一个“进行中”?

所以 RUN 的状态必须更准确。

我们逐渐把它区分成类似这样的生命周期:

PLANNED
   ↓
RUNNING
   ↓
VERIFYING
   ↓
DONE

异常路径则不能全部塞进一个“失败”:

INTERRUPTED
THROTTLED
QUEUED
WAITING_APPROVAL
WAITING_USER
BLOCKED_EXTERNAL
FAILED
SUPERSEDED
……

我希望以后在 Control Room 里看到“受阻”时,它可以作为一个视觉上的聚合状态,但底层必须知道具体是哪一种受阻。

因为解决方式完全不同。

等审批,和额度限制,不是一回事。

外部依赖失败,和 Worker 中断,也不是一回事。

缺少我的关键决定,更不能和系统自己排队混在一起。

界面可以简化,事实不能简化。


6. 从直线流程改成回环:为什么“做完”以后还不能结束

这是今天整个 Control Tower 设计里我觉得非常重要的一次变化。

很多任务系统默认都是直线:

TODO
↓
DOING
↓
DONE

但实际和 AI 一起工作以后,我发现这不够。

Worker 说“完成了”,不代表真的完成。

代码写好了,不代表上线。

上线了,不代表功能正确。

验证通过了,也不一定代表符合我要的东西。

所以我要求整个 Q 必须是一个回环

真正的结构应该是:

             ┌──────────────────────┐
             │                      │
             ▼                      │
Q → RUN → 执行 → 验证 → Evidence → 请求我验收
                                  │
                         ┌────────┴────────┐
                         │                 │
                       通过              不通过
                         │                 │
                         ▼                 │
                    RESOLVED              │
                                           │
                                           └──→ 回到原 Q
                                                ↓
                                             新 RUN

这里最关键的一点,是“不通过”以后不能重新创造一个失去上下文的新问题。

它仍然是原来的 Q。

只是又发生了一次新的解决尝试。

所以真正稳定的是 Q,而不是某一次执行。

也因为这个原因,我后来明确要求:

只有结果真实落地、经过验证,并且我最终验收以后,一个需要实际交付的 Q 才能真正 RESOLVED。

这和过去那种“AI 回复了一句完成了”差别很大。


7. 我真正想看的 Control Room,不是任务看板

讨论到这里以后,Control Room 的定义也发生了变化。

如果只是展示:

待办 12
进行中 5
完成 20

那对我其实没有太大意义。

这种东西很多项目管理软件已经可以做。

我真正想看的,是整个系统现在到底发生了什么。

所以 Control Room 不应该只是一个 Kanban。

我后来把它理解成一个超级投影控制中心

Control Tower 是背后的调度和事实系统。

Control Room 是我作为人的观察界面。

两者关系更像:

多个真实执行节点
       ↓
事件 / 状态 / Evidence
       ↓
Control Tower
       ↓
统一事实关系
       ↓
Control Room
       ↓
我看到整个系统

这个界面的价值不在于“好看地展示任务”。

而在于让我不需要分别去问十个 AI:

“你做到哪里了?”


8. 六个问题:我打开 Control Room 时必须立刻知道什么

为了避免 Control Room 最后再次变成一个漂亮但没有用的后台,我给它提出了一个非常具体的验收标准。

我打开以后,必须直接回答六件事情。

第一,现在到底一共有多少个 Q?

第二,每个 Q 已经走到哪里?

第三,准备用什么方式解决,或者目前正在用什么方式解决?

第四,它现在是否真的有人、Worker 或 RUN 在处理?

第五,它到底有没有真正解决,有没有 Evidence,而且有没有请求过我的验收、最终有没有通过?

第六,Control Tower 这套流程自己是不是正常工作?

第六个问题尤其重要。

以前的系统通常只显示“任务健康不健康”。

但如果负责显示任务状态的系统自己坏了,我可能连它坏了都不知道。

所以 Control Room 最终需要同时展示两层健康度:

业务层
Q / RUN / Issue / Deployment 是否正常

系统层
Intake / Event / Projection / Control Tower 本身是否正常

这已经不是普通的任务管理。

它更接近一个真正意义上的控制系统。


9. 从“管理任务”到“观察系统”:超级投影控制中心

当这个定义继续往前走,Control Room 的交互需求自然也变了。

我不希望它只是很多卡片。

我以后应该可以按状态、类型、优先级、风险、Worker、时间、阻塞原因、Evidence、用户验收、Git、Deployment 等条件筛选。

然后从全局一路下钻。

例如:

全部 Q
  ↓
某个 Q
  ↓
相关 RUN
  ↓
某个 RUN
  ↓
相关 Issue / Patch
  ↓
Git commit
  ↓
Deployment
  ↓
Evidence
  ↓
用户验收

同时还应该有历史事件。

因为“现在是什么状态”和“它是怎么走到这个状态的”是两个问题。

我希望未来可以真正回看:

它什么时候创建;

什么时候开始;

什么时候停过;

为什么停;

后来是不是恢复了;

哪一次 RUN 被替代;

什么时候部署;

Evidence 是什么;

我什么时候说通过。

这也是为什么单纯保存最终状态远远不够。

最终状态只能告诉我结果。

事件流才能告诉我过程。

图 2|GitHub 官方文档中的 Actions 工作流可视化图。不同任务节点、依赖关系和执行状态被放在同一张图中,和文中讨论的“可观察执行关系”属于相似的问题。


10. 我不想继续当 AI 之间的人工中转站

今天很多要求背后,其实有一个非常简单的个人感受:

我不想不停地点“继续”。

如果一件事根据现有上下文、既定规则和风险边界已经可以判断,那 ChatGPT、Worker 或 Manager 应该自己继续。

我不希望流程变成:

AI:我分析完了,要继续吗?
我:继续。

AI:我准备修改了,要继续吗?
我:继续。

AI:修改完成,要验证吗?
我:验证。

AI:验证完成,要提交吗?
我:提交。

这不是自动化。

这是让我变成了一个按钮。

所以我进一步明确了一条协作规则:

普通、可逆、方向明确的工作,AI 应该自行继续执行。

真正应该让我介入的节点主要是:

  • 不可推断的重要产品决定;
  • 高风险或不可逆操作;
  • 权限审批;
  • 缺少必要输入;
  • 最终验收。

这意味着人的角色从“逐步批准执行”发生了变化。

以前是:

每一步都要我批准

现在更接近:

目标和边界由我决定
        ↓
系统自主执行
        ↓
真正需要我的节点才回来
        ↓
最终结果由我验收

我并没有把控制权交给 AI。

反而是在重新定义什么才叫真正的控制。


11. 自主执行与用户控制之间的边界

这里很容易出现一个误解。

减少询问,并不等于 AI 想做什么就做什么。

真正的区别在于:

操作性判断和价值性判断,不应该混在一起。

例如一个普通的可逆修改怎么实现,属于操作性判断。

AI 如果已经掌握代码和上下文,应该自行决定。

但是一个重要产品方向选 A 还是 B,如果两个方向会带来本质不同的结果,就不应该假装替我决定。

同样,涉及不可逆数据、高风险权限、安全等问题,也不能为了“自动化”越过边界。

所以最终形成的并不是“AI 全自动”。

而是一套分层权限:

低风险 + 可逆 + 方向明确
→ 自动执行

需要专业判断但不会改变用户意图
→ AI 自主判断并记录依据

涉及重大方向
→ 请求用户决策

高风险 / 不可逆 / 权限
→ 必须获得授权

结果已经产生
→ 请求用户验收

我认为这比简单讨论“AI 应不应该自主”准确得多。

问题不是自主或不自主。

问题是:

哪一种决定应该属于谁。


12. 从频繁部署到“多 Git,少 Deploy”

今天另外一条很实际的线索来自开发流程。

如果每修改一点东西就 push,一 push 又触发 Preview 或 Production 构建,那么一个长时间持续修改的网站,很容易产生大量没有必要的部署。

这不仅浪费资源,也让验证过程变得混乱。

所以我们进一步明确了:

多 Git,少 Deploy。

这里“多 Git”不是频繁把东西推到部署分支。

更准确地说,是:

多个清晰的本地 commit
        ↓
保留修改历史
        ↓
保留回滚锚点
        ↓
集中验证
        ↓
必要时再 push
        ↓
尽量少 Preview
        ↓
阶段性 Production

这个规则很好地体现了今天很多讨论里共同存在的一种思路:

记录可以细,外部动作应该克制。

Q 可以详细。

RUN 可以详细。

Commit 可以详细。

Evidence 可以详细。

但是 Preview 没必要每次都开。

Production 更没必要每一个小修改都部署一次。

系统内部应该拥有高分辨率。

对外部昂贵动作则应该降低频率。


13. Preview、CI 与真实发布:工具不能反过来绑架流程

沿着部署问题继续讨论,又出现了 CI。

CI 很重要。

自动测试、检查、构建验证,当然比只靠人工感觉可靠。

所以默认仍然应该:

优先 CI

但今天我又进一步要求:

CI 不能成为唯一发布通道。

因为现实系统不是理论流程图。

CI 也可能因为非代码原因失败。

也可能某一个平台暂时有问题。

如果此时已经存在其他安全、可验证、可回滚的发布路径,那么系统不应该机械地说:

“CI 没绿,所以一切停止。”

因此最终更准确的关系是:

CI = 优先验证通道
≠ 唯一真理

发布是否可以继续,应该综合:

  • 风险;
  • 已有验证证据;
  • 失败原因;
  • 回滚能力;
  • 实际发布路径;
  • 是否涉及真实生产风险。

这是一个我很喜欢的变化。

因为系统终于开始从“遵守流程”走向“理解流程为什么存在”。

流程本来是为了降低风险。

如果最后变成不管现实情况如何都只能机械执行,那工具就开始反过来控制人。

Vercel 部署状态筛选

图 3|Vercel 官方文档中的部署状态筛选界面,可区分 Ready、Error、Building、Queued、Canceled 等状态。


14. 一个新的发布原则:没有 Change Log,就不算完整上线

今天还有一条我明确加入长期规则的要求:

以后 LMN516.com 只要发生真实上线,就必须同步更新网站的生长记录,也就是 Change Log。

我不希望网站只有 Git 历史。

因为 Git commit 是开发者视角。

我未来回头看自己的个人网站时,更想知道:

“那一天,我到底让这个网站多长出了什么东西?”

所以一次发布应该形成这样的完整链:

Q
↓
修改
↓
验证
↓
Git
↓
Deployment
↓
真实上线
↓
Change Log
↓
Evidence
↓
我的验收

Change Log 也不能只是:

fix: update control room status projection

这种文字对开发系统有价值,但对未来的我没有太大意义。

它应该优先描述用户真正能理解的变化。

比如:

“Control Room 现在可以区分任务正在执行、等待用户操作和外部受阻,不再把所有情况都显示成统一的‘进行中’。”

Git 记录技术事实。

Change Log 记录网站的变化。

两者服务的是不同记忆。


15. 从网页继续向外:原生 iOS App 的现实路线

今天的讨论并没有全部停留在 Control Tower。

我还继续想到了 LMN516.com 将来的原生 iOS App。

我的目标不是马上去做一个正式上架 App Store 的商业产品。

更现实的第一步,是利用现有条件,在自己的 iPhone 上真正跑起一个原生 App。

因此路线被拆得更务实:

现在
↓
Xcode / Personal Team
↓
免费自签
↓
自己的 iPhone 使用
↓
验证原生 App 是否真的有价值
↓
未来出现正式分发需要
↓
再考虑 Apple Developer Program
↓
TestFlight / App Store

这个决定其实和今天其他规则很一致。

先让能力真正工作。

不要为了一个未来可能需要的正式形态,提前承担所有成本和复杂度。

我现在越来越喜欢这种开发方式:

先建立真实闭环,再决定是否扩大系统。

Apple Simulator 演示

图 4|Apple WWDC 官方演示中的 iPhone Simulator 画面,用来展示 Xcode / Simulator 开发环境的实际形态。


16. 把错误也纳入系统:工作总结不是进度汇报

今天我还进一步明确了一件长期想做的事:

我要维护的“工作总结”,不是普通的“今天做了什么”。

我真正关心的是:

你们今天做错了什么。

哪些判断错了。

为什么错。

造成了什么后果。

后来怎么修。

最后有没有把这个错误变成一条新规则、一个测试、一段 Skill 约束、一条 CI 检查或者一个自动化。

以后它还会不会再次发生。

所以更准确的结构应该是:

错误事实
↓
根因
↓
后果
↓
修正
↓
制度化
↓
之后是否复发

这和一般的“复盘”很不一样。

普通复盘很容易最后变成成绩单:

今天完成十件事,效果不错,还有两个地方可以优化。

我不太需要这种东西。

我需要的是系统真的变聪明。

如果错误发生过一次,最后什么都没有留下,那么下一次依然可能完全一样地犯错。

但是如果错误最终进入:

  • Skill;
  • 行为测试;
  • CI;
  • 自动检查;
  • 工作规则;

那么一次错误才真正转化成了系统能力。

这应该也是我和 ChatGPT 长期磨合里一个非常核心的部分。

我们不可能不出错。

真正重要的是:

同一种错误到底还要出几次。


17. 这二十四小时里,我和 ChatGPT 实际是怎样分工的

如果把今天很多具体互动压缩成一个表,大概是这样的:

环节我主要做什么ChatGPT / Worker 主要做什么最后形成什么
提出问题用自然语言描述问题、观察或要求理解意图,不要求我先结构化Intake
判断是否建 Q指出哪些东西不该被机械拆成新问题把语言关系形式化Q Normalizer
定义状态指出“进行中”“完成”过于模糊建立 RUN 状态协议RUN lifecycle
处理中断要求不要轻易丢弃原任务身份区分恢复原 RUN 与 linked RUNRecovery
判断完成明确“AI 说完成”不算完成引入 Landing、Evidence、VerificationCompletion contract
最终关闭要求必须回到我这里验收把流程改成闭环Q loop
Control Room提出我真正需要一眼知道的六个问题把要求转换成投影、筛选、事件和下钻结构Control center
AI 自主性不希望不停点“继续”将低风险工作默认自主执行User Action boundary
Git / 部署要求减少无意义构建形成多本地 commit、少 push、少 PreviewDeployment strategy
CI不希望工具成为僵硬门槛将 CI 定义成优先验证而非唯一通道Risk-based release
发布记录要求每次真实上线都留下生长记录将 Change Log 加入发布闭环Release memory
系统进化要求记录 AI 做错的事情把错误转成规则、测试和自动化Evolution loop

看这个表的时候,我能比较清楚地看到一点:

我和 ChatGPT 并不是传统意义上的“需求方”和“执行方”。

我的作用更多是不断判断:

现实里哪里不对。

ChatGPT 更擅长做的,是把这些“不对”转换成一个可以长期执行的结构。

例如我可能先说:

“我不想每次都点继续。”

它不能最后只留下一个偏好设置。

它需要继续追问这个要求在系统上意味着什么。

最后变成:

普通、可逆、方向明确
→ AI 自主继续

真正缺失信息
→ WAITING_USER

权限
→ WAITING_APPROVAL

高风险
→ 用户授权

结果产出
→ 用户验收

这才真正变成系统。


18. 从对话到制度:自然语言如何逐渐变成协议

回看今天,我觉得一个很有意思的现象是:

很多规则一开始都不是“规则”。

它们只是我的一句不满意。

例如:

“这个不能算完成吧。”

“你怎么又新建一个 Q?”

“为什么每个东西都要我点继续?”

“这个明明已经没人处理了,为什么还显示进行中?”

“Preview 能不能少一点?”

“CI 如果挂了难道整个东西就永远不能上线?”

“我想打开 Control Room 就知道到底有多少问题、走到哪里、到底有没有人在解决。”

这些话本身完全不是技术规格。

但 ChatGPT 的价值恰恰出现在下一步。

它把一句现实语言转换成系统语言:

“这个不能算完成”
          ↓
Completion Contract
          ↓
Landing + Verification + Evidence + Acceptance

或者:

“你怎么又新建一个 Q”
          ↓
Relation-first Intake
          ↓
Message ≠ Q
          ↓
LINK_EXISTING_Q / EVIDENCE_OR_ACCEPTANCE

再比如:

“我不想不停点继续”
          ↓
Autonomy Boundary
          ↓
User Action Queue
          ↓
只有真正需要人的节点才打断用户

这大概就是我今天和 ChatGPT 最主要的合作方式。

我负责从使用感受里发现问题。

ChatGPT 负责把问题抽象。

我再判断这个抽象是不是我真正想表达的东西。

不对,我会继续纠正。

对了,它才进入长期规则。

所以真正的过程不是:

我提需求
↓
AI 完成

而是:

我提出真实问题
↓
AI 建立模型
↓
我检查这个模型是否歪了
↓
继续修改定义
↓
AI 把定义落实到流程
↓
实际使用
↓
重新暴露问题
↓
继续修正

它本身也是一个闭环。


19. 一个更大的变化:我开始设计的不是 AI,而是人与 AI 的关系

如果一定要从这二十四小时里提炼一个更大的东西,我觉得不是“我的 AI 系统越来越复杂了”。

某种程度上,目标其实正好相反。

我希望我的使用方式越来越简单。

我最好只需要做三件事情:

提出真实需求
↓
在真正需要我的地方做决定
↓
验收最终结果

中间那些事情:

  • 识别任务;
  • 建 Q;
  • 找 Worker;
  • 创建 RUN;
  • 记录状态;
  • 恢复中断;
  • 关联 Git;
  • 检查部署;
  • 收集 Evidence;
  • 更新 Change Log;
  • 汇总异常;

理论上都应该越来越少地依赖我手工维护。

如果未来我还要每天花很多时间管理这些东西,那么 Control Tower 就没有成功。

所以 Control Tower 最终也不应该成为一套让我增加管理工作的系统。

它应该是一套替我吸收复杂度的系统

后台可以非常复杂。

前台对我应该越来越简单。

这一点也重新解释了 Control Room 为什么这么重要。

Control Room 不是为了让我进入后台管理更多东西。

恰恰是因为后台越来越复杂,所以我需要一个地方把复杂度重新压缩成人可以理解的状态。

可以把它画成:

                    Worker
                      │
           Skill ─────┼──── Agent
                      │
GitHub ─────── Control Tower ─────── Vercel
                      │
               Database / Events
                      │
                  Control Room
                      │
                      我

我的位置不是所有节点之间的交换机。

我应该站在系统之外观察它、决定它、验收它。

而不是亲自承担它们之间的连接。


20. 结语:真正重要的不是“AI 能做什么”

凌晨一点多回头看过去这一天,我其实没有一种“今天终于设计完了一整套系统”的感觉。

因为很多东西显然还没有结束。

Control Room 还会继续改。

Q 的判断还会继续遇到边界案例。

Worker 以后仍然可能中断。

新的工具还会加入。

原生 App 也只是一个方向。

协作规则以后肯定还会继续变化。

但有一件事情已经比以前清楚很多。

以前我更容易问:

ChatGPT 能不能帮我做这个?

现在我开始更多地问:

如果以后这件事情长期由我和 ChatGPT 一起做,它应该以什么规则持续运行?

这两个问题差别很大。

第一个问题关心一次能力。

第二个问题关心一种关系。

而过去二十四小时里,我和 ChatGPT 做得最多的事情,其实就是把这种关系一遍遍拆开。

什么应该由我决定。

什么应该由 AI 判断。

什么必须留下记录。

什么不能凭感觉推断。

什么叫开始。

什么叫中断。

什么叫恢复。

什么叫落地。

什么叫证据。

什么叫完成。

什么时候系统应该继续工作。

什么时候系统应该回来找我。

最后又怎样回到最开始那个 Q,把整个环真正闭上。

这些定义听起来很细。

但我现在越来越觉得,长期使用 AI 以后,真正决定体验的可能恰恰不是模型又聪明了多少,而是这些细小的关系有没有被定义清楚。

因为单个 AI 再聪明,如果它不知道自己正在解决哪个问题,不知道前一个 Worker 已经做到哪里,不知道什么叫真正完成,不知道什么时候应该找我、不应该找我,那么它依然只是一次又一次彼此独立的对话。

而我真正想建立的,不是很多聪明的对话。

我想要的是连续性。

一个问题被提出以后,它有身份。

有人开始解决以后,它有 RUN。

中途发生什么,有记录。

结果出来以后,有证据。

我看过以后,可以说通过,也可以说不通过。

不通过,它继续回去解决。

通过,它才真正结束。

下一次再谈到它,我们知道它曾经发生过。

再下一次犯类似错误,系统也知道以前为什么错过。

这样一点一点累积以后,ChatGPT 对我而言才不只是一个随时可以打开的工具。

LMN516.com 也不只是一个装内容的网站。

它们开始共同变成一个能够保存问题、行动、错误、决定、证据和时间的系统。

而我仍然是这个系统里负责提出问题、做关键判断和最终验收的那个人。

至少在今天夜里,我觉得我们正在把这件事情一步一步做出来。