Skip to content

CM-62984 add codex cli support refactored#461

Merged
Ilanlido merged 4 commits into
mainfrom
CM-62984-add-codex-cli-support-refactored
May 27, 2026
Merged

CM-62984 add codex cli support refactored#461
Ilanlido merged 4 commits into
mainfrom
CM-62984-add-codex-cli-support-refactored

Conversation

@Ilanlido
Copy link
Copy Markdown
Collaborator

No description provided.

Ilanlido and others added 3 commits May 24, 2026 19:04
Move all IDE-specific code into one file per IDE under ides/, register
instances in ides/__init__.py::IDES, and route install / uninstall /
status / scan / session-start through the registry. Adding a new IDE
is now one new file plus one registry line.

Handlers return a canonical HookDecision; IDE.build_hook_response
translates to the per-IDE JSON response shape. Per-IDE config files,
response_builders.py, IDE_CONFIGS, per-IDE event mappings, and the
AIHookPayload classmethods are deleted in favor of the IDE class.

A parameterized IDE contract test gives every future agent the same
baseline coverage automatically.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Implements the Codex integration as a single-file agent on top of the
CM-64678 refactor: one `ides/codex.py` + one registry line gets the
SessionStart / UserPromptSubmit / PreToolUse:mcp hook surface plus
config.toml feature-flag management and plugin/MCP discovery.

Codex limitations (vs. Claude Code):

- No separate file-read hook. Codex performs file reads via Bash
  commands, so there's no `PreToolUse:Read` equivalent. This PR
  handles only `PreToolUse:mcp__.*`; scanning bash commands (the
  `COMMAND_EXEC` event type) is a planned follow-up.
- Codex's TOML `async: true` flag is unimplemented in its hooks
  engine, so we shell-background scan hooks with `&` in async mode
  (SessionStart stays sync so the conversation context is registered
  before scan hooks fire).

What lands here:

- `ides/codex.py`: hooks template, payload parsing, response builder
  mirroring Claude Code's shapes, and `[features] hooks = true` in
  `~/.codex/config.toml` via the new `post_install` lifecycle hook.
- `post_install` / `post_uninstall` on the `IDE` ABC so IDE-specific
  side-effects (like Codex's TOML flag) don't leak into hooks_manager.
- `ides/_plugin_utils.py`: shared `walk_enabled_plugins` + `load_plugin_json`
  used by both Claude Code and Codex plugin resolution. Codex walks
  `[plugins."<name>@<marketplace>"]` entries, reads
  `~/.codex/plugins/cache/<m>/<p>/<hash>/.codex-plugin/plugin.json`,
  and merges contributed MCP servers into the session inventory.
- `scan/handlers.py`: shared `_handle_arg_scan` helper so future
  COMMAND_EXEC support slots in next to MCP_EXECUTION without
  duplicating the scan-and-decide flow.
- `decode_jwt_unverified` moved into `cycode/cli/utils/jwt_utils.py`
  (used to read the `email` claim from Codex's `auth.json`).

Piggybacks fixes that overlap the same files:

- CM-64796: SessionStart matcher set to `startup|clear` on both Claude
  Code and Codex so `/clear` re-fires session-start (conversation_id
  rotates and otherwise telemetry would post under the stale id).
- hooks_manager install/uninstall now strip Cycode hooks surgically
  from each entry instead of dropping the whole entry. Preserves
  user-authored hooks co-located with Cycode ones (regression tests
  added).

Adds `tomli-w` (always) + `tomli` (py<3.11 only) for TOML handling.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Comment thread cycode/cli/utils/jwt_utils.py
avishaiamiel
avishaiamiel previously approved these changes May 27, 2026
Comment thread cycode/cli/apps/ai_guardrails/ides/_plugin_utils.py
Comment thread cycode/cli/apps/ai_guardrails/ides/_plugin_utils.py
Comment thread cycode/cli/apps/ai_guardrails/ides/codex.py Outdated
`extra={'path': ...}` doesn't render under the default Python formatter
that cycode-cli uses; the positional `'msg, %s', {'path': ...}` form
already used in zip_documents / file_excluder / commit_range_documents
does. Migrates the AI-guardrails IDE loaders (Cursor, Claude Code,
Codex) and the shared plugin JSON loader to match.

Also adds path context to a couple of exception logs that previously
discarded it.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Comment thread cycode/cli/apps/ai_guardrails/ides/codex.py
Comment thread cycode/cli/apps/ai_guardrails/ides/claude_code.py
@omerr-cycode
Copy link
Copy Markdown
Collaborator

@RoniCycode let me know if all your comments can be closed

@Ilanlido Ilanlido merged commit 3d15222 into main May 27, 2026
28 checks passed
@Ilanlido Ilanlido deleted the CM-62984-add-codex-cli-support-refactored branch May 27, 2026 13:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants