CM-62984 add codex cli support refactored#461
Merged
Conversation
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>
…i-support-refactored
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>
avishaiamiel
previously approved these changes
May 27, 2026
RoniCycode
reviewed
May 27, 2026
`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>
Collaborator
|
@RoniCycode let me know if all your comments can be closed |
RoniCycode
approved these changes
May 27, 2026
omerr-cycode
approved these changes
May 27, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.