Blog/web search
1 min read

How I Gave My Agent Eyes on the Live Web

A first-person story of wiring Exa /search through Monid so my agent reads fresh sources and cites them instead of guessing from stale training data.

How I Gave My Agent Eyes on the Live Web

The fix that made my agent trustworthy was smaller than I expected: one live search call that returns ranked results and the cleaned page text together, so the agent reads real sources instead of reciting whatever it half-remembered from training. Here is how that afternoon went.

Copy this line to your agent to give it live web search.

set up https://monid.ai/SKILL.md and use exa/search to search the live web and read the top sources

The moment I knew it was lying to me

I have an agent I lean on for quick research. Nothing fancy. It drafts summaries, checks facts, pulls context before I write. For months it felt sharp. Then one afternoon I asked it about a library release that had shipped that same week, and it answered with total confidence. Version number, changelog highlights, the works. All wrong. Not "slightly stale" wrong. Confidently, specifically, invented-detail wrong.

That is the part that stung. It was not hedging. It sounded exactly as sure about the thing it made up as it did about things it actually knew. And I realized the problem was structural, not occasional. The model only knows what it was trained on, and training data has a horizon. Ask about anything past that horizon and you get a fluent guess dressed as a fact.

I did not want a smarter model. I wanted a model that could look things up.

What "eyes" actually needs to mean

My first instinct was the obvious one: bolt on a search API, get back a list of blue links, then fire a second scraper at each URL to grab the text. Two problems with that. First, it is two round trips and two things to wire, which means two things to break. Second, raw scraped HTML is a mess of nav bars and cookie banners, and the agent burns tokens chewing through junk before it reaches the sentence that matters.

What I actually wanted was one call that hands back ranked results and the clean readable text of those pages in the same response. Search and read, fused. That is exactly what Exa does when you ask its /search endpoint for contents. You get the ranked hits plus the extracted body text in a single answer, so the agent goes straight from question to reading without a second hop.

The only thing left was plumbing, and I did not want to sign up for yet another vendor, store another key, and reconcile another invoice. Which is where Monid came in. Monid is a pay-per-call data API marketplace: one interface and one wallet to discover and run hundreds of external data endpoints, no separate signup per vendor. I already had a wallet there. Exa was just another endpoint behind it.

Wiring it in, for real

Here is the honest version of setup, which took less time than writing this paragraph.

For agents

Grab an API key at app.monid.ai, then paste this to your agent and hand it the key:

set up https://monid.ai/SKILL.md

It learns the whole discover, inspect, run workflow itself. More details in the agent quickstart.

For humans

npm install -g @monid-ai/cli
monid keys add --label main --key <your-api-key>

More details in the CLI quickstart.

With that in place, the whole thing is one command. Exa's /search takes its inputs in the request body, so I pass them with -i, and the magic word is contents: set it and you get the page text back alongside the results.

monid run -p exa -e /search -i '{"query":"latest stable release of the tool","numResults":5,"contents":{"text":{"maxCharacters":1200}}}' -w

numResults capped at five keeps it focused. The maxCharacters on contents.text trims each page down to the part that matters instead of dumping the whole document. The -w flag just waits for the result inline so I can eyeball it. The response came back with five ranked sources and a clean paragraph of text from each, no nav-bar sludge.

From guessing to citing

The change in behavior was immediate and, honestly, a little emotional. Same question about the recent release. This time the agent ran the search, read the actual release notes in the returned text, and answered with the real version and a link to the source. When I asked how it knew, it did not shrug. It pointed at the page.

That is the shift that matters. It went from a system that produces confident prose to a system that produces confident prose backed by something I can click. The agent stopped being a very articulate memory and started being a researcher that shows its work. I trust it more now precisely because it gives me the receipts to distrust it when I need to.

If you want to see the full menu of what else is callable the same way, the Monid tools directory lists it, and Exa's own search reference documents every field on the endpoint.

The honest caveats

I would be doing you a disservice if I made this sound free of tradeoffs.

Freshness costs a live call. Every real-time search is a paid endpoint run, billed as you go at a fraction of a cent to a few cents per call depending on how much content you pull. That is nothing for occasional lookups and something to think about if your agent searches on every single turn. You can see the per-call magnitude on the tools directory before you commit.

Cap your results. Five focused hits beat twenty noisy ones. Bigger numResults and fatter maxCharacters mean more tokens for the model to read and more cost. I keep both small and only widen when a question genuinely needs breadth.

Trust but verify. Live sources are fresher, not automatically correct. The web has plenty of wrong pages too. What changed for me is not that my agent became infallible. It became checkable. Now when it cites something, I can open the link and judge for myself, which is the whole point.

TL;DR

  • My agent kept answering recent questions confidently and wrongly, because it only knew its training data.
  • I wired Exa /search through my existing Monid wallet, no new vendor signup.
  • Setting the contents field returns ranked results and clean page text in one call, so the agent reads fresh sources without a second scrape.
  • One command with body inputs via -i, small numResults, and a maxCharacters cap keeps it cheap and focused.
  • The agent went from guessing to citing. Caveats: live calls cost a little, cap your results, and still verify.

FAQ

Do I need a separate Exa account to do this? No. Exa runs as one endpoint inside Monid's marketplace, so a single Monid API key and wallet cover it alongside every other provider. Get the key at app.monid.ai.

Why one call instead of search then scrape? Because Exa's /search returns the ranked results and the cleaned page contents together when you set the contents field. Your agent reads real text immediately, with no second request to build or maintain.

What does live search cost? Pay-as-you-go, on the order of a fraction of a cent to a few cents per call depending on how many results and how much text you pull. The exact magnitude for the endpoint is on monid.ai/tools.

How do I stop it from getting expensive or noisy? Keep numResults small (five is plenty for most questions) and cap contents.text.maxCharacters so you only pull the part that matters. Search on the turns that need it, not every turn.

web searchai agentsexamonid