Section: 核心功能 · URL: https://hermesbible.com/docs/user-guide/features/codex-app-server-runtime
Codex App-Server Runtime
Hermes 可以選擇將 openai/* 和 openai-codex/* 的對話輪次交由 Codex CLI app-server 處理,而非執行自己的工具迴圈。啟用後,終端指令、檔案編輯、沙箱隔離以及 MCP 工具呼叫都會在 Codex 的運行時中執行——Hermes 則成為包覆在外部的殼層(對話資料庫、斜線指令、閘道、記憶與技能審查)。
此功能為選擇性啟用。除非你手動切換標誌,否則 Hermes 的預設行為不會改變。Hermes 永遠不會自動將你路由到這個運行時。
提示
沒有使用 OpenAI Codex?
hermes setup --portal可以一步完成非 Codex 後端設定,支援 Claude/Gemini 等。參閱 Nous Portal。
為什麼要用
- 可以使用你的 ChatGPT 訂閱(無需 API 金鑰)來執行 OpenAI agent 輪次,使用與 Codex CLI 相同的認證流程。
- 使用 Codex 自身的工具組和沙箱——
shell用於終端/讀取/寫入/搜尋,apply_patch用於結構化編輯,update_plan用於規劃,全部在 seatbelt/landlock 沙箱中執行。 - 原生 Codex 外掛——Linear、GitHub、Gmail、Calendar、Canva 等——透過
codex plugin安裝後會自動遷移並在你的 Hermes 對話中啟用。 - Hermes 的進階工具同時可用——web_search、web_extract、瀏覽器自動化、視覺、圖片生成、技能和 TTS 透過 MCP 回呼機制運作。Codex 會回呼 Hermes 來呼叫它沒有內建的工具。
- 記憶和技能提示持續運作——Codex 的事件會被投射到 Hermes 的訊息格式中,讓自我改進迴圈看到的對話紀錄與預設運行時完全一致。
模型實際擁有哪些工具
這是多數使用者最先想知道的重點。當這個運行時啟用時,執行你對話輪次的模型有三個獨立的工具來源:
1. Codex 內建工具組(始終可用)
這些工具隨 codex app-server 本身提供——不需要 Hermes 介入、不需要 MCP、不需要外掛。以下五個工具在運行時啟動後即可使用:
shell——在沙箱中執行任意 shell 指令。這是模型讀取檔案(cat、head、tail)、寫入檔案(echo > foo、heredocs)、搜尋檔案(find、rg、grep)、瀏覽目錄(ls、cd)、執行建構、管理程序,以及任何你在 bash 中能做的事情的方式。apply_patch——套用 Codex patch 格式的結構化多檔案 diff。模型用這個工具進行非簡單的程式碼編輯(新增函數、跨檔案重構);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——尋找/更新 issue
- GitHub——搜尋程式碼、檢視 PR、留言
- Gmail——讀取/傳送郵件
- Google Calendar——建立/搜尋事件
- Outlook calendar/email——透過 Microsoft 連接器提供相同功能
- Canva——設計生成
- ...以及其他你透過
codex plugin marketplace add openai-curated+codex plugin install ...安裝的外掛
未遷移的內容:
- 你尚未安裝的外掛——先在 Codex 中安裝它們。
- ChatGPT app marketplace 條目(
app/list)——這些因為你的帳號認證而在 codex 中已啟用。
3. Hermes 工具回呼(MCP server,註冊在 ~/.codex/config.toml)
Hermes 將自身註冊為 MCP server,讓 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、kanban、cron)
/goal(Ralph 迴圈)
在此運行時上可用。 目標以 session id 為鍵值保存在 state_meta 中,延續提示透過 run_conversation() 作為一般使用者訊息回送,codex 原生執行下一個輪次。目標判斷器透過輔助客戶端運行(在 config.yaml 中透過 auxiliary.goal_judge 設定),與哪個運行時啟用無關。判斷器的「被阻塞,需要使用者輸入」結論是當 codex 在審批中停滯時的乾淨退出機制。
需要注意的一點: 每次延續提示都是一個全新的 codex 輪次,這意味著 codex 會重新評估指令審批策略。如果你正在進行一個需要大量寫入的長時間目標,預期會比單一對話內的任務出現更多審批提示。設定 default_permissions = ":workspace"(Hermes 在你啟用運行時時會自動設定)讓簡單的工作區寫入無需提示。
Kanban(多代理工作樹分派)
在此運行時上可用,但有一個細微的依賴。 Kanban 分派器將每個工作者產生為獨立的 hermes chat -q 子程序來讀取使用者設定——這意味著如果全局設定了 model.openai_runtime: codex_app_server,工作者也會在 codex 運行時上啟動。
在 codex 運行時工作者中可用的功能:
- Codex 的完整工具組(shell、apply_patch、update_plan、view_image、web_search)——工作者原生執行其任務
- 已遷移的 codex 外掛——Linear、GitHub 等
- Hermes 工具回呼的 browser_*、vision、image_gen、skills、TTS
因為 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 運行時上需要分派新任務的協調器代理使用。
Kanban 工具透過分派器設定的 HERMES_KANBAN_TASK 環境變數進行權限控制——該變數被傳遞到 codex 子程序(codex 繼承環境變數),再傳到產生的 hermes-tools MCP server 子程序。因此工具能看到正確的 task id 並正確控制權限。對於 Codex app-server 工作者,當存在 HERMES_KANBAN_TASK 時,Hermes 還會傳遞精確的 app-server 沙箱覆寫:保留 workspace-write 沙箱、將看板 DB 目錄加上分派器固定的每個 Kanban 路徑作為額外可寫根目錄(HERMES_KANBAN_WORKSPACES_ROOT、HERMES_KANBAN_WORKSPACE、舊版 HERMES_KANBAN_ROOT——去重後,DB 目錄優先),並預設保持網路停用。這避免了脆弱的 :danger-no-sandbox 變通方案,同時讓 kanban_complete / kanban_block 能更新看板 DB,也讓工作者能在 DB 目錄外的 workspace 掛載下寫入報告/產出(例如獨立磁碟上的 /media/.../kanban-workspaces/...——issue #27941)。
Cron 排程任務
未經專門測試。 Cron 排程任務透過 cronjob → AIAgent.run_conversation 運行,與 CLI 使用相同的程式碼路徑。如果 cron 排程任務的設定中有 openai_runtime: codex_app_server,它將在 codex 上運行。相同的工具可用性規則適用——codex 內建工具 + 外掛 + MCP 回呼可用,代理迴圈工具(delegate_task、memory、session_search、todo)不可用。如果你的 cron 排程任務依賴這些工具,請將 cron 限定到使用預設運行時的設定檔。
權衡比較
| Hermes 預設運行時 | Codex app-server(選擇啟用) | |
|---|---|---|
delegate_task 子代理 | 是 | 不可用——需要代理迴圈上下文 |
memory、session_search、todo | 是 | 不可用——需要代理迴圈上下文 |
web_search、web_extract | 是 | 是(透過 MCP 回呼) |
| 瀏覽器自動化(Camofox/Browserbase) | 是 | 是(透過 MCP 回呼) |
vision_analyze、image_generate | 是 | 是(透過 MCP 回呼) |
skill_view、skills_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 server | 是 | 是(自動遷移到 codex) |
| 記憶 + 技能審查(背景) | 是 | 是(透過項目投射) |
| 多輪對話 | 是 | 是 |
/goal(Ralph 迴圈) | 是 | 是 |
| Kanban 工作者分派 | 是 | 是(透過回呼) |
| Kanban 協調器工具 | 是 | 是(透過回呼) |
| 所有閘道平台 | 是 | 是 |
| 非 OpenAI 提供者 | 是 | 不適用——限定於 OpenAI/Codex |
前置需求
-
已安裝 Codex CLI:
npm i -g @openai/codex codex --version # 0.130.0 或更新版本 -
Codex OAuth 登入。 codex 子程序讀取
~/.codex/auth.json。有兩種方式填入:codex login # 將 token 寫入 ~/.codex/auth.jsonHermes 自身的
hermes auth login codex寫入~/.hermes/auth.json——那是獨立的 session。請另外執行codex login(如果你尚未執行過)。 -
(選擇性)安裝你想要的 Codex 外掛。 當你啟用運行時時,Hermes 會自動遷移你已透過 Codex CLI 安裝的精選外掛:
codex plugin marketplace add openai-curated # 然後透過 codex 的 TUI 安裝 Linear / GitHub / Gmail / 等Hermes 會發現它們並自動將
[plugins."<name>@openai-curated"]條目寫入~/.codex/config.toml。
啟用方式
在 Hermes 對話中:
/codex-runtime codex_app_server
這個指令會:
- 驗證
codexCLI 已安裝(未安裝時會阻塞並提示安裝方式)。 - 將
model.openai_runtime: codex_app_server持久化到你的 config.yaml。 - 將使用者 MCP server 從
~/.hermes/config.yaml遷移到~/.codex/config.toml。 - 發現並遷移已安裝的原生 Codex 外掛(Linear、GitHub、Gmail、Calendar、Canva 等),透過查詢 Codex 的
plugin/listRPC。 - 將 Hermes 自身的工具註冊為 MCP server,讓 codex 子程序可以回呼它沒有的工具。
- 寫入
default_permissions = ":workspace",讓沙箱允許在工作區內寫入而無需每次操作都提示。 - 告知你哪些內容被遷移了。在下一個對話中生效——當前快取的代理保留先前的運行時,以保持 prompt 快取有效。
同義指令:/codex-runtime on、/codex-runtime off、/codex-runtime auto。
查看目前狀態而不做任何變更:
/codex-runtime
你也可以在 ~/.hermes/config.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 迴圈前 | 相同的程式碼路徑,在 early-return 之前 |
_iters_since_skill 遞增 | 迴圈中每個工具迭達 | codex 輪次返回後透過 turn.tool_iterations |
記憶觸發(_turns_since_memory >= _memory_nudge_interval) | 在迴圈前計算,回應後觸發 | 在迴圈前計算,傳遞到 codex 輔助函數 |
技能觸發(_iters_since_skill >= _skill_nudge_interval) | 迴圈後計算 | codex 輪次後計算 |
_spawn_background_review(messages_snapshot=..., review_memory=..., review_skills=...) | 當任一觸發器觸發時呼叫 | 當任一觸發器觸發時以相同方式呼叫 |
一個細節:審查分支本身需要呼叫 Hermes 的代理迴圈工具(memory、skill_manage),這些需要 Hermes 自身的分派。因此當父代理在 codex_app_server 上時,審查分支會降級為 codex_responses——使用相同的 OAuth 憑證、相同的 openai-codex 提供者,但直接與 OpenAI 的 Responses API 通訊,讓 Hermes 擁有迴圈控制權,代理迴圈工具可以正常運作。這對使用者來說是完全透明的。
最終效果:啟用 codex 運行時後,你的記憶和技能提示會與原本完全一樣持續觸發。
審批機制
Codex 在執行指令或套用 patch 前會請求審批。這些會被轉譯為 Hermes 的標準「危險指令」提示:
╭───────────────────────────────────────╮
│ 危險指令 │
│ │
│ /bin/bash -lc 'echo hello > foo.txt' │
│ │
│ ❯ 1. 允許一次 │
│ 2. 本次對話中允許 │
│ 3. 拒絕 │
│ │
│ Codex 請求在 /your/cwd 中執行 │
╰───────────────────────────────────────╯
- 允許一次→批准這次單一指令。
- 本次對話中允許→Codex 不會對類似指令再次提示。
- 拒絕→指令被拒絕;Codex 以唯讀模式繼續。
對於 apply_patch(檔案編輯)審批,當 codex 透過對應的 fileChange 項目提供資料時,Hermes 會顯示變更摘要(1 add, 1 update: /tmp/new.py, /tmp/old.py)。
權限設定檔
Codex 有三個內建的權限設定檔:
:read-only——不允許寫入;每個 shell 指令都需要審批:workspace——在目前工作區內的寫入無需提示即可執行(Hermes 啟用運行時時的預設值):danger-no-sandbox——完全不使用沙箱(除非你理解其含義,否則不要使用)
你可以在 ~/.codex/config.toml 中覆寫預設值(在 Hermes 管理區塊之外):
default_permissions = ":read-only"
(Hermes 在重新遷移時會保留你的覆寫,只要它位於 # managed by hermes-agent 標記之外。)
輔助任務與 ChatGPT 訂閱 token 成本
當此運行時啟用並搭配 openai-codex 提供者時,輔助任務(標題生成、上下文壓縮、視覺自動偵測、背景自我改進審查分支)預設也會透過你的 ChatGPT 訂閱,因為 Hermes 的輔助客戶端在未設定單獨任務覆寫時使用主要提供者/模型。
這不是 codex_app_server 特有的——對於現有的 codex_responses 路徑也是如此——但在這裡更明顯,因為你明確選擇使用訂閱計費。
要將特定輔助任務路由到更便宜/不同的模型,請在 ~/.hermes/config.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(讓分支能實際呼叫 memory 和 skill_manage——Hermes 自身的代理迴圈工具)。除非你已將輔助任務路由到其他地方,否則該分支仍使用你的訂閱認證。
安全編輯 ~/.codex/config.toml
Hermes 將其管理的所有內容包在兩個標記註解之間:
# 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 server
- 將
default_permissions覆寫為:read-only(如果你偏好被提示) - 設定 codex 專屬選項(模型、提供者、otel 等)
- 在
[permissions.<name>]表格中新增使用者定義的權限設定檔
你在管理區塊內部新增的任何內容會在下次遷移時被覆蓋。如果你需要編輯管理區塊的調整,請提交 issue,我們會新增相應的設定選項。
多設定檔/多租戶配置
預設情況下,Hermes 將 codex 子程序指向 ~/.codex/,不受哪個 Hermes 設定檔啟用影響。這意味著 hermes -p work 和 hermes -p personal 共享相同的 Codex 認證、外掛和設定。對多數使用者來說這是正確的行為——它與直接執行 codex CLI 的行為一致。
如果你需要每個設定檔的 Codex 隔離(獨立的認證、獨立安裝的外掛、獨立的設定),請在每個設定檔中明確設定 CODEX_HOME。最乾淨的方式是指向你 HERMES_HOME 下的一個目錄:
# 在 work 設定檔中,你可能會包裝 hermes:
CODEX_HOME=~/.hermes/profiles/work/codex hermes chat
你需要用該 CODEX_HOME 設定重新執行一次 codex login,讓 OAuth token 存放到設定檔範圍的位置。之後,hermes -p work 將在隔離的 Codex 狀態上運作。
我們不自動限定範圍,因為移動現有使用者的 ~/.codex/ 會默默地使他們的 Codex CLI 認證失效——任何已經執行過 codex login 的人都需要重新認證。選擇性啟用比讓使用者感到意外更安全。
HOME 環境變數透傳
Hermes 在產生 codex app-server 子程序時不會重寫 HOME(我們使用 os.environ.copy() 並只覆蓋 CODEX_HOME 和 RUST_LOG)。這意味著:
- codex 透過其
shell工具執行的指令看到的是真正的使用者HOME,能正確找到~/.gitconfig、~/.gh/、~/.aws/、~/.npmrc等。 - Codex 的內部狀態透過
CODEX_HOME(預設指向~/.codex/)保持隔離。
這與 OpenClaw 經過早期實驗後達成的邊界一致:隔離 Codex 的狀態,不動使用者的 home 目錄。(參見 openclaw/openclaw#81562。)
MCP server 遷移
Hermes 的 mcp_servers 設定會自動轉譯為 Codex 預期的 TOML 格式。遷移在每次你啟用運行時時執行,且是冪等的——重新執行會替換管理區塊但保留使用者編輯的 Codex 設定。
轉譯的內容:
Hermes(config.yaml) | Codex(config.toml) |
|---|---|
command + args + env | stdio transport |
url + headers | streamable_http transport |
timeout | tool_timeout_sec |
connect_timeout | startup_timeout_sec |
enabled: false | enabled = false |
未遷移的內容:
- Hermes 專屬的金鑰如
sampling(Codex 的 MCP client 沒有對應項——這些會被捨棄並顯示每個 server 的警告)。
原生 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、從 marketplace 移除等)。這些會被跳過以避免寫入在啟用時會失敗的設定。 - ChatGPT app marketplace 條目(每個帳號的
app/list結果——這些因為你的帳號認證而在 codex 中已啟用)。 - 外掛 OAuth——你在 Codex 中授權每個外掛一次;Hermes 不會觸及憑證。
Hermes 工具回呼(新的 MCP server)
Codex 的內建工具組涵蓋 shell/檔案操作/patch,但沒有網路搜尋、瀏覽器自動化、視覺、圖片生成等功能。為了在 codex 輪次中保持這些功能可用,Hermes 將自身註冊為 ~/.codex/config.toml 中的 MCP server:
[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_search、web_extract、browser_navigate、browser_click、browser_type、browser_press、browser_snapshot、browser_scroll、browser_back、browser_get_images、browser_console、browser_vision、vision_analyze、image_generate、skill_view、skills_list、text_to_speech。
不可用的工具: delegate_task、memory、session_search、todo。這些需要運行中的 AIAgent 上下文才能分派(迴圈中途狀態),而無狀態的 MCP 回呼無法驅動它們。當你需要這些工具時,請使用預設 Hermes 運行時(/codex-runtime auto)。
停用
隨時可以切換回來:
/codex-runtime auto
在下一個對話中生效。Codex 管理區塊會留在 ~/.codex/config.toml 中,方便你之後重新啟用而不會遺失設定——或者你也可以手動移除它。
限制
此運行時為選擇性啟用的 Beta 功能。截至 Hermes Agent 2026.5 + Codex CLI 0.130.0 已驗證的功能:
- 多輪對話
commandExecution和fileChange(apply_patch)透過 Hermes UI 進行審批- MCP 工具呼叫(已透過
@modelcontextprotocol/server-filesystem和新的hermes-tools回呼驗證) - 原生 Codex 外掛遷移(已透過 Linear / GitHub / Calendar 盤點驗證)
- 拒絕/取消路徑
- 切換開/關循環
- 記憶和技能提示計數器(已透過整合測試即時驗證)
- 透過 codex 執行 Hermes web_search(已即時驗證:「OpenAI Codex CLI – Getting Started」端到端返回成功)
已知限制:
- Hermes 認證和 codex 認證是獨立的 session。 你需要同時執行
codex login和hermes auth login codex以獲得最佳體驗(運行時使用 codex 的 session 進行 LLM 呼叫)。這是 Hermes 的_import_codex_cli_tokens中刻意的設計選擇——Hermes 不會與 codex CLI 共享 OAuth 狀態,以避免在 token 刷新時互相覆蓋。 delegate_task、memory、session_search、todo在此運行時上不可用。 它們需要運行中的 AIAgent 上下文,而無狀態的 MCP 回呼無法提供。當你需要這些工具時,請使用/codex-runtime auto。- 當 codex 未追蹤變更集時,審批提示中沒有內聯 patch 預覽。 Codex 的
fileChange審批參數不總是攜帶變更集。Hermes 在可能的情況下從對應的item/started通知快取資料,但如果審批在項目串流完成前到達,提示會回退到 codex 提供的reason說明。 - 無法保證亞秒級取消。 中途打斷(在 codex 回應時按下 Ctrl+C)透過
turn/interrupt發送,但如果 codex 已經刷出最終訊息,你仍會收到回應。
如果你發現了 bug,請提交 issue 並附上 hermes logs --since 5m 的輸出。在標題中提及 codex-runtime 以便快速分類。
架構
┌─── Hermes shell(CLI / TUI / 閘道)───┐
│ 對話資料庫 · 斜線指令 · 記憶 │
│ 與技能審查 · cron · 對話選擇器 │
└──┬───────────────────────────────────┬┘
│ user_message final │
▼ text + │
┌──────────────────────────────────┐ 投射的 │
│ AIAgent.run_conversation() │ 訊息 │
│ if api_mode == codex_app_server │ │
│ → CodexAppServerSession │ │
│ else: chat_completions / codex_responses(預設)
└────┬─────────────────────────────┘ │
│ JSON-RPC over stdio │
▼ │
┌──────────────────────────────────┐ │
│ codex app-server(子程序) │──────────┘
│ thread/start, turn/start │
│ item/* 通知 │
│ shell + apply_patch + update_plan│
│ view_image + 沙箱 │
│ ┌─────────────────────────┐ │
│ │ MCP client │ │
│ │ ├─ 使用者 MCP server │ │
│ │ ├─ 原生外掛 │ │
│ │ │ (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 #24182 和 Codex app-server 協議 README。