Omnisearch Skill

SkillWeb & browsing

Unified web and social media search across 5 providers (Brave, Tavily, Xpoz, Exa, Firecrawl). Auto-routes queries to the best API, supports parallel multi-provider search with deduplication, AI-generated answers, and social media search. Triggers on web search, find news, search Twitter, search Reddit, social media search, multi-provider search, omnisearch, research news, OSINT, search for, look up, find information about.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Omnisearch Skill skill

What this skill tells your AI

The instructions your AI receives, as published by tdimino/claude-code-minoan in skills/research/omnisearch/SKILL.md and read by ahel’s review.

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.

Coverage Map

SurfaceProviderStrengthCost
Google SERPBraveWeb + news, freshness filtering, LLM Context API$5/1k
Agent answersTavilyAI-synthesized answers with citations, content extractionFree 1k/mo
Twitter/XXpozTweet search, user timelines, threads, hashtagsFree 100k/mo
RedditXpozPost search, subreddit browsing, trendingFree 100k/mo
InstagramXpozPost search, user profilesFree 100k/mo
Neural/semanticExa (cross-skill)Research papers, companies, similar pagesPer-query
Web scrapingFirecrawl (cross-skill)Search + scrape, site crawlingPer-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 ExamplePurpose
... omnisearch.py "Iran oil sanctions"Auto-route to best provider
... omnisearch.py "query" --provider braveForce specific provider
... omnisearch.py "query" --parallelAll web providers, merged + deduped
... omnisearch.py "query" --socialTwitter search via Xpoz
... omnisearch.py "query" --social --platform redditReddit search
... omnisearch.py "query" --answerAI-generated answer (Tavily/Brave)
... omnisearch.py "query" --news --parallelNews from all providers
... omnisearch.py "query" --academicRoute to Exa academic index
... omnisearch.py "query" --verboseShow routing decisions on stderr

Query Classification (auto-route):

SignalCategoryPrimary Provider
@mentions, #hashtags, "tweet", "reddit", r/xxxSocial MediaXpoz
"latest", "breaking", "today", date wordsNewsBrave
"paper", "arxiv", "study", "journal"AcademicExa
"who is", "what is", short questionsFactual QuickTavily (with answer)
"company", "startup", "funding", "IPO"Company ResearchExa
"documentation", "API", "tutorial", "SDK"Technical DocsExa
(default)General WebBrave

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 ExamplePurpose
... brave_search.py "Iran infrastructure"Web search
... brave_search.py "query" --newsDedicated news endpoint
... brave_search.py "query" --summarizeLLM Context API (AI summary)
... brave_search.py "query" --freshness pdPast day only
... brave_search.py "query" --freshness pw --extra-snippetsPast week + rich context
... brave_search.py "query" --country US --lang enLocalized results
... brave_search.py "query" --filter web,news --markdownMulti-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 ExamplePurpose
... tavily_search.py "oil prices" --answerSearch + AI answer
... tavily_search.py "query" --advanced --answerDeep search + answer
... tavily_search.py "query" --news --days 3News, last 3 days
... tavily_search.py "query" --financeFinance topic mode
... tavily_search.py "query" --answer-onlyPipe-friendly answer
... tavily_search.py "query" --domains bellingcat.comDomain-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 ExamplePurpose
... xpoz_search.py twitter "Iran conflict" -n 10Twitter search
... xpoz_search.py twitter "query" --sort latest --min-likes 10Filtered tweets
... xpoz_search.py twitter-user elikishtaini -n 10User timeline
... xpoz_search.py twitter-thread 1234567890Full thread
... xpoz_search.py twitter-hashtag IranStrikes -n 10Hashtag search
... xpoz_search.py reddit "geopolitics Iran" -n 10Reddit search
... xpoz_search.py reddit-sub worldnews -n 10 --sort hotSubreddit posts
... xpoz_search.py reddit-post abc123Reddit post + comments
... xpoz_search.py reddit-trendingTrending subreddits
... xpoz_search.py instagram "conflict" -n 10Instagram 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

TaskBest Approach
General web searchomnisearch.py "query" (auto-routes to Brave)
Breaking newsomnisearch.py "query" --news or brave_search.py "query" --news --freshness pd
Quick factual answeromnisearch.py "query" --answer or tavily_search.py "query" --answer
Twitter OSINTomnisearch.py "query" --social or xpoz_search.py twitter "query"
Reddit sentimentxpoz_search.py reddit "query" or omnisearch.py "query" --social --platform reddit
Research papersomnisearch.py "query" --academic (routes to Exa)
Company intelligenceomnisearch.py "query" (auto-detects company signals)
Multi-source corroborationomnisearch.py "query" --parallel --verbose
Content extractiontavily_search.py extract URL or Firecrawl
Domain-restricted searchtavily_search.py "query" --domains site.com or brave_search.py "query" --goggles ID

