我的 Agent 使用心路历程

sumtsui 2026-07-29 20:45 1

小龙虾火了之后我开始用 agent ,但没真正用过小龙虾和 Hermes 。第一个上手的是 NanoClaw,它的特色是代码量少、主要逻辑读得懂,我用起来安心些。后来弃用了,它的多通道和容器化对我没必要,只增加复杂度。


NanoClaw 跑在 claude-agent-sdk 上。然后我知道了 Claude Code 跟 Claude Desktop 也跑在同一套东西上。后来又知道 Codex 和 OpenCode 也各有自己的 agent SDK 。各家细节不同,但负责的东西是同一批:


Agent SDK
├── Session 管理
├── 模型调用
├── Agent Loop
├── 工具调用
├── 文件和 Shell
├── 权限审批
├── 流式事件
└── 上下文管理

OpenClaw 和 Hermes 也是各自造了一个类似的东西。看明白这一层之后,我对「换一个 agent 客户端」这件事就没什么执念了,下面那层大同小异,区别在于外面那层怎么给你用。


一、从 TUI 开始


放弃 NanoClaw 之后我就直接用 Claude Code 和 OpenCode 。一开始很朴素:在某个项目目录下敲 claudeopencode,起个 TUI 就开始干活。


然后我写了一些 skills ,给它调用我这台电脑的能力:用我的浏览器、用 ffmpeg 剪视频、把 markdown 转成 PDF 。到这一步它已经不只是个写代码的东西了。


二、把 agent 本身变成一个项目


接着为了方便管理,我把 AGENTS.mdCLAUDE.md.opencode/.claude/、skills 全部收进一个固定的文件夹,我叫它 agent-workspace。以后我在这个 workspace 里跑 claudeopencode


然后我在 workspace 里放了一个 ./notes 文件夹。每轮对话中有需要的时候,就让它把东西写进去 —— 一次调研的结果、一次讨论的结论。


慢慢地我大部分工作都从这个 workspace 出发。哪怕要开发维护我自己的个人项目,我也是在这里说一句「去 ../xxx 把什么什么做了」。


工作目录从「项目」挪到了「我」。项目变成了它去访问的对象。


三、把 agent 从电脑里放出来


后来我知道,本地跑 opencode 时除了 TUI ,它同时会拉起一个 server ,也就是一个 headless 的 agent runtime 。然后我发现了 opencode-telegram-bot。


于是我在 workspace 上跑 opencode serve,把这个 bot 指向那个 server ,就能在手机上用 Telegram 控制我的 agent 了。session 是互通的:我在电脑前干到一半的活,离开电脑后可以在 Telegram 上接着干。


四、笔记本


再后来我开始让它记录我的想法、管理我的待办。网上看到一篇文章想存下来,也直接让 agent 存进那个笔记文件夹。


为了让它管好这个笔记本,我定了几条规则和几个 skill 。比如我说「记下来 xxx 」:



  • 内容是给我以后看的 → notes/brain-dump/,逐字保存,不做摘要

  • 内容是给 agent 看的跨 session 操作性事实 → notes/memory/,一个主题一个文件


我也用了 Andrej Karpathy 那套 LLM wiki 的方法论:我说「 ingest 某个链接」,它会读完,然后走一遍归纳总结的流程,落到 notes/knowledge/ 里。


再后来我把 notes 挪进了一个 GitHub 私有库,作为独立的 repo checkout 在 workspace 里。Agent 每次改完笔记,就 commit 。


五、user.mdtodos.md


又后来我加了 user.mdtodos.md


user.md 是 agent 对我的认识,我自己维护,不让它改。分几节:



  • goals —— 几条我的大目标,一年内不太会变的那种目标

  • shortcomings —— 我自己承认的毛病,例如思维分散不闭环

  • don't let me —— 一张反清单,写清楚哪些行为是逃避,例如捣鼓某个样式捣鼓一小时,而不是去推广项目


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 那套,给记忆打分,引入淘汰跟沉淀的机制。那就是后话了。

最新回复 (2)
  • quejuwen 07-30 09:22
    1
    感谢分享
  • sumtsui 楼主 07-30 12:07
    2
    @quejuwen 感谢你的感谢😊
* 帖子来源V2EX
返回