Yeachan-Heo/oh-my-codex · error

omx question cannot open a visible renderer because this pro

Error message

omx question cannot open a visible renderer because this process is outside an attached tmux pane and has no explicit tmux return bridge. Codex App/outside-tmux sessions need an attached tmux OMX CLI session or OMX_QUESTION_RETURN_PANE bridge. Run omx question from inside tmux.

What it means

launchQuestionRenderer chooses a strategy (inside-tmux, bridge via OMX_QUESTION_RETURN_PANE, etc.); when it computes 'unsupported' it throws this guidance message. It means the process is not inside an attached tmux pane AND no explicit return bridge env var is set, so there is no way to show the interactive UI and return focus afterwards — typical for Codex App or other non-tmux hosts.

Source

Thrown at src/question/renderer.ts:830

    sleepSync?: SleepSync;
    spawnDetachedRenderer?: SpawnDetachedRenderer;
  } = {},
): QuestionRendererState {
  const strategy = deps.strategy ?? resolveQuestionRendererStrategy(options.env ?? process.env, undefined, {
    cwd: options.cwd,
    sessionId: options.sessionId,
    platform: options.platform,
    stdinIsTTY: options.stdinIsTTY,
    stdoutIsTTY: options.stdoutIsTTY,
  });
  const execTmux = deps.execTmux ?? defaultExecTmux;
  const sleepImpl = deps.sleepSync ?? sleepSync;
  const spawnDetachedRenderer = deps.spawnDetachedRenderer ?? defaultSpawnDetachedRenderer;
  const launchedAt = options.nowIso ?? new Date().toISOString();
  const env = options.env ?? process.env;

  if (strategy === 'unsupported') {
    throw new Error(
      'omx question cannot open a visible renderer because this process is outside an attached tmux pane and has no explicit tmux return bridge. Codex App/outside-tmux sessions need an attached tmux OMX CLI session or OMX_QUESTION_RETURN_PANE bridge. Run omx question from inside tmux.',
    );
  }

  const returnTarget = resolveReturnTarget({
    cwd: options.cwd,
    env,
    sessionId: options.sessionId,
  });
  const commandArgs = buildQuestionUiTmuxArgs(options.recordPath, {
    cwd: options.cwd,
    env: options.env,
    sessionId: options.sessionId,
    returnTarget,
    underCmux: isRunningUnderCmux(env),
  });

  if (strategy === 'windows-psmux-shell-pane') {

View on GitHub (pinned to 3ad79a8a6f)

Solutions

  1. Run omx from inside an attached tmux session (tmux attach, then run omx question).
  2. Alternatively, set OMX_QUESTION_RETURN_PANE to a live tmux pane id (from `tmux display-message -p '#{pane_id}'`) to provide an explicit bridge.
  3. If headless/CI, use a non-interactive question mode instead of the tmux UI if available.

Example fix

# before
omx question   # run from a plain (non-tmux) terminal

# after
tmux
omx question
# or: OMX_QUESTION_RETURN_PANE=%42 omx question
Defensive patterns

Strategy: try-catch

Validate before calling

const insideTmux = !!process.env.TMUX;
const hasBridge = !!process.env.OMX_QUESTION_RETURN_PANE;
if (!insideTmux && !hasBridge) { /* use non-interactive mode instead of launchQuestionRenderer */ }

Try / catch

try { launchQuestionRenderer(opts); } catch (e) { if (e instanceof Error && /outside an attached tmux pane/.test(e.message)) { /* prompt via stdout / non-interactive path */ } else throw e; }

Prevention

When it happens

Trigger: Running omx question from a plain terminal (no TMUX env), from an IDE/Codex App integration, or a headless process, without setting the OMX_QUESTION_RETURN_PANE environment variable to an existing tmux pane id.

Common situations: Codex App / out-of-tmux sessions; CI jobs; users who detached from tmux but kept stale TMUX vars partially set.

Related errors


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