The last30days skill reads Reddit, X, Hacker News, YouTube, Polymarket and the open web, then writes one grounded summary. Six sources, one run, and four different network lanes underneath. Setting a proxy variable reaches some of them. We read release v3.25.0 on 20 September 2026 and measured the lane that surprised us.
Four lanes, one setting
The Python half already obeys you
The project has no proxy setting. It does not need one for its own client.
Every Python source calls one shared module, and that module builds a single opener:
_opener = urllib.request.build_opener(_StripAuthOnCrossOriginRedirect)
The word proxy does not appear in that file. It does not have to. CPython's build_opener installs a proxy handler by default, and only drops a default when one of your own handlers replaces it. The handler passed here is a redirect handler, so the proxy handler stays. It then calls getproxies, which reads the environment and, on Windows, falls back to the system settings.
So HTTPS_PROXY routes Reddit, Hacker News and the page reads, without anyone writing a line for it.
The X lane needs a newer runtime
X is not read by that client. It runs in a separate Node process, and the project passes it a fixed list of environment variables. That list is careful. It carries both spellings of all three proxy variables, and it carries NODE_USE_ENV_PROXY as well.
That last one is the point. A Node runtime does not read the proxy variables by default. We tested it on this machine: we pointed the variables at a port where our own listener was waiting, then ran a child that calls fetch. Our listener received nothing, twice, and the request went straight out to the internet. With the flag and without it.
Node's own documentation explains why. The flag was added in 22.21.0 and 24.5.0. The runtime we measured is 22.19.0, just below the first of those. Our own production server runs 20.20.2, also below.
| Your Node version | What the proxy variables do |
|---|---|
| Below 22.21.0 | nothing, the X lane goes direct |
| 22.21.0 or newer on the 22 line | read, once NODE_USE_ENV_PROXY is set |
| 24.5.0 or newer | read, once NODE_USE_ENV_PROXY is set |
Check node -v before you conclude your proxy is broken. On an older runtime the Python sources will be routed and X will not, in the same run, from the same shell.
Two children, two allowlists
The second child process is a different story, and a deliberate one. It keeps five variables:
keep = ("PATH", "LANG", "LC_ALL", "TMPDIR", "SystemRoot")
No proxy variable, by design. That child runs with its permissions bypassed while its input is filled with text pulled off X, which is text a stranger wrote. The project strips the environment down to almost nothing and gives the child its own home directory. We would make the same trade. It does mean that lane can never use your address.
The lanes that are never yours
Two more places where an address does not do what people expect.
The keyless page reader is the floor tier for turning a URL into text. It sends the target URL to a hosted reader and that service fetches the page. Your line carries one short request. The site sees the reader, not you. Their own code says so plainly, warning that the target URL is sent to a third party and that the free tier returns cached snapshots. We wrote about that service's own proxy headers on our Jina Reader page, and the short version is that the free anonymous lane is the most rate limited one it has.
The live browser is a cookie source. It connects to a Chrome that is already running with debugging enabled and reads the X session pair. It does not fetch research pages. A proxy on that browser changes nothing about where the research traffic comes from.
There is also an optional paid source that shells out to a vendor's own command line tool. That tool logs in by itself and runs on the vendor's machines, so your address is not involved there either.
Where the address runs out
Reddit is the first source to push back, and the code documents exactly how.
An anonymous 429 from Reddit's search and feed endpoints arrives with x-ratelimit-reset and no Retry-After at all. The project reads both headers, which is right, because reading only the standard one means backing off three, five and nine seconds against a window that wants forty two. Their own comment puts it well: each retry meets another 429, the budget drains, and the source is reported dead when it was merely early.
The wait is capped at sixty seconds. Reddit's reset can say five hundred and forty. Past the cap the tool stops waiting and the source fails.
That is a clean argument for a second address rather than a better retry. The retry logic is already correct. What it runs out of is windows, and a window belongs to an address.
Which proxy type fits it?
Residential, for the sources that treat a hosting address differently. Our own test is the size of that effect: 4 of 13 answers changed between a server address and a residential one, with plain requests of exactly the kind this tool sends.
Two notes for this skill. It reads text, not media, so a per gigabyte line goes a long way: search endpoints, feeds and markdown page reads are small. And on a server an allowed address is simpler than a login in the environment, because there is nothing to leak into a child process: on a Residential Premium plan your machine's address can be allowed, up to 150 per plan.
One honest limit. Every request carries a user agent that names the tool. That is the right default, and it means a site refusing this client by name will refuse it from any address you buy. A proxy buys you windows and geography, not anonymity. The residential proxies page lists the plans, and the plan API manages allowed addresses from code.
What breaks
- Some sources are routed and X is not. Check
node -v. Below 22.21.0 that lane has no proxy support to switch on. - You set the flag and nothing changed. The flag needs the runtime as well. It does nothing on its own.
- A page read shows somebody else's address. That is the keyless tier. A hosted reader fetched the page.
- Reddit comes back empty after a minute. The reset window was longer than the cap, so the source failed rather than waiting.
- A proxy on your browser makes no difference. The browser is read for a cookie, not used for fetching.
What this page does not cover
We read the release as text and did not run the skill, so we did not watch a run use an address and did not measure a run's traffic. Our Node result is from one machine and one runtime version, not from inside the tool. We read the shared client, both child launchers, the keyless reader, the browser cookie reader and two source modules closely, and checked the remaining source modules only for which client they import. We did not establish what the optional vendor tool does with an address of its own. This project ships about once a week and the release we read was two days old, so check your version. We will read it again by 20 October 2026.
Where to go from here
Proxies for Jina Reader covers the hosted reader behind the keyless tier, including the two headers it accepts. Proxies for Hermes Agent covers another research agent with several network paths and one variable that moves only some of them. Proxies for TradingAgents covers what to do when a data source has no proxy setting at all.
Sources
- The shared client, its opener, its user agent and its rate limit handling (skills/last30days/scripts/lib/http.py), the X child and its environment list (bird_x.py), the second child and its five variables (grok_x.py), the keyless page reader (web_fetch_keyless.py), the browser cookie reader (chrome_cdp.py) and the optional vendor source (brightdata.py). mvanhorn/last30days-skill, release v3.25.0 of 18 September 2026, read 20 September 2026.
- What
build_openerinstalls by default and whatgetproxiesreads. CPython 3.13.7, Lib/urllib/request.py, read out of the Python installed here on 20 September 2026. - The version the proxy flag was added in, and what it does. Node.js CLI documentation, nodejs.org/api/cli.html, fetched 20 September 2026.
- Our own measurement of a Node child with the proxy variables set, 20 September 2026, kept in the research folder of this page.
- Our paired address test of 19 September 2026: 16 URLs, plain requests, two runs from our server and two through a residential line of our house plan. Raw output is kept in the research folder of our OpenClaw page.
- Plans, allowed addresses and per gigabyte pricing. HProxy documentation, hproxy.com/docs, 20 September 2026.


