openclaw/openclaw · error · CatalogParamsError

Codex session is active on the paired node; wait for it to f

Error message

Codex session is active on the paired node; wait for it to finish before continuing

What it means

Thrown as CatalogParamsError by requireContinuableNodeRecord in session-catalog-node-continue.ts:226 when record.status === 'active', meaning the Codex session on the node is currently running a turn. Continuing would collide with the in-flight execution, so the guard rejects it.

Source

Thrown at extensions/codex/src/session-catalog-node-continue.ts:226

    cursor = nextCursor;
  }
  throw new CatalogParamsError("Codex session is unavailable on the paired node");
}

function requireContinuableNodeRecord(record: CodexSessionCatalogSession): void {
  if (record.archived) {
    throw new CatalogParamsError("Codex session is archived on the paired node");
  }
  if (!isInteractiveThreadSource(record.source)) {
    throw new CatalogParamsError("Codex session is not a non-archived interactive Codex session");
  }
  if (record.status === "idle" || record.status === "notLoaded") {
    // The node App Server is a passive catalog reader, so stored native Codex
    // sessions normally report notLoaded. Node resume serializes OpenClaw turns.
    return;
  }
  if (record.status === "active") {
    throw new CatalogParamsError(
      "Codex session is active on the paired node; wait for it to finish before continuing",
    );
  }
  throw new CatalogParamsError("Codex session cannot be continued in its current state");
}

async function readNodeCodexHistory(params: {
  runtime: PluginRuntime;
  nodeId: string;
  record: CodexSessionCatalogSession;
}): Promise<CodexNodeHistory> {
  const raw = await params.runtime.nodes.invoke({
    nodeId: params.nodeId,
    command: CODEX_APP_SERVER_THREAD_TURNS_LIST_COMMAND,
    params: {
      threadId: params.record.threadId,
      limit: MAX_TRANSCRIPT_PAGE_LIMIT,
    },

View on GitHub (pinned to 01804a7531)

Solutions

  1. Wait for the in-flight turn on the node to finish (status returns to idle) and retry.
  2. Confirm no other client is driving the session on the node; close duplicate continuations.
  3. If the status is stale, refresh the catalog so the node reports the current status.
  4. As a last resort, interrupt the active turn on the node (via the node's own controls) before continuing.
Defensive patterns

Strategy: retry

Validate before calling

// Check status before continuing; only idle/notLoaded are continuable immediately.
if (record.status === 'active') {
  throw new Error('Session is active on the node; wait for the current turn to finish.');
}

Type guard

function isActivelyRunning(status: unknown): boolean {
  return status === 'active';
}

Prevention

When it happens

Trigger: The target thread is mid-turn on the node (a Codex turn is actively streaming/executing). Triggered when two clients or a UI race tries to continue the same active session, or the previous turn has not reached a terminal state.

Common situations: Another tab/client is running the session on the node; a long-running turn is still executing; the node's status refresh lags and reports active after completion.

Related errors


AI-assisted analysis of openclaw/openclaw@01804a7531 (2026-08-12). Data as JSON: /api/errors/d484a4ae6745e926. Report an issue: GitHub.