warpdotdev/warp · error

Failed to fetch images: {}

Error message

Failed to fetch images: {}

What it means

Reported by report_fatal_error when the async GraphQL request itself fails (Err from send_graphql_request) during `warp environment image list`. The underlying transport error is appended to the message ('Failed to fetch images: {err}'). This covers connection failures, timeouts, HTTP errors, and GraphQL protocol errors — as opposed to error 101 which covers error payloads inside a successful response.

Source

Thrown at app/src/ai/agent_sdk/environment.rs:182

                    if matches!(
                        global_options.output_format,
                        OutputFormat::Text | OutputFormat::Pretty
                    ) {
                        println!(
                            "All Warp dev images contain Python and Node. For more information, see: {}\n",
                            WARP_DEV_ENVIRONMENTS_REPO
                        );
                    }
                    output::print_list(image_infos, global_options.output_format);
                    ctx.terminate_app(warpui::platform::TerminationMode::ForceTerminate, None);
                }
                ListWarpDevImagesResult::UserFacingError(_) | ListWarpDevImagesResult::Unknown => {
                    super::report_fatal_error(anyhow::anyhow!("Failed to fetch images"), ctx);
                }
            },
            Err(err) => {
                super::report_fatal_error(anyhow::anyhow!("Failed to fetch images: {}", err), ctx);
            }
        });
    }

    fn list(&self, global_options: GlobalOptions, ctx: &mut ModelContext<Self>) {
        let initial_sync = UpdateManager::as_ref(ctx)
            .initial_load_complete()
            .with_timeout(WARP_DRIVE_SYNC_TIMEOUT);

        ctx.spawn(initial_sync, move |_, result, ctx| {
            if result.is_err() {
                super::report_fatal_error(
                    anyhow::anyhow!("Timed out waiting for Warp Drive to sync"),
                    ctx,
                );
                return;
            }

View on GitHub (pinned to e72fd7aacb)

Solutions

  1. Check network connectivity and DNS resolution for the configured server endpoint
  2. If using a local server, verify it is running and that SERVER_ROOT_URL/WS_SERVER_URL match its port (default 8080)
  3. Re-authenticate (log out and back in) in case the failure is an auth-transport error
  4. Retry after a short wait — transient 5xx and connection resets are the most common cause
  5. If a proxy is required, configure it for the CLI environment
Defensive patterns

Strategy: retry

Validate before calling

// Verify connectivity + endpoint before invoking the CLI
// curl -fsS --max-time 5 "$SERVER_ROOT_URL" -o /dev/null || echo "endpoint down"

Try / catch

// Transport errors arrive as Err from the spawned future — inspect them
ctx.spawn(fetch_images, move |_, result, ctx| match result {
    Ok(resp) => { /* handle payload */ },
    Err(err) => { /* classify: timeout vs auth vs 5xx, then retry or report */ },
});

Prevention

When it happens

Trigger: Executing `warp environment image list` with no network, an unreachable SERVER_ROOT_URL, a TLS failure, an HTTP 4xx/5xx from the server, or a malformed/unauthorized GraphQL response.

Common situations: Working offline or behind a proxy that blocks the server; WITH_LOCAL_SERVER=1 ./script/run against a warp-server that is not running or on a different port; corporate TLS interception; transient server 503s during deploys.

Related errors


AI-assisted analysis of warpdotdev/warp@e72fd7aacb (2026-08-16). Data as JSON: /api/errors/20bb6a10acd4ddc9. Report an issue: GitHub.