{"record":{"id":"0a7f55381ceedd92","repo":"Yeachan-Heo/oh-my-codex","slug":"deprecated-usage-omx-team-ralph-has-been-re","errorCode":null,"errorMessage":"Deprecated usage: `omx team ralph ...` has been removed. Use `omx team ...` or run `omx ralph ...` separately.","messagePattern":"Deprecated usage: `omx team ralph \\.\\.\\.` has been removed\\. Use `omx team \\.\\.\\.` or run `omx ralph \\.\\.\\.` separately\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/cli/team.ts","lineNumber":851,"sourceCode":"    ...(paneStatus.leader_pane_id ? { leader: paneStatus.leader_pane_id } : {}),\n    ...(paneStatus.hud_pane_id ? { hud: paneStatus.hud_pane_id } : {}),\n    ...paneStatus.worker_panes,\n  })) {\n    const modelCommand = paneStatus.sparkshell_commands[target];\n    const command = modelInspect && modelCommand ? modelCommand : rawTmuxCaptureCommand(paneId, tailLines);\n    console.log(`inspect_${target}: ${command}`);\n  }\n}\n\nexport function parseTeamArgs(args: string[], cwd: string = process.cwd()): ParsedTeamArgs {\n  const tokens = [...args];\n  let workerCount = 3;\n  let agentType = 'executor';\n  let explicitAgentType = false;\n  let explicitWorkerCount = false;\n\n  if (tokens[0]?.toLowerCase() === 'ralph') {\n    throw new Error('Deprecated usage: `omx team ralph ...` has been removed. Use `omx team ...` or run `omx ralph ...` separately.');\n  }\n\n  const first = tokens[0] || '';\n  const match = first.match(/^(\\d+)(?::([a-z][a-z0-9-]*))?$/i);\n  if (match) {\n    const count = Number.parseInt(match[1], 10);\n    if (!Number.isFinite(count) || count < MIN_WORKER_COUNT || count > DEFAULT_MAX_WORKERS) {\n      throw new Error(`Invalid worker count \"${match[1]}\". Expected ${MIN_WORKER_COUNT}-${DEFAULT_MAX_WORKERS}.`);\n    }\n    workerCount = count;\n    explicitWorkerCount = true;\n    if (match[2]) {\n      agentType = match[2];\n      explicitAgentType = true;\n    }\n    tokens.shift();\n  }\n","sourceCodeStart":833,"sourceCodeEnd":869,"githubUrl":"https://github.com/Yeachan-Heo/oh-my-codex/blob/3ad79a8a6fe6e95fdbb8c00e40716fffe4011ce2/src/cli/team.ts#L833-L869","documentation":"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 ...`.","triggerScenarios":"Running `omx team ralph 3` or any `omx team ralph ...` invocation, including from old scripts, shell history, or docs.","commonSituations":"Upgrading to a version where the subcommand was split out; stale aliases, wrapper scripts, CI pipelines, or muscle-memory invocations.","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."],"exampleFix":"# before\nomx team ralph 4:executor \"fix tests\"\n# after\nomx team 4:executor \"fix tests\"","handlingStrategy":"validation","validationCode":"if (tokens[0]?.toLowerCase() === 'ralph') {\n  tokens = tokens.slice(1); // or route to `omx ralph ...`\n}","typeGuard":"const isDeprecatedRalphForm = (argv: string[]): boolean =>\n  argv[0]?.toLowerCase() === 'ralph';","tryCatchPattern":"try { await teamCommand(tokens); } catch (e) {\n  if (e instanceof Error && e.message.includes('has been removed')) { tokens = tokens.slice(1); await teamCommand(tokens); }\n  else throw e;\n}","preventionTips":["Grep scripts and CI for 'team ralph' after upgrading.","Delete the 'ralph' token when migrating; it is not silently ignored by design."],"tags":["cli","deprecation","breaking-change"],"backgroundTag":"deprecated-cli-subcommand","analyzedSha":"3ad79a8a6fe6e95fdbb8c00e40716fffe4011ce2","analyzedAt":"2026-08-27T22:18:39.783Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}