Omnisearch Skill
Unified search across 5 providers — Brave (Google SERP), Tavily (agent-native answers), Xpoz (social media), Exa (neural/semantic), and Firecrawl (scraping). Auto-classifies queries and routes to the best provider, or runs parallel searches across all with deduplication.
Prerequisites: At least one API key set. See [API Key Setup](#api-key-setup).
Coverage Map
| Surface | Provider | Strength | Cost | |---------|----------|----------|------| | Google SERP | Brave | Web + news, freshness filtering, LLM Context API | $5/1k | | Agent answers | Tavily | AI-synthesized answers with citations, content extraction | Free 1k/mo | | Twitter/X | Xpoz | Tweet search, user timelines, threads, hashtags | Free 100k/mo | | Reddit | Xpoz | Post search, subreddit browsing, trending | Free 100k/mo | | Instagram | Xpoz | Post search, user profiles | Free 100k/mo | | Neural/semantic | Exa (cross-skill) | Research papers, companies, similar pages | Per-query | | Web scraping | Firecrawl (cross-skill) | Search + scrape, site crawling | Per-page |
Token-Efficient Multi-Search
Same principle as Exa's dynamic filtering — search cheaply, filter, then extract selectively.
DO:
# Step 1: Multi-provider search, titles/URLs only
python3 ~/.claude/skills/omnisearch/scripts/omnisearch.py "query" --parallel --no-text
# Step 2: Evaluate titles, pick best URLs
# Step 3: Extract selected URLs
python3 ~/.claude/skills/exa-search/scripts/exa_contents.py URL1 URL2 --highlights --max-chars 3000
# OR
python3 ~/.claude/skills/firecrawl/scripts/firecrawl_api.py scrape URL --only-main-content
DON'T: Run --parallel with full text for 40+ results, then reason over all of it.
Available Scripts
1. omnisearch.py — Meta-Router (start here)
Auto-classifies queries and dispatches to the best provider. Supports forced provider, parallel search, and social mode.
python3 ~/.claude/skills/omnisearch/scripts/omnisearch.py "query" [options]
| Quick Example | Purpose | |---------------|---------| | ... omnisearch.py "Iran oil sanctions" | Auto-route to best provider | | ... omnisearch.py "query" --provider brave | Force specific provider | | ... omnisearch.py "query" --parallel | All web providers, merged + deduped | | ... omnisearch.py "query" --social | Twitter search via Xpoz | | ... omnisearch.py "query" --social --platform reddit | Reddit search | | ... omnisearch.py "query" --answer | AI-generated answer (Tavily/Brave) | | ... omnisearch.py "query" --news --parallel | News from all providers | | ... omnisearch.py "query" --academic | Route to Exa academic index | | ... omnisearch.py "query" --verbose | Show routing decisions on stderr |
Query Classification (auto-route):
| Signal | Category | Primary Provider | |--------|----------|-----------------| | @mentions, #hashtags, "tweet", "reddit", r/xxx | Social Media | Xpoz | | "latest", "breaking", "today", date words | News | Brave | | "paper", "arxiv", "study", "journal" | Academic | Exa | | "who is", "what is", short questions | Factual Quick | Tavily (with answer) | | "company", "startup", "funding", "IPO" | Company Research | Exa | | "documentation", "API", "tutorial", "SDK" | Technical Docs | Exa | | (default) | General Web | Brave |
2. brave_search.py — Brave Web & News Search
Google-indexed SERP with freshness filtering, country targeting, and LLM Context API.
python3 ~/.claude/skills/omnisearch/scripts/brave_search.py "query" [options]
| Quick Example | Purpose | |---------------|---------| | ... brave_search.py "Iran infrastructure" | Web search | | ... brave_search.py "query" --news | Dedicated news endpoint | | ... brave_search.py "query" --summarize | LLM Context API (AI summary) | | ... brave_search.py "query" --freshness pd | Past day only | | ... brave_search.py "query" --freshness pw --extra-snippets | Past week + rich context | | ... brave_search.py "query" --country US --lang en | Localized results | | ... brave_search.py "query" --filter web,news --markdown | Multi-type + markdown |
Freshness values: pd (past day), pw (past week), pm (past month), py (past year), or YYYY-MM-DDtoYYYY-MM-DD
3. tavily_search.py — Agent-Native Search with Answers
AI-optimized search with grounded answers, topic modes, and content extraction.
python3 ~/.claude/skills/omnisearch/scripts/tavily_search.py "query" [options]
| Quick Example | Purpose | |---------------|---------| | ... tavily_search.py "oil prices" --answer | Search + AI answer | | ... tavily_search.py "query" --advanced --answer | Deep search + answer | | ... tavily_search.py "query" --news --days 3 | News, last 3 days | | ... tavily_search.py "query" --finance | Finance topic mode | | ... tavily_search.py "query" --answer-only | Pipe-friendly answer | | ... tavily_search.py "query" --domains bellingcat.com | Domain-restricted | | ... tavily_search.py extract URL [URL...] | Content extraction |
Search depths: basic (fast, ~1s) or --advanced (comprehensive, ~3-5s) Topics: general (default), --news, --finance
4. xpoz_search.py — Social Media Search
Twitter/X, Reddit, and Instagram search via Xpoz SDK. 12 subcommands.
python3 ~/.claude/skills/omnisearch/scripts/xpoz_search.py SUBCOMMAND "query" [options]
| Quick Example | Purpose | |---------------|---------| | ... xpoz_search.py twitter "Iran conflict" -n 10 | Twitter search | | ... xpoz_search.py twitter "query" --sort latest --min-likes 10 | Filtered tweets | | ... xpoz_search.py twitter-user elikishtaini -n 10 | User timeline | | ... xpoz_search.py twitter-thread 1234567890 | Full thread | | ... xpoz_search.py twitter-hashtag IranStrikes -n 10 | Hashtag search | | ... xpoz_search.py reddit "geopolitics Iran" -n 10 | Reddit search | | ... xpoz_search.py reddit-sub worldnews -n 10 --sort hot | Subreddit posts | | ... xpoz_search.py reddit-post abc123 | Reddit post + comments | | ... xpoz_search.py reddit-trending | Trending subreddits | | ... xpoz_search.py instagram "conflict" -n 10 | Instagram search |
Twitter filters: --sort (latest/popular/media), --min-likes, --min-retweets, --since/--until, --lang Reddit filters: --subreddit, --sort (hot/new/top/rising), --time (hour/day/week/month/year/all)
Provider Selection Guide
| Task | Best Approach | |------|--------------| | General web search | omnisearch.py "query" (auto-routes to Brave) | | Breaking news | omnisearch.py "query" --news or brave_search.py "query" --news --freshness pd | | Quick factual answer | omnisearch.py "query" --answer or tavily_search.py "query" --answer | | Twitter OSINT | omnisearch.py "query" --social or xpoz_search.py twitter "query" | | Reddit sentiment | xpoz_search.py reddit "query" or omnisearch.py "query" --social --platform reddit | | Research papers | omnisearch.py "query" --academic (routes to Exa) | | Company intelligence | omnisearch.py "query" (auto-detects company signals) | | Multi-source corroboration | omnisearch.py "query" --parallel --verbose | | Content extraction | tavily_search.py extract URL or Firecrawl | | Domain-restricted search | tavily_search.py "query" --domains site.com or brave_search.py "query" --goggles ID |
Omnisearch vs Exa vs Firecrawl
| Need | Best Tool | Why | |------|-----------|-----| | Google SERP surface | Omnisearch (Brave) | Exa has independent index | | Social media search | Omnisearch (Xpoz) | Only tool with Twitter/Reddit | | AI answer with citations | Omnisearch (Tavily) | Agent-native answers | | Multi-provider parallel | Omnisearch --parallel | Dedup across providers | | Semantic/neural search | Exa directly | Superior relevance ranking | | Research papers | Exa --category "research paper" | Academic index | | Find similar pages | Exa exa_similar.py | Semantic similarity | | Si