# Atlas webfetch error: Request timed out

> Raise the timeout parameter and confirm the host is reachable: Atlas webfetch wraps the HTTP call in Effect.timeoutOrElse, which dies with Request timed out at the deadline.

Atlas webfetch dies with Request timed out because webfetch clamps the requested timeout to MAX_TIMEOUT and wraps the HTTP call in Effect.timeoutOrElse, which dies with that message when the deadline passes. The fix is to raise the timeout parameter, which is clamped to the tool's maximum, confirm the host is reachable from this machine because a proxy or firewall will stall the request, and fetch a lighter URL if the page is slow to render server-side.

## Symptom

The webfetch tool dies with: Request timed out. The call hangs for the configured duration and then fails, and no page content is returned to the session.

## Cause

Atlas webfetch clamps the requested timeout to MAX_TIMEOUT and wraps the HTTP call in Effect.timeoutOrElse, which dies with Request timed out once the deadline passes, whether the host is slow, unreachable, or blocked by a proxy.

## Fix

1. Raise the `timeout` parameter on the webfetch call; note that it is clamped to the tool's maximum, MAX_TIMEOUT.
2. Check that the host is reachable from this machine; a proxy or firewall will stall the request until the deadline passes.
3. Retry the call: the tool already falls back to an honest atlas User-Agent when Cloudflare returns a 403 challenge, so a challenge is not the same as a timeout.
4. Fetch a lighter URL if the page is slow to render server-side, so the response arrives before Effect.timeoutOrElse fires.

## Why does Atlas webfetch die with Request timed out

Atlas webfetch dies with Request timed out because webfetch clamps the requested timeout to MAX_TIMEOUT and wraps the HTTP call in Effect.timeoutOrElse. When the deadline passes in that 2026 code path, the effect dies with exactly that message instead of waiting indefinitely.

Request timed out is a deadline result, not a diagnosis of the remote server. Atlas webfetch never hangs forever: the HTTP call lives inside Effect.timeoutOrElse, so once the clamped deadline elapses the call is torn down and the message is surfaced to the session. Three ordinary situations produce it. The host is genuinely unreachable from this machine. A proxy or firewall is swallowing the connection and never answering. Or the page is slow to render server-side and simply needs longer than the deadline allowed. The error text is identical in all three cases, which is why the fix starts with reachability rather than with the timeout value.

## How to raise the timeout for Atlas webfetch

Raise the `timeout` parameter on the Atlas webfetch call to give a slow host more room before Effect.timeoutOrElse fires. Note 1 caveat: webfetch clamps the requested timeout to MAX_TIMEOUT, so any value above the tool's maximum is silently reduced rather than honored, and pushing past that ceiling changes nothing.

A higher timeout is the correct fix when you know the host answers, just slowly, for example an endpoint that generates a report on demand or a page that renders server-side before responding. Set the timeout parameter on the webfetch call and retry. Because the value is clamped to MAX_TIMEOUT, there is a ceiling past which raising the number changes nothing. If you have already reached the clamp and the call still dies with Request timed out, stop raising it: the remaining causes are reachability and page weight, and neither is solved by waiting longer.

## How to check whether a proxy or firewall is causing the Atlas timeout

Check that the host is reachable from this machine before touching the Atlas timeout parameter, because a proxy or firewall will stall the request until Effect.timeoutOrElse dies with Request timed out. A blocked connection and a slow server produce 1 identical message, so test reachability first.

Corporate proxies, split-tunnel VPNs, and egress firewalls are the most common source of a webfetch timeout on a machine where the same URL loads fine in a browser. Confirm reachability from the same shell that launched Atlas, not from a different network context. If the connection never completes there, the timeout parameter is irrelevant and the fix belongs in your network configuration. Keep in mind that every Atlas tool call is permission-gated against allow, ask, and deny rules before it runs, so a call that reached the timeout has already been approved. The failure is on the wire, not in the permission layer.

## Is a Cloudflare 403 challenge the same as an Atlas webfetch timeout

A Cloudflare 403 challenge is not the same as an Atlas webfetch timeout. Atlas webfetch already falls back to an honest atlas User-Agent when Cloudflare returns a 403 challenge, so a challenge produces its own response path, while Request timed out means the deadline in Effect.timeoutOrElse elapsed.

Treat the two failures separately. If you are seeing Request timed out, the request did not get an answer at all. A 403 challenge, by contrast, is an answer, and Atlas webfetch responds to it by retrying with an honest atlas User-Agent rather than by pretending to be a browser. That distinction matters when you are debugging a site behind a bot-protection layer, because the instinct to blame the challenge sends you down the wrong path. Retry the call first: a transient stall on a busy host often clears without any change to the timeout parameter at all.

## How to verify the Atlas webfetch timeout fix worked

Verify the Atlas webfetch timeout fix by re-running the call and watching for page content instead of Request timed out. A fetch that returns the body proves the request completed inside the deadline Effect.timeoutOrElse enforces. A Cloudflare 403 challenge is a different failure, and webfetch already falls back to an honest atlas User-Agent for that.

If the call still dies after you raised the timeout parameter to the clamp at MAX_TIMEOUT, the remaining fix is to fetch a lighter URL. Pages that render heavy server-side templates, run expensive queries per request, or assemble large dashboards can exceed any reasonable deadline. Point Atlas webfetch at a static page, an API route, or a smaller document that answers the same question. If even a trivially small URL on the same host times out, the host is not reachable from this machine and the problem is the proxy or firewall, not webfetch.

## FAQ

### how to fix Request timed out in Atlas webfetch

Raise the `timeout` parameter, which webfetch clamps to MAX_TIMEOUT, check that the host is reachable from this machine because a proxy or firewall will stall the request, and fetch a lighter URL if the page is slow to render server-side.

### what is the maximum timeout for the Atlas webfetch tool

Atlas webfetch clamps the requested timeout to MAX_TIMEOUT, so any value you pass above the tool's maximum is reduced to that ceiling rather than honored.

### why does Atlas webfetch time out on a URL that loads in my browser

A proxy or firewall will stall the request from the machine running Atlas even when the same URL loads in a browser on a different network path. Confirm the host is reachable from the shell that launched Atlas.

### does a Cloudflare 403 challenge cause the Atlas Request timed out error

No. Atlas webfetch falls back to an honest atlas User-Agent when Cloudflare returns a 403 challenge, so a challenge is not the same as a timeout. Request timed out means the deadline passed without any answer.

### should I retry an Atlas webfetch call that timed out

Yes, retry first. A transient stall on a busy host often clears on the next attempt, before you change the timeout parameter or the URL.

### what does Effect.timeoutOrElse do in Atlas webfetch

Atlas webfetch wraps the HTTP call in Effect.timeoutOrElse, which dies with Request timed out once the clamped deadline passes, so the tool fails cleanly instead of hanging forever.

---

Canonical HTML: https://runatlas.sh/resources/troubleshooting/webfetch-request-timed-out
Source of truth: aeo_pages row `/resources/troubleshooting/webfetch-request-timed-out` (segment: Troubleshooting) (this file is generated from it, never hand-edited).
Licence: Atlas is proprietary with a free core. It is not open source and there is no public source repository.
