本文へ移動
🧩

OpenClaw で OpenAI 系モデルを使うとき、「普通の OpenClaw runtime と何が違うのか」「Codex app-server に任せる部分と Gateway 側で持つ部分はどこか」で迷いやすいです。ここを曖昧にしたまま設定を増やすと、approval が二重になったり、compaction の責任者が分からなくなったり、transcript と native thread の状態がずれて調査しにくくなります。

この記事では、2026年8月13日時点の OpenClaw docs と OpenAI の Codex App Server 記事を前提に、OpenClaw Codex harness の責務境界に絞って整理します。OpenClaw 全体の入口は OpenClaw の使い方入門、workspace / memory / backup の置き方は OpenClaw workspace 設計ガイド、agentId / accountId / binding の分離は OpenClaw multi-agent routing 設計ガイド、Codex App Server 自体の接続面は Codex App Server ガイド に分けています。

今回は「OpenClaw に Codex をつなげる手順」ではなく、どちらの runtime が何を所有するかの話です。

先に結論: Codex は native agent loop、OpenClaw は運用面を持つ

OpenClaw Codex harness を安全に扱うコツは、次の表を先に固定することです。

領域所有者実務上の意味
native thread resumeCodex app-serverCodex 側の thread を canonical として扱う
native tool continuationCodex app-servertool call の継続は Codex の agent loop に従う
native compactionCodex app-serverOpenClaw が独自要約で置き換えない
app-server executionCodex app-serverrich event / approval / diff を Codex protocol で受ける
chat channelOpenClaw GatewayWebChat / Discord / Telegram などの配送を持つ
session fileOpenClaw GatewayGateway 側の session state と監査導線を持つ
dynamic toolsOpenClaw GatewayOpenClaw tool / plugin middleware を adapter 経由で実行する
approvalsOpenClaw Gateway + Codexnative request を Gateway approval flow に写像する
transcript mirrorOpenClaw Gateway検索、/new、/reset、runtime切替のために見える履歴を保つ

つまり、OpenClaw Codex harness は「OpenClaw が Codex をただの model provider として呼ぶ」構造ではありません。Codex の native agent loop を使いながら、OpenClaw が channel、approval、tool policy、media delivery、diagnostics の運用面を包む構造です。

この線引きをしないと、設定や障害調査で次のような判断を間違えます。

  • compaction が詰まったときに Gateway 側の要約設定を疑う
  • approval が出ないときに Codex policy だけを見る
  • transcript に見える履歴を Codex native thread の完全な代替だと思う
  • OpenClaw dynamic tool を Codex native tool と同じ並列実行モデルで扱う

Codex harness は便利ですが、責務を混ぜるほど運用は壊れやすくなります。

OpenClaw runtime ではなく Codex app-server runtime として見る

OpenClaw docs では、Codex harness は built-in OpenClaw harness の代わりに Codex app-server を通して embedded OpenAI agent turn を動かすものとして説明されています。ここで重要なのは、Codex が model call だけを持つのではなく、thread、tool continuation、compaction、execution まで持つことです。

OpenAI の Codex App Server 記事でも、App Server は JSON-RPC protocol であると同時に、Codex core thread を host する long-lived process として説明されています。1つの user request から複数の event update が流れ、approval のように server 側から client へ入力を求める request も発生します。

実務では、この理解にすると設定が短くなります。

runtime_boundary:
  codex_app_server:
    owns:
      - native_thread
      - native_tool_continuation
      - native_compaction
      - app_server_events
  openclaw_gateway:
    owns:
      - source_channel
      - session_file
      - visible_transcript
      - plugin_approval
      - media_delivery
      - diagnostics_export

Codex を「OpenClaw の中の別モデル」だと思うと、OpenClaw 側で thread lifecycle を全部再現したくなります。逆に、OpenClaw を「Codex の薄いUI」だと思うと、Gateway が持つ channel routing や plugin approval を軽視します。どちらも違います。

approval は二重化ではなく写像として扱う

Codex harness で最も事故りやすいのは approval です。Codex app-server は native permission request や MCP tool approval elicitation を出せます。一方、OpenClaw には plugin approval flow と Control UI があります。

ここでやるべきことは、両方を独立に表示することではありません。Codex の native request を OpenClaw の approval record に写像し、最終判断を Codex 側へ返すことです。

approval_mapping:
  native_event:
    - PermissionRequest
    - mcp_tool_call_elicitation
  gateway_record:
    owner: openclaw
    visible_in:
      - control_ui
      - source_channel_buttons_when_safe
  decision:
    allow: return native allow
    deny: return native deny
    no_decision: fall through, not implicit allow

重要なのは、no decision を allow と扱わないことです。OpenClaw docs でも、policy が明示的に allow / deny するときだけ decision を返し、判断なしは Codex 側の guardian や user approval path に落ちるとされています。

この設計にすると、監査ログで「誰がどの channel で何を許可したか」を追えます。逆に、Codex の approval と OpenClaw の approval を別々に出すと、片方が allow、片方が deny のような壊れた状態を作ります。

dynamic tools は Codex native tool と同じに見ない

OpenClaw dynamic tools は、Codex が tool call を求めたあと、OpenClaw adapter 側で実行されます。つまり、Codex native tool と同じ実行モデルではありません。

実務では、次の制約を前提にします。

tool 種別実行境界注意点
Codex native toolCodex app-server runtimenative policy と sandbox に従う
OpenClaw dynamic toolOpenClaw harness adapterplugin / middleware / approval flow を通る
MCP tool elicitationCodex request + Gateway approval_meta の approval kind を見て Gateway record に写像する