Omnisearch vs Exa vs Firecrawl

NeedBest ToolWhy
Google SERP surfaceOmnisearch (Brave)Exa has independent index
Social media searchOmnisearch (Xpoz)Only tool with Twitter/Reddit
AI answer with citationsOmnisearch (Tavily)Agent-native answers
Multi-provider parallelOmnisearch --parallelDedup across providers
Semantic/neural searchExa directlySuperior relevance ranking
Research papersExa --category "research paper"Academic index
Find similar pagesExa exa_similar.pySemantic similarity
Single page scrapeFirecrawl scrapeCleanest markdown
Full site crawlFirecrawl crawlLink following
News freshness filterOmnisearch (Brave --freshness)Hour/day/week/month
Content extractionTavily extract or FirecrawlBoth work

Common Workflows

OSINT Research (WWW-style)

# Step 1: Multi-provider news sweep
python3 ~/.claude/skills/omnisearch/scripts/omnisearch.py "Iran infrastructure strike" --news --parallel --no-text

# Step 2: Social signal check
python3 ~/.claude/skills/omnisearch/scripts/xpoz_search.py twitter "Iran infrastructure" --sort latest -n 15

# Step 3: Extract best sources
python3 ~/.claude/skills/exa-search/scripts/exa_contents.py URL1 URL2 --highlights --max-chars 5000

Quick Answer Pipeline

# AI answer with sources
python3 ~/.claude/skills/omnisearch/scripts/omnisearch.py "who commands CENTCOM" --answer --json | jq '.answer'

Cross-Platform Corroboration

# Get the same story from 3+ sources
python3 ~/.claude/skills/omnisearch/scripts/omnisearch.py "Strait of Hormuz incident" --parallel --verbose

Social Media Monitoring

# Track a developing story on Twitter
python3 ~/.claude/skills/omnisearch/scripts/xpoz_search.py twitter "#IranStrikes" --sort latest -n 20

# Check analyst activity
python3 ~/.claude/skills/omnisearch/scripts/xpoz_search.py twitter-user elikishtaini -n 10 --json

API Key Setup

Three new keys in ~/.config/env/secrets.env:

export BRAVE_API_KEY="..."      # https://api-dashboard.search.brave.com
export TAVILY_API_KEY="tvly-..."  # https://tavily.com (free tier, no CC)
export XPOZ_API_KEY="..."       # https://www.xpoz.ai

Existing keys (already configured for cross-skill routing):

export EXA_API_KEY="..."        # https://dashboard.exa.ai
export FIRECRAWL_API_KEY="..."  # https://firecrawl.dev

All scripts gracefully error with a clear message when their key is missing. You can use any subset.

Reference Documentation

FileContents
references/brave-api-reference.mdBrave Search API: endpoints, parameters, response schemas, LLM Context API
references/tavily-api-reference.mdTavily API: search, extract, answer, topics, domains
references/xpoz-api-reference.mdXpoz API: SDK methods, Twitter/Reddit/Instagram endpoints

Test Suite

python3 ~/.claude/skills/omnisearch/scripts/test_omnisearch.py --quick     # Offline + one per key
python3 ~/.claude/skills/omnisearch/scripts/test_omnisearch.py             # Full suite
python3 ~/.claude/skills/omnisearch/scripts/test_omnisearch.py --group router   # Classification tests
python3 ~/.claude/skills/omnisearch/scripts/test_omnisearch.py --group dedup    # Dedup tests
python3 ~/.claude/skills/omnisearch/scripts/test_omnisearch.py --verbose   # Detailed output
GroupTestsLive API?
routerclassify_query (7 categories), select_providers (5 scenarios), routing_table_coverageNo
dedupexact URL, normalized URL, title Jaccard, short titles, score sorting, mixed providers, URL normalize, Jaccard mathNo
formathuman-readable, markdown, JSON serialization, no-text modeNo
braveweb search, news, freshness, formattersYes
tavilybasic, advanced, answer, extractYes
xpoztwitter search, reddit, user tweetsYes
integrationauto-route, parallel, cross-skill exa, JSON CLI outputYes

Signals

GitHub stars
41
Forks
4
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
omnisearch
Source
github.com/tdimino/claude-code-minoan