nikivdev/code · error

codex app-server response timed out

Error message

codex app-server response timed out

What it means

codex_read_response waits for a JSON-RPC response with a specific id; when its deadline passes and codex_read_next_message reports TimedOut, this error is raised. It means codex never replied to the outstanding request within the allotted time, so the review step fails.

Source

Thrown at src/commit.rs:4744

            }
            Ok(CodexAppServerEvent::ReadError(err)) => bail!("failed to read from codex: {}", err),
            Ok(CodexAppServerEvent::Closed) => bail!("codex app-server closed stdout unexpectedly"),
            Err(RecvTimeoutError::Timeout) => continue,
            Err(RecvTimeoutError::Disconnected) => bail!("codex app-server reader disconnected"),
        }
    }
}

/// Read lines until a JSON-RPC response with the expected id arrives.
fn codex_read_response(
    rx: &std::sync::mpsc::Receiver<CodexAppServerEvent>,
    expected_id: u64,
    deadline: std::time::Instant,
) -> Result<serde_json::Value> {
    loop {
        let msg = match codex_read_next_message(rx, deadline)? {
            CodexReadOutcome::Message(msg) => msg,
            CodexReadOutcome::TimedOut => bail!("codex app-server response timed out"),
        };
        if msg.get("id").and_then(|id| id.as_u64()) == Some(expected_id) {
            if let Some(err) = msg.get("error") {
                bail!(
                    "codex error: {}",
                    err.get("message")
                        .and_then(|m| m.as_str())
                        .unwrap_or("unknown error")
                );
            }
            return Ok(msg);
        }
    }
}

fn codex_read_response_with_notifications<F>(
    rx: &std::sync::mpsc::Receiver<CodexAppServerEvent>,
    expected_id: u64,

View on GitHub (pinned to a747e741ae)

Solutions

  1. Increase the codex timeout/deadline configuration and retry.
  2. Check codex process health — it may be hung; restart it and rerun the command.
  3. Reduce the request size (smaller diff/prompt) so codex responds faster.
  4. Verify network/backend connectivity if codex proxies to a remote model.

Example fix

// before
codex_read_response(rx, expected_id, Instant::now() + Duration::from_secs(30))
// after: allow more time for slow reviews
codex_read_response(rx, expected_id, Instant::now() + Duration::from_secs(120))
Defensive patterns

Strategy: retry

Try / catch

match codex_read_response(rx, id, deadline) {
    Err(e) if e.to_string().contains("response timed out") => {
        // back off, optionally extend deadline, and retry the request
    }
    other => other?,
}

Prevention

When it happens

Trigger: Sending a JSON-RPC request to the codex app-server and waiting for the response with the expected id when no matching message arrives before the deadline.

Common situations: Codex hung on a large prompt/diff; backend model latency spike; codex busy or deadlocked; deadline configured too aggressively for slow machines/networks.

Understand the failure class

Background: Request timed out: what client-side request timeouts mean across libraries (Request timed out, TIMED_OUT, APITimeoutError) — this error's family across 39 libraries.

Related errors


AI-assisted analysis of nikivdev/code@a747e741ae (2026-09-01). Data as JSON: /api/errors/3b69e988035db454. Report an issue: GitHub.