ByteNoteByteNote

字节笔记本

2026年6月21日

hermes教程-Codex App-Server 运行时

API中转
¥120

Codex App-Server 运行时

Hermes 可以选择将 openai/*openai-codex/* 的轮次交给 Codex CLI app-server 处理,而不是运行自己的工具循环。启用后,终端命令、文件编辑、沙箱和 MCP 工具调用都在 Codex 的运行时内执行——Hermes 成为其外壳(会话数据库、斜杠命令、网关、记忆和技能审查)。

这是仅限可选加入的。除非你切换标志,否则默认的 Hermes 行为保持不变。Hermes 不会自动将你路由到此运行时。

提示

不使用 OpenAI Codex?hermes setup --portal 一步配置非 Codex 后端(Claude/Gemini 等)。参见 Nous Portal

为什么

  • 使用与 Codex CLI 相同的认证流程,通过你的 ChatGPT 订阅运行 OpenAI 代理轮次(无需 API 密钥)。
  • 使用 Codex 自己的工具集和沙箱——shell 用于终端/读/写/搜索,apply_patch 用于结构化编辑,update_plan 用于规划,所有操作都在 seatbelt/landlock 沙箱内运行。
  • 原生 Codex 插件——通过 codex plugin 安装的 Linear、GitHub、Gmail、Calendar、Canva 等——会自动迁移并在你的 Hermes 会话中激活。
  • Hermes 更丰富的工具随之而来——web_search、web_extract、浏览器自动化、视觉、图像生成、技能和 TTS 通过 MCP 回调工作。Codex 会回调 Hermes 以获取其内置工具之外的工具。
  • 记忆和技能提示继续工作——Codex 的事件被投影为 Hermes 的消息格式,因此自我改进循环看到的是正常的对话记录。

模型实际拥有的工具

这是大多数用户最想提前了解的部分。当此运行时启用时,运行你轮次的模型有三个独立的工具来源:

1. Codex 的内置工具集(始终开启)

这些随 codex app-server 本身提供——无需 Hermes 参与,无需 MCP,无需插件。运行时启动时即可使用全部五个工具:

  • shell——在沙箱内运行任意 shell 命令。模型通过它读取文件(catheadtail)、写入文件(echo > foo、heredocs)、搜索文件(findrggrep)、浏览目录(lscd)、运行构建、管理进程以及你在 bash 中能做的任何其他操作。
  • apply_patch——以 Codex 的补丁格式应用结构化的多文件差异。模型用它进行非平凡的代码编辑(添加函数、跨文件重构);对于一次性写入,仍然可以使用 shell heredocs。
  • update_plan——Codex 的内部待办/计划跟踪器。相当于 Hermes 的 todo 工具,但完全在 Codex 的运行时内管理。
  • view_image——将本地图像文件加载到对话中,以便模型可以查看。
  • web_search——Codex 在配置后有自己的内置网络搜索。Hermes 也通过下面的回调暴露 web_search(由 Firecrawl 支持);模型会选择它更喜欢的那个。

因此,任何你通过终端做的事情——读/写/搜索/查找/运行——Codex 都能原生完成。沙箱配置文件(启用运行时后默认为 :workspace)控制哪些内容可写。

2. 原生 Codex 插件(从你的 codex plugin 安装自动迁移)

当你启用运行时,Hermes 会查询 Codex 的 plugin/list RPC,并为每个已安装的插件写入 [plugins."<name>@openai-curated"] 条目。插件本身由 Codex 管理,并通过 Codex 自己的 UI 一次性授权。

示例(OpenClaw 线程中强调为“YouTube 视频级别”的插件):

  • Linear——查找/更新问题
  • GitHub——搜索代码、查看 PR、评论
  • Gmail——读取/发送邮件
  • Google Calendar——创建/查找事件
  • Outlook 日历/邮件——通过 Microsoft 连接器实现相同功能
  • Canva——设计生成
  • ……以及你通过 codex plugin marketplace add openai-curated + codex plugin install ... 安装的任何其他插件。

不会迁移的内容:

  • 你尚未安装的插件——先在 Codex 中安装。
  • ChatGPT 应用市场条目(app/list)——这些已通过你的账户认证在 Codex 内启用。

3. Hermes 工具回调(MCP 服务器,注册在 ~/.codex/config.toml 中)

Hermes 将自己注册为 MCP 服务器,以便 Codex 可以回调以获取 Codex 未提供的工具。通过回调可用的工具:

  • web_search / web_extract——由 Firecrawl 支持;对于结构化内容,通常比抓取更干净。
  • browser_navigate / browser_click / browser_type / browser_press / browser_snapshot / browser_scroll / browser_back / browser_get_images / browser_console / browser_vision——通过 Camofox 或 Browserbase 实现完整的浏览器自动化。
  • vision_analyze——调用单独的视觉模型检查图像(不同于 Codex 的 view_image,后者将图像加载到对话中)。
  • image_generate——通过 Hermes 的 image_gen 插件链生成图像。
  • skill_view / skills_list——从 Hermes 的技能库中读取。
  • text_to_speech——通过 Hermes 配置的提供商进行 TTS。

当模型需要这些工具之一时,Codex 通过 stdio MCP 生成 hermes_tools_mcp_server 子进程,调用通过 model_tools.handle_function_call() 分发(与 Hermes 默认运行时相同的代码路径),结果像任何其他 MCP 响应一样返回给 Codex。

此运行时上不可用的工具

以下四个 Hermes 工具需要正在运行的 AIAgent 上下文(循环中间状态)才能分发,无状态的 MCP 回调无法驱动它们。当你需要它们时,请切换回默认运行时(/codex-runtime auto):

  • delegate_task——生成子代理
  • memory——Hermes 的持久记忆存储
  • session_search——跨会话搜索
  • todo——Hermes 的待办存储(Codex 的 update_plan 是运行时的等效工具)

工作流特性(/goal、看板、定时任务)

/goal(Ralph 循环)

在此运行时上可用。 目标持久化在 state_meta 中,以会话 ID 为键,继续提示通过 run_conversation() 作为普通用户消息反馈,Codex 原生执行下一轮。目标判断器通过辅助客户端运行(在 config.yaml 中通过 auxiliary.goal_judge 配置),与哪个运行时激活无关。如果 Codex 在批准上停滞,判断器的“阻塞,需要用户输入”裁决是一个干净的退出方式。

需要注意的一点: 每个继续提示都是一个全新的 Codex 轮次,这意味着 Codex 会从头重新评估命令批准策略。如果你正在执行一个长时间运行的目标,涉及大量写入,预计会比单个会话内任务看到更多的批准提示。设置 default_permissions = ":workspace"(启用运行时后 Hermes 会自动执行此操作),这样简单的工作区写入就不需要提示。

看板(多代理工作树分发)

在此运行时上可用,但有一个微妙的依赖。 看板分发器将每个工作器生成为一个单独的 hermes chat -q 子进程,该子进程读取用户的配置——这意味着如果全局设置了 model.openai_runtime: codex_app_server,工作器也会在 Codex 运行时上启动。

在 Codex 运行时工作器内部可用的功能:

  • Codex 的完整工具集(shell、apply_patch、update_plan、view_image、web_search)——工作器原生执行其实际任务
  • 迁移的 Codex 插件——Linear、GitHub 等
  • 用于 browser_*、vision、image_gen、skills、TTS 的 Hermes 工具回调

由于 MCP 回调暴露了它们,以下功能也可用:

  • kanban_complete / kanban_block / kanban_comment / kanban_heartbeat——工作器交接工具。它们从环境变量 HERMES_KANBAN_TASK(由分发器设置)中读取,正确控制访问权限,并写入由 HERMES_KANBAN_DB 固定的每个看板 SQLite 数据库。如果回调中没有这些工具,此运行时上的工作器可以执行任务但无法报告,会一直挂起直到分发器超时。
  • kanban_show / kanban_list——工作器用于检查自身上下文的只读看板查询。
  • kanban_create / kanban_unblock / kanban_link——仅编排器操作。对于需要在 Codex 运行时上分发新任务的编排器代理可用。

看板工具由分发器设置的 HERMES_KANBAN_TASK 环境变量控制——该变量会传播到 Codex 子进程(Codex 继承环境变量),并从那里传播到生成的 hermes-tools MCP 服务器子进程。因此,工具会看到正确的任务 ID 并正确控制访问。对于 Codex app-server 工作器,当存在 HERMES_KANBAN_TASK 时,Hermes 还会传递狭窄的 app-server 沙箱覆盖:保持 workspace-write 沙箱,添加看板数据库目录以及分发器固定的每个看板路径作为额外的可写根目录(HERMES_KANBAN_WORKSPACES_ROOTHERMES_KANBAN_WORKSPACE、旧的 HERMES_KANBAN_ROOT——去重,数据库目录优先),并默认保持网络禁用。这避免了脆弱的 :danger-no-sandbox 变通方案,同时允许 kanban_complete / kanban_block 更新看板数据库,并允许工作器在数据库目录之外的工作区挂载点下写入报告/工件(例如,在单独驱动器上的 /media/.../kanban-workspaces/...——问题 #27941)。

定时任务

未专门测试。 定时任务通过 cronjobAIAgent.run_conversation 运行,与 CLI 相同的代码路径。如果定时任务的配置中有 openai_runtime: codex_app_server,它将在 Codex 上运行。相同的工具可用性规则适用——Codex 内置工具 + 插件 + MCP 回调可用,代理循环工具(delegate_task、memory、session_search、todo)不可用。如果你的定时任务依赖这些工具,请将定时任务限定在使用默认运行时的配置文件中。

权衡

Hermes 默认运行时Codex app-server(可选加入)
delegate_task 子代理不可用——需要代理循环上下文
memorysession_searchtodo不可用——需要代理循环上下文
web_searchweb_extract是(通过 MCP 回调)
浏览器自动化(Camofox/Browserbase)是(通过 MCP 回调)
vision_analyzeimage_generate是(通过 MCP 回调)
skill_viewskills_list是(通过 MCP 回调)
text_to_speech是(通过 MCP 回调)
Codex shell(终端/读/写/搜索/查找/运行)是(Codex 内置)
Codex apply_patch(结构化多文件编辑)是(Codex 内置)
Codex update_plan(运行时内待办)是(Codex 内置)
Codex view_image(将图像加载到对话中)是(Codex 内置)
Codex 沙箱(seatbelt/landlock、配置文件)是(Codex 内置)
ChatGPT 订阅认证是(通过 openai-codex 提供商)
原生 Codex 插件(Linear、GitHub 等)是(自动迁移)
用户 MCP 服务器是(自动迁移到 Codex)
记忆 + 技能审查(后台)是(通过项目投影)
多轮对话
/goal(Ralph 循环)
看板工作器分发是(通过回调)
看板编排器工具是(通过回调)
所有网关平台
非 OpenAI 提供商不适用——仅限于 OpenAI/Codex

前提条件

  1. 已安装 Codex CLI:

    bash
    npm i -g @openai/codex
    codex --version   # 0.130.0 或更新版本
  2. Codex OAuth 登录。 Codex 子进程读取 ~/.codex/auth.json。两种填充方式:

    bash
    codex login                  # 将令牌写入 ~/.codex/auth.json

    Hermes 自己的 hermes auth login codex 写入 ~/.hermes/auth.json——那是单独的会话。如果你尚未运行,请单独运行 codex login

  3. (可选)安装你想要的 Codex 插件。 当你启用运行时,Hermes 会自动迁移你已通过 Codex CLI 安装的精选插件:

    bash
    codex plugin marketplace add openai-curated

然后通过 Codex 的 TUI,安装 Linear / GitHub / Gmail 等。

text
Hermes 会发现它们并自动将 `[plugins."<name>@openai-curated"]` 条目写入 `~/.codex/config.toml`。

## 启用

在 Hermes 会话中:

/codex-runtime codex_app_server

text

该命令:
- 验证 `codex` CLI 是否已安装(如果未安装,则显示安装提示并阻止)。
- 将 `model.openai_runtime: codex_app_server` 持久化到你的 config.yaml。
- 将用户 MCP 服务器从 `~/.hermes/config.yaml` 迁移到 `~/.codex/config.toml`。
- **发现并迁移已安装的原生 Codex 插件**(Linear、GitHub、Gmail、Calendar、Canva 等),通过查询 Codex 的 `plugin/list` RPC。
- **将 Hermes 自己的工具注册为 MCP 服务器**,以便 Codex 子进程可以回调以获取 Codex 未提供的工具。
- **写入 `default_permissions = ":workspace"`**,以便沙箱允许在工作区内写入,而无需每次操作都提示。
- 告诉你迁移了哪些内容。在**下一个**会话生效——当前缓存的代理保留之前的运行时,以便提示缓存保持有效。

同义词:`/codex-runtime on`、`/codex-runtime off`、`/codex-runtime auto`。

要检查当前状态而不做任何更改:

/codex-runtime

text

你也可以在 `~/.hermes/config.yaml` 中手动设置:
```yaml
model:
  openai_runtime: codex_app_server   # 默认为 "auto"(= Hermes 运行时)

自我改进循环(记忆 + 技能提示)

Hermes 的后台自我改进在计数器阈值触发:

  • 每 10 个用户提示 → 一个分叉的审查代理查看对话并决定是否应将任何内容保存到记忆。
  • 每 10 个工具迭代(在单个轮次内)→ 相同思路,但针对技能(skill_manage 写入)。

两者在 Codex 运行时上继续工作。 Codex 路径将每个完成的 commandExecution / fileChange / mcpToolCall / dynamicToolCall 项投影为合成的 assistant tool_call + tool 结果消息,因此当审查运行时,它看到与默认 Hermes 运行时相同的格式。

连接保持等效的方式:

默认运行时Codex 运行时
_turns_since_memory 递增每个用户提示,在 run_conversation 预循环中相同代码路径,在提前返回之前
_iters_since_skill 递增在聊天补全循环中每个工具迭代通过 turn.tool_iterations 在 Codex 轮次返回后
记忆触发器(_turns_since_memory >= _memory_nudge_interval在预循环中计算,在响应后触发在预循环中计算,传递给 Codex 辅助函数
技能触发器(_iters_since_skill >= _skill_nudge_interval在循环后计算在 Codex 轮次后计算
_spawn_background_review(messages_snapshot=..., review_memory=..., review_skills=...)当任一触发器触发时调用当任一触发器触发时以相同方式调用

一个细节:审查分叉本身需要调用 Hermes 的代理循环工具(memoryskill_manage),这需要 Hermes 自己的分发。因此,当父代理在 codex_app_server 上时,审查分叉会降级为 codex_responses——相同的 OAuth 凭据,相同的 openai-codex 提供商,但直接与 OpenAI 的 Responses API 通信,以便 Hermes 拥有循环并且代理循环工具可以工作。这对用户是透明的。

净效果:启用 Codex 运行时,你的记忆 + 技能提示会像往常一样继续触发。

批准如何工作

Codex 在执行命令或应用补丁之前请求批准。这些会被转换为 Hermes 标准的“危险命令”提示:

text
╭───────────────────────────────────────╮
│ 危险命令                              │
│                                       │
│ /bin/bash -lc 'echo hello > foo.txt'  │
│                                       │
│ ❯ 1. 允许一次                         │
│   2. 允许本次会话                     │
│   3. 拒绝                             │
│                                       │
│ Codex 请求在 /your/cwd 中执行          │
╰───────────────────────────────────────╯
  • 允许一次 → 批准此单个命令。
  • 允许本次会话 → Codex 不会对类似命令再次提示。
  • 拒绝 → 命令被拒绝;Codex 以只读模式继续。

对于 apply_patch(文件编辑)批准,当 Codex 通过相应的 fileChange 项提供数据时,Hermes 会显示更改摘要(1 个添加,1 个更新:/tmp/new.py, /tmp/old.py)。

权限配置文件

Codex 有三个内置权限配置文件:

  • :read-only——无写入;每个 shell 命令都需要批准
  • :workspace——允许在当前工作区内写入而无需提示(启用运行时后 Hermes 的默认设置)
  • :danger-no-sandbox——无沙箱(除非你理解它,否则不要使用)

你可以在 ~/.codex/config.toml 中 Hermes 管理的块之外覆盖默认值:

toml
default_permissions = ":read-only"

(只要你的覆盖位于 # managed by hermes-agent 标记之外,Hermes 会在重新迁移时保留它。)

辅助任务和 ChatGPT 订阅令牌成本

当此运行时与 openai-codex 提供商一起启用时,辅助任务(标题生成、上下文压缩、视觉自动检测、后台自我改进审查分叉)默认也会通过你的 ChatGPT 订阅,因为当没有为每个任务设置覆盖时,Hermes 的辅助客户端使用主提供商/模型。

这不是 codex_app_server 特有的——对于现有的 codex_responses 路径也是如此——但在这里更明显,因为你明确选择了订阅计费。

要将特定辅助任务路由到更便宜/不同的模型,请在 ~/.hermes/config.yaml 中设置显式覆盖:

yaml
auxiliary:
  title_generation:
    provider: openrouter
    model: google/gemini-3-flash-preview
  compression:
    provider: openrouter
    model: google/gemini-3-flash-preview
  vision:
    provider: openrouter
    model: google/gemini-3-flash-preview
  goal_judge:
    provider: openrouter
    model: google/gemini-3-flash-preview

自我改进审查分叉通过 _current_main_runtime() 继承主运行时,Hermes 会自动将其从 codex_app_server 降级为 codex_responses(以便分叉可以实际调用 memoryskill_manage——Hermes 自己的代理循环工具)。除非你将辅助任务路由到其他地方,否则该分叉仍然使用你的订阅认证。

安全编辑 ~/.codex/config.toml

Hermes 将其管理的所有内容包裹在两个标记注释之间:

toml
## managed by hermes-agent — `hermes codex-runtime migrate` regenerates this section
default_permissions = ":workspace"
[mcp_servers.filesystem]
...
[plugins."github@openai-curated"]
...
## end hermes-agent managed section

该块之外的任何内容都是你的。重新运行迁移(通过 /codex-runtime codex_app_server 或当你切换运行时)会原地替换管理的块,但会逐字保留其上下的用户内容。这意味着你可以:

  • 添加 Hermes 不知道的你自己的 MCP 服务器
  • default_permissions 覆盖为 :read-only(如果你更喜欢被提示)
  • 配置仅 Codex 的选项(模型、提供商、otel 等)
  • [permissions.<name>] 表中添加用户定义的权限配置文件

你在管理块内部添加的任何内容将在下次迁移时被覆盖。如果你需要编辑管理块的调整,请提交问题,我们将添加控制。

多配置文件/多租户设置

默认情况下,无论哪个 Hermes 配置文件处于活动状态,Hermes 都会将 Codex 子进程指向 ~/.codex/。这意味着 hermes -p workhermes -p personal 共享相同的 Codex 认证、插件和配置。对于大多数用户来说,这是正确的行为——它匹配直接运行 codex CLI 时的行为。

如果你想要每个配置文件的 Codex 隔离(单独的认证、单独的已安装插件、单独的配置),请为每个配置文件显式设置 CODEX_HOME。最干净的方法是指向 HERMES_HOME 下的一个目录:

bash
## 在工作配置文件中,你可以包装 hermes:
CODEX_HOME=~/.hermes/profiles/work/codex hermes chat

你需要使用该 CODEX_HOME 设置运行一次 codex login,以便 OAuth 令牌落在配置文件作用域的位置。之后,hermes -p work 将在隔离的 Codex 状态上操作。

我们不会自动限定作用域,因为移动现有用户的 ~/.codex/ 会静默地使他们的 Codex CLI 认证失效——任何已经运行过 codex login 的人都必须重新认证。可选加入比让用户感到意外更安全。

HOME 环境变量传递

Hermes 在生成 codex app-server 子进程时不会重写 HOME(我们使用 os.environ.copy() 并且只覆盖 CODEX_HOMERUST_LOG)。这意味着:

  • Codex 通过其 shell 工具运行的命令会看到真实的用户 HOME,并正确找到 ~/.gitconfig~/.gh/~/.aws/~/.npmrc 等。
  • Codex 的内部状态通过 CODEX_HOME 保持隔离(默认指向 ~/.codex/)。

这与 OpenClaw 在早期实验后得出的边界一致:隔离 Codex 的状态,保留用户的主目录不变。(参见 openclaw/openclaw#81562。)

MCP 服务器迁移

Hermes 的 mcp_servers 配置会自动转换为 Codex 期望的 TOML 格式。每次启用运行时都会运行迁移,并且是幂等的——重新运行会替换管理的部分,但保留任何用户编辑的 Codex 配置。

转换的内容:

Hermes(config.yamlCodex(config.toml
command + args + envstdio 传输
url + headersstreamable_http 传输
timeouttool_timeout_sec
connect_timeoutstartup_timeout_sec
enabled: falseenabled = false

不会迁移的内容:

  • Hermes 特定的键,如 sampling(Codex 的 MCP 客户端没有等效项——这些会被丢弃,并显示每个服务器的警告)。

原生 Codex 插件迁移

通过 codex plugin 安装的插件(Linear、GitHub、Gmail、Calendar、Canva 等)通过 Codex 的 plugin/list RPC 发现。对于每个 installed: true 的插件,Hermes 会写入一个 [plugins."<name>@openai-curated"] 块,在你的 Hermes 会话中启用它。

这意味着:当你的朋友说“我在 Codex CLI 中设置了 Calendar 和 GitHub”并启用 Hermes 的 codex 运行时,Hermes 会自动激活它们。无需重新配置。

不会迁移的内容:

  • 你尚未安装的插件——先在 Codex 中安装。
  • Codex 报告 availability != AVAILABLE 的插件(安装损坏、OAuth 过期、从市场移除等)。这些会被跳过,以避免写入在激活时会失败的配置。
  • ChatGPT 应用市场条目(每个账户的 app/list 结果——这些已通过你的账户认证在 Codex 内启用)。
  • 插件 OAuth——你在 Codex 本身中一次性授权每个插件;Hermes 不会接触凭据。

Hermes 工具回调(新的 MCP 服务器)

Codex 的内置工具集涵盖 shell/文件操作/补丁,但没有网络搜索、浏览器自动化、视觉、图像生成等。为了在 Codex 轮次中保持这些工具的可用性,Hermes 在 ~/.codex/config.toml 中将自己注册为 MCP 服务器:

toml
[mcp_servers.hermes-tools]
command = "/path/to/python"
args = ["-m", "agent.transports.hermes_tools_mcp_server"]
env = { HERMES_HOME = "/your/.hermes", PYTHONPATH = "...", HERMES_QUIET = "1" }
startup_timeout_sec = 30.0
tool_timeout_sec = 600.0

当模型调用 web_search(或其他暴露的 Hermes 工具)时,Codex 通过 stdio 生成 hermes_tools_mcp_server 子进程,请求通过 model_tools.handle_function_call() 分发,结果像任何其他 MCP 响应一样投影回 Codex。

通过回调可用的工具: web_searchweb_extractbrowser_navigatebrowser_clickbrowser_typebrowser_pressbrowser_snapshotbrowser_scrollbrowser_backbrowser_get_imagesbrowser_consolebrowser_visionvision_analyzeimage_generateskill_viewskills_listtext_to_speech

不可用的工具: delegate_taskmemorysession_searchtodo。这些需要正在运行的 AIAgent 上下文(循环中间状态)才能分发,无状态的 MCP 回调无法驱动它们。当你需要这些工具时,请使用默认的 Hermes 运行时(/codex-runtime auto)。

禁用

随时切换回来:

/codex-runtime auto

在下一个会话生效。Codex 管理块会保留在 ~/.codex/config.toml 中,以便你以后可以重新启用而不会丢失配置——或者如果你愿意,可以手动删除它。

限制

此运行时是可选加入的测试版。截至 Hermes Agent 2026.5 + Codex CLI 0.130.0 可工作:

  • 多轮对话
  • 通过 Hermes UI 的 commandExecutionfileChange(apply_patch)批准
  • MCP 工具调用(已针对 @modelcontextprotocol/server-filesystem 和新的 hermes-tools 回调验证)
  • 原生 Codex 插件迁移(已针对 Linear / GitHub / Calendar 清单验证)
  • 拒绝/取消路径
  • 开启/关闭循环
  • 记忆和技能提示计数器(已通过集成测试实时验证)
  • 通过 Codex 的 Hermes web_search(已实时验证:“OpenAI Codex CLI – Getting Started”端到端返回)

已知限制:

  • Hermes 认证和 Codex 认证是单独的会话。 你需要同时运行 codex loginhermes auth login codex 以获得最干净的体验(运行时使用 Codex 的会话进行 LLM 调用)。这是 Hermes 的 _import_codex_cli_tokens 中的有意设计选择——Hermes 不会与 Codex CLI 共享 OAuth 状态,以避免在令牌刷新时相互覆盖。
  • delegate_taskmemorysession_searchtodo 在此运行时上不可用。 它们需要正在运行的 AIAgent 上下文,而无状态的 MCP 回调无法提供。当你需要这些时,请使用 /codex-runtime auto
  • 当 Codex 不跟踪变更集时,批准提示中没有内联补丁预览。 Codex 的 fileChange 批准参数并不总是携带变更集。Hermes 会在可能的情况下从相应的 item/started 通知中缓存数据,但如果批准在项目流式传输之前到达,提示会回退到 Codex 提供的任何 reason
  • 亚秒级取消无法保证。 流中间的中断(在 Codex 响应时按 Ctrl+C)通过 turn/interrupt 发送,但如果 Codex 已经刷新了最终消息,你仍然会收到响应。

如果你发现错误,请提交问题,并附上 hermes logs --since 5m 的输出。在标题中提及 codex-runtime,以便于分类。

架构

text
                ┌─── Hermes shell(CLI / TUI / 网关) ───┐
                │  会话数据库 · 斜杠命令 · 记忆         │
                │  & 技能审查 · 定时任务 · 会话选择器   │
                └──┬──────────────────────────────────────┬┘
                   │ 用户消息                  最终      │
                   ▼                           文本 +   │
        ┌──────────────────────────────────┐   投影的   │
        │  AIAgent.run_conversation()       │   消息     │
        │   如果 api_mode == codex_app_server│            │
        │     → CodexAppServerSession        │            │
        │   否则:chat_completions / codex_responses(默认)
        └────┬─────────────────────────────┘            │
             │ JSON-RPC over stdio                       │
             ▼                                          │
        ┌──────────────────────────────────┐             │
        │  codex app-server(子进程)        │─────────────┘
        │   thread/start, turn/start        │
        │   item/* 通知                     │
        │   shell + apply_patch + update_plan│
        │   view_image + 沙箱               │
        │   ┌─────────────────────────┐    │
        │   │  MCP 客户端              │    │
        │   │  ├─ 用户 MCP 服务器      │    │
        │   │  ├─ 原生插件             │    │
        │   │  │   (linear, github,     │    │
        │   │  │    gmail, calendar,   │    │
        │   │  │    canva, ...)        │    │
        │   │  └─ hermes-tools ────────┼────────────────┐
        │   │       (回调到            │    │          │
        │   │        Hermes 更丰富的   │    │          │
        │   │        工具)             │    │          │
        │   └─────────────────────────┘    │          │
        └──────────────────────────────────┘          │
                                                       │
                                                       ▼
        ┌──────────────────────────────────────────────────────────┐
        │  hermes_tools_mcp_server.py(按需子进程)                 │
        │   web_search, web_extract, browser_*, vision_analyze,    │
        │   image_generate, skill_view, skills_list, text_to_speech│
        └──────────────────────────────────────────────────────────┘

有关实现细节,请参见 PR #24182Codex app-server 协议 README


分享: