Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Web search via 9Router /v1/search using Tavily / Exa / Brave / Serper / SearXNG / Google PSE / Linkup / SearchAPI / You.com / Perplexity. Use when the user wants to search the web, look up information, find articles, or query a search engine.
.claude/skills/decolua-9router-web-search/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 100% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 23% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 0% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 81% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 42% | 0% |
Requires NINEROUTER_URL (and NINEROUTER_KEY if auth enabled). See https://raw.githubusercontent.com/decolua/9router/refs/heads/master/skills/9router/SKILL.md for setup.
bashcurl $NINEROUTER_URL/v1/models/web | jq '.data[] | select(.kind=="webSearch") | .id' # Per-provider params (searchTypes, maxResults, required options like cx for google-pse) curl "$NINEROUTER_URL/v1/models/info?id=tavily/search"
IDs end in /search (e.g. tavily/search). Combos (owned_by:"combo") chain providers with auto-fallback.
POST $NINEROUTER_URL/v1/search
| Field | Required | Notes | |---|---|---| | model (or provider) | yes | from /v1/models/web (e.g. tavily or brave) | | query | yes | search query | | max_results | no | default 5 | | search_type | no | web (default) / news / x for Xquik | | country, language, time_range, domain_filter | no | provider-dependent |
bashcurl -X POST $NINEROUTER_URL/v1/search \ -H "Authorization: Bearer $NINEROUTER_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"tavily","query":"9Router open source","max_results":5}'
JS:
jsconst r = await fetch(`${process.env.NINEROUTER_URL}/v1/search`, { method: "POST", headers: { "Authorization": `Bearer ${process.env.NINEROUTER_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ model: "search-combo", query: "latest LLM benchmarks", max_results: 10 }), }); console.log(await r.json());
X search with Xquik:
bashcurl -X POST $NINEROUTER_URL/v1/search \ -H "Authorization: Bearer $NINEROUTER_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"xquik","query":"from:github release","max_results":10,"provider_options":{"queryType":"Latest"}}'
Add the Xquik API key in 9Router's provider settings. Xquik charges 1 credit per returned post. Continue a search by passing pagination.next_cursor as provider_options.cursor.
Xquik responses include provider pagination and credit usage:
json{ "pagination": { "has_more": true, "next_cursor": "cursor-2" }, "usage": { "queries_used": 1, "search_cost_usd": null, "provider_credits_used": 10 } }
json{ "provider": "tavily", "query": "9Router open source", "results": [ { "title": "...", "url": "https://...", "display_url": "github.com/...", "snippet": "...", "position": 1, "score": 0.92, "published_at": null, "favicon_url": null, "content": null, "metadata": { "author": null, "language": null, "source_type": null, "image_url": null }, "citation": { "provider": "tavily", "retrieved_at": "2026-...", "rank": 1 } } ], "answer": null, "usage": { "queries_used": 1, "search_cost_usd": 0.008 }, "metrics": { "response_time_ms": 850, "upstream_latency_ms": 700, "total_results_available": 12 }, "errors": [] }
All accept query + max_results. Optional fields vary:
| Provider | Supports | Required extras | |---|---|---| | tavily | country, domain_filter, news topic | — | | exa | domain_filter (incl/excl), news category | — | | brave-search | country, language | — | | serper | country, language, news endpoint | — | | perplexity | country, language, domain_filter | — | | linkup | domain_filter, time_range | depth: fast/standard/deep (option) | | google-pse | country, language, time_range, offset | cx required (providerOptions) | | searchapi | country, language, pagination | — | | youcom | country, language, time_range, domain_filter, full_page | — | | searxng | language, time_range | Self-hosted, noAuth | | xquik | X/Twitter search operators, language, cursor pagination | queryType: Latest/Top, cursor (options) |
Provider IS the model — "provider":"tavily" ≡ "model":"tavily".
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 10,606 | 8,653 | -18% | 1 | 1 | 0% | 1,053 | 2,111 | +100% | 0 | 0 | — |
case-02 | fail→pass | 17,367 | 15,785 | -9% | 1 | 1 | 0% | 2,459 | 3,033 | +23% | 0 | 0 | — |
case-03 | fail→pass | 17,748 | 10,795 | -39% | 1 | 1 | 0% | 2,570 | 2,563 | -0% | 0 | 0 | — |
case-04 | pass→pass | 15,261 | 10,569 | -31% | 1 | 1 | 0% | 2,096 | 2,474 | +18% | 0 | 0 | — |
case-05 | pass→pass | 18,178 | 15,012 | -17% | 1 | 1 | 0% | 2,387 | 3,360 | +41% | 0 | 0 | — |
case-06 | pass→pass | 15,830 | 11,601 | -27% | 1 | 1 | 0% | 1,531 | 2,251 | +47% | 0 | 0 | — |
case-07 | fail→pass | 11,988 | 13,430 | +12% | 1 | 1 | 0% | 1,351 | 2,441 | +81% | 0 | 0 | — |
case-08 | fail→pass | 13,522 | 9,107 | -33% | 1 | 1 | 0% | 1,545 | 2,199 | +42% | 0 | 0 | — |
case-09 | fail→pass | 16,624 | 8,527 | -49% | 1 | 1 | 0% | 2,007 | 2,056 | +2% | 0 | 0 | — |
case-10 | fail→pass | 20,921 | 7,408 | -65% | 1 | 1 | 0% | 3,107 | 1,755 | -44% | 0 | 0 | — |
case-11 | fail→pass | 16,932 | 7,793 | -54% | 1 | 1 | 0% | 2,050 | 1,880 | -8% | 0 | 0 | — |
case-12 | fail→pass | 14,318 | 8,473 | -41% | 1 | 1 | 0% | 1,719 | 2,941 | +71% | 0 | 0 | — |
case-13 | fail→pass | 8,205 | 7,503 | -9% | 1 | 1 | 0% | 1,410 | 1,829 | +30% | 0 | 0 | — |
case-14 | fail→fail | 22,609 | 9,004 | -60% | 1 | 1 | 0% | 3,154 | 1,771 | -44% | 0 | 0 | — |
case-15 | fail→pass | 15,470 | 3,507 | -77% | 1 | 1 | 0% | 1,963 | 2,003 | +2% | 0 | 0 | — |
case-20 | fail→pass | 10,181 | 3,064 | -70% | 1 | 1 | 0% | 1,609 | 1,867 | +16% | 0 | 0 | — |
case-16 | fail→pass | 18,317 | 4,016 | -78% | 1 | 1 | 0% | 1,502 | 2,150 | +43% | 0 | 0 | — |
case-17 | pass→pass | 6,759 | 3,499 | -48% | 1 | 1 | 0% | 1,267 | 1,928 | +52% | 0 | 0 | — |
case-18 | fail→pass | 12,546 | 3,771 | -70% | 1 | 1 | 0% | 2,291 | 2,013 | -12% | 0 | 0 | — |
case-19 | pass→pass | 9,542 | 3,651 | -62% | 1 | 1 | 0% | 1,833 | 1,969 | +7% | 0 | 0 | — |
case-21 | fail→pass | 20,291 | 8,606 | -58% | 1 | 1 | 0% | 1,997 | 1,956 | -2% | 0 | 0 | — |
case-22 | pass→pass | 10,420 | 8,777 | -16% | 1 | 1 | 0% | 1,822 | 1,898 | +4% | 0 | 0 | — |
case-23 | pass→pass | 15,393 | 4,219 | -73% | 1 | 1 | 0% | 1,948 | 1,905 | -2% | 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. 23 cases were attempted. The headline lift of +65 percentage points is the difference between those two pass rates over the 23 comparable cases.
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.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/4/2026 | +45% |
Other measured skills in the registry, with their headline benchmark lift.