一个月内围绕 AI Agent 写了16w+ 行代码后,我得到了什么

这个月,不完全统计,不覆盖所有项目,不考虑 git 变更历史,只看新写的最终文件里的代码——

大概是 16w+ 行代码

当然,实际要比这多得多。

为了防止自己忘记曾经产出的垃圾项目,特意在这篇文章按时间线顺序简单汇总一下。

最早时,我主要资产分布在:一个 Nuxt 全栈博客、一个基于 Tauri2 + Nuxt4 的多端笔记类应用、一个理念超前的命令行工具。

在 OpenClaw 把 Agent 彻底带火之前, SKILL 刚开始兴起的时候,我发现命令行工具无比契合 SKILL

拥有极短的描述(--help)、极短的执行命令、完全确定的执行结果。

于是 z-cli 很好地帮我把大部分散落在 SKILL 里的 scripts 抽离并管理了起来。

直到今天, CLI 的这个设计也没有「塌房」!

为了迎合 Agent 的潮流,我先是把所有调用和脚本在 z-cli 里整合了起来,然后再手搓几个 skill——skill 里就只写 CLI 实际调用方式。

然后通过 OpenClaw 作为触发的入口,把要发的内容写好再让 OpenClaw 发出去。

有时候用聊天的方式发布指令,再微调文案、配图等,都让我有些厌倦了。

我就会再掏出自己的 zotepad 来直接手写并点击发送到草稿箱——

有一种从核武器直接回到冷兵器时代的神奇新鲜感。

但是 Agent 已经会帮我把写作产物管理起来了, zotepad 还不行,也接不进去。最终还是会回到聊天窗口上来。

OpenClaw 的安装和更新都是一种折磨,要不然也不会有这么多上门安装服务。

想用新功能,就要接受它的新 bug。

这还好。

重点是把传统项目结合到 Agent 上,也是个比较庞大的工作量,仅靠分析和研究无法得出一个合理的架构。

但是不合理的架构,销售也能包装成 XXClaw 卖给老板——要不怎么说写代码的赚不到钱呢,离真正的商业化行为太远了。

此时,我几乎每天都会优化一次 skills ,每周都要推倒重做一次。

  • 要么是因为有流程卡住了
  • 要么是觉得消耗 token 太大,还能优化
  • 要么是同样的流程,换一个大模型,得到了完全不同的效果

而且早期的 OpenClaw 响应速度非常慢,工具调用不透明, WebUI 都不是实时刷新的。

我从飞书发送消息过去,然后去看 WebUI 里它创建了哪些 sub-agent、调用了哪些工具、哪些环节兜了好几个圈子才绕回来。

然后再马上修改提示词、修改 skill ,按相同的指令开始测试。

如此循环,直到提示我:你的额度为 0%

OpenClaw 早期是不能接入微信的,但微信机器人、微信记录年度总结这种项目不是新东西了。

我也一不小心涉猎了一下,和 Opus 促膝长谈后,学到了很多知识。

除了不能说的,能说的是: Codex 在 GPT5.4 出来之后,操作 GUI 的能力强了很多。如果你让它操作你电脑上的某个 App ,点击什么输入框,再点击什么按钮,它是可以轻松实现的。

有了这一前提,你想给谁发送什么消息就变得很简单了——因为各种 web-search 工具以及指纹浏览器的免费 API 额度足够一个正常人使用。

于是,我搭建了一套从搜索到发送的服务,用于把每天自己关注的新闻定时收集、整理、汇报。这一套东西现在还在用,刷新闻热点还是很方便的。

第二个玩具项目,来源于内容管理上。

信息源我有了,那我还缺一个整理的笔记 App。

笔记大部分都是草稿,我需要从草稿中筛选出待办,待办关联的草稿就会作为我写作的素材。

所以这个 App 最关键的就是关联性,类似这样:

我能从一个草稿找到其他关联的草稿,也能从待办找到所有有用的草稿——而不是完全结构化地存储起来,再也不打开看了。

这个项目耗时 1 周左右, 47844 行代码。

完成到 70% 左右就先暂停了,耽误了我很多打磨 Agent 工作流的时间。

其实搞完时发现, Obsidian 可能够用了……

中途还搞了点别的。

比如微信公众号的接口直接写在博客项目里了,用 Bun 单独重写了一套服务,可以用于单独部署。

Zotepad 里把 MD 格式导出带有样式的 HTML ,这个功能也用 Bun 重写了一遍,但是废弃了。

针对推特抓取数据,也用 Bun 写了一套服务,直接管理起来⬇️

从 OpenClaw 自己抓数据总结汇报给我 → OpenClaw 写定时任务定期调脚本然后总结汇报给我 → 改写定时任务变为 OpenClaw 直接去拿数据库里已经过滤了一遍的推文再汇报给我 → 直接 Bun 服务把抓到的数据用 webhook 汇报给我

成功优化了 100% 的 token。

针对记忆和幻觉,消耗了大量的脑细胞,得出一个结论:

SKILL 里凡是涉及到脚本的、状态的,都别让 LLM 阅读理解和维护了。全靠自己的代码实现一个类似状态机的 CLI 形态。

