# web-search-plus > Unified search skill with Intelligent Auto-Routing. Uses multi-signal analysis to automatically select between Serper (Google), Tavily (Research), and Exa (Neural) with confidence scoring. - Author: shuakipie87 - Repository: shuakipie87/moltbot-skills - Version: 20260128224826 - Stars: 0 - Forks: 0 - Last Updated: 2026-02-06 - Source: https://github.com/shuakipie87/moltbot-skills - Web: https://mule.run/skillshub/@@shuakipie87/moltbot-skills~web-search-plus:20260128224826 --- --- name: web-search-plus version: 2.1.7 description: Unified search skill with Intelligent Auto-Routing. Uses multi-signal analysis to automatically select between Serper (Google), Tavily (Research), and Exa (Neural) with confidence scoring. tags: [search, web-search, serper, tavily, exa, google, research, semantic-search, auto-routing, multi-provider, shopping, free-tier] --- # Web Search Plus Multi-provider web search with **Intelligent Auto-Routing**: Serper (Google), Tavily (Research), Exa (Neural). **NEW in v2.1.0**: Intelligent multi-signal analysis with confidence scoring! --- ## โš ๏ธ Important: Don't Modify Core Clawdbot Config **Tavily, Serper, and Exa are NOT core Clawdbot providers.** โŒ **DON'T** add this to `~/.clawdbot/clawdbot.json`: ```json "tools": { "web": { "search": { "provider": "tavily" // WRONG - will cause errors! } } } ``` โœ… **DO** use this skill's scripts with environment variables: ```bash export TAVILY_API_KEY="your-key" python3 scripts/search.py -q "your query" ``` Core Clawdbot only supports `brave` as the built-in web search provider. This skill adds Serper, Tavily, and Exa as **additional** options via its own scripts. --- ## ๐Ÿง  Intelligent Auto-Routing No need to choose a provider โ€” just search! The skill uses **multi-signal analysis** to understand your query intent: ```bash # These queries are intelligently routed with confidence scoring: python3 scripts/search.py -q "how much does iPhone 16 cost" # โ†’ Serper (68% MEDIUM) python3 scripts/search.py -q "how does quantum entanglement work" # โ†’ Tavily (86% HIGH) python3 scripts/search.py -q "startups similar to Notion" # โ†’ Exa (76% HIGH) python3 scripts/search.py -q "MacBook Pro M3 specs review" # โ†’ Serper (70% HIGH) python3 scripts/search.py -q "explain pros and cons of React" # โ†’ Tavily (85% HIGH) python3 scripts/search.py -q "companies like stripe.com" # โ†’ Exa (100% HIGH) ``` ### How It Works The routing engine analyzes multiple signals: #### ๐Ÿ›’ Shopping Intent โ†’ Serper | Signal Type | Examples | Weight | |-------------|----------|--------| | Price patterns | "how much", "price of", "cost of" | HIGH | | Purchase intent | "buy", "purchase", "order", "where to buy" | HIGH | | Deal signals | "deal", "discount", "cheap", "best price" | MEDIUM | | Product + Brand | "iPhone 16", "Sony headphones" + specs/review | HIGH | | Local business | "near me", "restaurants", "hotels" | HIGH | #### ๐Ÿ“š Research Intent โ†’ Tavily | Signal Type | Examples | Weight | |-------------|----------|--------| | Explanation | "how does", "why does", "explain", "what is" | HIGH | | Analysis | "compare", "pros and cons", "difference between" | HIGH | | Learning | "tutorial", "guide", "understand", "learn" | MEDIUM | | Depth | "in-depth", "comprehensive", "detailed" | MEDIUM | | Complex queries | Long, multi-clause questions | BONUS | #### ๐Ÿ” Discovery Intent โ†’ Exa | Signal Type | Examples | Weight | |-------------|----------|--------| | Similarity | "similar to", "alternatives to", "competitors" | VERY HIGH | | Company discovery | "companies like", "startups doing", "who else" | HIGH | | URL detection | Any URL or domain (stripe.com) | VERY HIGH | | Academic | "arxiv", "research papers", "github projects" | HIGH | | Funding | "Series A", "YC", "funded startup" | HIGH | ### Confidence Scoring Every routing decision includes a confidence level: | Confidence | Level | Meaning | |------------|-------|---------| | 70-100% | **HIGH** | Strong signal match, very reliable | | 40-69% | **MEDIUM** | Good match, should work well | | 0-39% | **LOW** | Ambiguous query, using fallback | ### Debug Routing Decisions See the full analysis: ```bash python3 scripts/search.py --explain-routing -q "how much does iPhone 16 Pro cost" ``` Output: ```json { "query": "how much does iPhone 16 Pro cost", "routing_decision": { "provider": "serper", "confidence": 0.68, "confidence_level": "medium", "reason": "moderate_confidence_match" }, "scores": {"serper": 7.0, "tavily": 0.0, "exa": 0.0}, "top_signals": [ {"matched": "how much", "weight": 4.0}, {"matched": "brand + product detected", "weight": 3.0} ], "query_analysis": { "word_count": 7, "is_complex": false, "has_url": null, "recency_focused": false } } ``` --- ## ๐Ÿ” When to Use This Skill vs Built-in Brave Search ### Use **Built-in Brave Search** when: - โœ… General web searches (news, info, questions) - โœ… Privacy is important - โœ… Quick lookups without specific requirements ### Use **web-search-plus** when: #### โ†’ **Serper** (Google results): - ๐Ÿ›๏ธ **Product specs, prices, shopping** - "Compare iPhone 16 vs Samsung S24" - ๐Ÿ“ **Local businesses, places** - "Best pizza in Vienna" - ๐ŸŽฏ **"Google it"** - Explicitly wants Google results - ๐Ÿ“ฐ **Shopping/images/news** - `--type shopping/images/news` - ๐Ÿ† **Knowledge Graph** - Structured info (prices, ratings, etc.) #### โ†’ **Tavily** (AI-optimized research): - ๐Ÿ“š **Research questions** - "How does quantum computing work?" - ๐Ÿ”ฌ **Deep dives** - Complex multi-part questions - ๐Ÿ“„ **Full page content** - Not just snippets (`--raw-content`) - ๐ŸŽ“ **Academic research** - Synthesized answers - ๐Ÿ”’ **Domain filtering** - `--include-domains` for trusted sources #### โ†’ **Exa** (Neural semantic search): - ๐Ÿ”— **Similar pages** - "Sites like OpenAI.com" (`--similar-url`) - ๐Ÿข **Company discovery** - "AI companies like Anthropic" - ๐Ÿ“ **Research papers** - `--category "research paper"` - ๐Ÿ’ป **GitHub projects** - `--category github` - ๐Ÿ“… **Date-specific** - `--start-date` / `--end-date` --- ## Provider Comparison | Feature | Serper | Tavily | Exa | |---------|:------:|:------:|:---:| | Speed | โšกโšกโšก | โšกโšก | โšกโšก | | Factual Accuracy | โญโญโญ | โญโญโญ | โญโญ | | Semantic Understanding | โญ | โญโญ | โญโญโญ | | Research Quality | โญโญ | โญโญโญ | โญโญ | | Full Page Content | โœ— | โœ“ | โœ“ | | Shopping/Local | โœ“ | โœ— | โœ— | | Similar Pages | โœ— | โœ— | โœ“ | | Knowledge Graph | โœ“ | โœ— | โœ— | --- ## Usage Examples ### Auto-Routed (Recommended) ```bash python3 scripts/search.py -q "iPhone 16 Pro Max price" # โ†’ Serper python3 scripts/search.py -q "how does HTTPS encryption work" # โ†’ Tavily python3 scripts/search.py -q "startups similar to Notion" # โ†’ Exa ``` ### Explicit Provider ```bash python3 scripts/search.py -p serper -q "weather Vienna" --type weather python3 scripts/search.py -p tavily -q "quantum computing" --depth advanced python3 scripts/search.py -p exa --similar-url "https://stripe.com" --category company ``` --- ## Configuration ### config.json ```json { "auto_routing": { "enabled": true, "fallback_provider": "serper", "confidence_threshold": 0.3, "disabled_providers": [] }, "serper": {"country": "us", "language": "en"}, "tavily": {"depth": "advanced"}, "exa": {"type": "neural"} } ``` --- ## Output Format ```json { "provider": "serper", "query": "iPhone 16 price", "results": [{"title": "...", "url": "...", "snippet": "...", "score": 0.95}], "answer": "Synthesized answer...", "routing": { "auto_routed": true, "provider": "serper", "confidence": 0.78, "confidence_level": "high", "reason": "high_confidence_match", "top_signals": [{"matched": "price", "weight": 3.0}] } } ``` --- ## Environment Setup ```bash # In your .env file (use 'export' prefix!): export SERPER_API_KEY="your-key" # https://serper.dev export TAVILY_API_KEY="your-key" # https://tavily.com export EXA_API_KEY="your-key" # https://exa.ai # Then load with: source .env ``` --- ## FAQ ### General **Q: How does auto-routing decide which provider to use?** > Multi-signal analysis scores each provider based on: price patterns, explanation phrases, similarity keywords, URLs, product+brand combos, and query complexity. Highest score wins. Use `--explain-routing` to see the decision breakdown. **Q: What if it picks the wrong provider?** > Override with `-p serper/tavily/exa`. Check `--explain-routing` to understand why it chose differently. **Q: What does "low confidence" mean?** > Query is ambiguous (e.g., "Tesla" could be cars, stock, or company). Falls back to Serper. Results may vary. **Q: Can I disable a provider?** > Yes! In config.json: `"disabled_providers": ["exa"]` ### API Keys **Q: Which API keys do I need?** > At minimum ONE key. You can use just Serper, just Tavily, or all three. Missing keys = that provider is skipped. **Q: Where do I get API keys?** > - Serper: https://serper.dev (2,500 free queries, no credit card) > - Tavily: https://tavily.com (1,000 free searches/month) > - Exa: https://exa.ai (1,000 free searches/month) **Q: How do I set API keys?** > Create `.env` in your workspace: > ```bash > export SERPER_API_KEY="your-key" > export TAVILY_API_KEY="your-key" > export EXA_API_KEY="your-key" > ``` > Then `source .env` or add to your shell profile. ### Routing Details **Q: How do I know which provider handled my search?** > Check `routing.provider` in JSON output, or `[๐Ÿ” Searched with: Provider]` in chat responses. **Q: Why does it sometimes choose Serper for research questions?** > If the query has brand/product signals (e.g., "how does Tesla FSD work"), shopping intent may outweigh research intent. Override with `-p tavily`. **Q: What's the confidence threshold?** > Default: 0.3 (30%). Below this = low confidence, uses fallback. Adjustable in config.json. ### Troubleshooting **Q: "No API key found" error?** > Make sure keys are exported (not just set): `export SERPER_API_KEY="..."` and sourced. **Q: Getting empty results?** > 1. Check API key is valid > 2. Try a different provider with `-p` > 3. Some queries have no results (very niche topics) **Q: Rate limited?** > Each provider has limits. Spread queries across providers or wait. Serper: 2,500 free total, Tavily: 1,000/month free. ### For Clawdbot Users **Q: How do I use this in chat?** > Just ask! Clawdbot auto-detects search intent. Or explicitly: "search with web-search-plus for..." **Q: Does it replace built-in Brave Search?** > No, it's complementary. Use Brave for quick lookups, web-search-plus for research/shopping/discovery. **Q: Can I see which provider was used?** > Yes! SOUL.md can include attribution: `[๐Ÿ” Searched with: Serper/Tavily/Exa]`