ClawKit Logo
ClawKitReliability Toolkit

HTTP Proxy Broken After v2026.2.24 Update

v2026.2.24 Regression

Tracked in openclaw/openclaw#26207. A Telegram fix in v2026.2.24 accidentally replaces the global HTTP dispatcher with a bare Agent that ignores HTTP_PROXY / HTTPS_PROXY. All outbound requests fail in proxy-dependent environments. Multiple PRs address this: #26229, #26233, #26239, #26326.

You updated OpenClaw from 2026.2.23 to 2026.2.24. Everything was working. Now all outbound requests fail with "Connection error" or "fetch failed." Your proxy environment variables haven't changed. Rolling back to 2.23 fixes it immediately.

Next Step

Fix now, then reduce repeat incidents

If this issue keeps coming back, validate your setup in Doctor first, then harden your config.

What the Error Looks Like

After updating to 2026.2.24, you see these in gateway logs or agent output:

embedded run agent end: isError=true error=Connection error
Network request for 'deleteMyCommands' failed!
All models failed (1): anthropic/claude-opus-4-6: Connection error
[gateway] fetch failed: TypeError: fetch failed (cause: ConnectTimeoutError)
global undici dispatcher autoSelectFamily=true
Error: connect ETIMEDOUT — all outbound HTTPS requests timing out

The pattern: everything fails. Not just one provider or one channel — all outbound HTTPS requests timeout or fail. If you were on 2.23 yesterday and it worked, and today on 2.24 nothing works, this is almost certainly the regression.

Why This Happens

1

Telegram fix introduces setGlobalDispatcher

Issue #25682 fixed a Telegram connectivity problem by adding setGlobalDispatcher(new Agent({autoSelectFamily: true})) in the Telegram channel initialization code (~L1151 in the built bundle). This was meant to fix Telegram only, but Agent is process-global.

2

Bare Agent ignores proxy environment variables

Node's default global dispatcher (or the proxy-aware EnvHttpProxyAgent if configured) reads HTTP_PROXY and HTTPS_PROXY to route requests through your proxy. The bare Agent({}) does not. It connects directly, which times out or gets blocked in proxy-mandatory environments.

3

Process-wide blast radius

setGlobalDispatcher replaces the dispatcher for all fetch() calls in the entire Node process — not just the Telegram plugin. Every LLM API call, every webhook, every plugin download now bypasses the proxy and fails.

Confirm You Are Affected

Check your version
openclaw --version
# If output is 2026.2.24, you are affected

# Also check if proxy env vars are set
echo "HTTP_PROXY=$HTTP_PROXY"
echo "HTTPS_PROXY=$HTTPS_PROXY"

# Quick connectivity test through proxy
curl -x "$HTTPS_PROXY" https://api.anthropic.com/v1/messages -I 2>&1 | head -3

Diagnosis checklist:

curl through proxy works → proxy is fine, OpenClaw is the problem
Version is 2026.2.24 → you hit the regression
Was working on 2026.2.23 → confirms the version boundary
curl also fails → your proxy itself has an issue, not this bug

Fix A: Downgrade to v2026.2.23 (Immediate)

The fastest fix. Restores the working global dispatcher.

Downgrade and restart
npm install -g [email protected]
openclaw gateway restart
openclaw --version  # should show 2026.2.23

This is the recommended immediate fix. You lose whatever the 2.24 update added, but you get a working proxy back instantly. Upgrade again once a patched version is available.

Fix B: Upgrade to a Patched Version

Multiple PRs fix this regression by replacing the bare Agent with EnvHttpProxyAgent, which respects proxy environment variables:

Upgrade to latest (if fix is merged)
npm install -g openclaw@latest
openclaw gateway restart

# Verify the fix
openclaw --version
openclaw logs --tail 5 | grep -i dispatcher

Check the releases page to confirm the latest version includes the fix (look for mentions of PR #26229, #26233, or #26326).

Fix C: Environment Variable Workaround

If you can't change versions (e.g., managed deployment), you can force Node to use the proxy-aware dispatcher by setting an undici environment variable before the gateway starts:

Force proxy-aware dispatcher
# In your systemd service file or docker-compose environment:
NODE_OPTIONS="--require=/path/to/proxy-fix.js"

# proxy-fix.js (create this file):
# const { EnvHttpProxyAgent, setGlobalDispatcher } = require('undici');
# setGlobalDispatcher(new EnvHttpProxyAgent());

This is a fragile workaround — it races against the Telegram plugin's setGlobalDispatcher. Depending on module loading order, the Telegram code may overwrite your fix. Downgrade (Fix A) or upgrade (Fix B) is strongly preferred.

Verify Proxy Is Working

LLM API calls succeed through proxy
openclaw chat "test" --max-turns 1

Expected: Agent responds normally — no "Connection error"

No dispatcher warnings in logs
openclaw logs --tail 50 | grep -i "dispatcher\|proxy\|connection error"

Expected: No errors. May see "using EnvHttpProxyAgent" on patched versions.

Telegram channel connects (if used)
openclaw doctor

Expected: Telegram channel shows healthy, no "fetch failed" errors

Still Stuck?

If you downgraded to 2.23 and still have connection errors, the proxy issue may be unrelated to this regression. Check:

Debug proxy connectivity
# Is the proxy reachable?
curl -x "$HTTPS_PROXY" https://httpbin.org/ip

# Is the proxy set in the gateway's environment?
# (If running via systemd, check the unit file)
systemctl show openclaw-gateway --property=Environment

# For Docker, check the container's env
docker exec openclaw-gateway env | grep -i proxy

Common gotcha: the proxy environment variables are set in your shell but not in the systemd service or Docker container environment. The gateway process needs the variables in its own environment, not just your login shell.

Run the Doctor

npx clawkit-doctor@latest

Checks proxy configuration, outbound connectivity, gateway version, and known regressions.

Did this guide solve your problem?