以前是命中 SKILL ,去读什么能做、什么不能做、怎么做。发现需要其他 SKILL ,再去调其他 SKILL ;发现需要一个隔离的上下文环境(换个便宜的 LLM ),再去 spawn sub-agent。

讲真的,最初编排好这套机制时,它有一个很大的好处:

一套执行链的状态锚点,从「我」变成了一个 JSON 文件。

如果你想问这是什么意思,那你问到问题的核心了,我会稳稳地接住你,不绕,一次给你讲明白(如果你需要,下一句我就给你讲明白,饶命):

以前发指令给 Agent ,它碰到问题需要去问发出指令的人,导致会来回拉扯才能执行完。

现在从我的指令发出开始,马上交给 JSON 文件管理状态——现在是哪一步、缺什么、下一步是什么、什么时候走 handoff ,全部去看 JSON 文件。只要状态齐全,条件满足,一定会直接发送到草稿箱里。

甚至,因为 Agent 是靠 JSON 文件分析这整套流程缺什么的,所以可以做到事先备好参数值(素材),让 Agent 从中间态开始执行,或者多 Agent 并行跟进多个 JSON 文件

然后只需要打磨两个地方:

  1. 初始化指令是否完备
  2. handoff 及 review 设计

第一点初始化指令,就是给上边的笔记 App ( Connect )留的口子。

它完全可以内置提示词模板,然后选择了几篇草稿后,拼接到提示词模板里。点击一个按钮,通过命令调用 OpenClaw / Hermes 等等,然后开启一个写作 + 发布的流程。

然后它就能走完整个流程吗?

是的,因为现在进度由 JSON 文件控制了。

后续的代码重构,也全部因为这套机制——我觉得挺好用。

于是我把所有 SKILLS 进一步整合成了一个新的 CLI ,把这条工作流上所有零散的脚本、插件全都给它装上,把一切会让 LLM 理解出幻觉的部分全部变成代码实现。

包括以前需要调用 z-cli 走公众号发布、需要调 zotepad 走 HTML 导出、需要走 imgx skill 生成配图,都变成了新 CLI 的一个 provider——强的可怕 😄

  • 重构前:系统提示词 + 搜索内容 + 十几个 skills ,消耗 300k - 600k tokens(取决于 LLM 中间有没有出错)
  • 重构后:大概在 60k - 200k 左右,但也要看是否进行了大量的 web search

砍掉之后的 skills 还剩 2-3 个(还在调整中):一个必须的编排器 SKILL 用于让 Agent 理解我的 CLI 设计,一个 handoff。

还有一个 Editor Agent——作为资深编辑的身份,只用于内容的编写 + 审核,并给到 Primary Agent 固定产物。

从最初的 OpenClaw ,我逐步尝试了 UKUDS/Nanobot、UKUDS/Openharness、Hermes Agent。

Nanobot 本身机制不全,尤其是多 Agent、sub-agent 上,最早也是从 OpenClaw 那里得来的灵感然后复刻的。

Openharness 是个很好的胚子。如果为企业搭建的话,很值得考虑, MIT 开源。该有的机制像是 MCP、SKILL、Agents、Channels 都给做好了,就是 sub-agent 还有代码没写完。

Channels 的指令好像几乎没有,飞书里用 /new 这种指令都是我自己二开的;源码里( v0.3.0 )有 bug ,不会真的切 session。

哦对,中间我还试图放弃这种 Agent ,转向 OpenCode 作为底层,用 oh-my-openagent ( oh-my-opencode )编排 Agent ,用 UU 远程作为我的大型聊天窗口,也成功走通了!

最后筋疲力尽, token 用尽,试了试 Hermes。

真香。

虽然昨天刚写文章说这玩意的两个特点一点不吸引我,今天就用上了,也不能算打脸吧——它那俩功能真一般……真的……

由于我的 skills 层比较薄了,都收进了 CLI 里,所以迁移也比较好搞,就直接让它自己给我去 Openharness 那边复制 skills 过来就行了。

由于对话了多轮,触发了它的机制,直接给我搞了个从 Openharness 到 Hermes 的迁移 skill 出来——我就说没用吧!!

迁移过来的直观感觉:丝滑

  • 安装便捷,一行命令搞定
  • 配置简单,支持从 OpenClaw 直接迁移过来,会直接告诉你哪些能迁、哪怕配置不兼容等等(但是我没用)
  • TUI 好看,就是有股子宗教味
  • 这次接的 Channel 是 Discord ,可用指令太多了,很幸福

实际使用上,在调试工作流时,我发现它的主观能动性比 cc 和 Codex 这种编程 CLI 裸奔要强得多!

有问题它是真去解决啊——而且是写完自己测,需要界面的它就自己截图,然后去问 LLM 图里有什么、位置对不对。

有点 OpenCode 挂满 skill 再开了 ultrawork 的感觉……

——

回顾这一个月做过的、能想起来的,以及真正落地的事,已经远远超过了我以前一年能做的 😂

期待下个月~