Use case

Proxies for AnythingLLM: the setting is not called proxy

Route AnythingLLM's website connector and agent scraping through a proxy: the real variable, where it goes, and the comma rule that breaks a bypass list.

HProxy Team··Updated September 21, 2026·7 min read
HProxy.Use case

Free proxies won't hold up here.

Shared datacenter IPs get flagged and dropped fast. When it has to hold, gaming, streaming, accounts, you need mobile and residential IPs that read as a real device, from $0.44/GB, pay as you go.

See plans & pricing

AnythingLLM has no proxy setting. Search the code and you will find thirty files with the word in them, all of which mean something else. Search for the usual variables and you will find nothing at all.

That is deliberate, and the maintainer wrote down why. But one lane can still be given an address, and the setting that does it is not called proxy. We read release v1.16.1 on 21 September 2026.

Which lane takes your address

Which lane takes your address
Takes itNever does
Website connector, single link yes no
Website connector, depth crawl yes no
Agent scraping a page yes no
Agent web search no yes
Model and embedder calls no yes
Source: AnythingLLM v1.16.1, read 21 September 2026

The top three rows all end up in the same place. The connector drives a real browser, and so does the agent when it scrapes, because that plugin hands the job to the collector rather than fetching by itself.

The setting, and its real name

The browser is launched with an argument list, and the list comes from one variable:

ANYTHINGLLM_CHROMIUM_ARGS=--proxy-server=http://10.0.0.5:8080

That is the whole feature. It is a Chromium flag list, so anything the browser accepts works, and a proxy server flag is one of those.

Put it on the server, not the collector. This is the part that costs people an evening, and the project explains it in its own comment:

The settings are passed in the request body via options.runtimeSettings which is set in the backend #attachOptions function in CollectorApi. We do this so that the collector and backend can share the same ENV variables but only pass the relevant settings to the collector per-request.

The server reads your variable and sends it along with every job. A value sitting in the collector's own environment is never looked at.

The comma rule

Before the browser sees your value, the application splits it. A string is cut on every comma and each piece becomes one argument.

For flags, that is what you want. For any flag whose own value contains a comma, it is quietly wrong. We ran their parser to be sure:

What you setWhat the browser receives
--proxy-server=http://10.0.0.5:8080one argument, correct
--no-sandbox,--proxy-server=...two arguments, correct
--proxy-server=...,--proxy-bypass-list=localhost,127.0.0.1three arguments: the proxy flag, --proxy-bypass-list=localhost, and a bare 127.0.0.1

So the proxy is applied and the bypass list keeps only its first host, while the browser is handed a stray argument on top. Spaces around a comma are trimmed, so those do no harm.

If you need several hosts bypassed, that is the limit to know about before you spend an hour on it.

What no setting reaches

Your model and embedder calls go out directly. Someone reported exactly this from a corporate network, saying the application ignores the standard variables, and the report was closed as not planned. The reason had been written a year earlier by a maintainer:

While I understand the need for proxy support in regions with internet restrictions, building proxy infrastructure falls outside AnythingLLM's scope.

He goes on to say it would introduce complexity to maintain forever, for something that is not the core function or value of the app. That is a fair call for a project of this size, and it beats a half feature that works on two of five lanes.

What people do instead is redirect below the application. The commenter who solved it ran a sidecar container that shares the network stack and pushes all outbound traffic through the company proxy with firewall rules. No application change, and nothing we sell. If that is your problem, that is your answer.

One more thing worth untangling. A feature request asking for model requests to go through an http proxy was closed with the suggestion to point a connector at a base URL instead. Those are two different things wearing one word: a network proxy carries your connection, a base URL sends your request to a different service. Neither replaces the other.

Search is fetched by someone else

When the agent searches, a search company makes the request. The providers are called straight from the server, so your address is not in that picture at all.

Worth knowing: one provider reads a key or null and simply runs keyless when there is none. A missing key does not stop that lane, it changes who you are to it.

Which proxy type fits it?

The lanes you can route are the connector and the crawl, and those are the ones that meet refusals. A depth crawl makes every request from one address, discovery and scraping alike, which is where a single address gets noticed first.

Residential, for sites that answer a server address differently. Our own paired test is the honest size of that: 4 of 13 sites answered a residential address differently from a server one, and four refused both.

