[分享创造] 写了一个开源 agent 平台,专门解决"管 100 个 agent"的运维问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
爱意满满的作品展示区。
2code

[分享创造] 写了一个开源 agent 平台,专门解决"管 100 个 agent"的运维问题

  •  
  •   2code Apr 29 724 views

    各位 V2EXer ,最近在 Claude Code 的加成下,生产率有点爆棚,和大家分享一下自己折腾的东西:

    起因

    最近一年 CLI agent 火起来了,Claude Code 、OpenClaw 、Hermes 这一类,本质上都是个人助理形态:

    • memory 是 markdown 文件
    • session 是 JSONL
    • skill 是文件夹
    • secret 是 dotfile / 环境变量
    • 配置散落在 ~/.xxx/ 下

    一个人一台电脑用这种栈,体验好还方便。但我自己折腾的时候发现,一旦想跑多个 agent 比如给团队每人配一个、或者做一个 SaaS 给每个用户配一个、或者跑一群分工不同的 specialist agent 这种"文件即状态"的模式就崩了。

    • 想给 100 个 agent 装同一个 skill:写部署脚本 SSH 进每台机器
    • 想统一加一条系统指令:同上
    • 想审计某个 agent 上周做了啥:登上去 grep 文件
    • secret 散在各处还在 shell history 里,安全性也很差

    这是一个没有运维层的栈,因为单用户场景下 agent 自己就是运维。

    做了啥

    写了个开源平台叫 OpenHermit 。一个核心设计选择:把内部状态和外部状态分开。

    • 内部状态( sessions / memories / instructions / skills / MCP / schedules / secrets / users )→ 全部进 PostgreSQL ,按 agent_id 分 scope
    • 外部状态( agent 当前在工作的 workspace 文件)→ 留在每个 agent 自己的 Docker 容器里

    类比:人的记忆在脑子里,工作的文件在电脑里。OpenClaw 把这两者混在一起,OpenHermit 把它们分开。

    我觉得 openclaw 的做法有点像:你既可以在你的桌面上工作,又可以随时打开自己的脑子动手术。我的做法是把这两个事情严格分开,手术的事情交给一个专业的人来管理。

    这样做带来什么

    内部状态集中后,运维操作变成一行命令:

    hermit skills enable standup-digest --all # 给所有 agent 装一个 skill hermit mcp enable mcp_github --all # 给所有 agent 加一个 MCP hermit instructions append rules "不要泄露 PII 。" --all # 给所有 agent 推一条新规则 hermit config secrets set OPENROUTER_API_KEY ... --agent main # 更换 secret

    也可以从一个 admin UI 看到所有 agent 的 session 、event 、memory ,secret 加密存表里( AES-256-GCM ),channel adapter (Telegram/Discord/Slack) 内置好了。 当前状态

    • License: MIT
    • 栈: TypeScript + Hono + PostgreSQL + Drizzle + Docker
    • 内置 channel: CLI / Web / Telegram / Discord / Slack
    • 仍然在快速迭代,文档、测试覆盖、稳定性都还有不少坑要填
    • star 数还很惨淡,欢迎拍砖、提 issue 、提 PR

    链接

    想听的反馈

    1. 内部 / 外部状态这个切分,大家觉得是合理的设计选择吗?还是有更好的技术架构?
    2. 你们身边有没有在管多 agent 的场景?是怎么解决的?
    3. 任何 “上 Postgres 到底有没有必要” 的反对意见 都欢迎,我现在最缺的就是不同视角。

    谢谢各位看完这么长。

    4 replies    2026-04-29 21:30:51 +08:00
    portals
        1
    portals &nsp;
       Apr 29
    刚看完隔壁讨论 hermes-agent 帖子 都在吐槽 memory 设计不行
    openhermit memory 长度有限制么 内部如何优化
    2code
        2
    2code  
    OP
       Apr 29
    是的,hermes 的 memory 是单文件,所以要限制长度。openhermit memory 是存在数据库的,可以存多条记录,更颗粒化,同时条数不限制。
    mytharcher
        3
    mytharcher  
       Apr 29
    最近 memory 工程很多做 Agent 都在搞,就看哪家的方案更高效,既能节省 token ,又能带上合理的上下文。如果 OpenHermit 存在数据库,是不是搞一下向量化后期检索更好?
    2code
        4
    2code  
    OP
       Apr 29
    @mytharcher 是的,Postgres 天然支持 vector 还是挺方便的
    About     Help     Advertise     Blog     API     FAQ     Solana     5656 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 46ms UTC 06:34 PVG 14:34 LAX 23:34 JFK 02:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86