Hermes Agent 不会取代 Codex 或 OpenCode——它会驱动它们。Hermes 附带两个内置技能 codex 和 opencode,分别将各 CLI 作为子进程启动,每个子进程使用自己的凭据付费,而不是使用 Hermes 的模型提供商。这是规划时值得注意的事实:一个工作流、四个凭据界面、三个独立计量器,以及两个只能与提供 Responses API 的端点通信的界面。
此页面介绍的是来自 Nous Research、采用 MIT 许可证的代理软件 Hermes Agent——不是 Hermes 3 或 Hermes 4(同一公司的开放权重模型系列),不是同名的 JavaScript 引擎,也不是奢侈品品牌。2026 年 9 月 19 日对该仓库进行实时检查,返回了 archived: false、MIT 许可证以及当天的推送记录;最新发布的版本是Hermes Agent v0.21.3,于 2026 年 9 月 14 日标记为 v2026.9.14。有关代理自身的运行成本,请参阅 Hermes Agent 定价。
Hermes 内部三个名为“codex”的事物
首先需要解决名称冲突,因为三者都出现在配置中,而其中只有一个是大多数人所说的 hermes codex。
| 名称 | 它是什么 | 配置位置 | 谁运行工具循环 |
|---|---|---|---|
codex 技能 | 将编码工作作为子进程委派给 Codex CLI 的内置技能 | 无需在 Hermes 中进行配置;必须安装并验证 CLI 身份 | Codex,作为独立进程;Hermes 读取其输出 |
codex_responses | 自定义提供商的一个 传输值——Hermes 与之通信的线路协议 | providers.<name>.transport 位于 ~/.hermes/config.yaml | Hermes |
codex_app_server | 将 Hermes 自己的 OpenAI 轮次交给 Codex app-server 的一个 运行时 | model.openai_runtime,或 /codex-runtime codex_app_server | Codex 的运行时;Hermes 成为包裹它的 shell |
来源:内置的 codex 技能、提供商文档和 Codex app-server 运行时页面,均于 2026 年 9 月 19 日读取。
将编码任务委派给 Codex
codex 技能的版本为 1.0.1,采用 MIT 许可证,其声明的工作是“将编码工作委派给 OpenAI Codex CLI(功能、PR)”。其前置条件很明确:使用 npm install -g @openai/codex 安装 Codex;OpenAI 身份验证必须配置为 OPENAI_API_KEY 或 Codex OAuth 会话之一;工作必须在 git 仓库内运行,因为 Codex 拒绝在仓库外运行;终端调用需要 pty=true,因为 Codex 是交互式终端应用。
启动方式是后台终端调用——codex exec --sandbox workspace-write 'Refactor the auth module' 并指定 workdir——它会返回会话 ID。之后 Hermes 轮询会话、读取日志、使用 submit 操作回答审批提示,并在出错时终止它。结果会以进程输出以及 Codex 留在工作树中的内容传回主代理;两个进程之间不会共享内存。
该技能记录了两个边界,而不是将其隐藏。--full-auto 仍然有效,但当前 CLI 会警告应改用 --sandbox workspace-write。此外,当 Codex 从 Hermes 网关或服务上下文中调用时——例如由聊天驱动的代理会话——workspace-write 沙箱可能会失败,即使相同命令在交互式 shell 中可以正常运行;错误可能来自 bubblewrap 或用户命名空间,例如 setting up uid map: Permission denied。该技能本身给出的解决方法是 --sandbox danger-full-access,它会完全移除 Codex 沙箱;如果采用该方法,运行 Hermes 的进程边界将成为剩下的唯一隔离层。
将编码任务委派给 OpenCode
opencode 技能的版本为 1.2.0,采用 MIT 许可证,其描述为“将编码工作委派给 OpenCode CLI(功能、PR 审查)”。使用 npm i -g opencode-ai@latest 或 brew install anomalyco/tap/opencode 安装,然后运行 opencode auth login 并使用 opencode auth list 验证。OpenCode 自己的文档还提供终端 UI 中的 /connect 命令,该命令会将凭据写入 ~/.local/share/opencode/auth.json——两种路径目前都有效,因此采用其中一种并不意味着另一种已经过时。
对于有界任务,该技能倾向于一次完成:opencode run 'Add retry logic to API calls and update tests',并使用 --model provider/model 固定模型。交互式会话会在带 pty 的后台运行,并通过 poll、log 和 submit 驱动。技能以粗体指出了一个陷阱:不要发送 /exit——它不是有效的 OpenCode 命令,而是会打开代理选择对话框。使用 Ctrl+C 或 kill 操作退出。
这里的命名本身就有一个容易踩的坑。npm 包 opencode-ai 是当前产品;名为 opencode-ai 的 GitHub 组织 保存着已归档的前身,最后一次推送于 2025 年 9 月 18 日。而当前仓库是 anomalyco/opencode,不是 sst/opencode——GitHub API 会将旧路径解析到新路径,而 sst 组织现在显示“我们已迁移到 https://github.com/anomalyco”。最新版本 v1.18.31,2026 年 9 月 14 日(GitHub REST API,2026 年 9 月 19 日)。
真正决定账单的映射
这是两家供应商的文档都没有涵盖的部分,因为每家只负责其中一半。在此工作流中有四个凭证入口,每个都在不同的文件中配置。四者都可以指向第三方端点——但条件并不相同,而且两个 Codex 入口只接受 Responses API。
| 界面 | 配置文件 | 使用的凭证 | 所需的线路协议 | 读取的计量器 |
|---|---|---|---|---|
| Hermes 自己的回合 | ~/.hermes/config.yaml | key_env、api_key 或 key_cmd | chat_completions、anthropic_messages 或 codex_responses 中的任意一个 | Hermes /usage |
| 委托的 Codex CLI | ~/.codex/config.toml | env_key 变量,或 ~/.codex/auth.json | 仅限 Responses API | ChatGPT 或 OpenAI API 账户 |
| 委托的 OpenCode CLI | opencode.json | options.apiKey,或 ~/.local/share/opencode/auth.json | 由你指定的 npm 包决定 | opencode stats |
| Codex app-server 运行时 | model.openai_runtime,以及命名提供商路由中匹配的 [model_providers.<name>] | 订阅路由中的 codex login 和 hermes auth add openai-codex;否则使用命名自定义提供商的 env_key | Responses API——Codex 侧的 wire_api = "responses" | ChatGPT 订阅,或命名提供商自己的计量器 |
Hermes 明确说明了这种分离:它自己的 Codex OAuth 位于 ~/.hermes/auth.json,而独立 CLI 的会话位于 ~/.codex/auth.json;运行时页面还补充了原因——Hermes 有意不与 Codex CLI 共享 OAuth 状态,以避免两者在刷新令牌时相互覆盖。因此,委托的编码任务不会继承 Hermes 的提供商配置;它会读取 ~/.codex/config.toml 或 opencode.json,只有在你有意将其指向同一个密钥时,才会使用同一个余额。这在你希望隔离影响范围时是一个优点,但如果你以为一个余额涵盖所有内容,就会令人意外。
app-server 运行时带来的变化
如果启用 Codex app-server 运行时,在开启之前需要了解计算方式会有三点变化。它会路由 openai/*、openai-codex/* 和 命名的自定义提供商回合;其功能表将其他非 OpenAI 提供商标记为“n/a — not routed through codex”,而使用裸基础 URL 的匿名 provider: custom 明确不符合条件,因为没有稳定名称可交给 Codex。四个 Hermes 工具在此运行时不可用——delegate_task、memory、session_search 和 todo——因为它们需要正在运行的代理循环,而无状态回调无法驱动它们。还有一项大多数人会忽略的成本:对于 openai-codex 提供商,辅助任务默认也会通过你的 ChatGPT 订阅执行——标题生成、上下文压缩、视觉自动检测以及后台自我改进审查分支——因为未设置每项任务的覆盖配置时,Hermes 的辅助客户端会使用主提供商。
第三方端点并未被此运行时排除,但需要再配置一个文件。运行时页面记录了具体路由:在 ~/.hermes/config.yaml 中添加 providers.<name> 条目并设置 openai_runtime: codex_app_server,再在 ~/.codex/config.toml 中添加同名 条目的 [model_providers.<name>] 表,其中包含 base_url、env_key 和 wire_api = "responses"。线程启动时,Hermes 只发送模型和提供商名称,从不转发密钥,因此该环境变量必须存在于运行 Hermes 的进程环境中;辅助调用仍使用 Hermes 自己为该提供商配置的条目。同一页面还说明了一个注意事项:两个名称必须完全匹配,否则 Codex 会报告未知提供商,而不会回退到 Hermes 端点。使用默认运行时(openai_runtime: auto)和 custom: 提供商仍是更简单的路径,也是唯一不要求端点支持 Responses 的路径。还要注意,无论当前启用哪个 Hermes 配置,Hermes 都会将 Codex 子进程指向 ~/.codex/,因此 hermes -p work 和 hermes -p personal 共用一个 Codex 身份验证,除非你设置 CODEX_HOME 并重新登录。
将三个开放入口都指向一个端点
下面每一块内容都来自供应商源文档,而非运行时测试。Kunavo 没有针对其端点执行 Hermes 会话、codex exec 或 opencode run,而已发布的设置指南是配置参考,不是兼容性测试。尝试这些配置时,请保留一条可用的工作路径。
# Surface 1: Hermes' own turns.
providers:
kunavo:
api: https://api.kunavo.com/v1 # aliases: base_url, url
key_env: KUNAVO_API_KEY
transport: chat_completions # set it explicitly; auto-detection is only a fallback
model:
default: claude-sonnet-4-6
provider: custom:kunavotransport 是 Hermes 自己回合的全部配置。Kunavo 提供 /v1/chat/completions、/v1/messages 和 /v1/responses,因此 Hermes 的三个传输值各自都有匹配的端点——这是文档层面的匹配,并非经过测试的匹配。Hermes 的提供商文档称,基于 URL 的自动检测仅在字段为空时作为回退,因此请设置该字段。使用 /model custom:kunavo:<model-id> 在会话中途切换。
# Surface 2: the delegated Codex CLI. Keep this OUTSIDE Hermes' managed block.
model = "claude-sonnet-4-6"
model_provider = "kunavo"
[model_providers.kunavo]
name = "Kunavo"
base_url = "https://api.kunavo.com/v1"
env_key = "KUNAVO_API_KEY" # the NAME of the variable, not the key itself
# wire_api defaults to "responses", and "responses" is the only value that parses.
# Leave requires_openai_auth unset: true sends Codex to auth.json instead of env_key.Codex 这一部分有硬性门槛,值得直接查看源代码,而不是仅凭信任接受。在 2026 年 9 月 19 日查阅的 codex-rs/model-provider-info/src/lib.rs 中,通信协议枚举恰好只有一个变体:Responses。设置 wire_api = "chat" 现在会导致硬性配置错误,错误消息会告诉你改为设置 responses。只支持 Chat Completions 的网关根本不能作为 Codex 提供商。当前的配置键参考文档位于 learn.chatgpt.com——任何仍引用 developers.openai.com/codex/… 的链接都会返回 308 重定向,我们在同一天确认了这一点。
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"kunavo": {
"npm": "@ai-sdk/openai-compatible",
"name": "Kunavo",
"options": {
"baseURL": "https://api.kunavo.com/v1",
"apiKey": "{env:KUNAVO_API_KEY}"
},
"models": { "claude-sonnet-4-6": { "name": "Claude Sonnet 4.6" } }
}
}
}对于 OpenCode,npm 包决定线路格式:@ai-sdk/openai-compatible 调用 /chat/completions,@ai-sdk/openai 调用 /responses。请选择与你的端点实际提供的路径相匹配的那个;文档没有说明为另一种路径命名时的失败模式,我们也未进行测试。捆绑的技能是否会遵循以这种方式配置的自定义提供商,是根据子 CLI 文档作出的推断——技能只是通过 shell 调用普通子进程,因此应该会遵循——但没有任何 Hermes 文档明确说明这一点,我们也没有运行测试。
跨三个计量器的示例估算
这些是说明性令牌算术,不是实测任务成本,也不是账单上限。假设一天处于繁忙状态:编排器及其辅助槽位接收1,500,000 个未缓存输入令牌和 80,000 个输出令牌,每个委托的编码工作者接收2,000,000 个输入令牌和 120,000 个输出令牌。这些比例仅是用于说明的假设。费率是实时的Kunavo 目录价格,按每百万令牌计。
| 角色 | 假定的输入 / 输出 | 在 Claude Sonnet 4.6 上 | 在 Claude Haiku 4.5 上 |
|---|---|---|---|
| Hermes 编排器轮次及其辅助插槽 | 1.5M / 80K | $3.99 | $1.33 |
| 委派的 Codex 工作器 | 2.0M / 120K | $5.46 | $1.82 |
| 委派的 OpenCode 工作器 | 2.0M / 120K | $5.46 | $1.82 |
在这些假设下,如果三个角色都使用 Claude Sonnet 4.6 模型,一天的费用约为 $14.91;如果让编排器及其辅助流量使用 Claude Haiku 4.5,而两个编码工作者都使用 Claude Sonnet 4.6 模型,则约为 $12.25。这一区别正是按角色选择模型的理由,也说明了上面的凭证映射为何重要:如果编码工作者使用不同账户,就必须针对三个计量器分别计算三次,而不是只计算一次。
Kunavo 目录中的金额是计费下限,而不是上限:上游报告费用时,账单取目录成本与上游成本乘以适用加价后的较大值。缓存费用和外部工具不包含在此示例中。最低充值额为预付余额 $10,这是资金最低额,而不是任务费用或订阅——参见 计费详情。
不同情况下哪种资金路径更优
| 方式 | 适用场景 | 你放弃的内容 |
|---|---|---|
| 使用 ChatGPT 订阅驱动 Codex | 编码是主要工作负载,你的用量符合套餐额度,并且希望使用 app-server 运行时的原生插件和沙箱 | 在该运行时中,编排器回合属于 OpenAI 范围,四个 Hermes 工具以及辅助槽位都会转移到订阅上 |
| 在 Hermes 默认运行时上使用网关 | Hermes 回合和两个编码工作者共用一个预付余额比固定费率更重要,并且你希望为每个角色使用不同模型 | Codex 明确要求真正的 Responses 端点;这里没有任何内容经过我们的运行时测试 |
| 在每个工具中直接使用供应商密钥 | 你希望隔离每个工具的影响范围,并分别获得各供应商的账单 | 需要关注三个余额和三个计量器,而第二个供应商意味着第二个账户 |
| OpenCode Zen | 你只关心 OpenCode 工作者,并希望使用带有自动重新加载余额的精选目录 | Zen 本身就是一个网关,因此应将其与其他网关比较,而不要把它的费率当作“OpenCode 的成本”——CLI 使用 MIT 许可证且免费 |
| 通过 Hermes 的自定义提供商使用本地模型 | 零边际成本,且数据永远不会离开设备 | 工具调用的可靠性是这三个代理都依赖的能力;Hermes 自己的文档列出了每个服务器的标志位,仅为确保工具调用能够正常工作 |
先纠正两种常见说法。“Codex 每月收费 $20”和“Codex 按令牌计费”都犯了同一种错误:learn.chatgpt.com(于 2026 年 9 月 19 日查阅)描述了两条分支——名为 Free、Go、Plus、Pro、Business 和 Enterprise & Edu 的 ChatGPT 套餐,其额度涵盖 Codex 使用;或者使用按标准 API 费率计费、无需订阅的 API 密钥。只有第二条分支才有可能替换为第三方端点。我们有意不列出各套餐的消息额度:该页面说明数量取决于模型和任务规模,而且我们是通过摘要器而非渲染后的 HTML 读取到这些内容的。请查看你自己的账户。另一方面,OpenCode Zen 表示它“完全可选,不使用它也能使用 OpenCode”,按请求从预充值余额中扣费,并且默认在余额低于 $5 时自动充值 $20——这与需要你自行充值的预付余额相比,确实存在成本控制上的差异。
完成设置,然后读取三个计量器
从你实际需要的入口开始。Kunavo 为两个编码工作者都发布了设置参考:Codex CLI涵盖仅支持 Responses 的提供商配置块,OpenCode涵盖决定线路格式的 npm 包选择。执行一次有界委托,然后读取每个账户为其记录的费用——Hermes 的 /usage、opencode stats --days 7 以及 Codex 工作者自己的账户——之后再假设这三个数字中的任何一个涵盖其他数字。准备为密钥充值时,创建 Kunavo 账户。
如果你是在比较两个编码工作者,而不是将它们连接起来?OpenCode 与 Codex 对比会直接回答这个问题,而OpenAI 兼容 API介绍这两种线路格式在实践中的含义。
常见问题
Hermes Agent 是否有 Codex 集成?
有,而且是两个彼此独立的集成。Hermes 附带一个名为 codex 的技能,版本为 1.0.1,采用 MIT 许可证,其描述为“将编码工作委派给 OpenAI Codex CLI(功能、PR)”。它通过 Hermes 的终端和进程工具调用 `codex exec`,因此由 Codex CLI 编写代码,Hermes 读取其输出。除此之外,Hermes 还有一个可选择启用的 Codex app-server 运行时,它会将 Hermes 自己的 openai/*、openai-codex/* 以及命名的自定义提供商轮次交给 Codex CLI app-server,因此由 Codex 的运行时执行工具循环,而 Hermes 成为包裹它的 shell。技能默认启用;除非切换标志,否则运行时处于关闭状态。两者的资料均来自 2026-09-19 的 Hermes Agent 仓库。
如何在 Hermes Agent 中使用 OpenCode?
使用 `npm i -g opencode-ai@latest` 或 `brew install anomalyco/tap/opencode` 安装 CLI,使用 `opencode auth login` 进行身份验证,并使用 `opencode auth list` 确认,后者应至少显示一个提供商。然后,Hermes 附带的 opencode 技能(版本 1.2.0,MIT)会从项目目录使用 `opencode run 'Add retry logic to API calls and update tests'` 委派一个有界任务,也可以使用 `--model provider/model` 固定模型。使用进程工具的 poll 和 log 操作监控后台运行,使用 submit 回答提示,并通过 Ctrl+C 或 kill 退出。不要发送 /exit——该技能说明它不是有效的 OpenCode 命令,而是会打开代理选择对话框。内容读取自 2026-09-19 的技能文件和 opencode.ai。
当 Hermes 将编码任务委派给 Codex 或 OpenCode 时,由哪个账户付费?
由子 CLI 自己的账户付费,而不是驱动 Hermes 的账户。两个技能都会将工具作为子进程启动,每个子进程都从自己的凭据存储进行身份验证:Codex 使用 ~/.codex/auth.json 或 OPENAI_API_KEY,OpenCode 使用 ~/.local/share/opencode/auth.json 或提供商环境变量。Hermes 将自己的 Codex OAuth 记录在另一个文件 ~/.hermes/auth.json 中,并明确表示不会与 Codex CLI 共享 OAuth 状态,以避免破坏令牌刷新。因此存在三个计量器,读取方式也有三种:编排器使用 Hermes 自己的 /usage,OpenCode 工作器使用 `opencode stats`,Codex 工作器使用 ChatGPT 或 OpenAI API 账户。
委派的 Codex CLI 能否指向第三方 API,而不是 OpenAI?
只有当该端点提供 Responses API 时才可以。在 2026-09-19 读取的 Codex 源代码中,线路协议枚举恰好只有一个变体 Responses,而 `wire_api = "chat"` 现在会反序列化为硬错误,提示您将其设置为 `wire_api = "responses"`。因此,仅实现 /v1/chat/completions 的端点在任何配置下都不能成为 Codex 提供商。在 ~/.codex/config.toml 的 [model_providers.<id>] 下定义提供商,使用 base_url 和 env_key;选择一个不同于 openai、ollama 或 lmstudio 的 id,因为这些名称已保留;并保持 requires_openai_auth 未设置,以便密钥来自环境变量而不是 auth.json。
Hermes 的 codex 技能与 codex_responses 传输方式是同一回事吗?
不是,而且有三个不同的配置键包含 codex 一词。该技能是委派目标:Hermes 调用 Codex CLI 来完成编码工作。codex_responses 是 ~/.hermes/config.yaml 中自定义提供商条目的传输值,与 chat_completions 和 anthropic_messages 并列,用于描述 Hermes 与该端点通信时使用的线路协议。codex_app_server 是 model.openai_runtime 的运行时值,用于决定 Hermes 是运行自己的工具循环,还是将该轮交给 Codex CLI app-server。更改其中一个不会改变其他项。
opencode 仍由 SST 维护吗?
项目仍在运行,但所有者名称已更改。GitHub API 将 sst/opencode 解析为 anomalyco/opencode;在 2026-09-19,该仓库返回 archived false、MIT 许可证、当天的推送记录以及主页 opencode.ai;最新版本是 2026-09-14 发布的 v1.18.31。sst 组织本身现在的描述是“We've moved to https://github.com/anomalyco”。请注意其中的陷阱:npm 软件包名称仍是 opencode-ai 且仍在维护,而名为 opencode-ai 的 GitHub 组织持有已归档的前身项目,最后一次推送为 2025-09-18。同一个字符串代表两个不同的事物。
截至 2026 年 9 月 19 日核查:该仓库中的 Hermes Agent codex 和 opencode 技能文件、Codex app-server 运行时及提供商文档;openai/codex 中的 codex-rs/model-provider-info/src/lib.rs;learn.chatgpt.com 的定价和配置参考,包括从 developers.openai.com 发出的 308 重定向;opencode.ai 的提供商和 Zen 页面;以及通过 GitHub REST API 获取的四个项目的仓库状态。未核查:实际运行其中任何内容。没有执行 Hermes 会话、codex exec、opencode run,也没有执行这些工具针对 Kunavo 端点发出的请求;由于我们通过摘要器读取了那两个页面,各套餐消息额度和 Zen 模型费率也有意省略。Kunavo 令牌费率来自实时目录;这里的每个美元数字都是说明性令牌算术。