oh-my-codex v0.5.1
This patch release delivers a major hardening wave across the team/claim lifecycle, four security fixes, native git worktree orchestration for team workers, the new omx ralph CLI subcommand, and dozens of targeted bug fixes accumulated since v0.5.0.
Highlights
omx ralph CLI Subcommand
Start a ralph persistence loop directly from your terminal:
omx ralph "implement the auth module"
No more manually invoking $ralph inside a running session — the CLI now handles it end-to-end (closes #153).
Native Worktree Orchestration for Team Mode
Team workers now launch in isolated git worktrees with canonical state-root metadata. Each worker operates in its own worktree, preventing file-level conflicts between parallel agents. The leader and all workers share a consistent view of team state via cross-worktree state resolution in MCP tools and the notify hook.
Security Hardening (4 CVEs mitigated)
- Command injection in
capturePaneContent(closes #156) - Command injection in notifier via exec string interpolation (closes #157)
- Stale/reused PID risk in reply-listener (closes #158)
- Path traversal in MCP state/team tool identifiers (closes #159)
Team/Claim Lifecycle — 15 fixes
The task claim protocol is now substantially hardened: ghost workers rejected, lease expiry enforced, terminal regressions blocked, duplicate events eliminated, and lifecycle field mutations gated behind claim tokens.
What's Changed
Added
- Native worktree orchestration for team mode — Workers launch in git worktrees with canonical state-root metadata for true parallel isolation.
- Cross-worktree team state resolution — MCP state tools and notify hook resolve team state across worktrees.
omx ralphCLI subcommand —omx ralph "<task>"starts ralph from the command line (closes #153).- Scoped ralph state with canonical persistence migration — Session-scoped state with automatic migration from legacy flat paths.
- Claim-safe team transition MCP tool —
team_transition_taskapplies transitions atomically with claim-token verification. - Clean tmux pane output before notifications — ANSI escapes and tmux artifacts stripped before sending.
- Startup codebase map injection hook — Lightweight file-tree snapshot injected at session start (closes #136).
Changed
notify-hook.jsrefactored into layered sub-modules — Split into event routing, tmux integration, and notification dispatch modules (closes #177).ralplandefaults to non-interactive mode — Pass--interactiveto restore prompt-gated flow (closes #144).- Removed
/researchskill — Use$scientistor$external-contextinstead (closes #148).
Fixed
Security
- Command injection in
capturePaneContent→ safe arg arrays (closes #156) - Command injection in notifier →
execFile+ args (closes #157) - Stale PID risk in reply-listener → process identity verification (closes #158)
- Path traversal in MCP identifiers → input normalization (closes #159)
- Untracked files excluded from codebase map to prevent leakage
Team / Claim Lifecycle
- Claim lease expiry enforced in transition/release flows (closes #176)
- Duplicate
task_completedevents eliminated (closes #161) claimTaskreturnstask_not_foundfor missing tasks (closes #167)- Claims on completed/failed tasks rejected upfront (closes #160)
- Ghost worker IDs rejected in
claimTask(closes #179) - Terminal → non-terminal status regressions blocked
- In-progress claim takeover prevented when
expected_versionomitted (closes #173) releaseTaskClaimno longer reopens terminal tasks (closes #174)task_failedemitted instead ofworker_stoppedon failure (closes #171)team_update_taskrejects lifecycle mutations without claim token (closes #172)updateTaskpayload validation added (closes #163)team_leader_nudgeadded toteam_append_eventschema enum (closes #175)- Canonical session names in
getTeamTmuxSessions(closes #170)
Worktree / CLI
--worktree <name>space-separated form consumed correctly (closes #203)- Orphan
--modelflag dropped from worker argv (closes #162) spawnSyncsleep →Atomics.waitfor reliability (closes #164)
Hooks / tmux
- Copy-mode scroll and clipboard copy in
xhigh/madmaxsessions (closes #206) - Thin orchestrator restored in
notify-hook.js(closes #205)
Dependencies
ajvpinned to>=8.18.0,honoto>=4.11.10via npm overrides
Performance
listTasksfile reads parallelized withPromise.all(closes #168)
Install / Upgrade
npm install -g oh-my-codex@0.5.1
omx setup # re-run to update skills and AGENTS.mdFull diff: v0.5.0...v0.5.1