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
- Replace `omx team ralph <args>` with `omx team <args>`.
- If you actually want ralph behavior, run `omx ralph ...` as a separate command.
- 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
- Grep scripts and CI for 'team ralph' after upgrading.
- Delete the 'ralph' token when migrating; it is not silently ignored by design.
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
- ${AUTORESEARCH_DEPRECATION_MESSAGE}\n\n${AUTORESEARCH_HELP}
- ${EXPLORE_DEPRECATION_MESSAGE}\n\n${EXPLORE_HELP}
- Unknown adapt argument: ${arg}
- Unknown adapt target: ${target}. Supported targets: ${suppor
- Unknown adapt subcommand: ${subcommand}. Supported subcomman
AI-assisted analysis of Yeachan-Heo/oh-my-codex@3ad79a8a6f (2026-08-27).
Data as JSON: /api/errors/0a7f55381ceedd92.
Report an issue: GitHub.