DeviAI
All work

Studio agent — built in-houseResearch · Live web

Research & Recon Agent

Decomposes a question, researches the live web, and writes a brief that cites only what it actually read.

$npm run research "your topic"

npm run research "your topic"recorded run

$ npm run research "your topic"

Research / Recon Agent · live web (DuckDuckGo + page fetch)

97.3s · 3 tool calls

Agentic RAG vs. classic RAG. A live run: search, recover from two bot-walled pages, read reputable sources, and synthesise a cited brief with key findings.

Live

Real web, keyless search

Cites

Only pages it fetched

Adapts

Past bot-walls & dead ends

3-para

Sourced brief + findings

01The problem

Two things make web research untrustworthy when a model does it. First, citation theatre: quoting a source from its search-result snippet without ever opening it, so the citation looks rigorous and isn’t. Second, brittleness: half the useful web now sits behind bot-walls and JavaScript challenges, and an agent that treats a blocked page as “read” will confidently cite an empty screen. The brief had to be genuinely grounded and had to survive a hostile web.

02How it works

The agent plans sub-questions, searches via a keyless endpoint, and reads pages through a fetcher that extracts readable text — and, critically, raises an error when a page is a bot-wall or empty. That turns a dead end into a signal the agent adapts to: it picks another source rather than citing a blank. Only pages it successfully read can be cited, and it is pushed to consult several sources before it writes, noting disagreement rather than smoothing it over.

03What it does

A runnable agent. Asked to explain how agentic RAG differs from classic RAG, it searched, hit Cloudflare challenges on two candidate sources, recognised them as unreadable, re-routed to reputable engineering sources it could actually parse, and wrote a tight three-paragraph brief citing only those. The recorded run below shows the whole thing — including the recovery from the blocked pages.

Capabilities

01Question decomposition
02Live web search + page reading
03Cite-only-what-you-read grounding
04Recovery around bot-walls

Built with

Node.jsfetchDuckDuckGoClaude (via CLI)
04The tools it wields

2 tools, one decision loop.

(01)

lookup

Searches the live web through a keyless endpoint and returns titles, URLs, and snippets for the agent to triage.

(02)

read_url

Fetches a page and extracts its readable text — and refuses a bot-wall or empty page as an error, so a blocked source can never be cited as if read.

06Engineering decisions

The calls that decide whether it survives contact.

01

A citation must point at a page it read

Citing a source from its snippet is the most common way machine research lies. Here, only a URL that went through read_url and returned real text is allowed in the brief — grounding you can check.

02

A bot-wall is an error, not a source

The fetcher detects JavaScript challenges and empty pages and throws. That single choice is what turns the modern, hostile web from a silent failure into something the agent routes around — it reaches for another source instead of citing a blank.

03

Read several before synthesising

One source is an opinion. The agent is pushed to consult multiple pages and to note where they disagree rather than averaging them into false consensus.

Full transparency

This is one of our own studio agents, not client work. It runs on sample data we built ourselves, and the terminal above replays a real recorded run — the reasoning, tool calls, errors and timings are exactly what happened, only the playback is paced for watching. We show it because it is the honest version of “we build AI agents”: code you could run, not a slide.