diff --git a/src/agentseam/data/vendors/codex_cli.json b/src/agentseam/data/vendors/codex_cli.json
index e2f91ce..e22caa7 100644
--- a/src/agentseam/data/vendors/codex_cli.json
+++ b/src/agentseam/data/vendors/codex_cli.json
@@ -68,7 +68,7 @@
"loads_claude_plugins": {
"basis": "vendor-source",
"date": "2026-10-17",
- "test": "tests/test_claude_plugins.py::test_each_entry_records_the_discovery_row"
+ "test": "tests/test_claude_plugins.py::test_only_the_witnessed_agents_carry_a_witness"
},
"tools": {
"basis": "live-run-partial",
@@ -131,7 +131,8 @@
"loads": "yes",
"notes": "hooks from the manifest's hooks, else hooks/hooks.json; per-hook trust state unmeasured; an HSO deny needs a non-empty permissionDecisionReason and exit 2 needs non-empty stderr; Sync handlers only",
"payload": "Claude Code snake_case, Codex tool names",
- "source": "openai/codex@ce0323f codex-rs/exec-server-protocol/src/protocol.rs, codex-rs/core-plugins/src/loader.rs (org-plan discovery/2026-10-17-claude-plugin-compat.md)"
+ "source": "openai/codex@ce0323f codex-rs/exec-server-protocol/src/protocol.rs, codex-rs/core-plugins/src/loader.rs (org-plan discovery/2026-10-17-claude-plugin-compat.md)",
+ "witnessed": "guard (shell command) and gate (file write) refused by PreToolUse deny with its reason; codex-cli 0.163.0 on Windows 11, 2026-10-17; plugin installed by codex plugin marketplace add
then codex plugin add chock-witness@chock-local (org-plan witness/results/witness-codex-claude-plugin-2026-10-17.md at eb303f4)"
},
"needs_trust": true,
"tools": {
diff --git a/tests/test_claude_plugins.py b/tests/test_claude_plugins.py
index 4a797db..87b8a49 100644
--- a/tests/test_claude_plugins.py
+++ b/tests/test_claude_plugins.py
@@ -38,6 +38,18 @@
"witness/results/witness-copilot-cli-claude-plugin-2026-10-17.md",
"6516f57",
),
+ "codex_cli": (
+ "guard",
+ "gate",
+ "refused by PreToolUse deny with its reason",
+ "codex-cli 0.163.0",
+ "Windows 11",
+ "2026-10-17",
+ "codex plugin marketplace add ",
+ "codex plugin add chock-witness@chock-local",
+ "witness/results/witness-codex-claude-plugin-2026-10-17.md",
+ "eb303f4",
+ ),
}
#: (loads, hooks, deny_reply) per agent, as org-plan discovery/2026-10-17-claude-plugin-compat.md records them.
diff --git a/tools/recount/claude_plugins.json b/tools/recount/claude_plugins.json
index 1b86a31..4914648 100644
--- a/tools/recount/claude_plugins.json
+++ b/tools/recount/claude_plugins.json
@@ -43,7 +43,8 @@
"loads": "yes",
"notes": "hooks from the manifest's hooks, else hooks/hooks.json; per-hook trust state unmeasured; an HSO deny needs a non-empty permissionDecisionReason and exit 2 needs non-empty stderr; Sync handlers only",
"payload": "Claude Code snake_case, Codex tool names",
- "source": "openai/codex@ce0323f codex-rs/exec-server-protocol/src/protocol.rs, codex-rs/core-plugins/src/loader.rs (org-plan discovery/2026-10-17-claude-plugin-compat.md)"
+ "source": "openai/codex@ce0323f codex-rs/exec-server-protocol/src/protocol.rs, codex-rs/core-plugins/src/loader.rs (org-plan discovery/2026-10-17-claude-plugin-compat.md)",
+ "witnessed": "guard (shell command) and gate (file write) refused by PreToolUse deny with its reason; codex-cli 0.163.0 on Windows 11, 2026-10-17; plugin installed by codex plugin marketplace add then codex plugin add chock-witness@chock-local (org-plan witness/results/witness-codex-claude-plugin-2026-10-17.md at eb303f4)"
}
},
"cursor": {
diff --git a/tools/recount/sourced.py b/tools/recount/sourced.py
index 96116b6..ce841e0 100644
--- a/tools/recount/sourced.py
+++ b/tools/recount/sourced.py
@@ -26,8 +26,8 @@
#: Whether each agent loads a Claude Code plugin, transcribed from org-plan
#: discovery/2026-10-17-claude-plugin-compat.md (CC-1, read 2026-10-17); unknown and partial
-#: rows stay so. Grok (org-plan 25b9d9d) and vscode_copilot's Copilot CLI (org-plan 6516f57) add
-#: the owner's witness runs, from witness/results.
+#: rows stay so. Grok (org-plan 25b9d9d), vscode_copilot's Copilot CLI (org-plan 6516f57) and
+#: codex_cli (org-plan eb303f4) add the owner's witness runs, from witness/results.
with open(os.path.join(os.path.dirname(__file__), "claude_plugins.json"), encoding="utf-8") as _fh:
LOADS_CLAUDE_PLUGINS = json.load(_fh)
_CLAUDE_PLUGINS_READ = "2026-10-17"