小龙虾火了之后我开始用 agent ,但没真正用过小龙虾和 Hermes 。第一个上手的是 NanoClaw,它的特色是代码量少、主要逻辑读得懂,我用起来安心些。后来弃用了,它的多通道和容器化对我没必要,只增加复杂度。
NanoClaw 跑在 claude-agent-sdk 上。然后我知道了 Claude Code 跟 Claude Desktop 也跑在同一套东西上。后来又知道 Codex 和 OpenCode 也各有自己的 agent SDK 。各家细节不同,但负责的东西是同一批:
Agent SDK
├── Session 管理
├── 模型调用
├── Agent Loop
├── 工具调用
├── 文件和 Shell
├── 权限审批
├── 流式事件
└── 上下文管理
OpenClaw 和 Hermes 也是各自造了一个类似的东西。看明白这一层之后,我对「换一个 agent 客户端」这件事就没什么执念了,下面那层大同小异,区别在于外面那层怎么给你用。
放弃 NanoClaw 之后我就直接用 Claude Code 和 OpenCode 。一开始很朴素:在某个项目目录下敲 claude 或 opencode,起个 TUI 就开始干活。
然后我写了一些 skills ,给它调用我这台电脑的能力:用我的浏览器、用 ffmpeg 剪视频、把 markdown 转成 PDF 。到这一步它已经不只是个写代码的东西了。
接着为了方便管理,我把 AGENTS.md、CLAUDE.md、.opencode/、.claude/、skills 全部收进一个固定的文件夹,我叫它 agent-workspace。以后我在这个 workspace 里跑 claude 或 opencode。
然后我在 workspace 里放了一个 ./notes 文件夹。每轮对话中有需要的时候,就让它把东西写进去 —— 一次调研的结果、一次讨论的结论。
慢慢地我大部分工作都从这个 workspace 出发。哪怕要开发维护我自己的个人项目,我也是在这里说一句「去 ../xxx 把什么什么做了」。
工作目录从「项目」挪到了「我」。项目变成了它去访问的对象。
后来我知道,本地跑 opencode 时除了 TUI ,它同时会拉起一个 server ,也就是一个 headless 的 agent runtime 。然后我发现了 opencode-telegram-bot。
于是我在 workspace 上跑 opencode serve,把这个 bot 指向那个 server ,就能在手机上用 Telegram 控制我的 agent 了。session 是互通的:我在电脑前干到一半的活,离开电脑后可以在 Telegram 上接着干。
再后来我开始让它记录我的想法、管理我的待办。网上看到一篇文章想存下来,也直接让 agent 存进那个笔记文件夹。
为了让它管好这个笔记本,我定了几条规则和几个 skill 。比如我说「记下来 xxx 」:
notes/brain-dump/,逐字保存,不做摘要notes/memory/,一个主题一个文件我也用了 Andrej Karpathy 那套 LLM wiki 的方法论:我说「 ingest 某个链接」,它会读完,然后走一遍归纳总结的流程,落到 notes/knowledge/ 里。
再后来我把 notes 挪进了一个 GitHub 私有库,作为独立的 repo checkout 在 workspace 里。Agent 每次改完笔记,就 commit 。
user.md 和 todos.mduser.md 是 agent 对我的认识,我自己维护,不让它改。分几节:
todos.md 记录了我的待办事项,由 agent 维护。每条带 [优先级][主题] 标签和 added / touched 日期,分 active / backlog / done 。我口头说的进展它写进去,我问「昨天哪些没做完」它按日期块回答。
有了这两个文件,加上它实时知道我在干嘛,它就能干一件我觉得很不错的事 - 充当我的导师跟伙伴,在我做的事情不服务于我的主要目标时,给我提醒。也能给我管理待办,我觉得自己有点 ADHD 倾向,脑子想法很多,经常开新线路,它能帮我抓主线,理思路。
后来我把这套东西泛化成了一个 Agent 插件:dont-let-me。
笔记本主要是我让它写、它才写。我想让它不用我开口,它自动把关于我的耐久事实存下来,下次自动用上。
我试过两个方案,
一个是文件式。 抄 Claude Code 那套:一条事实一个 markdown ,MEMORY.md 当索引,每个会话 eager 注入。好处是隐式召回天生就在,模型不用意识到「这儿可能有记忆」,它已经看见了。坏处是索引常驻上下文。还有记忆我是靠 skill 触发的,记不记看 agent 心情。
另一个是接 mem0。 记忆触发放在了 OpenCode 的钩子上,保证了每轮 session 结束必然会记。但召回又是 pull-based 的,Agent 得先想到去调用 MCP 工具,才搜得到。这个问题不大,但 mem0 的记忆机制太激进了,啥都记,而且因为是记进向量库,不太好 audit ,也就放弃了。
现在我的方案就是文件式,加一个 remember Skill ,记不记随缘吧,反正重要的我一般会主动让它记。实在没记下来的,还可以让 Agent 去 sessions 里面grep。
以后我打算模仿下小龙虾那套,dreaming ,搞个独立进程去做记忆,这样上下文比较完整,记下来的东西也比较可控。还有就是 memOS 那套,给记忆打分,引入淘汰跟沉淀的机制。那就是后话了。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.