Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when researching products, finding academic papers, discovering competitors, reading webpage content, or getting cited answers grounded in real web sources. Use over generic search when semantic relevance matters.
.claude/skills/blockrunai-exa-research/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-16 | ✗→✓ | ▲ Improved | 35% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 12% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 74% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 152% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 72% | 0% |
Neural web search via BlockRun. Understands meaning, not keywords. Four distinct actions for different research modes.
As of v0.14.1 the blockrun_exa tool is path-based. Pass the endpoint name as path and the request as body:
tsblockrun_exa({ path: "search", body: { query: "AI agent frameworks 2026", numResults: 10 } }) blockrun_exa({ path: "answer", body: { query: "What is speculative decoding?" } }) blockrun_exa({ path: "contents", body: { urls: ["https://example.com/a", "https://example.com/b"] } }) blockrun_exa({ path: "find-similar", body: { url: "https://arxiv.org/abs/2401.12345", numResults: 5 } })
Costs below are what you are actually CHARGED — the $0.001 transaction fee is already included (it applies once per call, not per result).
| User wants... | Path | Body | Cost | |--------------|------|------|------| | Relevant URLs on a topic | search | { query, numResults?, category? } | $0.0110/call | | Cited answer to a question | answer | { query } | $0.0110/call | | Full text of URLs | contents | { urls: [...] } | $0.002/URL + $0.001 → 1 URL $0.0030, 3 URLs $0.0070 | | Pages like a given URL | find-similar | { url, numResults? } | $0.0110/call | | Recent news | search + category: "news" | – | $0.0110/call | | Academic papers | search + category: "research paper" | – | $0.0110/call | | Company info | search + category: "company" | – | $0.0110/call |
contents bills per URL, so batching URLs into ONE call is markedly cheaper than one call each: 3 URLs together cost $0.0070, but three separate calls cost $0.0090 — you pay the flat fee three times instead of once.
Valid category values for search: "news", "research paper", "company", "tweet", "github", "pdf".
pythonfrom blockrun_llm import setup_agent_wallet chain = open(os.path.expanduser("~/.blockrun/.chain")).read().strip() if os.path.exists(os.path.expanduser("~/.blockrun/.chain")) else "base" if chain == "solana": from blockrun_llm import setup_agent_solana_wallet client = setup_agent_solana_wallet() else: from blockrun_llm import setup_agent_wallet client = setup_agent_wallet()
python# Basic search result = client._request_with_payment_raw("/v1/exa/search", { "query": "AI agent frameworks 2025", "numResults": 10, }) for r in result.get("results", []): print(f"{r['title']} — {r['url']}") # Filter by category result = client._request_with_payment_raw("/v1/exa/search", { "query": "transformer architecture improvements", "numResults": 10, "category": "research paper", }) # Restrict to specific domains result = client._request_with_payment_raw("/v1/exa/search", { "query": "prediction market regulation", "numResults": 10, "includeDomains": ["reuters.com", "bloomberg.com", "wsj.com"], })
Categories: "news", "research paper", "company", "tweet", "github", "pdf"
Use when the user asks a factual question and needs reliable sources (not Claude's training data).
pythonresult = client._request_with_payment_raw("/v1/exa/answer", { "query": "What is the current market cap of Polymarket?", }) print(result.get("answer", "")) for c in result.get("citations", []): print(f" [{c.get('title')}] {c.get('url')}")
Use when you have URLs and need their full text for LLM context (scraping without a browser).
pythonurls = [ "https://example.com/article-1", "https://example.com/article-2", ] result = client._request_with_payment_raw("/v1/exa/contents", { "urls": urls, }) for item in result.get("results", []): print(f"=== {item['url']} ===") print(item.get("text", "")[:500])
Up to 100 URLs per call. Returns Markdown-ready text.
Use to discover competitors, related research, or sites with similar content.
pythonresult = client._request_with_payment_raw("/v1/exa/find-similar", { "url": "https://polymarket.com", "numResults": 10, }) for r in result.get("results", []): print(f"{r['title']} — {r['url']}")
Competitor discovery:
python# 1. Find similar companies similar = client._request_with_payment_raw("/v1/exa/find-similar", {"url": "https://target-company.com", "numResults": 15}) urls = [r["url"] for r in similar.get("results", [])] # 2. Fetch their about pages contents = client._request_with_payment_raw("/v1/exa/contents", {"urls": urls[:10]})
Research synthesis:
python# 1. Find papers papers = client._request_with_payment_raw("/v1/exa/search", { "query": "your topic", "category": "research paper", "numResults": 20, }) # 2. Get answer with citations answer = client._request_with_payment_raw("/v1/exa/answer", { "query": "What are the key findings on your topic?", })
client.search()| Use blockrun_exa / _request_with_payment_raw | Use client.search() | |---------------------------------------------------|----------------------| | Finding specific URLs and fetching content | Getting a summarized answer with citations | | Semantic similarity search | Web + news combined | | Academic paper discovery | Cheaper per call for simple lookups | | Domain-filtered research | Already returns a SearchResult object |
pip install blockrun-llmclient.get_balance())_request_with_payment_raw is the Python SDK entry point for Exa (no dedicated method yet)| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 16,095 | 5,933 | -63% | 1 | 1 | 0% | 2,918 | 2,141 | -27% | 0 | 0 | — |
case-02 | fail→fail | 4,111 | 6,496 | +58% | 1 | 1 | 0% | 635 | 2,108 | +232% | 0 | 0 | — |
case-16 | fail→pass | 11,630 | 6,918 | -41% | 1 | 1 | 0% | 2,334 | 3,151 | +35% | 0 | 0 | — |
case-03 | fail→fail | 6,251 | 5,299 | -15% | 1 | 1 | 0% | 1,055 | 2,034 | +93% | 0 | 0 | — |
case-04 | fail→fail | 6,020 | 5,342 | -11% | 1 | 1 | 0% | 240 | 2,002 | +734% | 0 | 0 | — |
case-05 | pass→fail | 8,735 | 5,762 | -34% | 1 | 1 | 0% | 1,333 | 2,023 | +52% | 0 | 0 | — |
case-06 | pass→fail | 13,550 | 5,228 | -61% | 1 | 1 | 0% | 2,268 | 1,981 | -13% | 0 | 0 | — |
case-07 | fail→fail | 13,321 | 6,614 | -50% | 1 | 1 | 0% | 2,278 | 2,026 | -11% | 0 | 0 | — |
case-17 | fail→pass | 14,460 | 6,445 | -55% | 1 | 1 | 0% | 2,716 | 3,054 | +12% | 0 | 0 | — |
case-08 | fail→fail | 5,717 | 7,100 | +24% | 1 | 1 | 0% | 683 | 2,083 | +205% | 0 | 0 | — |
case-09 | fail→fail | 12,689 | 7,951 | -37% | 1 | 1 | 0% | 1,535 | 2,044 | +33% | 0 | 0 | — |
case-10 | fail→pass | 7,782 | 3,590 | -54% | 1 | 1 | 0% | 1,414 | 2,460 | +74% | 0 | 0 | — |
case-11 | fail→pass | 5,407 | 2,200 | -59% | 1 | 1 | 0% | 845 | 2,133 | +152% | 0 | 0 | — |
case-12 | fail→pass | 9,428 | 5,670 | -40% | 1 | 1 | 0% | 1,658 | 2,851 | +72% | 0 | 0 | — |
case-13 | fail→pass | 7,819 | 4,566 | -42% | 1 | 1 | 0% | 1,361 | 2,704 | +99% | 0 | 0 | — |
case-14 | fail→pass | 8,378 | 4,162 | -50% | 1 | 1 | 0% | 1,380 | 2,523 | +83% | 0 | 0 | — |
case-15 | fail→pass | 15,687 | 6,695 | -57% | 1 | 1 | 0% | 2,575 | 2,944 | +14% | 0 | 0 | — |
case-18 | fail→pass | 20,432 | 5,732 | -72% | 1 | 1 | 0% | 3,488 | 2,884 | -17% | 0 | 0 | — |
case-19 | fail→pass | 8,180 | 2,430 | -70% | 1 | 1 | 0% | 1,365 | 2,203 | +61% | 0 | 0 | — |
case-20 | pass→pass | 4,673 | 4,059 | -13% | 1 | 1 | 0% | 719 | 2,536 | +253% | 0 | 0 | — |
case-21 | pass→pass | 5,758 | 4,833 | -16% | 1 | 1 | 0% | 954 | 2,580 | +170% | 0 | 0 | — |
case-22 | pass→pass | 8,442 | 5,658 | -33% | 1 | 1 | 0% | 1,313 | 2,828 | +115% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 13 counted toward the lift figure. The other 9 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +36 percentage points is the difference between those two pass rates over the 13 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.