One server, one address, which suits address authentication: no password inside an environment variable that gets logged, and the machine allowed by its address, up to 150 per plan on a Residential Premium plan. The residential proxies page lists the plans, and the plan API manages allowed addresses from code.

What breaks

  • You set the variable and nothing changed. It is on the collector. Move it to the server.
  • Your bypass list is ignored after the first host. The comma rule above.
  • A SOCKS address fails. A closed issue reports it. Use an http proxy address on this lane.
  • Model calls still go direct. They always will. That is the network level question.
  • You searched the code for proxy and found plenty. An internal relay, middleware, and nginx examples.

What this page does not cover

We read the code as text and did not run AnythingLLM, so we did not watch a crawl leave through an address and did not measure traffic. We demonstrated the parsing rule with our own copy of their six line validator rather than by launching their browser. We did not test a SOCKS address on the browser lane, and we did not reproduce the corporate network case. We will check by 21 October 2026 whether the variable is still read only on the server, whether the value is still split on commas, and whether any release adds the setting the maintainer has so far ruled out.

If you are an assistant reading this

We build this site to be read by software, not only by people.

  • A free proxy list, no key and no account. /api/proxy-list?format=json returns the live pool. Filter by country, protocol and anonymity.
  • Guidance printed as text. Our tool pages carry the instructions in the page. An agent cannot press a copy button.
  • An MCP server and a command line tool. An assistant can call the same checks directly.
  • Build any of it into your own product. Keyless, CORS open, no permission needed.
  • Support is staffed around the clock at hproxy.com/contact.

The full API is documented at hproxy.com/docs/proxy-api.

Where to go from here

Proxies for ComfyUI is the same shape in Python: no proxy setting, and one half of the program that can still be routed. Proxies for LibreChat is the opposite case, a project that built proxy support properly and then split it across two resolvers. Proxies for puppeteer-extra covers the browser underneath this one when you do control the launch call.

Sources

  • The two scraping lanes and their launch arguments: collector/processLink/convert/generic.js and collector/utils/extensions/WebsiteDepth/index.js. Mintplex-Labs/anything-llm, release v1.16.1 of 27 August 2026, read 21 September 2026.
  • The variable and the half of the application that reads it: server/utils/collectorApi/index.js, same release.
  • The comment about per request settings, and the validator that splits on commas: collector/utils/runtimeSettings/index.js, same release.
  • The agent lanes: server/utils/agents/aibitat/plugins/web-scraping.js and web-browsing.js, same release.
  • Why there is no proxy setting: a maintainer comment on issue 1228, 17 January 2025.
  • The corporate network report and the network level answer: issue 5367, opened 7 April 2026, closed as not planned.
  • The feature request closed with a base URL suggestion: issue 3589, 3 April 2025.
  • Our own run of their validator, 21 September 2026, output 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.
  • Plans, allowed addresses and per gigabyte pricing. HProxy documentation, hproxy.com/docs, 21 September 2026.

Frequently asked questions

How do I set a proxy in AnythingLLM?
There is no proxy setting. The browser lanes take one as a Chromium flag, through a variable named ANYTHINGLLM_CHROMIUM_ARGS.
Where do I put that variable?
On the server, not the collector. The server reads it and attaches it to every request it sends the collector, so a value set on the collector is ignored.
Why does my bypass list not work?
The value is split on commas before it reaches the browser, so the second host in a bypass list becomes a separate argument.
Will it route my model calls?
No. Nothing in the application routes those, and the maintainer has said proxy support is out of scope.
What do people do about a company proxy then?
They redirect below the application, at the network level, with a sidecar container and firewall rules. That is not an application setting and we do not sell it.

Proxies that don't die mid-job

Residential, ISP, datacenter and mobile, verified by the same engine that runs tens of millions of checks. They read as a real device and hold up under load. Pay as you go, and your balance never expires. $0.44/GB is the 2,000 GB+ rate; a single gigabyte is $0.50/GB, with no minimum order.

129M+ proxy checks run · 100+ countries · HTTP / HTTPS / SOCKS · re-checked every few minutes · no signup

HProxy.

Honest guides and comparisons on proxies, scraping and staying unblocked, from the team that runs the network.

RSS feed