OpenClaw dynamic tool の結果は generic text として Codex Code Mode に返るため、JSON っぽい結果を厳密な structured output として信じすぎない方がよいです。並列実行も、Codex native tool の感覚で Promise.all 的に期待しない方が安全です。

私は dynamic tools を次の3段階に分けます。

codex_dynamic_tools_policy:
  direct:
    use_for:
      - read_only_project_metadata
      - short_inspection_tools
  searchable:
    use_for:
      - many_tools
      - tools_with_side_effect_risk
  excluded:
    use_for:
      - secrets_access
      - production_write
      - deploy_or_billing_actions

最初は searchable か excluded を多めにします。Codex harness に乗せた瞬間に tool を広げるのではなく、OpenClaw 側で「どの tool を Codex context に見せるか」を絞る方が事故りにくいです。

compaction は Codex に任せ、transcript mirror は OpenClaw が保つ

Codex harness を使う session では、native thread compaction は Codex app-server の仕事です。OpenClaw が preflight compaction を走らせたり、独自の context-engine compaction で置き換えたりしない前提で設計します。

一方で、OpenClaw は transcript mirror を保ちます。これは Codex native thread の代替ではなく、Gateway 側の visible history です。

history_boundary:
  codex_native_thread:
    purpose:
      - resume
      - tool_continuation
      - native_compaction
  openclaw_transcript_mirror:
    purpose:
      - channel_history
      - search
      - new_or_reset_flow
      - future_runtime_switching
      - diagnostics_context

この区別は障害対応で効きます。「見えている transcript にあるから Codex native thread にもあるはず」と考えると、compaction 後や remote connection 退避後の調査を誤ります。逆に、「Codex が canonical だから transcript は不要」と考えると、channel delivery、検索、runtime 切替、ユーザー向け履歴が弱くなります。

remote app-server は workspace root と attachment を疑う

remote Codex app-server を使う場合、Gateway と Codex app-server が別マシンにいることがあります。このとき、shared filesystem がある前提で attachment path を扱うと危険です。

OpenClaw docs では、remoteWorkspaceRoot による remote workspace attachment path の検証、authoritative attachment bytes の転送、symlink 拒否、size limit、Gateway-managed media staging などの境界が説明されています。

実務の checklist はこれで足ります。

remote_codex_harness_checklist:
  workspace:
    - remoteWorkspaceRoot is explicit
    - local path and remote path are not assumed identical
  attachments:
    - reject symlinks
    - enforce file size before allocation
    - enforce response size before allocation
    - stage immutable gateway-managed media
  diagnostics:
    - record OpenClaw session id
    - record Codex thread id
    - include local codex resume command when available

特に media と attachment は、AI agent の便利機能というより data boundary です。どの bytes が authoritative で、どの runtime が読み、どの channel に配送したかを追える形にしておくべきです。

いつ OpenClaw Codex harness を選ぶか

OpenClaw の中で Codex harness を使うべき場面は、単に「OpenAI モデルを使いたい」だけではありません。Codex native agent loop の価値があるときです。

やりたいこと選ぶ runtime
OpenClaw 標準の Gateway / channel / plugin を中心に使うbuilt-in OpenClaw runtime
Codex native thread / compaction / approval event を使いたいCodex harness
Claude Code CLI など外部 CLI をそのまま動かしたいCLI backend / ACP 系
複数 provider を共通最小APIで抽象化したいcross-provider harness protocol

Codex harness を選ぶ理由は、OpenClaw の機能を捨てることではありません。Codex の native agent loop を使いながら、OpenClaw の channel、approval、diagnostics、tool policy を残すことです。

導入時の最小設定レビュー

私なら、最初の review checklist はこのくらいにします。

## OpenClaw Codex harness review

- [ ] `openai/*` model refs が Codex runtime を選ぶ意図になっている
- [ ] legacy whole-agent runtime pin を `openclaw doctor --fix` で掃除した
- [ ] Codex app-server mode と auth profile を記録した
- [ ] dynamic tools は direct ではなく searchable から始めた
- [ ] production write / secrets / deploy 系 dynamic tools を除外した
- [ ] PermissionRequest の no decision を allow と扱っていない
- [ ] MCP tool approval elicitation が Gateway approval record に写像される
- [ ] transcript mirror と native thread を同一視していない
- [ ] remote app-server では `remoteWorkspaceRoot` と attachment size limit を確認した
- [ ] diagnostics export と Codex feedback upload の違いを運用手順に書いた

この checklist を通せないなら、まだ Codex harness を本番運用に入れない方がよいです。設定が動くことと、障害時に説明できることは別です。

まとめ

OpenClaw Codex harness は、OpenClaw の裏側で Codex を呼ぶだけの薄い接続ではありません。Codex app-server が native thread、tool continuation、compaction、execution を持ち、OpenClaw Gateway が channel routing、dynamic tools、approvals、media delivery、transcript mirror、diagnostics を持つ二層構造です。

最初に決めるべきことは、model 名ではなく責務境界です。Codex が持つもの、OpenClaw が持つもの、両者を写像するものを分ける。特に approval、dynamic tools、compaction、transcript mirror、remote attachment は、設定より先に運用ルールとして固定するべきです。

この境界を明文化しておくと、OpenClaw は「複数チャネルから Codex を呼べるUI」ではなく、Codex native runtime を組織運用に載せるための Gateway として扱えます。

参考

WRITTEN BY nidoneko

Full-stack engineer with 8+ years of experience in TypeScript, React, Node.js, and cloud-native development across healthcare, finance, HR, and IoT domains.

View Profile →