用 OpenCode 搭建自托管的 AI 智能体环境,并让记忆跨设备共享

HN LLM Code Research 2026-10-12T17:43:05.942432

这篇文章是我在去米兰的火车上用手机规划好的。回到家后,我只打了一个词,它就上线了。下面讲讲背后的搭建过程,先交代一点背景。

如今,前沿模型基本都能通过 API 调用。常见用法是在自己电脑上装一个“外壳”(harness),比如 Claude Code 或 OpenCode,让 AI 智能体通过它操作本地文件、做出修改并产出结果。

单次模型调用本身是无状态的:要想延续之前的讨论,就得把相关上下文喂给它。这些上下文由外壳或模型厂商的 API 负责管理,可能包括对话历史、摘要以及筛选过的信息。很多智能体系统还会用到持久记忆,通常是一些关于重要事实和决策的笔记,能跨对话、跨项目延续。

先解决共享记忆

这个想法让我很感兴趣。我自己的环境太分散了:同时订阅了好几家服务商,网页上有对话,不同机器上各有本地会话,项目工作也散落在各处。

第一个问题就是把记忆在多台机器、多个外壳之间统一起来。我在一个共享文件夹里(我用的是 Dropbox,换成 Google Drive 也完全可以)定了几条记忆布局的基本规则。每个外壳都通过一段自定义指令来读取和更新相关笔记,这段指令写在全局的 AGENTS.md 里,Claude Code 则对应写在 CLAUDE.md 中。

布局本身很简单:

~/dropbox/memory/
├── MEMORY.md            # rules, conventions, links to notes
├── <note>.md            # detailed note on a concept
└── projects/
    └── <project>/
        ├── MEMORY.md    # same as above with short summaries for smaller models
        └── <note>.md    # detailed note on a concept

规则之一是:写入记忆的任何内容都需要手动确认。这样能减少同步冲突,也让记忆保持精简——即使现在上下文窗口很大,花在记忆上的每个 token 都是从实际工作里扣掉的。安全上也说得通,因为写进记忆的东西会同步到每一台读取它的机器和 harness。

在多台机器之间做本地工作时,光靠这一点就帮我解决了大约八成问题——这个数字的精确度嘛,你懂的。

一个常驻在线的环境

接下来的问题是网页聊天和本地工作之间的切换。如果我坐火车时在某个服务商的网页聊天里开了个话题,等换到本地 harness 就得重新交代一遍背景,因为这些聊天不在我的共享记忆里。于是我开始研究自建一个 agent 环境,希望它能满足:

为什么不用现成的平台?

这些要求直接排除了专有的 agent 平台,但开源方案里可选的不止一个。OpenClaw、Agent Zero 和 Hermes Agent 都支持通用 agent、持久记忆和后台任务。它们中的某一个大概就能满足需求,但我还有两点额外考虑。

第一,我已经有一套可用的记忆结构,并且跨多个 harness 共用。我希望新东西能架在这套基础之上,而不是反过来把基础改造成适配新平台的样子。

第二,我想要自由,想往哪个方向扩展就往哪个方向扩展。我想自己掌控安全模型:agent 能访问什么、能在哪里执行命令、如何隔离、哪些操作需要我批准。

预置方案当然可以定制,但我想从第一天起就把边界划清楚。选好并连上这些组件,比把一套打包好的系统改造成我自己的安全模型要省事。

具体搭建

对我来说,一个 Agent(智能体)环境需要这几样东西:一个现成的工作框架(harness)、共享记忆、远程访问,以及 Agent 能活动的边界。我的方案最后很简单:

边界就是我的安全模型所在:

Victor 的 Agent 环境

九十分钟,一次放手

这个想法我琢磨了好几天,真正动手实现只花了 90 分钟。方案的设计和实现都是 Opus 5.5 做的,其中大部分时间我都在坚持让它给我能手动执行的指令。大概做到 80% 的时候(又是这个数字),Tailscale 和 OpenCode 都已经跑通了,我放手了,让它自己 SSH 上去把活干完。是的,我知道在前面大谈安全模型之后这么做有点自相矛盾,不过那台机器上本来也没放什么凭证。

拿 Agent 来试用

这篇文章的选题就是我想出来的,最初的讨论也是通过网页界面进行的。这个博客跑在一套自建的 Node.js 环境上,而我的共享记忆里早就有关于它的内容和风格的笔记,所以 Agent 能直接接手已有的上下文。

初始文本由我提供,然后和 agent 讨论研究方向和结构,再定下撰写和发布的计划,这些内容都存进了博客的 notes 里。整个过程都是在去米兰的火车上,用手机完成的。

回到家后,我在博客项目里新开了一个 Claude Code 会话,敲下 please continue。它根据共享记忆给出了一套实现和部署方案。我接着敲的下一个词是 go。五分钟后,文章就上线了。作为对照,撰写和打磨正文花了两个多小时——这更多说明的是我个人的问题,而不是这套配置的问题。

这正是我想要的连贯性:不管身在何处,都能先把活儿讨论清楚、规划好,之后换一台机器接着干。这也算从实践上验证了我对「不被工具绑架」的要求:规划在 OpenCode 里完成,实现在 Claude Code 里完成,共享记忆则是两者的共同基础。

到目前为止它一直跑得不错,我建议大家也可以试试类似的方案。拿本文里的这些组件当起点,去梳理你自己的需求,拼出一套合适的配置。任何前沿模型都能帮你做调研,并把它搭起来。

现在我已经有一个远程 agent 了,接下来打算再加几个,用来处理后台任务和其他有意思的工作。目标是打造属于我自己的 vicbot ;)

查看原文