headroomlabs-ai/headroom · error · SystemExit

Error: 'omp' not found in PATH.

Error message

Error: 'omp' not found in PATH.

What it means

Thrown by `headroom wrap omp` when the Oh My Pi binary (`omp`) is not found via shutil.which. Unlike the openhands variant, `--prepare-only` here still writes the models.yml override before returning; the PATH check only applies to the launch path. On failure the command exits before building the launch env or injecting the durable models.yml redirect.

Solutions

  1. Install Oh My Pi: `npm install -g @oh-my-pi/pi-coding-agent`
  2. Ensure the npm global bin directory is on PATH (especially across nvm switches) and verify with `which omp`
  3. Retry `headroom wrap omp` once `omp --version` succeeds
  4. Use `headroom wrap omp --prepare-only` if you only want the models.yml endpoint override written without launching

Example fix

# before
headroom wrap omp -- -p "fix the bug"
# Error: 'omp' not found in PATH.

# after
npm install -g @oh-my-pi/pi-coding-agent
exec $SHELL  # reload PATH
headroom wrap omp -- -p "fix the bug"
Defensive patterns

Strategy: validation

Validate before calling

import shutil

if shutil.which("omp") is None:
    raise SystemExit("omp missing — install with `npm install -g @oh-my-pi/pi-coding-agent`")

Prevention

When it happens

Trigger: Running `headroom wrap omp` (interactive, `-p` print mode, or `--model opus`) when `omp` is not resolvable on PATH. Not raised with `--prepare-only`, which instead calls _inject_omp_models_override and returns.

Common situations: Oh My Pi not installed globally (`npm install -g @oh-my-pi/pi-coding-agent` never run); installed under a different Node version via nvm so the global bin is off PATH; CI containers without the tool.

Related errors


AI-assisted analysis of headroomlabs-ai/headroom@322425c43b (2026-08-15). Data as JSON: /api/errors/364973c19de294e7. Report an issue: GitHub.

Appendix: source

Thrown at headroom/cli/wrap.py:7766

    omp's other providers (OpenAI-direct, Gemini, ...) keep their normal
    endpoints; route those via your own custom provider in models.yml.

    \b
    Examples:
        headroom wrap omp                       # Start proxy + omp
        headroom wrap omp -- -p "fix the bug"   # omp in non-interactive print mode
        headroom wrap omp -- --model opus       # Pick a model (fuzzy match)
        headroom unwrap omp                     # Restore pre-wrap models.yml
    """
    if prepare_only:
        _inject_omp_models_override(port, _project_name_from_cwd())
        return

    omp_bin = shutil.which("omp")
    if not omp_bin:
        click.echo("Error: 'omp' not found in PATH.")
        click.echo("Install Oh My Pi: npm install -g @oh-my-pi/pi-coding-agent")
        raise SystemExit(1)

    env, env_vars_display = _build_omp_launch_env(
        port, os.environ, project=_project_name_from_cwd()
    )

    # Durable endpoint redirect (survives omp-spawned child sessions, which
    # re-read models.yml rather than inheriting a parent env) — same durable
    # wrap + backup + unwrap contract as the Codex config.toml injection.
    models_file, _ = _inject_omp_models_override(port, _project_name_from_cwd())
    click.echo(f"  models.yml override written: {models_file}")

    _launch_tool(
        binary=omp_bin,
        args=omp_args,
        env=env,
        port=port,
        no_proxy=no_proxy,
        tool_label="OMP",

View on GitHub (pinned to 322425c43b)