最近为了榨干Codex订阅额度,在已经部署了Hermes Agent的服务器上把Codex也部署了上去,部署完成后的架构是这样的。
多agent协同架构
Hermes 做主 agent,对外的入口是 IM,就可以实现我在飞书/微信里发消息,Hermes 接到任务,判断复杂度,自己决定或者按我的指令去调 Codex,从而实现 agent 调用 agent 的目的。
通过这种方式,就可以把复杂活交给 Codex,比如写代码、bug 检查,画图等任务。爽是真的爽,可以随时随地掏手机就能派活给不同的 agent 了。
直到有一天。我让 Hermes 调用 Codex 写一个小应用,Hermes 把任务分配给了 Codex 。过了一会,Hermes 弹回来一行字,提示我 Codex 达到五小时周限了。。。
我当时就愣住了。不是因为额度没了。是因为 Hermes 竟然不知道 Codex 额度还剩多少。
这不是开玩笑吗。做为一个 agent,连自己手里的资源还剩多少都不知道,还敢接活?
Agent 为什么查不到额度
众所周知 Codex CLI 有 /status 命令可以查看剩余额度,网页端有 dashboard 可以查询。
Codex CLI 端可以使用 /status 命令查询
网页上可以在 dashboard 中查询
但你想想这个画面。
你让一个助手去干活,助手又派给另一个工具。结果工具说「我没额度了」。助手能做的唯一一件事就是原样转发。它不会提前告诉你「老板,额度快没了,这个任务可能要排队」。好一点话,助手可能会自动切备用模型降级勉强干完。不行,agent 怎么只能扮演传话筒的角色?
agent 不是不想查。是手上没有可用的工具。CLI 的 /status 是给人用的交互界面,dashboard 是给人看的网页。agent 要的不是界面,是一个能直接被调用的接口——这个接口不存在。
人跟机器之间有一堵墙。墙的这边是人用的界面,墙的那边是机器跑的协议。agent 被卡在墙的这边。它只能看到你让它看到的东西。
CLI 能查,dashboard 能查——凭什么 agent 不能查?我得把 agent 推到墙那边去。
找到可用的方法
从各路信息了解到,Codex 底层有个 app-server 后台进程。CLI 的所有操作——写代码、读文件、查额度——都是通过它完成的。app-server 跟外界通信走 JSON-RPC over stdio。
要真实现还得自己手动去翻协议、写验证脚本,这未免有点太慢了。
于是我打开 ChatGPT,把我知道的信息倒进去,假装 ChatGPT 还是比较清楚自家的产品逻辑的,我是这么问的:
「据我所知Codex 的 app-server 支持 JSON-RPC over stdio。我需要通过脚本来查剩余额度。请给出最佳实践,统计出codex的5h限额以及周限额,算出剩余百分比,以及重置时间,时间戳需要转换为北京时间。」
ChatGPT 给我回复的 Codex 查询流程
很快给出了答案,ChatGPT 果然对自家的产品门清,给出了完整的方案,甚至贴心的附上了脚本。核心逻辑就以下三个部分,具体代码就不贴了,反正也不是我编的。
启动 app-server,并完成初始化; 查询额度,并识别 5 小时和周窗口; 计算剩余百分比,并转换北京时间。
问题似乎搞清楚了,但抱着能口头解决的绝不动手,我得把这个重要信息告诉 Hermes,得让它自己学习,自己能查。
启蒙 Hermes
我把刚才跟 ChatGPT 的对话内容,加上编写查额度 skill 的需求,一股脑发给了 Hermes。
「帮我写一个 skill,以后我问 codex 额度还有多少,你就调用skill查询然后把结果给我,自己按照以下这个流程拿数据,算成北京时间展示给我:[此处是chatgpt给我的回答]」
Hermes 开始工作了。
首先它根据需求写 SKILL.md。触发词是它自己定的——「查询 codex 剩余额度」「codex 余量」「codex quota」。执行步骤和展示格式也是它自己写好的。
这里有一个细节我特别满意。脚本输出的 JSON 是给机器读的——Unix 时间戳、UTC 时间。但展示给用户的时候,Hermes 自动做了两件事:把 UTC 转成北京时间,带上日期。这是它在 SKILL.md 里自己定义的要求。
SKILL.md 写完后,Hermes 开始写实际的执行脚本 codex-quota.mjs。它没有去网上搜模板,也没有问我「这个怎么写」。它根据我的环境——已经装了 Node.js、Codex 在 PATH 里——直接生成了一个 Node.js 脚本。spawn 子进程,走 pipe,JSON-RPC 客户端,三步握手,解析数据,输出 JSON。
试着跑一下,堪称完美,以下是在 Hermes WebUI 和 IM 中的查询效果,就这样,我给 Hermes 教会了一个新的 skill,以后这项工作我只需要口头告诉它就行了。

解开 skill 的内部构造
事情做完了。我的好奇心起来了。Hermes 到底写了些什么?我通过 SSH 登录远程服务器,把 skill 目录打开,大概翻了翻。
Hermes 的 skill 系统是一个自包含的目录结构。每个 skill 由一个 SKILL.md 和一个 scripts/ 目录组成,结构如下:
codex-quota-check/
├── SKILL.md
└── scripts/
└── codex-quota.mjs

SKILL.md是 skill 的大脑。它告诉 agent 三件事:什么时候触发(碰到什么关键词就加载这个 skill)、怎么执行(调用哪个脚本)、怎么展示结果(格式化输出的规则)。scripts/里放的是可执行文件。脚本的输入是原始数据,输出是结构化 JSON。agent 拿到 JSON 之后,按SKILL.md里定义的格式展示给用户。
先说脚本。它生成了一个 Node.js 脚本,用的是我环境里现成的 Node.js 运行时。这很有意思——它不是固定用某种语言,而是感知环境后做的选择。如果我的环境只有 Python 可用,它就会生成 Python 脚本。脚本跟 skill 解耦,换语言不换接口,只要输入输出格式不变就行。
然后看 SKILL.md。这不是一份操作手册,更像是一份「当情况 A 出现,执行步骤 B,以格式 C 输出」的执行指令。它的使用者不是人,是 agent 自己。
整个 skill 的执行流程是这样的。
第一步,agent 收到用户消息。匹配触发词。如果命中,加载这个 skill。
第二步,agent 执行
scripts/codex-quota.mjs。脚本自己 spawn app-server 子进程,走 pipe 通信。stdout 被逐行读取,按 id 匹配请求和响应。整个过程不需要人介入。第三步,agent 拿到脚本输出的 JSON。按 SKILL.md 里定义的规则,把 UTC 转成北京时间,格式化输出,发送给用户。
从此以后,我在飞书/微信里打「codex 额度还有多少」,Hermes 就会自己加载 skill。自己拉起服务,自己调用脚本获取余额,自己算北京时间,自己格式化输出。
而且因为这是一个 skill,它的能力不止于「我问他答」。Hermes 可以在调度任务之前先查一下额度,快用完了自动切备用模型。可以设一个 cron 定时任务,每天定时汇报一次 Codex 余量。可以集成到任何需要感知资源状态的工作流里。

我已经把这个 skill 开源到了 GitHub,可以直接从仓库拉取这个 skill,或者更简单——把链接发给你的 agent,让它自己安装。一句话,agent 就能长出这个新能力。
仓库地址:https://github.com/mrgolftech/davidskill/tree/main/codex-quota-check
就这样,我的 agent 长出了一个新的触手。
创建这个 skill 的过程让我想到一件事。传统给人用的应用,迟早要对接 agent。再往下想一层——将来的入口可能演变为Agent,应用只是 agent 调用的工具。
传统应用,正在给自己装一套 agent 接口
以前做一个工具的逻辑是这样的。需求、设计、开发、测试、发布、维护。一个 feature 从想法到落地,快则几周,慢则几个月。所有工具的终极使用者是人。界面是给人看的,按钮是给人点的,报错信息是给人读的。
但现在不是了。最近微信读书发布了 skill、飞书发布了 CLI 工具、Obsidian 发布了 CLI 工具。
这些工具的设计者做了一件同样的事:在原本只给人用的界面上,扩展出了一套 agent 能直接操作的接口。
微信读书的 skill 让 Hermes 能查书架、读写笔记、搜索书籍。飞书 CLI 让 agent 能收发消息、管理文档。Obsidian CLI 让 agent 能读写你的知识库。这不是在把工具劈成两半——是在把工具的覆盖范围从人扩展到 agent。
回到我协助 Hermes 实现的 Codex 额度查询这个 skill。
它的输入是我发给 agent 的一句自然语言,它的输出是结构化的 JSON 和格式化的自然语言。它的使用者不是人,是一个 agent。它没有界面。没有按钮。没有人在它的用户路径里。
但它实实在在地让 agent 变得更自主了。
造一个工具给 AI 用。AI 变得更自主。AI 暴露出更多需要工具的场景。你继续造。AI 继续变强。
这个正反馈循环的意义,远比单纯做一个工具大得多。
想象一下,只要有足够的信息,agent 可以自己给自己造工具,去跟其他系统协作——数据库、文件系统、第三方 API。再往下走一步,它能自己造工具去跟物理世界协作——智能家居、机器人、工业设备。

你不需要等官方出功能,不用等别人开源,更不需要等什么教程。你只需要知道它跟什么东西通信,把原理告诉你的 agent。它就会自动完成工具的编写,实现自己能力的迭代。
这种螺旋上升,最终扩展的不是 agent 的能力边界——是你自己的。
agent 能做的事越多,你能指挥它做的事就越多。它的能力边界往外推一寸,你的世界就往外扩一尺。
以上,既然看到这里了,如果觉得不错,随手点个赞、收藏、转发三连吧,如果想第一时间收到推送,也可以给我个星标 ⭐~
谢谢你看我的文章,我们,下次再见。
夜雨聆风