H繁中版
文件核心功能codex app server runtime
<!-- Source: https://hermesbible.com/docs/user-guide/features/codex-app-server-runtime -->

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 指令。這是模型讀取檔案(catheadtail)、寫入檔案(echo > foo、heredocs)、搜尋檔案(findrggrep)、瀏覽目錄(lscd)、執行建構、管理程序,以及任何你在 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_ROOTHERMES_KANBAN_WORKSPACE、舊版 HERMES_KANBAN_ROOT——去重後,DB 目錄優先),並預設保持網路停用。這避免了脆弱的 :danger-no-sandbox 變通方案,同時讓 kanban_complete / kanban_block 能更新看板 DB,也讓工作者能在 DB 目錄外的 workspace 掛載下寫入報告/產出(例如獨立磁碟上的 /media/.../kanban-workspaces/...——issue #27941)。

Cron 排程任務

未經專門測試。 Cron 排程任務透過 cronjobAIAgent.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 子代理不可用——需要代理迴圈上下文
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 server是(自動遷移到 codex)
記憶 + 技能審查(背景)是(透過項目投射)
多輪對話
/goal(Ralph 迴圈)
Kanban 工作者分派是(透過回呼)
Kanban 協調器工具是(透過回呼)
所有閘道平台
非 OpenAI 提供者不適用——限定於 OpenAI/Codex

前置需求

  1. 已安裝 Codex CLI:

    npm i -g @openai/codex
    codex --version   # 0.130.0 或更新版本
    
  2. Codex OAuth 登入。 codex 子程序讀取 ~/.codex/auth.json。有兩種方式填入:

    codex login                  # 將 token 寫入 ~/.codex/auth.json
    

    Hermes 自身的 hermes auth login codex 寫入 ~/.hermes/auth.json——那是獨立的 session。請另外執行 codex login(如果你尚未執行過)。

  3. (選擇性)安裝你想要的 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

這個指令會:

  • 驗證 codex CLI 已安裝(未安裝時會阻塞並提示安裝方式)。
  • model.openai_runtime: codex_app_server 持久化到你的 config.yaml。
  • 將使用者 MCP server 從 ~/.hermes/config.yaml 遷移到 ~/.codex/config.toml
  • 發現並遷移已安裝的原生 Codex 外掛(Linear、GitHub、Gmail、Calendar、Canva 等),透過查詢 Codex 的 plugin/list RPC。
  • 將 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 的代理迴圈工具(memoryskill_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(讓分支能實際呼叫 memoryskill_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 workhermes -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_HOMERUST_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.yamlCodex(config.toml
command + args + envstdio transport
url + headersstreamable_http transport
timeouttool_timeout_sec
connect_timeoutstartup_timeout_sec
enabled: falseenabled = 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_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 中,方便你之後重新啟用而不會遺失設定——或者你也可以手動移除它。

限制

此運行時為選擇性啟用的 Beta 功能。截至 Hermes Agent 2026.5 + Codex CLI 0.130.0 已驗證的功能:

  • 多輪對話
  • commandExecutionfileChange(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 loginhermes auth login codex 以獲得最佳體驗(運行時使用 codex 的 session 進行 LLM 呼叫)。這是 Hermes 的 _import_codex_cli_tokens 中刻意的設計選擇——Hermes 不會與 codex CLI 共享 OAuth 狀態,以避免在 token 刷新時互相覆蓋。
  • delegate_taskmemorysession_searchtodo 在此運行時上不可用。 它們需要運行中的 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 #24182Codex app-server 協議 README



Computer Use(macOS)