feat(configure): add OpenAI Codex as a full configure-UI host#346
Merged
Conversation
Give the `mureo configure` web UI a third host, "codex", with full parity to "claude-code" and "claude-desktop": basic setup (MCP server + credential guard hook + skills), official-provider install/remove, the native↔official disable toggle, status detection, and bulk clear — all home-aware. Codex stores MCP servers in ~/.codex/config.toml (TOML, not JSON), so the existing JSON writers do not apply. New mureo/web/codex_mcp.py manages mureo-owned `[mcp_servers.<id>]` blocks as tagged regions (`# >>> mureo-mcp:<id> >>>` ... `# <<< <id> <<<`), the same philosophy as setup_codex.py: only the bytes between a region's markers are ever read or rewritten, so an operator's hand-edits, comments, and unrelated servers are preserved verbatim — no TOML library, no whole-file round-trip. It renders minimal TOML for our blocks, parses back only its own regions for the env toggle, guards against untagged-block duplicate-key conflicts, and writes atomically. Hosted_http (Meta) has no Codex connector, so it stays manual_required and native is never auto-disabled (no stranding), exactly as on the Claude hosts. Wiring: - host_paths/session: "codex" added to SUPPORTED_HOSTS; config.toml is both settings_path and mcp_registry_path; skills under ~/.codex/skills; credentials stay in the shared ~/.mureo store. - setup_actions: a codex branch at every host-dispatch site, plus a host-aware _registered_in_registry helper; codex DOES support PreToolUse hooks (unlike Desktop) so install/remove_auth_hook wire the home-aware codex guard. - status_collector: dispatch on a .toml suffix to read codex install/disable state. - setup_codex: install_codex_credential_guard gains a hooks_file override; new remove_codex_credential_guard (tag-scoped, preserves user hooks). - frontend: host picker + dashboard label + i18n (en/ja) for codex; Codex shows a "Meta official not available" note instead of a Claude-connector flow; the "Claude app" labels generalise to "AI agent". Tests: new test_web_codex_mcp.py and test_web_setup_actions_codex.py plus host_paths/setup_codex extensions cover the TOML writer (incl. a Windows backslash-command round-trip and seam-only blank-line collapse), the full install/provider/toggle/status/clear flow, and the hook remover. Claude-Session: https://claude.ai/code/session_011rAu94b1o1xWYZhARk1VmL
…disambiguate Claude Code vs Claude Desktop OpenAI Codex shares ~/.codex/config.toml across the CLI, IDE extension, AND the Codex desktop app (per OpenAI docs: "These settings also apply to the Codex CLI and IDE extension because the MCP configuration lives in config.toml"), so one mureo setup covers all three — the host label now lists "desktop app" too. Also disambiguate the two Claude hosts whose labels both said "desktop app": - "Claude Code (CLI, Desktop app)" -> "Claude Code — coding agent (CLI / IDE / app)" - "Claude Desktop app (Chat, Cowork)" -> "Claude Desktop — chat app (Chat / Cowork)" The credential-guard "(not available...)" note now names Claude Desktop (the chat app) explicitly — the hook IS available for Claude Code in every form (CLI / IDE / its desktop app), only the Claude Desktop chat app lacks a PreToolUse hook surface. en + ja; i18n parity + key-coverage verified. Claude-Session: https://claude.ai/code/session_011rAu94b1o1xWYZhARk1VmL
hyoshi
added a commit
that referenced
this pull request
Jun 27, 2026
#346 made Codex a full `mureo configure` host (parity with Claude Code / Desktop), but the user-facing docs still only walked through the Claude hosts. - getting-started.md: a "D. Auth in OpenAI Codex" walkthrough (setup codex + configure, noting the CLI / IDE / desktop app all share ~/.codex/config.toml) and a Codex row in the "Skill availability by host" table. - mcp-server.md: an "OpenAI Codex" client-config section (TOML [mcp_servers.mureo] block) alongside Claude Desktop / Cursor. Docs only. Claude-Session: https://claude.ai/code/session_011rAu94b1o1xWYZhARk1VmL
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.
Summary
Adds OpenAI Codex as a third
mureo configurehost with full parity toclaude-codeandclaude-desktop: basic setup (MCP server + credential guardhook + skills), official-provider install/remove, the native↔official disable
toggle, status detection, and bulk clear — all home-aware. Codex stores MCP
servers in
~/.codex/config.toml(TOML, not JSON), so the existing JSONwriters don't apply.
Design
New
mureo/web/codex_mcp.pymanages mureo-owned[mcp_servers.<id>]blocks astagged regions (
# >>> mureo-mcp:<id> >>>…# <<< <id> <<<), the samephilosophy as
setup_codex.py: only the bytes between a region's markers areread or rewritten, so an operator's hand-edits, comments, and unrelated servers
are preserved verbatim — no TOML library, no whole-file round-trip. It renders
minimal TOML for our blocks, parses back only its own regions for the env
toggle, guards against untagged-block duplicate-key conflicts, and writes
atomically. Hosted_http (Meta) has no Codex connector, so it stays
manual_requiredand native is never auto-disabled (no stranding), exactly ason the Claude hosts.
Wiring:
host_paths/session:"codex"added toSUPPORTED_HOSTS;config.tomlis both
settings_pathandmcp_registry_path; skills under~/.codex/skills; credentials stay in the shared~/.mureostore.setup_actions: a codex branch at every host-dispatch site, plus ahost-aware
_registered_in_registryhelper; Codex DOES support PreToolUsehooks (unlike Desktop) so install/remove_auth_hook wire the home-aware codex
guard.
status_collector: dispatch on a.tomlsuffix to read codexinstall/disable state.
setup_codex:install_codex_credential_guardgains ahooks_fileoverride; new
remove_codex_credential_guard(tag-scoped, preserves userhooks).
a "Meta official not available" note instead of a Claude-connector flow; the
"Claude app" labels generalise to "AI agent".
Test plan
test_web_codex_mcp.pyandtest_web_setup_actions_codex.pyplushost_paths/setup_codexextensions cover the TOML writer (incl. a Windowsbackslash-command round-trip and seam-only blank-line collapse), the full
install/provider/toggle/status/clear flow, and the hook remover.
ruff+blackclean onmureo/;mypy --strictclean on changedmodules;
node --checkon the changed JS; i18n en/ja parity + key coverage.(Python HIGH ×1, JS HIGH ×2 + LOW ×1) with regression tests.
https://claude.ai/code/session_011rAu94b1o1xWYZhARk1VmL