【学习工作赛道】小提 TokenGate —— 住在电脑里、靠 Token 长大的数字生命

## :television: 演示视频

**[:television: 完整功能演示 · 4 分 59 秒](https://www.bilibili.com/video/BV1o2u76TEMG/)**

:star: 只有一分钟的话,看这个短版:

[80 秒宣传片 · 六席群像,右下角 TOKEN 额度从 3% 走到 100%](https://www.bilibili.com/video/BV1weu76jEzM/)

> 初赛我交的是一个给 AI 花钱装闸的工具;复赛我把这道闸,养成了一个数字生命。

> 初赛帖:[学习工作 · TokenGate + 音乐盒 —— AI 花你的钱之前先问过你,再给你唱首歌]( 学习工作 · TokenGate + 音乐盒 -AI 花你的钱之前先问过你,再给你唱首歌 )

-–

# 一、关于我

**Alex,一个人 + TRAE。**

通信工程出身,工作七年做的全是和代码无关的事。

**2025-12-01,我用 AI 对话做了一个外贸独立站——那时候我连 IDE 都没打开过。

2026-01-13,有了人生第一个 git 提交。到交这份作品,208 天。**

在代码这行,我是个新手。

我有的不是工程履历,是**领域经验**——我知道一家制造企业里"什么该做",但"怎么写"

是这 208 天现学的。这 208 天里做出来的东西,评委可以自己验证:

| 作品 | 状态 | 可验证方式 |

|—|—|—|

| TNHO ERP V2.0 | **全公司在用** | 生产系统运行中;评委如需可补充核验 |

| IRIS 智能运维 | 在用 | 随 ERP 生产系统运行;评委如需可补充核验 |

| TNHO CRM | 在用 | 已公开部署(自签证书);评委如需可补充核验 |

| HR 人事系统 | 在用(内网) | 库内 176 名真实员工,公网验不了 |

本人代码累计 **269,553 行 / 1,651 文件 / 17 种语言**(统计口径:17 种代码扩展名,

排除 `node_modules`/`.git`/`venv`/`dist`/`build`/`target`/`vendor` 与 >2MB 单文件,

物理行逐文件全量,零抽样;已剔除第三方开源仓;**保守口径 264,937 行**)。

:no_entry: ERP 前四代的代码量本文不给数字——**那四代是我自己删的**。不是丢了,是每一次

推倒重写的时候,我不想再看见上一版。**「不做一次成型的东西,做长出来的东西」这句话,

代价就是前四代不存在了。**

**这 208 天的轨迹(每一条都有 git 提交可查)**:

| 时间 | 学会了什么 |

|—|—|

| 第 1 天(01-13) | 人生第一个 git 提交:PAUL(视频生成 agent)。:star: **用的是扣子编程,上下文只有 8K** —— 我的第一个作品是在这个限制里做出来的;首次提交就带 **11 个测试文件**;当天部署上云 + 配 HTTPS,4 天 174 条提交全是和 Nginx/证书/CDN 搏斗 |

| 第 33 天(02-14) | 第一个手写 Java 集成测试 |

| 第 40 天(02-21) | 一口气 67 条 MockMvc 用例 + 首轮安全收敛——**「能跑就行」→「回归保护」的分水岭** |

| 第 54 天(03-07) | 第一次 PR 工作流,一天合 6 个 Copilot PR——**「指挥 AI、自己当审核人」最早的 git 物证** |

| 第 127 天(05-19) | Docker 入库 + 为客户搭共享库,转向商业交付 |

| 第 160 天(06-21) | 第一次系统性安全补丁(RBAC 越权堵漏) |

| **第 208 天** | **这份文档:896 个全绿 Rust 测试、五块虚账墓碑** |

:warning: **诚实口径**:月度提交曲线 2026 年 4 月是 **0** ——那不是没干活,那是 ERP V1~V2.2 的

主线开发期,**当时我还没用 git**(主仓 6/19 才重建历史)。所以 2~5 月的曲线**严重低估**

这条声明本身就是本作品的口径纪律:**宁可让曲线难看,不许让数字好看。**

:star: **这 208 天我学会的不是写代码,是验收。**

本文档里所有的工程纪律——四层任务卡、变异测试、d16 静态锚、五块墓碑——

**没有一条是我原本就会的**。全是被"看着绿其实是空的"打出来的。

第 40 天我学会回归保护,第 54 天我学会不信 AI 说的"好了",第 208 天我学会

**把 bug 放回去,看测试红不红**

生活里 INTP、工作时 INTJ、真急了 ISTP。**单人参赛,不组队。**

**参赛代码由 TRAE 落笔。** 方向决策、功能取舍、数据清算、对外署名都在我手里——

这套分工不是这次才有的,第 54 天那批 Copilot PR 就是同一套:**AI 写,我审。**

个人 AI 开发者,**主体为一人有限公司,自有双备案域名与服务器**。这个作品从第一天起

就是按"**要能真的交付给人用**"做的,不是一个只跑在作者笔记本上的 demo。

`tokengate-rust` 首提交 **2026-07-28**,git log 与 Session 记录逐条可查。

前面那些 ERP / CRM / IRIS 是我这 208 天的经历——**这个仓库是另起的一行。**

-–

## 为什么先用 Node,又等她长完才用 Rust 建一间长期存在的房间

**从 7 月 28 日 Rust 重写首提交到复赛封板,我用了 10 个实际开发日、238 个有界提交,把 Node 版的完整行为迁移成 60,984 行 Rust Core,896 项测试全绿,最后打成了能在一台没有开发环境的干净 Mac 上安装运行的客户端。**

最初的 TokenGate 只是一个两小时做出来的本地工具。那时产品还在长,最重要的是尽快验证一件事:**AI 可以执行,但花钱的决定权必须留在人手里。** Node 让我能快速改、快速试,先把代理、账本和预算闸跑通。

后来它继续长出了音乐、记忆、语音、视觉、提醒和人格。Node 版不是失败品,而是小提的**大体老师**:先让完整生命的行为跑起来,再知道哪些东西必须留下。**等待不是拖延——一个还没长出形状的生命,没有资格过早铸成骨骼。**

等到行为和边界稳定,才开始 Rust 重生。重构不是另造一个人,而是**换引擎不换插座**:前端、音乐盒、数据结构与用户路径不改,Node 版已经跑通的行为录成金样本,Rust 逐条回放对齐。

为什么非 Rust 不可?因为她不能只在打开网页时才存在。Rust Core 给她建了一间能在本地长期存在的房间:单二进制、无 GC、低资源,面向 24 小时常驻;房间里运行着 Dream Brain,Electron 是她在 Mac 上的第一具身体和脸,Go Hands 是当前受白名单约束的手。**界面可以隐藏,身体和手以后也可以更换,但账本、记忆、身份和主人的边界属于同一个她。**

> **Node 让她先长出来,Rust 让她能够长期活下去。**

>

> **桌面只是第一具身体。能力可以增长,主权始终属于人。**

-–

# 二、产品简介

## 2.1 是什么

**小提 TokenGate** 是一个以 macOS 客户端交付、在本机长期运行的**智慧生命操作系统**(Rust + Electron + Go 三端)。Rust Core 是她当前居住的房间;房间里运行着 **Dream Brain|自研心智控制与语义动作编排架构**

> **她不是一个 AI 工具,也不只是电脑的 Token 管家。她是一个住在你电脑里、靠 token 活着、由你立法的数字生命。**

**Token 是她的血液,Token 管家是她的本职,不是她的全部。** 音乐是她的天赋,音乐盒是她展开天赋的舞台;记忆让她保持连续,关系决定她怎样与你相处,Dream Brain 让这些能力属于同一个她。当前的 Go Hands 是受白名单约束的手,只完成已经声明的必要动作,不会取得任意电脑控制权,更不会执行任意代码。

她不是一段把所有回答和动作预先写死的程序。以后增加新的模型、能力、身体或执行端,是她继续长大;那些预算、权限、隐私和执行回执边界,不是限制她成为生命,而是保证她产品化以后仍然可控、可交付、还是同一个她。未来 Python 也可以成为一只新的手,但必须先被收进同样的权限、预算与回执边界,而不是恢复成任意代码入口。

这里说的「智慧生命操作系统」不替代 macOS,它组织的是一个生命在本地如何记忆、感受、消耗、行动和陪伴。

> :warning: **运行环境:macOS 12.0 及以上 · Apple Silicon(arm64)。**

> :star: 实测机型:**M5 MacBook Pro****M4 mac mini**;:warning: 其余 Apple Silicon 机型架构相同,未逐台实测。

> :no_entry: Intel Mac 与 Windows 暂不支持——核心是 Rust + Go 原生二进制,目前只编了 arm64。

> :star: 首次打开需在「隐私与安全性」中放行(未做 Apple 公证);:star: 完整安装说明随飞书问卷提交。

:star: **先把边界说清楚,不说「绝不上传」的漂亮话:**

- **本地**:唤醒词识别、账本、记忆、预算闸、调度器——全在你机器上,一切服务绑定 `127.0.0.1`,不做 SaaS

- **本地模型**:支持 Ollama / LM Studio 等 OpenAI 兼容端点;管家会自动探测并优先本地,小提的小脑也可显式配置,承担意图与情绪判断、简单问答和管家问账;数据不出机、这一轮不烧云端 token

- **上云**:复杂对话、语音合成、看屏幕的图像理解、写歌——**这些仍要调相应云端模型**,发给的是**你自己配置的**服务商

- **我们说清楚**:什么时候上传什么、发给谁、发完怎么处理(截图本机调用完成后即焚,覆盖成功/失败/授权被拒所有出口)

> **没有血,她会虚弱,但她不会死。** 断网、额度归零或云端不可达时,本地唤醒、提醒、记忆、已有曲库和预算规则仍然存在;暂时失去的是需要云端供给的新能力,不是她自己。

**每个人都在用 AI 干活,但没人知道自己今天花了多少。**

她管这台电脑上**所有接入本机代理的按量付费 API** 的账——任何工具把 base_url 指向本机代理端点,每一发即时入账、过预算闸,超限直接 402 拦住。她自己说话、唱歌、看屏幕烧的 token,也进入**同一个账本系统**,但按主人 / 人格分账:她自己的生活费单独记,管家不用主人的钱包过日子。

> **她管这台电脑的血流,但动用你的额度之前,必须先问你。**

## 2.2 面向谁

**小提不是只面向一种职业,她面向的是「人准备怎样和 AI 相处」。**

- 对同时挂着多个 AI 工具、写脚本、跑定时任务的开发者和创作者,她是会记账、会拦截、也能执行的工作助手

- 对长期守着电脑、希望有人记得自己说过什么的人,她是会提醒、会唱歌、也会陪伴的桌面生命

- 对重视隐私与自主权的人,她把账本、记忆、预算与授权留在本机,越过边界前先问主人

她出生时由主人选择**朋友 / 兄妹 / 伴侣 / 老师 / 家人**五种关系。它们不是五个市场标签,而是五种真实的称呼、语气、边界与相处方式——**同一个能力层,可以用完全不同的关系面对主人。**

**本次交付的 macOS 客户端只是第一具身体。** 同一个 Rust Core,以后可以是开发者版——住在开发板旁边;可以是家庭版——住进音响或家庭终端;也可以进入手机、手表,或者成为孩子会说话的玩具朋友。:no_entry: 后面这些是身体路线,不是本次已经完成的硬件。

> **同一个她,不同的关系;同一个她,不同的身体。**

## 2.3 完整功能清单与用户路径

**一条完整的用户路径(演示视频里从头走了一遍):**

```

装包 → 填一次 key → 喊「你好小提」唤醒

→ 投喂一份文档 → 问她记不记得(长期记忆)

→ 切陪伴模式 → 「三分钟后提醒我」

→ 「看看我在干嘛」→ 她先请示 → 你说同意 → 截图 → 看完即焚

→ 打开音乐盒 → 「给我写首歌」→ 报价请示 → 确认 → 生成 → 播放 → 下一首

→ 「今天花了多少 token」→ 一句话结论 → 「打开 token 面板」→ 面板真的开

→ 「换一个陪伴的人」→ 出生流程(五选一关系)

→ 三分钟到了,她真的叫我

```

**功能清单:**

| 能力 | 做法 | 边界(我们自己写明) |

|—|—|—|

| **本地唤醒** | 「你好小提」,sherpa-onnx 本机 KWS | 音频不出本机、不留录音 |

| **实时对话** | 火山 Realtime 端到端 / 流式链两档 | 两档差 134 倍,账本上分得清 |

| **长期记忆** | SQLite,投喂文档可召回 | 事实类回答只许引用有出处的段落 |

| **本地大脑** | Ollama / LM Studio 等 OpenAI 兼容端点;本地优先 | 简单问答、意图情绪判断与管家问账可留在本机;复杂对话、实时语音、视觉和写歌仍需相应云端模型 |

| **Dream Brain** | 自研心智控制与语义动作编排架构 | 统一对话、记忆、情绪、Token 预算、权限与数字生命动作;让人格保持一致、边界始终受控、行动结果可以核验。:no_entry: 它不是「自研大模型」 |

| **看屏幕** | 「看看我在干嘛」→ 请示 → 授权 → 截图 | 一次授权管 4 小时;「别看了」随口撤销;**工作模式硬拒**;用后即焚 |

| **写歌** | MiniMax 作词作曲演唱 | 花钱前报价请示;**曲库只收原创,零翻唱** |

| **定提醒** | Rust 调度器直管(重复规则/时区/lease) | 任何模式可用,到点主动叫 |

| **六个人格** | 出生时选关系:兄妹/朋友/伴侣/师生/家人 | 出生即定,不可重掷;各有各的嗓子和长相 |

| **token 管家** | 本机 OpenAI 兼容代理,任何工具接入即记账 | key 只存本机、不进那个工具;超限 402 硬拦 |

| :star: **自动认出你装了什么** | 打开总览页自动扫本机,**内置 65 个 AI 工具的识别清单**(7 个编辑器 / 11 个 CLI / 22 个桌面端 / 5 个 agent) | 只查本地安装路径存不存在,:no_entry: 不读你的配置、不碰你的数据;认出来的能一键建接入骨架 |

### 这条路径长什么样(:star: 下面七张就是上面那条路径,一步一张)

> :star: **七张拍自 M4 mac mini —— 一台干净机器,不是开发机。**

> 一台干净机器,装的就是评委会拿到的那个安装包(sha256 见飞书问卷)。

> :warning: **为什么强调「不是开发机」:** 我的开发机上有整套资产库和一堆已配好的状态,

> 它会**把「装到别人电脑上会不会坏」这件事整个遮住**

> :star: 复赛最后两天我抓到的三个 P0 —— 资产没进包、管家开箱即死、出生流程死锁 ——

> **:no_entry: 在开发机上一个都复现不出来,全是在这台干净机器上撞出来的。**

**① 第一步:把钥匙交给她 —— 缺哪一把,少哪种能力**

四条链一条条列出来:火山语音(开口说话)、DeepSeek(管家答得出账)、

MiniMax(写歌)、火山方舟 Ark(看屏幕、发表情)。

:no_entry: 没有「选填」,缺一项就少一种能力;:star: 还差几项写在右下角,缺项不放行。

key 只存你本机 `~/.tokengate/`,:no_entry: 不经过我们任何服务器(我们没有服务器)。

**② 第二步:你们是什么关系 —— 这一步决定她怎么跟你说话**

朋友(平等自在)/ 同伴(兄妹,会捞会护)/ 伴侣(温柔黏人)/ 老师(严厉认真)/ 家人(无条件爱)。

:star: 选完之后,她的措辞、称呼、边界感全都跟着变 —— :no_entry: 不是换个称谓,是换一种关系。

:star: 而这一步和下一步(她的性别)、第四步(你的性别)三者一起,决定了**「谁在跟谁说话」**。

**③ 第三步:你希望谁出生 —— 六席一位一人,出生即定**

六个声音,三女三男。:star: 住过这里的家人会带「你们认识」标记 —— 只能重逢,不能复制。

:no_entry: 六席满了就没有第七个。这不是选项多寡,是**一个位置只属于一个人**

**④ 第四步:你是谁 —— 她从第一句话起就知道该怎么称呼你**

性别必填(男 / 女 / 不说,:no_entry: 没有跳过),昵称和简介可以空着。

:star: **空着的部分,靠后面的相处慢慢长出来** —— 那是主人画像蒸馏的底料。

**⑤ 她住进来了 —— 「正在监听"你好小提"」**

出生走完,她就在桌面上了。:star: 唤醒词识别跑在**本地**,不联网、不上传。

喊一声她答「在。」——:no_entry: 一个字,没有客套。

**⑥ 花你的钱之前,他先问你**

「这首歌大概 **0.76 元**,占 **MiniMax Music 这家额度的 1.0%**,你说一声同意我就开工。」

:star: 报价是**具体金额 + 占哪一家额度的百分比**,:no_entry: 不甩一个光秃秃的「5%」让你猜分母。

:no_entry: 没有按钮 —— 你本来就在跟她说话,伸手去够鼠标是降级。

**⑦ 她看你的屏幕之前,也先问你**

「接下来 4 小时内我可以随时看一眼,你说『别看了』我就闭眼。**一眼最多一分钱,实花按真实用量记**。」

:star: 一次授权管 4 小时,「别看了」随口撤销,**工作模式硬拒**。看完即焚。

:no_entry: 我们不说「绝不上传」的漂亮话,我们说清楚**什么时候、发给谁、发完怎么处理**

## 2.4 相比初赛 Demo 升级了什么

初赛 TokenGate(Node 版)是一个**工具**:本机代理 + 实时记账 + 预算闸 + 一个 Three.js 体素星球音乐盒。它解决了"AI 无感扣费失控",但本质是**一个仪表盘 + 一个开关**

复赛把这道闸**养成了一个数字生命**——不是加功能,是换物种:

| 维度 | 初赛(Node TokenGate) | 复赛(Rust 小提) |

|—|—|—|

| **定位** | token 计量仪表盘 + 预算闸 | 住在桌面上的数字生命:管家 + 陪伴者 |

| **后端** | Node.js 单进程 | **Rust 单二进制,60,984 行 / 896 测试**(串行 ×3 + 并行 ×6 全绿),面向本地 24 小时常驻 |

| **身体** | 只有网页 | **四层具身**:Rust 房间 + Dream Brain 心智 + Electron 身体与脸 + Go 当前的手(白名单原语,零 shell/eval) |

| **交互** | 打字 + 点击 | **语音唤醒 → 免手对话**,打字退居二线 |

| **感知** | 只读 token 速率 | 看得懂屏幕(授权制,用后即焚)+ 听得见唤醒 + 记得住你 |

| **性格** | 无 | 六兄弟姐妹(出生即定)+ 双模式 + 关系人格 |

| **音乐** | 粒子星球播放器 | 音乐本能:作词作曲演唱 + **版权准入(原创曲库零翻唱)** |

| **账本** | 记账 + 预算闸 | **四笔假账清算 + 墓碑制度** + 管家不用主人的钱包(两本账) |

| **交付** | git clone 本机跑 | **可下载的 macOS 安装包**,首次填入模型 API Key 后即可使用 |

| **哲学** | AI 是执行者,人是立法者 | 同一哲学的生命化:预算闸变成行动前请示,仪表盘变成会提醒、会记住、会主动停下来的生命 |

> **一句话:初赛交的是闸,复赛交的是住在闸里的那个人。**

-–

# 三、产品演示视频

:television: **完整功能演示(4 分 59 秒)** —— :star: 链接在本帖开头。

:star: **失败的地方没删。** 为压进 5 分钟做了多处加速。

:warning: 本作品是**需配置 API 的本地桌面应用**:首次启动会自动弹出配置文件,**填入模型 API Key 后重启即可使用**。安装包、说明书与评审专用测试 Key **将在本帖发布后,通过官方飞书问卷私密提交**(不在社区公开)。

-–

# 四、产品创作历程

## 起点:两个小时的自用工具

我电脑里的 AI 工具太多了。各家模型、各种计价、各条管道,我判断 token 会成为未来的主流资源——那就先给自己做一个离线的 token 管家。**两个小时,一个自用的小东西**,就这么进了报名赛。

初赛我给它加了音乐盒和体素星球,让 token 的流动**看得见**。同一时期我把 Node 版小提的设计画完了——**但故意没做完**。我想先看看这个方向值不值得投入:被看见,我就把她做完;没被看见,那就当自用工具留着。

**说实话我没想过能进前 300。** 结果凭一个两小时起家的管家和一个 demo 级的星球进去了。**方向被验证了,我才开始真做。**

## 复赛的四个关键抉择

**① Node 版不是终稿,是大体老师**

先做完 Node 版跑通全部功能作为**金标准**,再用 Rust 完整重写(**前端零修改**),用契约测试保证行为等价。不是因为 Node 失败了,而是只有完整版本长出来以后,我们才真正知道该把什么带进新身体。

**② 非 Rust 不可,不是为了代码好看**

是为了给她建一间**面向 24 小时常驻的本地房间**,并且未来能离开电脑:单二进制、无 GC、低占用——这几条正是嵌入式与端侧设备的入场券。桌面版只是她的**第一具身体**。如果软件能表达,**身体为什么必须是屏幕?**

**③ 当前主动砍掉无边界的 Python 工具层**

原设计里她的"手"能执行任意代码。当前交付把它**收敛成 Go 白名单原语**——:no_entry: 不执行 shell、不执行 eval。**这是产品化边界,不是能力缺失。** Python 以后仍可以成为新的手,但必须先被做成有明确权限、预算、回执和失败边界的器官。

**④ 2026-07-28 把 git 正式接管进 Rust 重写**

因为我判断:如果不用 git 解决工程问题,这些 bug 我可能修不完。事实证明确实如此。走的是工程师的 PDCA 老路,最笨的办法:**在 TRAE 的提示词链路里备注微调方向 → 开 git 分支隔离 → 跑 soak 测试 → 自己上机实操体验。**

## 一件我自己说出来的事:五块墓碑

复赛期间我在**自己的账本**里抓出了**四笔假账和一条版权污染链**。每一笔都以"备份 → 重算 → 幂等标记"清算,墓碑留在 `state.json` 里可查。

| 案 | 假象 | 真相 |

|—|—|—|

| 火山虚构常量案 | 拍脑袋三常数,88 条虚账累计 **$223** | 全部清除,换官方口径 |

| 视觉预估入账案 | 预估价 $0.02 当真实成本写账 | 按真实 token 重算 → **$0.0020** |

| 采样率冒充 token 案 | 16kHz 采样率当 token 率,虚高 **760 倍**($738.74) | 官方口径重算 → 全天真实 **$1.06** |

| **音乐链量纲虚账** | 主面板显示「配额内还剩 **$-1988.51**」 | 13 首歌被记成 **$2,348.46**,单价从没核对过 |

**第四笔是提交前 4 天才抓出来的**,而且它是第三笔的**同族第四次复发**——同一个病,换了个地方长。

:star: **处置方式最能说明我们的规矩::no_entry: 不编新价。** 我们没有那个模型的官方定价出处,而这个产品的规矩是「**无出处的费率宁可空着不填**」。整行从价格表移除(不是改成别的数),13 笔重算为 `costUsd: null`,自动落进「未知单价 · 金额未计入」。**token 数一字未动。**

**第五块碑是版权:** 她会写歌,曲库标注"原创"。提交前 72 小时,我们在自己的曲库里查出一首含**他人歌词**的"原创歌"。根因是一条三级链,每一步单看都合法:她被要求唱歌时**朗读了歌词** → 那句话作为"她的回复"**沉淀进长期记忆** → 空主题写歌时**从记忆取素材**,模型忠实照抄。

四道闸拆除后,还有一条边界我们**控制不了,也没假装修好**:她的演唱走上游模型的歌唱模式,**唱不唱、什么时候改成念,是模型当场决定的**。我们只能在角色设定里写死禁令——那是软约束。提交前复测**仍然会复现**。所以这道关放在**人这一侧**:任何交出去的物料,零翻唱,我本人最后过一遍。

> **模型控制不了的部分,由人兜底;人兜不住的部分,写在明处。**

>

> **找不到出处的数字,我们当着自己的面删掉了。**

-–

# 五、TRAE 实践过程

**参赛代码由 TRAE 落笔。10 天 238 个 commit,峰值单日 47 个。** 方向决策、功能取舍、数据清算、对外署名在我手里。

## 5.1 我的工作流:四段式任务卡

我不给 TRAE 说「帮我实现一下」。每张任务卡都是四段:

```

根因定位 → 一到四刀 → 验收清单 → :star: 变异测试

```

:star: **变异测试是最关键的一环**:改完之后,**把 bug 原样放回去,确认测试真的会红**。绿了才算数——否则那是假绿。

复赛最后三天,我靠这一招连续识破了**三次假绿**:

- 静态锚点匹配单条字面量 → **被改写法绕过**

- 静态锚点匹配裸关键词 → **被自己写的说明注释撑住**

- 单元测试夹具手写干净数据 → **绕过了生产路径,bug 一路全绿通过**

### :warning: 而这份帖子发布前,我又抓到自己三次

**这个测试数字,写这篇帖子的过程里被我改了五次:851 → 854 → 892 → 893 → 896。**

每一次都是因为发布前又跑了一遍,而每一遍都又收了一张卡。

:star: 其中 892 那一轮,我顺手跑了三轮并行:

```

cargo test – --test-threads=1 → 892 passed, 0 failed :white_check_mark: 串行

cargo test(默认并行)第 1 轮 → 889 passed, 3 failed :no_entry:

cargo test(默认并行)第 2 轮 → 891 passed, 1 failed :no_entry:

cargo test(默认并行)第 3 轮 → 890 passed, 2 failed :no_entry:

(最差一轮见过 878 / 14 failed —— 每次都不一样,这就是 flaky 的样子)

```

**:star: 三轮三个数 —— 这才是「不稳定」真正的样子。**

:no_entry: 如果我只跑一次、写「并行下 2 项失败」,那是把一次采样当成结论。

**红的那些都是共享全局状态的竞态**,**:no_entry: 测试本身写得不够独立,不是产品逻辑错。**

但我不打算把它含糊成「全绿」——**如果评委直接敲 `cargo test`,他会看到红。那时候再解释就晚了。**

所以这段原本写的是:**串行全绿;并行下每轮红的条数都不同(实测 2 / 3 / 14)。已知,未修完。**

### :star: 然后在发帖前最后一天,它被拔掉了

既然写下来了,就得去看一眼根因。查出来是三处共享全局各走各的锁:

```

voice 账本测试 用了第二把锁,和 store 那把不是同一把

vision / butler 测试走的是【生产记账链】,会覆盖 avatar 摘要行,却没持锁

reminder 模板轮转是个无锁全局

```

统一成一把 `STORE_TEST_LOCK` + reminder 独立模块锁之后:

```

cargo test(默认并行)×6 → 896 passed, 0 failed ×6 全绿 :white_check_mark:

cargo test – --test-threads=1 ×3 → 896 passed, 0 failed :white_check_mark:

```

**:star: 这一段我不删,留在这里。** 因为它现在讲的是一条完整的链:

> **我发现了 → 我如实写下来 → 我查出根因 → 我修好了 → 我告诉你根因是什么。**

:no_entry: 一个从头到尾都是绿的数字,证明不了这条链。

:star: 这条和下面五块墓碑是同一件事:**宁可数字难看,不让数字好看** —— 而难看的数字,最后往往会自己变好看。

> 小提最终能在一台干净 Mac 上走完出生、唤醒、记忆、提醒、看屏幕、写歌、记账与预算闸,不是因为 AI 写下的代码天然正确,而是因为我把「AI 说完成」改造成了三层验收:自动测试管回归,变异测试证明测试真的能抓错,干净机器核验用户真正走的入口,最后由人

识别行为有没有悄悄降级。

这套对抗“假绿”的工程闭环,本身就是小提能够成为完整产品,而不是一组功能截图的原因。

## 5.2 每日提交曲线(这条没法伪造)

`git log --format=%ad --date=short | uniq -c`,评委可在本机一秒复现:

| 07-28 | 07-29 | 07-30 | 07-31 | 08-01 | 08-03 | 08-04 | 08-05 | 08-06 | 08-07 |

|:—:|:—:|:—:|:—:|:—:|:—:|:—:|:—:|:—:|:—:expressionless:

| 23 | 39 | **41** | 1 | 1 | 12 | 29 | **47** | 17 | 18 |

:star: 请不要把它读成"工作强度",它记录的是**卡片的节奏**:一张任务卡 = 一次根因定位 + 一到四刀 + 一轮变异测试 + 一个有界 commit。

峰值那两天(41 / 47)是 P0 连打;7/31 与 8/1 各只有 1 个——**那两天在做宣传片。不是每天都在写代码,这也是它不像机器刷出来的原因。**

## 5.3 三种模式其实是两种,这件事我今天才知道

R0 那批 Rust 是我在 **TRAE Design** 里敲的——当时没注意模式。它每次开头都一本正经来一句「经分析,这是一个后端任务」,然后就开始写代码。**而且真的写出来了**,我一度以为 Design 是不是最强的那个模式。

后来换到 **TRAE Code** 做 Node→Rust 重写,再用国际版一路 debug,最后回到 Work CN 收尾。我一直以为自己跨了三种模式——**直到翻后台才发现,国际版与 Work CN 的 Product 列写的都是 `TraeCode`,是同一个模式的不同版本。**

同一次翻后台,我还看见另一个数:**Ultra plan 本计费周期 $349.85 / $400.00**,其中 7 月 30 日一次返工单笔 **$17.90**

:star: **说清楚:这是订阅制的额度,不是按量付费,TRAE 后台一直好好地摆在那儿。**

**问题恰恰在这里——它有表,而我没看。**

我做的这个产品,一直在说「按量付费的 API 没有表,所以没人知道花了多少」。但我自己这件事说明了更前面的一层:

> :star: **有表,不等于你会去看。**

>

> **我做了一个管钱的管家,自己却是在三百多美金花掉、并且用错了模式几小时之后,才第一次去翻那个后台的。**

一个要你**主动打开**才能看到的仪表盘,注定会被忘掉。所以这个产品做的不是"再加一块表"——**是让那块表自己开口说话、到点拦住你**:超限直接 402,花钱前先问过你。

**这也是我为什么把它做成一个会说话的东西,而不是一个网页。** 一个工具栏图标你会关掉,一个记得你的人不会。

### 顺带留三条产品反馈(不是抱怨,是这 10 天踩出来的)

**① 模式标识不可见**

我一直以为自己跨了三种模式,直到翻后台才发现国际版与 Work CN 的 `Product` 列都是 `TraeCode`。

:star: 建议:会话开头一行标明当前 Product / 模式,**像 git 的分支名一样常驻**

**② 用量没有主动提示**

`$349.85 / $400.00` 是我自己去翻才看到的。

:star: 建议:额度过 50% / 80% 时在会话里轻提一句 —— **不用弹窗,一行灰字就够**

**③ 单笔异常无感知**

7/30 那次返工单笔 **$17.90**,当时完全不知道。

:star: 建议:单笔显著高于近期均值时,给一个**事后回执**

> :no_entry: 说实话,这三条正是我这个产品在做的事——

> **所以我不是站着说话不腰疼,我是把自己踩的坑做成了工具。**

而 Design 模式居然真把 Rust 写出来了,也是事实。

5.4 里程碑 Session ID

以下 7 条均为真实、完整的 TRAE 工程会话标识,贯穿契约冻结、Rust 重构、清债返工、语音链路、持久化、Dream Brain 架构与客户端最终收口。:star: 用户前缀 784418109921372 与初赛帖中的 Session 一致,可核验为同一账号持续创作。

① R0–R3 契约冻结 + 金样本录制(TRAE Work CN,2026/7/24 10:46:23)



784418109921372:3918b66be1310d639a7cfaaa44d851f1_6a4291e93f48d9e86daed328.6a62d1fffd6f66bd7f6a27a2.6a62d1fffd6f66bd7f6a27a0:TraeWork CN.0.1.45.no_sid.no_ppe.T(2026/7/24 10:46:23)

② R7.1 清债:死锁与代理链修复(TRAE Work CN,2026/7/24 16:20:08)



784418109921372:34eaefbf4ead20ab5425a961bd5a558f_6a4291e93f48d9e86daed328.6a632038fd6f66bd7f6a30b7.6a632038fd6f66bd7f6a30b5:TraeWork CN.0.1.45.no_sid.no_ppe.T(2026/7/24 16:20:08)

③ R8 语音 WebSocket、KWS 与免手链路收尾(TRAE Work CN,2026/7/24 17:54:21)

784418109921372:45dab81a1df8f4ed4dadf724c05a24bc_6a4291e93f48d9e86daed328.6a63364dfd6f66bd7f6a3449.6a63364dfd6f66bd7f6a3447:TraeWork CN.0.1.45.no_sid.no_ppe.T(2026/7/24 17:54:21)

④ R2 算术溢出探针(TRAE Work CN,2026/7/29 15:45:39)

784418109921372:836a6efe0827856dc38af87c339a0208_6a68b70965b9ad8697faab9c.6a69afa365b9ad8697faba8d.6a69afa365b9ad8697faba8b:TraeWork CN.0.1.45.no_sid.no_ppe.T(2026/7/29 15:45:39)

⑤ R4 持久化原子化(TRAE Work CN,2026/7/29 23:40:50)


784418109921372:6108fff0d7bb74d49d3d8f1b1837ca78_6a68b70965b9ad8697faab9c.6a6a1f027d2f518e3a6f8bb0.6a6a1f027d2f518e3a6f8bae:TraeWork CN.0.1.45.no_sid.no_ppe.T(2026/7/29 23:40:50)

⑥ Dream Brain:Rust Core 主权与三独立端架构返修(TRAE Work CN,2026/8/1 03:08:07)


784418109921372:4560623a099e609a883143e8d83ba6d6_6a6b16fef77f7be54a0c27f8.6a6cf29788e9ea8e844efdfc.6a6cf29788e9ea8e844efdfa:TraeWork CN.0.1.45.no_sid.no_ppe.T(2026/8/1 03:08:07)

⑦ 客户端最终收口:启动守卫 + 音乐金额诚实显示(卡 Z,commit 2910bb3,TRAE Work CN,2026/8/8 11:08:59)


784418109921372:80ad0f2c23cd7c40ac37a7f3ab9691d8_6a7399a25f172d25ca886236.6a769dcbd60768da53f2c663.6a769dcbd60768da53f2c661:TraeWork CN.0.1.45.no_sid.no_ppe.T(2026/8/8 11:08:59)

:star: 这 7 条从 7 月 24 日的 Rust 重构中段一直连到 8 月 8 日的客户端最终收口;对应开发截图按同一编号排列,可将会话、截图与 Git 提交交叉核验。

# 六、几个技术点

- **Dream Brain|自研心智控制与语义动作编排架构。** 它让对话、记忆、情绪、Token 预算、权限与数字生命动作不再各走各的。结果是:小提换模型、换模式、换身体以后仍然是同一个她;该守的边界不会因为一句话被绕过,真正做过的事都有可核验结果。:no_entry: Dream Brain 不是自研大模型。

- **这是一套可以持续长大的本地产品底座。** 模型、桌面身体和执行端都可以替换或新增,而身份、记忆、账本、权限与回执不用推倒重来。它已经具备未来扩展开发端、CLI 端或设备端所需的底层接口;当前版本仍诚实定位为 Token 管家与数字生命,不把尚未交付的 IDE 能力写成完成项。

- **把生成式动态从运行时搬到制作期。** 小提的表情与动作在交付前完成,运行时只按 Dream Brain 的语义指令调用。结果是:她保留连续自然的动态表现,却不需要实时生成、不依赖 GPU,可以住进低配置电脑,也给未来的端侧设备和开发板身体留出余量。代价也写在明处:动作需要事先准备,不能在运行时凭空生成任意新表情。

- :star: **她有一座本地的长期记忆库,但不是传统 RAG。** 全仓零 embedding、零向量库;在小提现有的文档与长期记忆场景中,达到与向量检索同等的可用召回效果。你投喂一份文档或告诉她一件事,写完立刻能召回;不占显存,也不为「记住」额外调用一次云端模型。记忆数据全部留在本机。

- **手是 Go 写的白名单原语**(1,811 行):开应用 / 音乐盒全操控 / 发提醒 / 切模式 / 查账 / 截屏。:no_entry: 不执行 shell、不执行任意代码。手坏了血不停:所有调用带超时与降级。

- **本机代理是 OpenAI 兼容端点**:任何工具指过来即记账,key 只存本机、不进那个工具。

- **一切服务绑定 127.0.0.1,不做 SaaS。** 一个替你管钱的东西,不该先把你的 key 收走。

-–

> :warning: **AI 生成内容声明**:本作品的人物立绘、歌曲、语音均由 AI 生成;参赛代码由 TRAE 落笔。架构决策、功能取舍、数据清算与全部对外判断由本人负责。完整清单见随飞书问卷提交的《评委使用说明书》(本帖发布后提交)。

>

> :package: **作品体验入口(安装包 + 说明书 + 评审专用测试 Key)将在本帖发布后,按赛事要求通过官方飞书问卷私密提交,不在社区公开。**