Research a question on the web with AnythingLLM's agent and keep what it finds

Use AnythingLLM's @agent to search the web, read the pages, and write a cited answer, then save the best sources into a workspace or export a report.

· ranx.cloud

Illustration of a desk with an index card box, a few paper-clipped newspaper cuttings and a pencil laid across a notepad

This is for anyone who does desk research in bursts: comparing what five vendors charge, checking what a regulation actually says, collecting how competitors describe a feature. You end up with an AnythingLLM workspace where the agent searches the web, opens and reads the pages, and answers with links; the sources worth keeping go into the workspace as documents, so next week's questions are answered from them without searching again; and a finished answer can be turned into a Word or PDF file. All of it happens in the AnythingLLM chat, in a session you start when you need it.

Settings below were checked against AnythingLLM v1.19.0 (Docker).

What the agent can do here

AnythingLLM's agent is the same chat with tools switched on. The four that matter for research are agent skills, configured once for the whole instance:

Skill What it does
Web Search Sends a query to a search provider and gets back titles, links and snippets.
Scrape websites Opens a URL in a headless browser and reads the page text.
RAG & long-term memory Searches the workspace's documents, or saves text into the workspace when you ask it to remember something.
Document Creation Writes Word, PDF, PowerPoint or Excel files you can download from the chat.

The first three are on by default. Document Creation is off.

Step 1: A model that handles tools well

Research is a loop: search, pick links, scrape, decide whether that was enough, maybe search again. A weak model skips the scraping and answers from search snippets, or repeats the same search. Use a model with native tool calling.

If you haven't set an LLM yet: open settings (the button at the bottom of the sidebar), AI Providers → LLM, choose Anthropic, paste a key from console.anthropic.com → API Keys → Create Key, and pick a model.

Create a workspace for research, say Research, and open its gear icon → Agent Configuration. Set Workspace Agent LLM Provider to Anthropic and Workspace Agent model to Claude Sonnet 5.5. The agent model is separate from the workspace's chat model, so normal questions can stay on a cheaper model while research uses a stronger one.

Step 2: Search provider and skills

Open settings → Agent Skills.

Web Search. Make sure it's on, and pick a provider. Options worth considering:

Provider Key Notes
You.com Search Optional The default. Works without a key on a free tier that's rate-limited per IP address.
Tavily Search Required 1,000 free credits a month, then $0.008 per credit; AnythingLLM's searches are the basic kind, 1 credit each (pricing, credits, November 2026).
Brave Search, Exa, Serper.dev, SerpApi, others Required Each has its own free tier and pricing.
DuckDuckGo None No setup; also the automatic fallback when You.com fails.

Start with You.com and no key. If the agent's thinking lines start saying it fell back to DuckDuckGo, or results get thin, add a key: a You.com key from you.com/platform, or switch to Tavily with a key from app.tavily.com. Keys are entered on this page and saved with the instance's settings.

Scrape websites and RAG & long-term memory: leave on.

Document Creation: turn it on if you want files out of your research. Its configuration lets you choose which document types the agent may create.

Step 3: Run a research session

The workspace's Chat mode (gear → Chat Settings) decides how you start:

  • Agent: every message can use tools, if the model supports native tool calling. Convenient for a workspace that only does research.
  • Chat or Query: start a message with @agent to open an agent session. Send /exit to end it and return to normal chat.

Use Chat with @agent for this workspace. It keeps the agent, and its cost, to the questions that need it.

A prompt that gets a usable answer instead of a summary of search snippets:

@agent I want to compare the entry-level paid plans of Pipedrive, HubSpot
Sales Hub and Close for a 3-person sales team billed monthly.
Search for each vendor's official pricing page and open it; don't rely on
search snippets or third-party comparison sites.
For each vendor give: plan name, monthly price per seat, seat minimum,
and the one limit most likely to matter for a 3-person team.
Put it in a table, then list the exact URLs you read.
If a page doesn't show a price without a sales call, say so.

What makes it work:

  • Name the sources you trust ("official pricing page"). Otherwise you get last year's numbers from a review site.
  • Ask it to open the pages. The agent decides when to scrape; saying so makes it far more likely.
  • Ask for the URLs back. Scraped pages also appear as citations under the reply, but a list in the answer is easier to check.
  • Say what to do when information is missing. Otherwise it fills the gap.

While it works, the chat shows its steps ("Using You.com (free tier) to search for...", "Scraping the content of..."). Read them. If it only searched and never scraped, the answer is built from snippets; tell it which pages to open.

