Files
oh-my-opencode/packages/omo-codex
YeonGyu-Kim e746dcf0d8 feat(omo-codex): mandate manual-QA-as-scenario + paired cleanup in ultrawork/ultragoal
Both the Codex ultrawork directive and the ultragoal skill now force the agent to actually invoke the real user-facing surface (HTTP via `curl -i`, terminal/TUI via `tmux new-session` + `send-keys` + `capture-pane`, GUI via computer-use / Playwright, CLI stdout, DB diff) instead of treating evidence as a free-form artifact list. A paired CLEANUP step requires teardown of every QA-spawned process, tmux session, browser context, container, bound port, temp file/dir, and QA-only env var, with a one-line cleanup receipt recorded next to the artifact path (ultrawork) or embedded in the `--evidence` string (ultragoal). Missing receipt keeps the criterion in_progress / records BLOCKED. New Stop rule: leftover state from QA means NOT done.

Regression tests in `components/ultrawork/hooks/ultrawork-hooks.test.mjs` pin SURFACE-AS-SCENARIO, the concrete `curl -i` / `tmux new-session` / `computer-use / Playwright` invocations, the paired CLEANUP block with cleanup receipt + `tmux kill-session`, and the leftover-state Stop rule so the mandates cannot be silently regressed. README and CHANGELOGs refreshed; stale 5,821-char claim replaced with measured 10,037 chars / 213 lines. All 9 ultrawork hook tests + 7 aggregate tests pass.
2026-05-28 13:58:12 +09:00
..

@oh-my-opencode/omo-codex

Codex harness adapter for oh-my-openagent. Brings the OMO experience (rules injection, comment checker, LSP MCP, ultrawork, ultragoal) into OpenAI Codex CLI through Codex's native plugin system.

Layout

Path Purpose
plugin/ Vendored Codex plugin namespace omo with 5 components. Shipped to the user via ~/.codex/plugins/cache/.
marketplace.json Codex marketplace manifest. Identifies omo as the single installable plugin.
scripts/ Node ESM build scripts (port of the original codex-plugins/scripts/install-local.mjs).
src/ TypeScript runtime: installer + telemetry consumed by the omodex CLI.
MARKETPLACE.md Vendored upstream marketplace README.

Components Vendored

  • rules (TypeScript) - injects AGENTS.md / CLAUDE.md / .omo/rules/** into context via SessionStart, UserPromptSubmit, PostToolUse, PostCompact.
  • comment-checker (TypeScript) - runs @code-yeongyu/comment-checker after apply_patch / edit / write tool use.
  • lsp (TypeScript + LSP MCP) - exposes LSP diagnostics, navigation, symbols, rename via MCP + post-edit hooks.
  • ultrawork (Python) - keyword detector (ulw / ultrawork) that injects the full ultrawork directive, plus a SessionStart hook that syncs bundled agent TOML files into CODEX_HOME/agents.
  • ultragoal (TypeScript) - durable multi-goal orchestration backed by .omo/ultragoal/ evidence audit.

Install

End users invoke through the omodex CLI:

bunx omo install --codex=yes
# or, equivalently:
bunx oh-my-opencode install --codex=yes
bunx oh-my-openagent install --codex=yes

The installer copies the built plugin into ~/.codex/plugins/cache/code-yeongyu-codex-plugins/omo/<version>/, enables it in ~/.codex/config.toml, and links the per-component binaries into ~/.local/bin/ (or CODEX_LOCAL_BIN_DIR).

Telemetry

Anonymous telemetry uses the same PostHog project as oh-my-openagent but emits the distinct event omo_codex_daily_active. The event is sent at most once per UTC day per machine from two sources:

Source Reason Trigger
install install_completed bunx omo install --codex=yes finishes (handled by src/cli/install-codex/install-codex.ts)
plugin session_start Codex plugin SessionStart hook fires (handled by plugin/components/telemetry/)

Both sources share the same SHA256-hashed installation identifier (sha256("omo-codex:" + hostname)), suppress PostHog person profiles, and write the daily dedup state to ~/.local/share/omo-codex/posthog-activity.json.

Opt out with:

# Codex-only
export OMO_CODEX_DISABLE_POSTHOG=1
export OMO_CODEX_SEND_ANONYMOUS_TELEMETRY=0

# Globally (also disables oh-my-openagent telemetry)
export OMO_DISABLE_POSTHOG=1
export OMO_SEND_ANONYMOUS_TELEMETRY=0

The identity constants and opt-out behavior are pinned across both sources by src/telemetry/cross-package-equivalence.test.ts.

See /Users/yeongyu/local-workspaces/omodex/docs/legal/privacy-policy.md for the full disclosure.

Provenance

Vendored from code-yeongyu/codex-plugins at the snapshot present in /Users/yeongyu/local-workspaces/codex-plugins/ on 2026-05-25. Per-component upstream: