
Start Codex stronger, then let OMX add better prompts, workflows, and runtime help when the work grows.
Website: https://yeachan-heo.github.io/oh-my-codex-website/
Docs: Getting Started · Agents · Skills · Integrations · Demo · OpenClaw guide
Community: Discord — shared OMX/community server for oh-my-codex and related tooling.
The official/original OMX project is this repository, Yeachan-Heo/oh-my-codex, and the official npm package for this project is oh-my-codex. Install this project with npm install -g oh-my-codex (or alongside Codex CLI as shown below).
Third-party projects or forks that use names such as “OMX v2” are not official continuations, replacements, or release lines for this repository unless this README or the docs explicitly say so. When in doubt, trust this repository and the oh-my-codex package as the official install target.
OMX is a workflow layer for OpenAI Codex CLI.
| 🚨 CAUTION — RECOMMENDED DEFAULT ONLY: macOS or Linux with Codex CLI. OMX is primarily designed and actively tuned for that path. Native Windows and Codex App are not the default experience, may break or behave inconsistently, and currently receive less support. |
It keeps Codex as the execution engine and makes it easier to:
- start a stronger Codex session by default
- run one consistent workflow from clarification to completion
- invoke the canonical default workflow with
$deep-interview,$ralplan, and$ultragoal - keep project guidance, plans, logs, and state in
.omx/
| Role | Name | GitHub |
|---|---|---|
| Creator & Lead | Yeachan Heo | @Yeachan-Heo |
| Maintainer | HaD0Yun | @HaD0Yun |
| Name | GitHub |
|---|---|
| Sigrid Jin | @sigridjineth |
| Name | GitHub |
|---|---|
| HaD0Yun | @HaD0Yun |
| Junho Yeo | @junhoyeo |
| JiHongKim98 | @JiHongKim98 |
| Lor | @gobylor |
| HyunjunJeon | @HyunjunJeon |
If you want the default OMX experience, start here:
Choose one install path. If Codex CLI is already installed (Homebrew, npm, or another supported method):
codex --version
npm install -g oh-my-codex
omx setup
omx --madmax --highIf you do not have Codex CLI yet and want npm to manage it:
npm install -g @openai/codex
npm install -g oh-my-codex
omx setupDo not run a combined npm install -g @openai/codex oh-my-codex over an existing Homebrew-owned codex binary such as /opt/homebrew/bin/codex; npm may fail with EEXIST when @openai/codex tries to create the same binary. OMX only needs a working, authenticated codex command on PATH; it does not require Codex to be installed through npm.
On a real oh-my-codex version bump, the global npm install now prints an explicit reminder instead of launching omx setup automatically. When you're ready, run omx setup manually or use omx update to check npm and then run the same setup refresh path.
OMX also checks for npm updates at launch on a throttled cadence and prompts before scheduling the update after the current session exits. Set OMX_AUTO_UPDATE=0 to disable the launch-time check, or set OMX_AUTO_UPDATE=defer to schedule the same deferred update without prompting.
Codex plugin install note: this repo also ships an official Codex plugin layout at plugins/oh-my-codex with marketplace metadata in .agents/plugins/marketplace.json. That plugin bundles the mirrored skill surface plus plugin-scoped companion metadata for official Codex lifecycle hooks, optional MCP compatibility servers, and apps. It is still not a replacement for npm install -g oh-my-codex plus omx setup: plugin-scoped hooks launch the installed omx CLI, legacy setup mode installs native agents and prompts, and plugin setup mode relies on plugin discovery for bundled skills while archiving/removing legacy OMX-managed prompts/native-agent TOMLs so stale role files cannot shadow plugin behavior.
Then work normally inside Codex:
$deep-interview "clarify the authentication change"
$ralplan "approve the auth plan and review tradeoffs"
$ultragoal "turn the approved plan into durable Codex goals"
That is the main path.
Before you treat the runtime as ready, run the quick-start smoke test below: omx doctor verifies the install shape, while omx exec proves the active Codex runtime can actually authenticate and complete a model call from the current environment.
Start OMX strongly, clarify first when needed, approve the plan, then use $ultragoal as the default durable completion wrapper. Use $team inside that execution path only when a specific Ultragoal story needs coordinated parallel work; use $ralph when you intentionally want a single-owner completion loop instead of a durable multi-goal run.
Use OMX if you already like Codex and want a better day-to-day runtime around it:
- a standard workflow built around
$deep-interview->$ralplan->$ultragoal - durable multi-goal handoffs with
$ultragoaland.omx/ultragoalartifacts as the default completion path after planning - specialist roles and supporting skills when the task needs them
- project guidance through scoped
AGENTS.md - durable state under
.omx/for plans, logs, memory, and mode tracking
If you want plain Codex with no extra workflow layer, you probably do not need OMX.
- Node.js 20+
- Codex CLI installed, verified with
codex --version, and authenticated (Homebrew or npm are both fine; do not reinstall@openai/codexwith npm if Homebrew already ownscodex) - Codex auth configured and visible in the same shell/profile that will run OMX
tmuxon macOS/Linux if you want the recommended durable team runtimepsmuxon native Windows only if you intentionally want the less-supported Windows team path
After install, check both boundaries:
omx doctor
codex login status
omx exec --skip-git-repo-check -C . "Reply with exactly OMX-EXEC-OK"omx doctor catches missing OMX files, hooks, and runtime prerequisites. The real smoke test catches auth, profile, and provider/base-URL problems that only appear when Codex performs an actual request.
Launch OMX the recommended way:
omx --madmax --highOn macOS/Linux interactive terminals with tmux available, this starts the
leader in OMX-managed detached tmux by default so the HUD/runtime panes can be
created and recovered.
If you want a one-off launch with no OMX tmux/HUD management, use --direct:
omx --direct --yoloFor a persistent shell/profile preference, set an environment policy:
OMX_LAUNCH_POLICY=direct omx --yoloReturn to the auto/default behavior with:
unset OMX_LAUNCH_POLICYCLI policy flags win over the environment, and the last CLI policy flag before
-- wins:
OMX_LAUNCH_POLICY=direct omx --tmux --yoloUse OMX_LAUNCH_POLICY=direct|tmux|detached-tmux|auto. This iteration only
adds CLI and environment controls; it intentionally does not add a config-file
setting. If you run --direct from inside an existing tmux pane, OMX will not
create HUD splits, enable mouse mode, or wrap extended-key handling, but the
process still runs inside that already-open terminal pane.
Then try the canonical workflow:
$deep-interview "clarify the authentication change"
$ralplan "approve the safest implementation path"
$ultragoal "turn the approved path into durable Codex goals"
Use $team when an active Ultragoal story needs coordinated parallel work, or $ralph when one persistent owner should keep pushing to completion without a multi-goal ledger.
OMX does not replace Codex.
It adds a better working layer around it:
- Codex does the actual agent work
- OMX role keywords make useful roles reusable
- OMX skills make common workflows reusable
.omx/stores plans, logs, memory, and runtime state
Most users should think of OMX as better task routing + better workflow + better runtime, not as a command surface to operate manually all day.
- If Codex CLI already exists, verify it with
codex --versionand install or update OMX withnpm install -g oh-my-codex; otherwise install@openai/codexseparately first if you want npm to manage Codex - After install or real OMX version bumps, run
omx setupyourself when you're ready, or useomx updatewhen you also want npm to check for and install the latest build before refreshing setup - Run
omx doctor - Run a real execution smoke test:
codex login statusandomx exec --skip-git-repo-check -C . "Reply with exactly OMX-EXEC-OK" - Launch with
omx --madmax --high - Use
$deep-interview "..."when the request or boundaries are still unclear - Use
$ralplan "..."to approve the plan and review tradeoffs - Use
$ultragoal "..."to turn the approved plan into durable goals and ledger checkpoints
$deep-interview— clarify scope when the request or boundaries are still vague.$ralplan— turn that clarified scope into an approved architecture and implementation plan.$ultragoal— make the approved plan durable as sequential Codex goals with.omx/ultragoalledger checkpoints.
Inside an Ultragoal story, use $team only when that story benefits from coordinated parallel execution. Use $ralph as an intentional alternate completion loop when you do not need a durable multi-goal ledger.
| Surface | Use it for |
|---|---|
$deep-interview "..." |
clarifying intent, boundaries, and non-goals |
$ralplan "..." |
approving the implementation plan and tradeoffs |
$ultragoal "..." |
durable multi-goal completion after the approved plan |
$ralph "..." |
persistent completion and verification loops |
$team "..." |
coordinated parallel execution when the work is big enough |
/skills |
browsing installed skills and supporting helpers |
These are useful, but they are not the main onboarding path.
Use the team runtime when you specifically need durable tmux/worktree coordination, not as the default way to begin using OMX. In Codex App or plain outside-tmux sessions, treat omx team as a tmux-runtime shell surface rather than a directly available in-app workflow; launch OMX CLI from shell first if you actually want team execution.
omx team 3:executor "fix the failing tests with verification"
omx team status <team-name>
omx team resume <team-name>
omx team shutdown <team-name>These are operator/support surfaces:
- Codex plugin marketplace install/discovery can cache the plugin under
${CODEX_HOME:-~/.codex}/plugins/cache/$MARKETPLACE_NAME/oh-my-codex/$VERSION/(local installs may uselocalas the version identifier); that packaged plugin includes plugin-scoped companion metadata for official Codex lifecycle hooks, optional MCP compatibility servers, and apps (MCP/apps disabled by default), so it is still paired with the installedomxCLI for runtime execution omx setupinstalls prompts, skills, AGENTS scaffolding,.codex/config.toml, and (for legacy installs or older Codex withoutplugin_hooks) OMX-managed native Codex hooks in.codex/hooks.json- setup refresh preserves non-OMX hook entries in
.codex/hooks.jsonand only rewrites OMX-managed wrappers omx setup --merge-agentspreserves existingAGENTS.mdguidance while inserting or refreshing generated OMX sections between<!-- OMX:AGENTS:START -->/<!-- OMX:AGENTS:END -->; without--merge-agentsor--force, non-interactive setup keeps skipping existingAGENTS.mdfilesomx uninstallremoves OMX-managed wrappers from.codex/hooks.jsonbut keeps the file when user hooks remain
- setup refresh preserves non-OMX hook entries in
omx updatechecks npm immediately, installs the newest global OMX build, then reruns the same interactive setup refresh path- launch-time update checks are throttled and prompt by default; use
OMX_AUTO_UPDATE=0to disable them orOMX_AUTO_UPDATE=deferto schedule deferred updates without a prompt - fresh OMX-managed
gpt-5.5config seeding now recommendsmodel_context_window = 250000andmodel_auto_compact_token_limit = 200000, but only when those keys are missing .omx-config.jsonmodel/env routing is documented in the model/env routing reference; only edit keys supported by your installed OMX versionomx doctorverifies the install when something seems wrong; it does not prove that the active Codex profile can make an authenticated model callomx hud --watchis a monitoring/status surface, not the primary user workflow
For non-team sessions, native Codex hooks are now the canonical lifecycle surface:
plugins/oh-my-codex/hooks/hooks.json= official plugin-scoped hook registrations for plugin installs.codex/hooks.json= legacy/fallback native Codex hook registrations preserved for legacy installs and older Codex versions.omx/hooks/*.mjs= OMX plugin hooksomx tmux-hook/ notify-hook / derived watcher = tmux + runtime fallback paths
See Codex native hook mapping for the current native / fallback matrix.
A green omx doctor means the install and local runtime wiring look sane. If real execution still fails, check the environment Codex actually uses:
- Run
codex login statusandomx exec --skip-git-repo-check -C . "Reply with exactly OMX-EXEC-OK"from the same shell/profile that will launch OMX. - In custom HOME, profile, container, or service shells, confirm the active
~/.codex(orCODEX_HOME) is the one with the expected auth and config. Do not assume your normal user~/.codexis visible there. - If you depend on a local OpenAI-compatible proxy, confirm the active
~/.codex/config.tomlincludes the expectedopenai_base_url; otherwise a proxy-issued key can be sent to the default endpoint and fail with401 Unauthorized,Missing bearer or basic authentication in header, orIncorrect API key provided. - If
omx doctor --teamor resume reports a stale team such asresume_blockeror a missing tmux session, clean the dead runtime state before retrying:
omx team shutdown <team-name> --force --confirm-issues
omx cancel
omx doctor --teamOnly use the forced team shutdown for a team you have confirmed is dead or intentionally abandoned.
If Shift+Enter still submits instead of inserting a newline inside an OMX-managed tmux session, see Troubleshooting execution readiness. Current OMX already enables tmux extended-key forwarding around its own Codex launch paths, so a persistent failure is usually a tmux terminal-capability/discoverability problem rather than a net-new OMX feature gap.
omx explore --prompt "..."is for read-only repository lookupomx sparkshell <command>is for shell-native inspection and bounded verification- when
omx_wiki/exists,omx explorecan inject wiki-first context before falling back to broader repository search - fallback boundaries are explicit: sparkshell-backend fallback is reported on stderr, and spark-model fallback emits stderr metadata plus an
## OMX Explore fallbacknotice in stdout so users can see when cost/behavior may differ from the low-cost path - sparkshell env overrides are intentionally narrow:
OMX_SPARKSHELL_BINselects a native sidecar path,OMX_SPARKSHELL_MODELselects the primary summary model,OMX_SPARKSHELL_FALLBACK_MODELselects the retry model,OMX_SPARKSHELL_MODEL_INSTRUCTIONS_FILEselects summary instructions, andOMX_SPARKSHELL_SUMMARY_TIMEOUT_MScontrols the local API summary timeout
Examples:
omx explore --prompt "find where team state is written"
omx sparkshell git status
omx sparkshell --tmux-pane %12 --tail-lines 400omx wikiis the CLI-first JSON surface for wiki operations;omx_wikiMCP is explicit compatibility only- wiki data lives as repository project knowledge under
omx_wiki/ - the wiki is markdown-first and search-first, not vector-first
Examples:
omx wiki list --json
omx wiki query --input '{"query":"session-start lifecycle"}' --json
omx wiki lint --json
omx wiki refresh --jsonomx team works best on macOS/Linux with tmux.
Native Windows remains a secondary path, and WSL2 is generally the better choice if you want a Windows-hosted setup.
On native Windows, OMX accepts psmux as the tmux-compatible binary for the existing tmux-backed paths it already uses.
| Platform | Install |
|---|---|
| macOS | brew install tmux |
| Ubuntu/Debian | sudo apt install tmux |
| Fedora | sudo dnf install tmux |
| Arch | sudo pacman -S tmux |
| Windows | winget install psmux |
| Windows (WSL2) | sudo apt install tmux |
On some Intel Macs, OMX startup — especially with --madmax --high — can spike syspolicyd / trustd CPU usage while macOS Gatekeeper validates many concurrent process launches.
If this happens, try:
xattr -dr com.apple.quarantine $(which omx)- adding your terminal app to the Developer Tools allowlist in macOS Security settings
- using lower concurrency (for example, avoid
--madmax --high)
- Getting Started
- Demo guide
- Wiki feature
- Agent catalog
- Skills reference
- Codex native hook mapping
- GitHub / PR / package identity pipeline
- Integrations
- Troubleshooting execution readiness
- OpenClaw / notification gateway guide
- Contributing
- Changelog
- English
- 한국어
- 日本語
- 简体中文
- 繁體中文
- Tiếng Việt
- Español
- Português
- Русский
- Türkçe
- Deutsch
- Français
- Italiano
- Ελληνικά
- Polski
- Українська
| Role | Name | GitHub |
|---|---|---|
| Creator & Lead | Yeachan Heo | @Yeachan-Heo |
| Maintainer | HaD0Yun | @HaD0Yun |
MIT