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"
Research / Recon Agent · live web (DuckDuckGo + page fetch)
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
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.
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.
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
Built with
2 tools, one decision loop.
lookup
Searches the live web through a keyless endpoint and returns titles, URLs, and snippets for the agent to triage.
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.
The calls that decide whether it survives contact.
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.
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.
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.