博客

关于 harness、它底下的模型,以及每当新模型发布时会发生哪些变化的笔记。

不靠「最后写入者胜」的记忆同步

两台机器,一套笔记,其中一台在另一台休眠时被编辑过。每个同步系统都要回答这个问题,而大多数的回答是比较时间戳,然后悄悄丢掉一边。对于一份可以重新敲一遍的草稿,这没问题。但对于 agent 每轮之前都要读的那个文件,这就不行了,因为被丢掉的,正是你为了防止某件事再次发生而写下的那一行。

模型 id 不该写死在 TypeScript 里

在整个系统里,模型 id 是变化最快的事实。厂商会改名、会下线、会发布带日期的版本、会悄悄改变不带日期的别名所指向的模型,还会根据请求来自哪个账号限制其中一半的访问。把它编译进一个包里,就等于保证这个包几周之内就会出错——不是那种显而易见的坏法(那样至少还能算个 bug 报告),而是一种特定的错法:模型选择器给人列出一个他的 key 根本调用不了的模型。

deny 规则是你唯一能依赖的边界

agent harness 里其他所有被称作「权限」的东西,本质上都是对成本的权衡。这一点值得说清楚,因为界面不会告诉你:一个确认弹窗、一个叫 Auto 的模式、一项可写目录设置,看起来都是同一类东西,但其中只有一个是系统无论如何都会守住的线。

会话中途切换模型,零成本

这是一个设计决定,而不是一项功能。大多数 agent 工具都是先照着某一家厂商写,之后再去适配其他厂商。这个先后顺序听起来像实现细节,其实就是问题的全部。