Yeachan-Heo/oh-my-codex · error · Error

Deprecated usage: `omx team ralph ...` has been removed. Use

Error message

Deprecated usage: `omx team ralph ...` has been removed. Use `omx team ...` or run `omx ralph ...` separately.

What it means

Hard deprecation guard: if the first token after `omx team` is 'ralph' (case-insensitive), the command refuses to run. The old `omx team ralph ...` spelling was removed; ralph is now invoked via `omx ralph ...` and team usage is directly `omx team ...`.

Source

Thrown at src/cli/team.ts:851

    ...(paneStatus.leader_pane_id ? { leader: paneStatus.leader_pane_id } : {}),
    ...(paneStatus.hud_pane_id ? { hud: paneStatus.hud_pane_id } : {}),
    ...paneStatus.worker_panes,
  })) {
    const modelCommand = paneStatus.sparkshell_commands[target];
    const command = modelInspect && modelCommand ? modelCommand : rawTmuxCaptureCommand(paneId, tailLines);
    console.log(`inspect_${target}: ${command}`);
  }
}

export function parseTeamArgs(args: string[], cwd: string = process.cwd()): ParsedTeamArgs {
  const tokens = [...args];
  let workerCount = 3;
  let agentType = 'executor';
  let explicitAgentType = false;
  let explicitWorkerCount = false;

  if (tokens[0]?.toLowerCase() === 'ralph') {
    throw new Error('Deprecated usage: `omx team ralph ...` has been removed. Use `omx team ...` or run `omx ralph ...` separately.');
  }

  const first = tokens[0] || '';
  const match = first.match(/^(\d+)(?::([a-z][a-z0-9-]*))?$/i);
  if (match) {
    const count = Number.parseInt(match[1], 10);
    if (!Number.isFinite(count) || count < MIN_WORKER_COUNT || count > DEFAULT_MAX_WORKERS) {
      throw new Error(`Invalid worker count "${match[1]}". Expected ${MIN_WORKER_COUNT}-${DEFAULT_MAX_WORKERS}.`);
    }
    workerCount = count;
    explicitWorkerCount = true;
    if (match[2]) {
      agentType = match[2];
      explicitAgentType = true;
    }
    tokens.shift();
  }

View on GitHub (pinned to 3ad79a8a6f)

Solutions

  1. Replace `omx team ralph <args>` with `omx team <args>`.
  2. If you actually want ralph behavior, run `omx ralph ...` as a separate command.
  3. Grep your scripts/aliases/CI config for 'team ralph' and update them.

Example fix

# before
omx team ralph 4:executor "fix tests"
# after
omx team 4:executor "fix tests"
Defensive patterns

Strategy: validation

Validate before calling

if (tokens[0]?.toLowerCase() === 'ralph') {
  tokens = tokens.slice(1); // or route to `omx ralph ...`
}

Type guard

const isDeprecatedRalphForm = (argv: string[]): boolean =>
  argv[0]?.toLowerCase() === 'ralph';

Try / catch

try { await teamCommand(tokens); } catch (e) {
  if (e instanceof Error && e.message.includes('has been removed')) { tokens = tokens.slice(1); await teamCommand(tokens); }
  else throw e;
}

Prevention

When it happens

Trigger: Running `omx team ralph 3` or any `omx team ralph ...` invocation, including from old scripts, shell history, or docs.

Common situations: Upgrading to a version where the subcommand was split out; stale aliases, wrapper scripts, CI pipelines, or muscle-memory invocations.

Related errors


AI-assisted analysis of Yeachan-Heo/oh-my-codex@3ad79a8a6f (2026-08-27). Data as JSON: /api/errors/0a7f55381ceedd92. Report an issue: GitHub.