Update to Codex Replay
Snapshot Oct 24, 2026 · 13:07 UTC · version 1.0.132
Collection source: downloaded plugin package. These snapshots do not have a confirmed matching collection source. Differences in file lists alone do not establish changes to the package.
Instructions updated for codex-replay
Skill instructions — Now says: If parallel calls are unavailable, dispatch sequentially Call `mcp__codex_replay.open_controller` with only the shared `controller_session_id`. The MCP host...
Observed in instructions or declared skills. Runtime behavior has not been tested.
Up to 10 plugins free · no card required.
All fields and original values.
Skill instructions
Sep 30, 2026 · 23:01 UTC
Also run `command -v codex` in its own call and retain an absolute result for MCP. If parallel calls are unavailable, dispatch sequentially After the executable lookup finishes, call `mcp__codex_replay.open_controller` with the shared `c...
Oct 24, 2026 · 13:07 UTC
If parallel calls are unavailable, dispatch sequentially Call `mcp__codex_replay.open_controller` with only the shared `controller_session_id`. The MCP host environment selects the Codex executable. Use the MCP tool, not a On success, im...
Compare saved observations
Download comparison JSONSKILL.md text changes
− removed · + added
--- before +++ after @@ -20,8 +20,7 @@ Dispatch the following in one parallel batch, each as its own direct unified-exec call. Use `yield_time_ms: 250` for script 1 and `yield_time_ms: 1000` for -scripts 2 through 4. Also run `command -v codex` in its own call and retain an -absolute result for MCP. If parallel calls are unavailable, dispatch sequentially +scripts 2 through 4. If parallel calls are unavailable, dispatch sequentially without waiting for long-lived observers to exit. ```text @@ -38,13 +37,14 @@ sidecar. Missing analytics or an observer error never blocks controller launch or browser use; local writes are not delivery acknowledgments. -After the executable lookup finishes, call -`mcp__codex_replay.open_controller` with the shared `controller_session_id` -and the absolute `codex_cli_path` when one was found. Use the MCP tool, not a +Call `mcp__codex_replay.open_controller` with only the shared +`controller_session_id`. The MCP host environment selects the Codex executable. +Use the MCP tool, not a shell launcher. If launch fails, report the limitation without inventing a new ID, changing permissions, or stopping an existing process. -On success, immediately open the exact plain `launch_url`; do not add tokens. +On success, immediately open the exact `launch_url`, including its access-token +fragment. Do not strip, change, or separately repeat the token. `opened: false` means the controller is prepared, not that a browser opened. Choose the opening path by available in-app browser capabilities:
Full technical diff · 1 changed fields
changed /skill_md_contents
"---\nname: codex-replay\ndescription: Open an independent Codex Replay controller in the Codex in-app browser, or the system browser when no in-app opening path is available. Use whenever this plugin is invoked or the user asks to browse, configure, run, or review a replay. The browser controller owns the entire workflow; do not conduct it in chat.\n---\n\n# Codex Replay\n\nResolve the installed plugin root from this skill's location (two directories\nabove the directory containing `SKILL.md`). Before the first observer batch,\nrun this once as its own direct unified-exec call and retain its output as\n`controller_session_id`:\n\n```text\npython3 -c 'import secrets; print(secrets.token_hex(16))'\n```\n\nValidate that the output contains exactly 32 lowercase hexadecimal characters.\nUse that same ID for every observer and for MCP; do not let an observer or the\ncontroller allocate a replacement.\n\nDispatch the following in one parallel batch, each as its own direct unified-exec\ncall. Use `yield_time_ms: 250` for script 1 and `yield_time_ms: 1000` for\nscripts 2 through 4. Also run `command -v codex` in its own call and retain an\nabsolute result for MCP. If parallel calls are unavailable, dispatch sequentially\nwithout waiting for long-lived observers to exit.\n\n```text\npython3 <absolute-plugin-root>/scripts/metrics/1_probe_metrics.py\npython3 <absolute-plugin-root>/scripts/metrics/2_start_controller.py --controller-session-id <controller-session-id>\npython3 <absolute-plugin-root>/scripts/metrics/3_report_start_metrics.py --controller-session-id <controller-session-id>\npython3 <absolute-plugin-root>/scripts/metrics/4_report_final_metrics.py --controller-session-id <controller-session-id>\n```\n\nScript 1 exits. Scripts 2 through 4 are observers; do not wait for them to exit.\n\nDo not combine scripts, use shell backgrounding, retry observers, or set\n`CODEX_PLUGIN_METRICS_OUTPUT` yourself. Each script needs its own host-created\nsidecar. Missing analytics or an observer error never blocks controller launch or\nbrowser use; local writes are not delivery acknowledgments.\n\nAfter the executable lookup finishes, call\n`mcp__codex_replay.open_controller` with the shared `controller_session_id`\nand the absolute `codex_cli_path` when one was found. Use the MCP tool, not a\nshell launcher. If launch fails, report the limitation without inventing a new\nID, changing permissions, or stopping an existing process.\n\nOn success, immediately open the exact plain `launch_url`; do not add tokens.\n`opened: false` means the controller is prepared, not that a browser opened.\nChoose the opening path by available in-app browser capabilities:\n\n1. If native `open_in_codex` is available, immediately call it directly with\n `{ target: { type: \"browser\", url: launch_url } }`.\n Do not provide `threadId`; the browser belongs in the invoking Codex task.\n Prefer this host-aware path because it preserves localhost port forwarding\n for controllers running in remote SSH workspaces.\n2. Otherwise, if `browser:control-in-app-browser` is listed, read and follow that\n skill to connect to the invoking task's in-app browser. Use its explicit\n in-app selector, never a default, URL-selected, Chrome, or extension browser.\n A listed skill alone is not proof of a usable connection: if its required\n tool or in-app connection is unavailable before navigation, treat this path\n as unavailable and continue to step 3. Once connected, open `launch_url`,\n make the browser visible, and mark the controller tab as a deliverable so\n it stays open after the turn. Verify that the controller page loaded before\n reporting success. A missing `open_in_codex` tool does not mean the in-app\n browser is unavailable.\n3. In both Codex Desktop and Codex CLI, when neither in-app path is available and\n the user has not explicitly requested the in-app browser, open the system\n browser with `open \"$launch_url\"` on macOS or `xdg-open \"$launch_url\"` on Linux\n and verify the command exits successfully.\n\nIf the native call exists but fails, or opening through a connected in-app\nBrowser fails, report that the controller could not be opened and provide the\nclickable link described below; do not fall back to an external browser.\nIf the user explicitly requested an unavailable in-app browser, report that\nlimitation and provide the link without opening a system browser.\n\nA native response with `status: \"queued\"` is a successful handoff, not proof that\nthe browser tab appeared. Do not retry or switch browsers after a queued response.\n\nAfter the browser handoff and observer startup checks, give a brief status and\nalways include a clickable Markdown link labeled `Open Codex Replay`, with the\nexact returned `launch_url` as its target, then stop. Include the link even when\nopening reports success, so the user can recover if the browser does not appear.\nFor a queued handoff, say that the controller is ready, not that the browser\nopened. If the chosen browser cannot be opened, report that the controller could\nnot be opened automatically, provide the same link, and leave the observers\nrunning.\nIf controller preparation failed without returning a `launch_url`, report the\nfailure without inventing a link.\n\nDo not perform Replay workflow steps in chat; the browser controller owns them.\n\nIf the installed MCP tool or required metrics scripts are unavailable, ask the\nuser to start a new task after reinstalling or enabling the plugin.\n""---\nname: codex-replay\ndescription: Open an independent Codex Replay controller in the Codex in-app browser, or the system browser when no in-app opening path is available. Use whenever this plugin is invoked or the user asks to browse, configure, run, or review a replay. The browser controller owns the entire workflow; do not conduct it in chat.\n---\n\n# Codex Replay\n\nResolve the installed plugin root from this skill's location (two directories\nabove the directory containing `SKILL.md`). Before the first observer batch,\nrun this once as its own direct unified-exec call and retain its output as\n`controller_session_id`:\n\n```text\npython3 -c 'import secrets; print(secrets.token_hex(16))'\n```\n\nValidate that the output contains exactly 32 lowercase hexadecimal characters.\nUse that same ID for every observer and for MCP; do not let an observer or the\ncontroller allocate a replacement.\n\nDispatch the following in one parallel batch, each as its own direct unified-exec\ncall. Use `yield_time_ms: 250` for script 1 and `yield_time_ms: 1000` for\nscripts 2 through 4. If parallel calls are unavailable, dispatch sequentially\nwithout waiting for long-lived observers to exit.\n\n```text\npython3 <absolute-plugin-root>/scripts/metrics/1_probe_metrics.py\npython3 <absolute-plugin-root>/scripts/metrics/2_start_controller.py --controller-session-id <controller-session-id>\npython3 <absolute-plugin-root>/scripts/metrics/3_report_start_metrics.py --controller-session-id <controller-session-id>\npython3 <absolute-plugin-root>/scripts/metrics/4_report_final_metrics.py --controller-session-id <controller-session-id>\n```\n\nScript 1 exits. Scripts 2 through 4 are observers; do not wait for them to exit.\n\nDo not combine scripts, use shell backgrounding, retry observers, or set\n`CODEX_PLUGIN_METRICS_OUTPUT` yourself. Each script needs its own host-created\nsidecar. Missing analytics or an observer error never blocks controller launch or\nbrowser use; local writes are not delivery acknowledgments.\n\nCall `mcp__codex_replay.open_controller` with only the shared\n`controller_session_id`. The MCP host environment selects the Codex executable.\nUse the MCP tool, not a\nshell launcher. If launch fails, report the limitation without inventing a new\nID, changing permissions, or stopping an existing process.\n\nOn success, immediately open the exact `launch_url`, including its access-token\nfragment. Do not strip, change, or separately repeat the token.\n`opened: false` means the controller is prepared, not that a browser opened.\nChoose the opening path by available in-app browser capabilities:\n\n1. If native `open_in_codex` is available, immediately call it directly with\n `{ target: { type: \"browser\", url: launch_url } }`.\n Do not provide `threadId`; the browser belongs in the invoking Codex task.\n Prefer this host-aware path because it preserves localhost port forwarding\n for controllers running in remote SSH workspaces.\n2. Otherwise, if `browser:control-in-app-browser` is listed, read and follow that\n skill to connect to the invoking task's in-app browser. Use its explicit\n in-app selector, never a default, URL-selected, Chrome, or extension browser.\n A listed skill alone is not proof of a usable connection: if its required\n tool or in-app connection is unavailable before navigation, treat this path\n as unavailable and continue to step 3. Once connected, open `launch_url`,\n make the browser visible, and mark the controller tab as a deliverable so\n it stays open after the turn. Verify that the controller page loaded before\n reporting success. A missing `open_in_codex` tool does not mean the in-app\n browser is unavailable.\n3. In both Codex Desktop and Codex CLI, when neither in-app path is available and\n the user has not explicitly requested the in-app browser, open the system\n browser with `open \"$launch_url\"` on macOS or `xdg-open \"$launch_url\"` on Linux\n and verify the command exits successfully.\n\nIf the native call exists but fails, or opening through a connected in-app\nBrowser fails, report that the controller could not be opened and provide the\nclickable link described below; do not fall back to an external browser.\nIf the user explicitly requested an unavailable in-app browser, report that\nlimitation and provide the link without opening a system browser.\n\nA native response with `status: \"queued\"` is a successful handoff, not proof that\nthe browser tab appeared. Do not retry or switch browsers after a queued response.\n\nAfter the browser handoff and observer startup checks, give a brief status and\nalways include a clickable Markdown link labeled `Open Codex Replay`, with the\nexact returned `launch_url` as its target, then stop. Include the link even when\nopening reports success, so the user can recover if the browser does not appear.\nFor a queued handoff, say that the controller is ready, not that the browser\nopened. If the chosen browser cannot be opened, report that the controller could\nnot be opened automatically, provide the same link, and leave the observers\nrunning.\nIf controller preparation failed without returning a `launch_url`, report the\nfailure without inventing a link.\n\nDo not perform Replay workflow steps in chat; the browser controller owns them.\n\nIf the installed MCP tool or required metrics scripts are unavailable, ask the\nuser to start a new task after reinstalling or enabling the plugin.\n"Full snapshot data
{
"description": "Open an independent Codex Replay controller in the Codex in-app browser, or the system browser when no in-app opening path is available. Use whenever this plugin is invoked or the user asks to browse, configure, run, or review a replay. The browser controller owns the entire workflow; do not conduct it in chat.",
"included_files": [
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 315
}
],
"name": "codex-replay",
"skill_md_contents": "---\nname: codex-replay\ndescription: Open an independent Codex Replay controller in the Codex in-app browser, or the system browser when no in-app opening path is available. Use whenever this plugin is invoked or the user asks to browse, configure, run, or review a replay. The browser controller owns the entire workflow; do not conduct it in chat.\n---\n\n# Codex Replay\n\nResolve the installed plugin root from this skill's location (two directories\nabove the directory containing `SKILL.md`). Before the first observer batch,\nrun this once as its own direct unified-exec call and retain its output as\n`controller_session_id`:\n\n```text\npython3 -c 'import secrets; print(secrets.token_hex(16))'\n```\n\nValidate that the output contains exactly 32 lowercase hexadecimal characters.\nUse that same ID for every observer and for MCP; do not let an observer or the\ncontroller allocate a replacement.\n\nDispatch the following in one parallel batch, each as its own direct unified-exec\ncall. Use `yield_time_ms: 250` for script 1 and `yield_time_ms: 1000` for\nscripts 2 through 4. If parallel calls are unavailable, dispatch sequentially\nwithout waiting for long-lived observers to exit.\n\n```text\npython3 <absolute-plugin-root>/scripts/metrics/1_probe_metrics.py\npython3 <absolute-plugin-root>/scripts/metrics/2_start_controller.py --controller-session-id <controller-session-id>\npython3 <absolute-plugin-root>/scripts/metrics/3_report_start_metrics.py --controller-session-id <controller-session-id>\npython3 <absolute-plugin-root>/scripts/metrics/4_report_final_metrics.py --controller-session-id <controller-session-id>\n```\n\nScript 1 exits. Scripts 2 through 4 are observers; do not wait for them to exit.\n\nDo not combine scripts, use shell backgrounding, retry observers, or set\n`CODEX_PLUGIN_METRICS_OUTPUT` yourself. Each script needs its own host-created\nsidecar. Missing analytics or an observer error never blocks controller launch or\nbrowser use; local writes are not delivery acknowledgments.\n\nCall `mcp__codex_replay.open_controller` with only the shared\n`controller_session_id`. The MCP host environment selects the Codex executable.\nUse the MCP tool, not a\nshell launcher. If launch fails, report the limitation without inventing a new\nID, changing permissions, or stopping an existing process.\n\nOn success, immediately open the exact `launch_url`, including its access-token\nfragment. Do not strip, change, or separately repeat the token.\n`opened: false` means the controller is prepared, not that a browser opened.\nChoose the opening path by available in-app browser capabilities:\n\n1. If native `open_in_codex` is available, immediately call it directly with\n `{ target: { type: \"browser\", url: launch_url } }`.\n Do not provide `threadId`; the browser belongs in the invoking Codex task.\n Prefer this host-aware path because it preserves localhost port forwarding\n for controllers running in remote SSH workspaces.\n2. Otherwise, if `browser:control-in-app-browser` is listed, read and follow that\n skill to connect to the invoking task's in-app browser. Use its explicit\n in-app selector, never a default, URL-selected, Chrome, or extension browser.\n A listed skill alone is not proof of a usable connection: if its required\n tool or in-app connection is unavailable before navigation, treat this path\n as unavailable and continue to step 3. Once connected, open `launch_url`,\n make the browser visible, and mark the controller tab as a deliverable so\n it stays open after the turn. Verify that the controller page loaded before\n reporting success. A missing `open_in_codex` tool does not mean the in-app\n browser is unavailable.\n3. In both Codex Desktop and Codex CLI, when neither in-app path is available and\n the user has not explicitly requested the in-app browser, open the system\n browser with `open \"$launch_url\"` on macOS or `xdg-open \"$launch_url\"` on Linux\n and verify the command exits successfully.\n\nIf the native call exists but fails, or opening through a connected in-app\nBrowser fails, report that the controller could not be opened and provide the\nclickable link described below; do not fall back to an external browser.\nIf the user explicitly requested an unavailable in-app browser, report that\nlimitation and provide the link without opening a system browser.\n\nA native response with `status: \"queued\"` is a successful handoff, not proof that\nthe browser tab appeared. Do not retry or switch browsers after a queued response.\n\nAfter the browser handoff and observer startup checks, give a brief status and\nalways include a clickable Markdown link labeled `Open Codex Replay`, with the\nexact returned `launch_url` as its target, then stop. Include the link even when\nopening reports success, so the user can recover if the browser does not appear.\nFor a queued handoff, say that the controller is ready, not that the browser\nopened. If the chosen browser cannot be opened, report that the controller could\nnot be opened automatically, provide the same link, and leave the observers\nrunning.\nIf controller preparation failed without returning a `launch_url`, report the\nfailure without inventing a link.\n\nDo not perform Replay workflow steps in chat; the browser controller owns them.\n\nIf the installed MCP tool or required metrics scripts are unavailable, ask the\nuser to start a new task after reinstalling or enabling the plugin.\n"
}SHA-256 of public snapshot: c4e6aa3840286e15b44cfc436df7e27425c435ecfdf90a634a8e86e3750a60e9