9Router Web Search Skill
Aggregate web and X search from 11 providers (Tavily, Exa, Brave and more) through one 9Router /v1/search endpoint, so AI coding agents can search the web on demand.
The skill is only curl/JS calling instructions against a local 9Router service: no code execution, no file writes, no destructive defaults; keys pass via environment variables, none hardcoded. Deducted for: no disclosure of NINEROUTER_KEY storage/leakage risk, no confirmation or rollback mechanism, and only implicit disclosure that queries are sent to third parties (Tavily/Exa etc.).
Internally self-consistent: discovery endpoint, request table, examples and response shape all align; parameter and provider-quirks tables corroborate each other. Deducted for: static docs only — no tests, and no error handling or failure feedback for abnormal input (missing key, invalid model id, upstream 401/timeout); Xquik billing/pagination described but unverified.
Description clearly states triggers (web search, find articles, X search); field tables and the provider matrix delimit inputs and non-fit boundaries, giving fairly precise semantic invocation. Deducted for: core function depends entirely on overseas search providers with no assessment of mainland-China reachability, and no Chinese-language support statement.
SKILL.md is well layered (discover → endpoint → examples → response → quirks); name/description match actual capability; repo carries MIT license. Deducted for: no skill-level versioning, changelog, FAQ or known-limitations section; setup dependency delegated to an external link into another SKILL.md; maintenance responsibility unclear.
If 9Router is running, the curl examples are directly usable and the documented JSON response shape is parseable as-is; marginal value over hand-wiring each provider API is real. Deducted for: core preconditions (running local service, configured provider keys) are not closed within this document; no execution evidence of output correctness; Xquik per-credit billing adds user cost.
Response examples contain concrete fields and usage/metrics structures that plausibly come from a real implementation. Deducted for: all author-supplied examples, no third-party execution evidence, no CI covering this skill's key paths, no independently reproducible verification; fact and inference cannot be separated.
- This is a static source review only; no requests were executed, and capability/response shapes are author claims.
- Function depends on a locally running 9Router plus third-party search provider keys (Tavily/Brave/Xquik etc.); mainland-China reachability is unverified.
- Xquik bills 1 credit per returned post — confirm cost before use.
- Publisher is unverified by the FollowSkills registry (identity unknown); the skill has no independent version number or changelog.
- API keys are passed via environment variables; avoid leakage into shell history and logs.
What does this skill do, and when should you use it?
One of 9 skills bundled in the decolua/9router repository (an MIT-licensed free AI router), located at skills/9router-web-search/SKILL.md. It instructs an AI agent to call 9Router's unified POST /v1/search endpoint, routing queries to Tavily, Exa, Brave, Serper, SearXNG, Google PSE, Linkup, SearchAPI, You.com, Perplexity, or Xquik for web, news, or X/Twitter search. The skill itself is pure instruction — the actual search capability comes from a locally running 9Router instance (default http://localhost:20128). You must install and run 9Router first, then set NINEROUTER_URL (and NINEROUTER_KEY if auth is enabled). It suits anyone who wants their agent to 'search the web, find articles, or search public X posts'.
Guides the agent to first discover available search models via GET $NINEROUTER_URL/v1/models/web (IDs like tavily/search) and inspect per-provider parameters via /v1/models/info; then send a JSON request to POST $NINEROUTER_URL/v1/search with fields like model, query, max_results, search_type (web/news/x), country, language, time_range, and domain_filter; supports X/Twitter search via Xquik (from: operators, queryType: Latest/Top, cursor pagination via pagination.next_cursor); combo models (owned_by:"combo") chain providers with auto-fallback; returns structured results (title, url, snippet, score, citation, usage, metrics).
- Developers using Claude Code or Codex who want the agent to look up current documentation or articles while coding
- Researchers who need an agent to search public X posts, e.g. tracking a project's release chatter
- Self-hosters running SearXNG who want the agent to use an auth-free local search backend
- Teams that want automatic cross-provider fallback to avoid single-provider rate limits or outages
What are this skill's strengths and limitations?
- Single endpoint aggregating 11 search providers — switching is just changing the model field
- Structured responses include citations, ranking, latency, and usage metrics for traceable answers
- Combo models offer cross-provider auto-fallback for higher availability
- Supports web, news, and X search types plus country/language/time/domain filters
- Hard dependency on a locally running 9Router instance — not standalone
- Most providers need their own API keys or accounts (SearXNG must be self-hosted; Xquik charges credits per post)
- Per-provider quirks add friction: google-pse needs cx, Linkup needs depth, others vary — check /v1/models/info
- No tests or benchmarks for the skill itself are included in the source material
How do you install this skill?
1) Install and run 9Router: npm install -g 9router && 9router (dashboard at http://localhost:20128); 2) Place the skills/9router-web-search/ folder in your Agent Skills directory (e.g. ~/.claude/skills/ for Claude Code); 3) Set export NINEROUTER_URL=http://localhost:20128 in the agent environment, plus NINEROUTER_KEY if auth is enabled. SKILL.md provides no dedicated install script; installation follows the generic Agent Skills convention.
How do you use this skill?
The agent triggers on phrases like 'search the web', 'find articles', or 'search public X posts' and follows SKILL.md. Manual verification: curl -X POST $NINEROUTER_URL/v1/search -H "Authorization: Bearer $NINEROUTER_KEY" -H "Content-Type: application/" -d '{"model":"tavily","query":"9Router open source","max_results":5}'. For X search set model to xquik, add provider_options.queryType, and paginate with pagination.next_cursor (Xquik charges 1 credit per returned post; add its API key in 9Router's provider settings). google-pse requires cx via providerOptions.