大家好,我想分享一下最近做的一个小工具:WaitAgent。
项目地址:https://github.com/kikakkz/wait-agent.git
它本质上不是一个 AI 框架,也不是任务调度系统,而是我在做多 Agent / 多机协作时,逐步弄出来的一个 session 管理工具。
一、起点:我遇到的问题
我自己是一个独立开发者,之前有一个很小的团队,当前处于半解散状态。当前我自己有一些产品在开发,但是还没有到赚钱阶段,而我又需要赚钱将这些产品养下去。感谢AI coding assistant,我可以接一些外部的开发任务来赚钱。
但是并行的任务多了之后,我遇到了极大的困扰:我要同时开很多terminal来并行开发这些任务,我不得不不停切换这些terminal tab,来查看任务状态,确定当前是否需要我介入,心智负担很重。
同时,因为单机资源有限,我日常是同时5台机器一起工作,这样又要去切不同的机器,每天开始工作的bring up都是一个很痛苦的过程。
当重复多次以后,我逐渐思考痛苦的来源:本质上我的注意力焦点只有一个,但是我同时需要关心很多不可见任务的状态,这是我痛苦的源泉。所以我想:我能不能将这些后台任务,都抽象成可靠状态,我只需要关注这些可靠状态,选择我介入的时机。那么只要状态是可信的,我的心智就是放松的。
二、WaitAgent 的核心设计
我从一开始就没有想过要去做太重的事情:不要做all in one的智能体聚合,不要做智能体协同通信,不要做模型聚合。我的目标只是解决我的困境,准确的总结是这需要的是一个类tmux,但支持多机,单状态焦点的工具。
所以我很自然地从tmux开始了。WaitAgent里面集成了tmux,来作为展示pane。
原则1:任何时刻我们只有一个焦点pane
我也研究过一些agent mux应用,但是大多都基于pane拼接,在一个窗口塞入很多小的pane,每个pane一个agent session,事实上是窗口内的agent多开能力。但是对于人类来说,眼睛同时看一个窗口内的多个焦点,和切tab并没有本质区别。因此WaitAgent上任何时刻都只会有一个active的焦点pane。
原则2:所有session都有可靠状态
只有一个焦点的情况下,我们怎么同时兼顾其他session呢?所以我们将所有session抽象成了一组sidebar上的状态。状态只有三个,I表示等待输入,C表示等待确认,R表示正在运行。这样当我们同时运行很多session,我们只需要看哪些状态是I,哪些状态是C,然后介入交互即可。R是不需要交互的。状态的可靠解决了我需要随时想着哪些任务已经完成,在等我了这件事情。
原则3:提供机制,不提供策略
我不想去约束人们怎么使用智能体,怎么使用pane,怎么使用主机,WaitAgent只提供通道和session状态,其他的一切都应该和ssh远程主机方式一摸一样。实作上我也采用了和ssh一样的pty mirror方式,这样在多机之间可以获得和ssh一样的性能。
三、当前状态和后续方向
目前WaitAgent还是一个很早期的工具,我实现了基础的多机,多agent session管理能力,提供可session状态列表,这样已经具有基础能力。
几个比较确定的演进方向是:
1 工作区快照能力
当前当waitagent全部退出或关机,上一次工作内容在下一次是需要重新输入的。如果同时有10个session在工作,那么下一次bring up过程依然较为痛苦。因此我预期会引入workspace能力,这样在上一次退出,会保存当前workspace快照,下次bring up只要导入快照继续,就能重建workspace的sessions状态。
2 云端能力
对于不习惯CLI的人,我预计在将来提供云端能力,这样只要在本机运行WaitAgent,就可以通过网页直接和本机的WaitAgent沟通交互。
3 集成到TG/微信
把WaitAgent集成到TG和微信,这样可以躺着Coding。
4 可以在CLI呼出不同agent的session列表并提供切换能力
当前codex,claude等这些app实现有session列表,但是CLI实现没有。我希望在WaitAgent这里提供不同agent的session列表呼出能力,并且可以切换。
5 为不同agent提供自定义auto process能力
我希望用户可以通过sidebar上的item,定义一些针对session的自动处理规则,这样用户不用一把梭哈全部自动不能掌控,保持对于任务session的随时介入能力。
如果你有类似的 multi-agent / 分布式执行经验,也欢迎交流这个抽象是不是成立,或者在哪些场景会失效。
Ext Link: https://github.com/kikakkz/wait-agent.git
评论区
写评论感谢评论和支持。
当前只支持WSL的原因是:WaitAgent底层重度依赖tmux,但windows上没有找到tmux的合适平替😄。加上我当前的主要工作环境是Linux发行版,因此目前没有专门考虑windows上裸跑的情况。
--
👇
shiqifeng2000: 我看windows沙箱还是wsl,可以考虑windows的CreateJobObjectW等方法,类似codec的windows sandbox项目,wsl太重了。
我看windows沙箱还是wsl,可以考虑windows的CreateJobObjectW等方法,类似codec的windows sandbox项目,wsl太重了。