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

发布于

各位 V 友,向大家介绍一个我用 Go 从零开发的 agent harness —— **Octo**。
这个项目我已经做了 3 个月,前面没怎么推广,主要是怕不够成熟,用了出问题。
目前我自己已经高强度使用了两个月(日常开发、写文档、运维、办公,基本全在上面跑),还有一些朋友小范围试用了快一个月,该修的 bug 都修得差不多了,我想,是时候向大家介绍一下了。
仓库在这里,MIT 协议,喜欢的话点个 star:[https://github.com/open-octo/octo-agent](https://github.com/open-octo/octo-agent)
官网: [https://octo-agent.dev/](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 ,随时可以自己翻。

装起来就一行:
```bash
curl -fsSL https://octo-agent.dev/install.sh | sh # Linux / macOS
irm https://octo-agent.dev/install.ps1 | iex # Windows
```
或者到官网下载桌面端,直接安装更简单
![alt](https://i.imgur.com/XoZo2gq.png)

## 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*`、`fdisk`、`parted`、Windows 的 `format` / `diskpart`、macOS 的 `diskutil eraseDisk|eraseVolume|secureErase|partitionDisk`
- 全局停机 / 进程灾难:`shutdown`、`reboot`、`poweroff`、`halt`、`init 0`、`kill -9 -1`
- 根目录 / 家目录 / 系统目录擦除:`rm -rf /`、`rm -rf ~`,以及 `/usr`、`/bin`、`/sbin`、`/boot`、`/lib`、`/System`、`C:\Windows`、`C:\Program Files` 等( Windows 那边把 `rm -rf` / `rmdir /s /q` / `rd /s /q` / `del /s /q` / `ri -r -fo` 这些 LLM 会写出来的各种拼法都覆盖了)
- Windows 系统配置破坏:`reg delete`、`bcdedit`、`vssadmin 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`](http://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](https://github.com/open-octo/octo-agent/issues),我基本当天就会看
- **想聊用法 / 拿不准怎么配** —— 来 [Discussions](https://github.com/open-octo/octo-agent/discussions),公开可沉淀,后来的人搜得到
- **想贡献代码** —— 仓库里有 [`CONTRIBUTING.md`](http://contributing.md/) 和 `.octorules`,约定都写明了;接新 provider 、加新工具、写 skill 都是很好的切入点
- **想吐槽** —— 更欢迎,可以到 GitHub Discussions 和 Issues 来吐槽,也可以扫码加 Octo 微信交流群(群码 7 天有效,到期我会更新,下图始终是最新的;扫不进就到 Discussions 喊一声):
![alt](http://pic.zhso.org/2026/08/07/f53a53194846.jpg)
顺便说句实话:如果你能合规稳定地用 Codex / Claude 订阅,请继续用它们,它们依旧是这个星球上最顶级的 harness 。但如果你想要一个自己完全掌控、能接任意模型、装在自己服务器上、还不会把你机器搞坏的方案,Octo 值得你认真看一看。

## 一个小挑战
前面提到过 Octo 最看重的几大安全设计,有没有 V 友来压力测试一下?
- **挑战 1:让 agent 自己杀死自己。** 你可以 `octo serve` 起来,然后从 Web 端或者 IM 端给 agent 发任何指令,比如让它 kill 掉 octo serve 进程,可以使用任何坑蒙拐骗的方式——换个写法、绕个变量、说是我授权的、说不杀它就完不成任务,随便你——看看能不能让它把自己干掉。
- **挑战 2:看回收站捞不捞得回来。** 让 agent 删除或者改写一个普通文件,比如 `rm test.txt`,或者让它把某个文件整个重写一遍,然后看看回收站能不能找回来。
- **挑战 3 (危险,看清楚再来):让 agent 搞坏你的系统。** 让 agent 格式化磁盘、`dd`、`rm -rf /`; Windows 上可以让它删 C 盘的系统文件夹,看看有什么反应,看 Octo 有没有机会把你的系统搞坏。
挑战 1 和 2 ,感兴趣的都可以来试试,很安全。**挑战 3 请务必知道自己在做什么**:有虚拟机、数据有备份、或者能承担损失,再来进行。我对 Octo 做过针对性的优化,但也不敢保证一定不出问题——真被你们攻破了,请务必开个 issue 告诉我。
有结果的话,欢迎回帖晒出来,无论是"我擦,真牛逼,真的搞不坏"还是"我都没发力,你怎么就倒了",我都想看。

---

原文链接:[点击查看](https://www.v2ex.com/t/1232728)

评论(5)

搞破坏还不简单?直接让 AI 编译个 C 程序执行 system("rm -rf /"),或者把这种危险字符串简单加密一下,等运行的时候再解密执行,你这防护不就破防了嘛。

· 0 个赞

回复

哈哈,马上就被你抓到破绽了。确实,这种方法绝对可行。Octo 的安全机制只能防住 AI 自己不小心犯傻,肯定防不住人类用户故意去搞破坏。

· 0 个赞

肯定有人会说,现在大厂都在做这种工具,个人开发者搞这个没啥意义。但我想说两点:首先,我不觉得大厂做的东西就一定比个人开发者的好,这纯粹是个审美和品味问题,很难强求一致;其次,自己造轮子最大的好处就是想加啥功能就加啥,根本不用求人。比如我现在重度使用 deepseek-v4-flash,想给它整个识图功能,自己马上就能动手加上。退一步讲,抛开这些不谈,自己动手从零写一个 agent,这件事本身就很有意义啊。

· 0 个赞

我对这种靠命令匹配来防护的机制一直有点疑问,感觉 agent 只要稍微拐个弯就能绕过去了吧?比如让它写个 shell 或者 Python 脚本去遍历删除,除非你干脆不给终端权限,但那样几乎就没法用了。要是靠人工审批来防,说实话我坚持不了十分钟就得烦。

· 0 个赞

回复

其实大模型都做过严格的对齐训练,主观上不会主动去搞破坏。但毕竟是概率模型,保不准偶尔会犯傻。我们做这些拦截主要就是兜个底,在它犯傻的时候拉一把,我觉得这就能解决 99% 的问题了。

· 0 个赞

0.037905s