Then check the two or three numbers that matter on the pages themselves. The agent reads accurately most of the time, but pricing pages with toggles (monthly or annual, currency) are where it slips.

Step 4: Keep what's worth keeping

The answer lives in the chat thread. To make the sources part of what the workspace knows:

Add the pages as documents. Click the upload icon next to the workspace name, paste each URL you want to keep into the link field, click Fetch website, then Move to Workspace and Save and Embed. Now a plain question next month ("what's Close's seat minimum?") is answered from that page, with a citation, without a web search. The pages appear in the workspace's document list, where you can remove them, and if you've turned on document watching they can be re-fetched weekly; the sync post covers that.

Or ask the agent to remember a conclusion. "@agent remember: as of November 2026, Close requires annual billing for its cheapest plan" makes the agent save that text into the workspace's vector database. Use this sparingly. These saved notes don't appear in the document list, so you can't review or delete them one at a time; the only way to remove them is Reset Vector Database in the workspace's Vector Database tab, which clears every embedding in the workspace. Fetched pages are easier to manage.

Export a report. With Document Creation on: "@agent turn the comparison above into a two-page Word document with the table and a sources section". The file appears in the chat with a download link.

Costs

Search is free on the You.com free tier and about $0.008 per search on Tavily after the free credits. The LLM is the real cost, and agent sessions use far more tokens than plain chat, because every step resends the conversation so far plus everything the tools returned.

A scraped page goes to the model in full when it fits in the model's context window; longer pages are summarized first. A pricing page is often 3,000–10,000 tokens of text once navigation and footers are included.

An estimate for the prompt above, with assumptions you should replace with your own: 3 searches, 4 pages scraped at about 6,000 tokens each, and 8 model calls whose input grows from 3,000 to about 35,000 tokens as results pile up. Total input around 150,000 tokens, output around 4,000.

Prices are Anthropic's list prices, November 2026.

Sonnet 5.5:  150,000 × $2/M  + 4,000 × $10/M  = $0.30 + $0.04 = $0.34 per research question
Haiku 5.5:   150,000 × $0.10/M + 4,000 × $0.50/M = $0.015 + $0.002 ≈ $0.017
20 research questions a month:  Sonnet ≈ $6.80    Haiku ≈ $0.34

Each call above stays under Haiku 5.5's 100,000-token threshold; a session that scrapes many long pages can cross it, and from then on each call is billed at the higher rate ($0.50 / $2.50 per million). Haiku is worth trying for simple lookups; for multi-vendor comparisons, Sonnet is less likely to stop after the first page.

Two habits keep this down: end the agent session with /exit when the research is done, and start a new thread for a new topic so old scraped pages aren't carried along.

Limits

  • Pages behind a login, a cookie wall or bot protection usually can't be scraped; the agent says it couldn't read the page.
  • Private addresses are refused. The scraper rejects URLs with private IP addresses such as 192.168.x.x or 10.x.x.x. Point it at public URLs.
  • The website widget can't use the agent. Agent tools in the embedded widget are an open request (#4154).
  • Scraping uses a headless browser on your instance. One page at a time is fine on a small instance; with 2 GB of memory, avoid running a long agent session while a large document import is embedding.

What goes wrong

The agent answers from memory without searching. The model isn't calling tools. In Chat or Query mode, check the message starts with @agent. If it does, the model may not support native tool calling well; agent mode with some local models degenerates into garbled output and no tool calls (#6345). Switch the workspace agent model to a hosted model.

"Search is disabled and no content was found." The selected search provider needs a key that isn't set. Add the key on Agent Skills, or switch to You.com or DuckDuckGo.

Results suddenly get worse. You.com's keyless tier is rate-limited, and on failure AnythingLLM quietly falls back to DuckDuckGo. The thinking lines say so. Add a You.com key or use another provider.

"Can't modify skills during an active agent session." Send /exit, change the skill, start a new @agent message.

The session costs much more than expected. Long pages scraped in full, carried through every later step. Ask for specific pages, start a new thread per topic, and look at the provider's usage page after a few sessions to calibrate.

The agent stops mid-answer and the chat shows a disconnect. Agent sessions run over a live connection to the instance. An instance on ranx.cloud can be restarted briefly now and then, for maintenance or updates; if that happens mid-session, start a new @agent message. Anything you already fetched into the workspace is kept.