Troubleshooting Guide
Caching Issues (v2.7.0+)
Cache not working / always fetching fresh
Symptoms:Stale results from cache
Symptoms:Cache growing too large
Symptoms:"Permission denied" when caching
Symptoms:---
Common Issues
"No API key found" error
Symptoms: ``` Error: No API key found for serper ``` Solutions: 1. Check `.env` exists in skill folder with `export VAR=value` format 2. Keys auto-load from skill's `.env` since v2.2.0 3. Or set in system environment: `export SERPER_API_KEY="..."` 4. Verify key format in config.json: ```json { "serper": { "api_key": "your-key" } } ``` Priority order: config.json > .env > environment variable---
Getting empty results
Symptoms:---
Rate limited
Symptoms: ``` Error: 429 Too Many Requests Error: Rate limit exceeded ``` Good news: Since v2.2.5, automatic fallback kicks in! If one provider hits rate limits, the script automatically tries the next provider. Solutions: 1. Wait for rate limit to reset (usually 1 hour or end of day) 2. Use a different provider: `-p tavily` instead of `-p serper` 3. Check free tier limits: - Serper: 2,500 free total - Tavily: 1,000/month free - Exa: 1,000/month free 4. Upgrade to paid tier for higher limits 5. Use SearXNG (self-hosted, unlimited) Fallback info: Response will include `routing.fallback_used: true` when fallback was used.---
SearXNG: "403 Forbidden"
Symptoms: ``` Error: 403 Forbidden Error: JSON format not allowed ``` Cause: Most public SearXNG instances disable JSON API to prevent bot abuse. Solution: Self-host your own instance: ```bash docker run -d -p 8080:8080 searxng/searxng ```Then enable JSON in `settings.yml`: ```yaml search: formats: - html - json # Add this! ```
Restart the container and update your config: ```json { "searxng": { "instance_url": "http://localhost:8080" } } ```
---
SearXNG: Slow responses
Symptoms:---
Auto-routing picks wrong provider
Symptoms:This shows the full analysis: ```json { "query": "how much does iPhone 16 Pro cost", "routing_decision": { "provider": "serper", "confidence": 0.68, "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} ] } ```
Solutions: 1. Override with explicit provider: `-p tavily` 2. Rephrase query to be more explicit about intent 3. Adjust `confidence_threshold` in config.json (default: 0.3)---
Config not loading
Symptoms:---
Python dependencies missing
Symptoms: ``` ModuleNotFoundError: No module named 'requests' ``` Solution: ```bash pip3 install requests ```Or install all dependencies: ```bash pip3 install -r requirements.txt ```
---
Timeout errors
Symptoms: ``` Error: Request timeout after 30s ``` Causes:---
Duplicate results
Symptoms:For single-provider results: ```bash python3 scripts/search.py -p serper -q "query" ```
---
Debug Mode
For detailed debugging:
```bash
Verbose output
python3 scripts/search.py -q "query" --verboseShow routing decision
python3 scripts/search.py -q "query" --explain-routingDry run (no actual search)
python3 scripts/search.py -q "query" --dry-runTest specific provider
python3 scripts/search.py -p tavily -q "query" --verbose ```---
Getting Help
Still stuck?1. Check the full documentation in `README.md` 2. Run the setup wizard: `python3 scripts/setup.py` 3. Review `FAQ.md` for common questions 4. Open an issue: https://github.com/robbyczgw-cla/web-search-plus/issues