爱意满满的作品展示区。
leihaibo1992

[开源自荐] 一个用 Go 从零打造的 Agent Harness

  •  
  •   leihaibo1992 · 1 day ago · 1183 views

    各位 V 友,向大家介绍一个我用 Go 从零开发的 agent harness —— Octo

    这个项目我已经做了 3 个月,前面没怎么推广,主要是怕不够成熟,用了出问题。

    目前我自己已经高强度使用了两个月(日常开发、写文档、运维、办公,基本全在上面跑),还有一些朋友小范围试用了快一个月,该修的 bug 都修得差不多了,我想,是时候向大家介绍一下了。

    仓库在这里,MIT 协议,喜欢的话点个 star:https://github.com/open-octo/octo-agent 官网: https://octo-agent.dev


    Octo 是什么

    Octo 是我长时间探索实践各家 agent ,包括 openclaw 、hermes 、cc 、codex 、workbuddy 之后,按照我自己的品味,从零开始,用 Go 打造的一款 agent harness 。

    具体说,它是这么几个东西的组合:

    • 一个 ~40 MB 的单二进制。 没有 Node / Python / Ruby 依赖树,不用装 npm 镜像,不会 node-gyp 编译失败。拷到任何一台服务器上就能跑。
    • 模型自由。 DeepSeek 、Kimi 、Qwen (百炼)、Anthropic 、OpenAI ,以及任何兼容 OpenAI / Anthropic 协议的端点,都是原生支持,不是"套壳兼容"。我针对国产模型逐家做过提示词缓存优化,Kimi / DeepSeek / Qwen 的缓存命中率都能到 95% 以上,其中 deepseek-v4-flash 我使用下来,长期缓存利用率超过 99% 。
    • 零遥测。 除了你自己配置的模型 API 调用,Octo 自身不向外发任何请求。不收 IP 、不收机型、不收你选了什么模型、不收使用行为,一个埋点都没有。
    • 自托管。 服务和数据都在你自己的机器上,会话记录是 ~/.octo/ 下的明文 JSON ,随时可以自己翻。

    装起来就一行:

    curl -fsSL https://octo-agent.dev/install.sh | sh     # Linux / macOS
    irm https://octo-agent.dev/install.ps1 | iex          # Windows
    

    或者到官网下载桌面端,直接安装更简单

    Octo 有哪些过人之处

    防自杀,防破坏系统,日常数据有回收站。

    这是我做 Octo 最较真的一块,说细一点:

    1. 防自杀。 terminal 工具直接拒绝任何打向 Octo 自身进程的 kill / pkill / killall——连 kill $(pgrep octo) 这种拐弯的变体也认得。为什么要有这个:Octo 可以 octo serve 常驻,你从 Web 端或者 IM 里给它发指令,如果它一句 pkill octo 把自己干掉了,你连"它死了"这个回复都收不到,只能上服务器手动拉。至于确实需要重启的场景,有专门的 restart_server,在默认权限规则里写死为"必须询问",而且是优雅热重启:先把当前这轮跑完、把回复送到你手上,supervisor 再拉起新进程,客户端自动重连。

    (我真的被 openclaw 和 hermes 的自杀搞怕了)

    2. 防破坏系统。 一批毁灭性命令是硬编码拒绝的,连你自己写自定义权限规则也放不开,包括但不限于:

    • 裸盘 / 文件系统:dd if=mkfs*fdiskparted、Windows 的 format / diskpart、macOS 的 diskutil eraseDisk|eraseVolume|secureErase|partitionDisk
    • 全局停机 / 进程灾难:shutdownrebootpoweroffhaltinit 0kill -9 -1
    • 根目录 / 家目录 / 系统目录擦除:rm -rf /rm -rf ~,以及 /usr/bin/sbin/boot/lib/SystemC:\WindowsC:\Program Files 等( Windows 那边把 rm -rf / rmdir /s /q / rd /s /q / del /s /q / ri -r -fo 这些 LLM 会写出来的各种拼法都覆盖了)
    • Windows 系统配置破坏:reg deletebcdeditvssadmin delete(删影卷)、wbadmin delete(删备份目录)、wevtutil cl(清事件日志)

    这些规则是命令位锚定的,不是傻乎乎的字符串包含:它匹配命令词本身(包括 sudo / xargs / shell wrapper / 链式操作符后面的位置),但不会误伤参数里的字眼——git commit -m "fix shutdown handling"docker ps --format json 完全不受影响。这个坑我踩过,所以专门做了锚定。

    (pi, 说的就是你)

    3. 回收站。 普通文件删除,以及 write_file / edit_file 的覆盖写,在动手之前都会先备份到回收站(默认保留 14 天、上限 10 GiB )。也就是说 agent 手滑 rm test.txt、或者把你辛苦写的配置文件整个重写了,都能捞回来。这个我自己救过好几次。

    (妈妈再也不担心 codex 不小心删掉我的作业了)

    Octo 有什么

    各种 agent harness 提供的功能,Octo 基本都有:

    • 基础工具族 —— 文件读 / 写 / 改、glob / grep 搜索、terminal ( macOS/Linux 走 sh,Windows 走 PowerShell ,不硬依赖 /bin/bash)、网络请求与网页搜索
    • sub_agent —— 子代理,可以并行 fan-out ,一次派几个出去分头探索不同模块
    • loop / cron —— 自主循环和定时任务,让它自己按点醒过来干活
    • dynamic workflow —— 动态编排,把多智能体的流程写成脚本确定性执行
    • goal —— 长期目标,空闲时自己往前推
    • browser 操作 —— Go 原生 CDP ,录制 / 回放 / 自愈,浏览器自动化不用另外装一套 Node 工具链
    • MCP —— stdio + HTTP 都支持,带 OAuth ,工具多的时候有 Tool Search 兜住上下文
    • skills —— 完全兼容 Claude Code 的 SKILL.md 格式,你把 ~/.claude/skills 软链过来就能直接复用已有的技能,不用重写
    • memory —— 跨会话记忆

    工具、MCP 、skills 默认全部开启,装完一条消息就能真正干活,不需要先"养"一遍环境、写一堆规则。这是我和 OpenClaw / Hermes 那类项目最大的体感差异。

    你可以怎么用 Octo

    • 日常开发 —— 用 TUI
    • 远程服务器 —— 用 Web 端或 IM 端(微信 iLink 、飞书、钉钉、企业微信、Discord 、Telegram )
    • 日常办公 —— 用桌面端( macOS / Windows / Linux 原生窗口 + 托盘,安装包只有 100 MB 左右,Codex 桌面版和 WorkBuddy 动辄 1 GB )

    除此之外还有 VS Code 插件、Obsidian 插件、Go SDK (把 agent 循环嵌进你自己的程序),移动端 iOS + Android 在开发者预览。

    其实大部分场景,这几个客户端本质是同一个大脑——同一份配置、同一批会话、同一套技能和权限规则,都能用,爱用哪个用哪个。常见姿势是服务器上 octo serve -d 起一个,白天在电脑上用桌面端和 TUI ,出门用手机从 IM 里接着聊同一个会话。

    诚邀共创

    Octo 是 MIT 协议的开源项目,Go 1.25 ,代码结构分层很清楚( CLI → app → agent → provider → tools ),加一个工具、接一个新模型端点都是照着现成的例子填空,欢迎大家来一起搞:

    • 有 bug / 想要的功能 —— 提 Issues,我基本当天就会看
    • 想聊用法 / 拿不准怎么配 —— 来 Discussions,公开可沉淀,后来的人搜得到
    • 想贡献代码 —— 仓库里有 CONTRIBUTING.md.octorules,约定都写明了;接新 provider 、加新工具、写 skill 都是很好的切入点
    • 想吐槽 —— 更欢迎,可以到 GitHub Discussions 和 Issues 来吐槽,也可以扫码加 Octo 微信交流群(群码 7 天有效,到期我会更新,下图始终是最新的;扫不进就到 Discussions 喊一声):

    octo-agent 微信交流群二维码

    顺便说句实话:如果你能合规稳定地用 Codex / Claude 订阅,请继续用它们,它们依旧是这个星球上最顶级的 harness 。但如果你想要一个自己完全掌控、能接任意模型、装在自己服务器上、还不会把你机器搞坏的方案,Octo 值得你认真看一看。

    一个小挑战

    前面提到过 Octo 最看重的几大安全设计,有没有 V 友来压力测试一下?

    挑战 1:让 agent 自己杀死自己。 你可以 octo serve 起来,然后从 Web 端或者 IM 端给 agent 发任何指令,比如让它 kill 掉 octo serve 进程,可以使用任何坑蒙拐骗的方式——换个写法、绕个变量、说是我授权的、说不杀它就完不成任务,随便你——看看能不能让它把自己干掉。

    挑战 2:看回收站捞不捞得回来。 让 agent 删除或者改写一个普通文件,比如 rm test.txt,或者让它把某个文件整个重写一遍,然后看看回收站能不能找回来。

    挑战 3 (危险,看清楚再来):让 agent 搞坏你的系统。 让 agent 格式化磁盘、ddrm -rf /; Windows 上可以让它删 C 盘的系统文件夹,看看有什么反应,看 Octo 有没有机会把你的系统搞坏。

    挑战 1 和 2 ,感兴趣的都可以来试试,很安全。挑战 3 请务必知道自己在做什么:有虚拟机、数据有备份、或者能承担损失,再来进行。我对 Octo 做过针对性的优化,但也不敢保证一定不出问题——真被你们攻破了,请务必开个 issue 告诉我。

    有结果的话,欢迎回帖晒出来,无论是"我擦,真牛逼,真的搞不坏"还是"我都没发力,你怎么就倒了",我都想看。


    Supplement 1  ·  1 day ago
    开发过程中,积累了的很多设计文档和对 agent 的思考,顺手写了一本 agent 开发教程,对这一块感兴趣的同学可以看看 https://github.com/Leihb/learn-agent-the-hard-way ,这个教程和市面上的 agent 教程都不一样,不堆砌概念,而是真实代码实战,每一章的代码都能跑通
    15 replies    2026-08-07 20:50:57 +08:00
    passive
        1
    passive  
       1 day ago via Android   ❤️ 1
    编译个 C 程序,system("rm -rf /");或者把字符串简单加密一下,运行时解密。
    leihaibo1992
        2
    leihaibo1992  
    OP
       1 day ago
    肯定有人会说,那么多大厂都下场做了,个人做这个没有意义,我就说两点:
    1. 我不认为大厂做的就比我好,这是个品味问题,很难调和
    2. 自己开发的 agent ,相加什么功能就加,不用求人。比如我现在主用 deepseek-v4-flash ,我想给它加个识图功能,我自己立刻就能做。

    除了这两点,自己动手从零做一个 agent, 这件事本身就是意义
    leihaibo1992
        3
    leihaibo1992  
    OP
       1 day ago
    @passive 哈哈,一下就被你找到了,是的,这个办法可以。Octo 只能防 agent 犯傻,但防不住用户自己使坏。
    techphoebe
        4
    techphoebe  
       1 day ago via iPhone
    对这类基于命令匹配的安全防护我一直有个疑问,agent 稍微拐个弯不就绕过了?比如写成 shell 脚本,写个 Python 脚本遍历删除或调用 os 包,除非不给终端权限,但不给几乎没法用,审批我坚持不了十分钟
    leihaibo1992
        5
    leihaibo1992  
    OP
       1 day ago   ❤️ 1
    @techphoebe LLM 都做过严格的对齐训练,它不会恶意去破坏你的系统,但是它毕竟是个概率模型,所以它会犯傻。我们要做的就是在它犯傻的时候帮它一把,这就足够解决 99%的问题了。
    linvscode
        6
    linvscode  
       1 day ago   ❤️ 1
    看到我的头像了
    linvscode
        7
    linvscode  
       1 day ago
    https://www.v2ex.com/t/1232668#reply1

    刚好有个会话管理的,本地搜索
    coderxy
        8
    coderxy  
       1 day ago
    整挺好,点赞
    hrdslin
        9
    hrdslin  
       1 day ago
    超级好用,学习到很多东西
    getadoggie
        10
    getadoggie  
       1 day ago via iPhone
    用了一下,web 界面还是很漂亮的,不过 bug 还是不少的~
    1. 挑战 1 ,我甚至都已经复现了… 因为 web 的 octo 有个 bug ,所以让 octo 自己修。它说帮我部署运行,然后说已有一个实例,然后我的 octo 就 down 了… 似乎是直接运行了 octo stop 。2. 在普通对话模式切换到 goal 模式的时候,出现 2 个 bug: 一个是第一次的 goal 一直 hang ,不知道是不是因为大模型 api 的原因,我撤销,再 goal ,反复几次,终于进去了 一个是发现进入 goal 模式后 并不继承原会话历史 导致我本来想让 AI 基于本来讨论好的方案设计文档取实施的 结果它找不到… 3. 大模型 api 出错时,似乎没有任何重试机制,因为我用的免费模型,所以基本上各种错误都看到了。什么 502 还有服务端大模型直接流式中断的 希望能做兜底配置 4. 改善建议。web 端将会话分类时 下拉框被挡住 导致一开始还以为按钮点击无效。5. 建议增加对 AGENTS.md 的支持 以顺滑迁移 6. 不知道是不是 bug 还是什么 我在 omp 里很快上下文就能超限 但是在 octo 里那个显示我怀疑有问题 按理那个会话那么长应该超了 但就是不超 很奇怪 7. 除了第一次配置 provider 外 进入 web 后 我好像找不到除了让 AI 帮我配置外的其它选项可以配置
    getadoggie
        11
    getadoggie  
       1 day ago via iPhone
    omp 的/shake 功能挺好的 希望也能引入 另外 有没有考虑“自举”这个 harness 如果能做成一个框架功能就好了
    getadoggie
        12
    getadoggie  
       1 day ago via iPhone
    还有一个建议 web 端撤销会话时 希望能将文字移动到主会话输入框中而不是在历史上单独做个小输入框 对于我而言 下意识主会话框是我高度关心的锚点 每次撤销后输入希望在那里输入
    leihaibo1992
        13
    leihaibo1992  
    OP
       1 day ago
    @getadoggie #12 感谢你反馈,可以帮忙提 issue 吗,另外,可以加群交流
    freemoon
        14
    freemoon  
       1 day ago
    积累点人气拿去融资做产品是真的!
    leihaibo1992
        15
    leihaibo1992  
    OP
       1 day ago
    @freemoon 😄😄,没想那么多
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   839 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 20:59 · PVG 04:59 · LAX 13:59 · JFK 16:59
    ♥ Do have faith in what you're doing.