Skip to content

feat: bring Codex integration to parity with Claude Code - #155

Merged
arzafran merged 1 commit into
mainfrom
feat/139-codex-parity
Jul 20, 2026
Merged

feat: bring Codex integration to parity with Claude Code#155
arzafran merged 1 commit into
mainfrom
feat/139-codex-parity

Conversation

@arzafran

Copy link
Copy Markdown
Member

What this does

First half of #139: Codex gets the same treatment as Claude Code. Codex sessions now surface "Needs input" the moment Codex is waiting on you, clean up their status properly when a session dies without a clean stop (Ctrl+C included), and stop double-notifying — Codex users currently get two desktop notifications for the same event because the raw-terminal-notification suppression only recognized Claude Code sessions. Plus the same install front door: an "Install Codex Integration…" menu item and programa codex install-integration with diff-and-confirm.

Part of #139 (Codex half; the OpenCode half follows separately — its plugin-API research is done and it's unblocked).

Summary

  • Bug fix: OSC notification suppression generalized from agentPIDs["claude_code"] to a hasHookManagedAgent check (any hook-managed agent), both suppression sites.
  • codex-hook event parity: new notification (Needs-input status + attention-classified notification) and session-end (guaranteed PID/status/notification cleanup) events, mirrored from the Claude handlers and registered in the installed hooks payload. pre-tool-use deliberately not mirrored — Claude's verbose tool status is keyed to Claude-specific tool names and schemas; guessing Codex's vocabulary would be worse than omitting it.
  • Naming: codex install-integration / uninstall-integration become the primary commands (matching the claude convention from feat: install Claude Code integration from the menubar #154); the original install-hooks names keep working as aliases, with a test asserting byte-identical behavior.
  • Menubar: "Install Codex Integration…" opens a terminal pre-typed with the install command, same as the Claude item.
  • en + ja localization for the new menu string.

Test Plan

  • tests_v2/test_codex_install_integration.py 6/6 against the built CLI, no app required (fresh install incl. the two new events + config.toml flag, idempotent reinstall, user-hook preservation, symmetric uninstall, decline-untouched, legacy-alias equivalence)
  • Debug app build succeeds
  • CI green

- Fix duplicate desktop notifications for Codex sessions: OSC
  notification suppression keyed on agentPIDs[claude_code] only; now a
  hasHookManagedAgent check covers any hook-managed agent
- codex-hook gains notification (Needs input status + attention
  notification) and session-end (guaranteed PID/status/notification
  cleanup covering Ctrl+C where stop never fires); both registered in
  the installed hooks payload
- programa codex install-integration / uninstall-integration as the
  primary names matching the claude convention; install-hooks names
  remain as working aliases
- Install Codex Integration... menubar item mirroring the Claude one
- tests_v2/test_codex_install_integration.py: 6 tests incl. legacy
  alias equivalence

pre-tool-use intentionally not mirrored: Claude's verbose tool status
is keyed to Claude-specific tool names and payload schemas; adapting it
for Codex without knowledge of Codex's tool vocabulary would be
guesswork.

Verified: build green; all 6 CLI tests pass against the built binary.
@arzafran
arzafran merged commit 3e77be0 into main Jul 20, 2026
4 of 7 checks passed
@arzafran
arzafran deleted the feat/139-codex-parity branch July 20, 2026 20:27
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.

1 participant