作者在 OpenAI 发布 Dots 后 24 小时内为开源本地 Agent CLI「Flash」添加 Sparks 功能,支持通过 Ollama 本地运行多模型、设置定时任务与行为边界,所有数据留在本地。
周二,OpenAI 发布了 Dots:一群小巧圆润的 Agent,有名字和头像,在后台持续工作,完成后回来找你。
我看完公告,脑子里只有一个念头:
为什么我的常驻 Agent 必须跑在别人的电脑上?
于是我打开编辑器。大约 24 小时、17 次提交之后,我的开源本地 Agent CLI Flash 也有了属于自己的版本——它叫 Sparks。
它们跑在你自己通过 Ollama 托管的模型上,跑在你自己的机器上,而且你关掉 Flash 后它们依然在工作。
这就是第一天的故事:我做了什么、什么坏了,以及那个让一切冻结的 Bug。
子 Agent 做一件事,做完就消失。Spark 则把一份工作一直扛着。
你可以用一条命令创建一个 spark,也可以直接开口要:
> make a spark that checks my repo every morning and tells me which new
issues look like bugs. never comment on anything.
Flash 调用它的 make_spark 工具,并先问你确认。之后这个 spark 存活在 ~/.flash/sparks 里,作为一条普通的 JSON 文件。没有数据库,没有账号。
每次值班,它读取自己的目标、上次留给自己的笔记、上一份报告,以及你教给它的每一条经验。它使用真实的工具工作。然后它提交一份报告——如果没新情况就提交一份安静的报告,所以只有当有事发生时你才会收到它的消息。
● Scout has news · /sparks scout
是的,它们很可爱。而且是有意为之。🥹
在 Web UI 里,每个 spark 是一个带脸的小气泡,我在上面走得相当远:
这不只是装饰。看一眼侧边栏,不用读一个字,你就知道哪个 spark 在工作、哪个卡住了、哪个有消息。
打开一个 spark,按下 Chat,它会以它自己的身份作答——来自它自己的目标、笔记和报告。它知道自己的当前状态:是在值班中、在等你、还是已暂停。
告诉它换一种方式工作,它会把这条经验记下来,之后每次值班都会读到。告诉它一个新目标,它会立刻改变。
还有我今天下午加进去的最爱功能:
you: Actually, can you check whether the login page still loads?
scout: On it. I've taken that on, and a shift is starting now.
I'll report back here.
这个 spark 调用了一个 take_on 工具,值班立即开始,它先把你的任务做完,然后报告回到你问话的那个聊天里。
和 Flash 聊别的事情聊到一半?输入 @scout,这个 spark 就加入对话了。它把最近十几条消息当作对话记录来理解,以自己的名字作答,之后 Flash 会知道 Scout 被调用了以及它说了什么。接下来没有 @ 提及的那条消息会接着 spark 离开时的状态继续。
这种感觉就像在群聊里有同事。只不过同事跑在你的 GPU 上。
这是我最在意的部分。一个关掉终端就死的常驻 Agent,根本不是常驻的。
/sparks always on 用你系统自带的机制安装一个微型的后台守护进程:
现在问题来了:守护进程在跑着的时候,你又打开 Flash,而且还在另一个终端开着 Web UI——三个进程都觉得跑 Scout 的 9 点值班是自己的事。
我会随时发布更新,Sparks 应该会在 0.6.12 中发货。