Skip to content

shrwnsan/search-plus

v3.5.2Apache-2.0

Enhanced web search with multi-service fallback (TinyFish, Tavily, Brave, Exa, Jina, plus keyless Firecrawl/Defuddle) — works without API keys

Search Plus: Reliable Web Search for Claude Code

Stop seeing "search failed" messages. Get reliable web search and URL extraction that actually works when Claude Code's built-in search fails.

From 20% to 95% success rate - transforms Claude Code's search reliability with intelligent fallback strategies

Quick Start (2 minutes)

# 1. Install from VibeKit Marketplace
/plugin marketplace add shrwnsan/vibekit-claude-plugins
/plugin install search-plus@vibekit

# 2. Test it works — just ask Claude to research something
"Research Claude Code plugin documentation"

# 3. Extract from blocked URLs
"Extract content from https://docs.anthropic.com/en/docs/claude-code/plugins"

Why You Need This

The Problem: Claude Code's search frequently fails with:

  • ❌ "403 Forbidden" - Access denied
  • ❌ "422 Unprocessable Entity" - Schema validation errors
  • ❌ "429 Too Many Requests" - Rate limiting
  • ❌ "Did 0 searches..." - Silent failures

The Solution: Search Plus handles all these errors automatically and finds the content you need.

What It Does

🔍 Enhanced Web Search

Searches the web when Claude Code's built-in search fails:

"Research latest React best practices 2025"

📄 URL Content Extraction

Extracts content from blocked or problematic URLs:

"Extract content from https://github.com/facebook/react/blob/main/README.md"

⚡ Intelligent Fallback

Automatically tries multiple services until one works:

  • Self-hosted (optional): your SearXNG instance, tried first when SEARCH_PLUS_SEARXNG_URL is set
  • Primary: TinyFish Search (if configured)
  • Fallback 1: Tavily API (if configured)
  • Fallback 2: Brave Search API (if configured)
  • Fallback 3: Exa AI Search (if configured)
  • Fallback 4: Jina.ai Search API (if configured)
  • Fallback 5: Firecrawl Search (keyless — works with no API key)
  • URL extraction: Tavily (if configured) → Jina Reader → TinyFish (if configured) → Firecrawl → Defuddle → Wayback Machine
  • GitHub Integration: Native GitHub CLI access for repository content (when enabled)
  • Result: You get answers instead of errors

Performance Results

Based on 35 comprehensive test scenarios:

MetricClaude Code (Default)With Search PlusImprovement
Overall Success Rate0-20%95%++400%
422 Schema Errors100% failure100% successComplete fix
429 Rate Limiting100% failure90% successMajor recovery
403 Forbidden100% failure80% successHigh recovery
Silent Failures100% occurrence0%Eliminated

Tested on real-world problematic domains including documentation sites, financial platforms, and social media.

Re-measured on 3.4.0 (Oct 2026, eval-027): 33/35 scenarios with honest post-3.4 success criteria — 100% of legitimate scenarios passed, 0 silent failures; both misses are by-design failure controls (a reserved domain and a clean 404) that failed with structured, actionable errors.

When to Use Search Plus

Use instead of Claude's default search when:

  • 🚫 You see "403 Forbidden" errors
  • 🚫 You get "Did 0 searches..." responses
  • 🚫 Research fails on documentation sites
  • 🚫 Financial or news content blocks access
  • 🚫 You need reliable content extraction

Works great for:

  • 📚 Documentation research
  • 🔍 Technical blog posts
  • 📰 News and current events
  • 💼 Professional and academic research
  • 🛠️ Development best practices

Setup Options

Option 1: Quick Start (No API Keys)

Works out of the box: web search uses Firecrawl's keyless tier (rate-limited per IP), and URL extraction uses Jina Reader, Firecrawl, Defuddle, and the Wayback Machine. For heavier use, add a free key:

  • Tavily: Sign up at tavily.com → 1,000 free searches/month (recurring)
  • Jina.ai: Sign up at jina.ai → 10M free tokens (~1,000 searches)

Option 2: Enhanced Performance (Optional)

Add API keys for maximum reliability and speed:

# Add these to your environment (optional)
export SEARCH_PLUS_TAVILY_API_KEY=your_tavily_key_here
export SEARCH_PLUS_TINYFISH_API_KEY=your_tinyfish_key_here
export SEARCH_PLUS_BRAVE_API_KEY=your_brave_key_here
export SEARCH_PLUS_EXA_API_KEY=your_exa_key_here
export SEARCH_PLUS_JINA_API_KEY=your_jina_key_here
export SEARCH_PLUS_FIRECRAWL_API_KEY=your_firecrawl_key_here

Free tiers available:

  • Tavily: 1,000 searches/month free (recurring)
  • TinyFish: free key (no card); search and up to 1,000 fetched URLs/day at no cost, with browser rendering
  • Brave Search: $5 free credits/month (~1,000 queries, recurring)
  • Exa AI: 1,000 searches/month free (recurring)
  • Jina.ai Search: 10M free tokens (~1,000 searches, one-time)
  • Jina.ai Public Reader: 20 RPM URL extraction only (no key)
  • Firecrawl: keyless tier (no signup), or 1,000 credits/month with a free key
  • Defuddle: URL → markdown extraction (no key)

See docs/CONFIGURATION.md for complete setup details.

Sandbox users: Node.js fetch() does not use the proxy env vars that Claude Code's sandbox injects, so all search providers fail with DNS errors. Fix: add "node" to excludedCommands in your Claude Code settings (~/.claude/settings.json). This lets Node scripts bypass the sandbox network restrictions. On Node 22.22+ or 24+, you can instead set NODE_USE_ENV_PROXY=1 to route fetch through the proxy without disabling the sandbox. One exception: the direct markdown fetch intentionally ignores proxy settings — its SSRF guard validates DNS answers at connect time, which requires owning the connection — so in a proxied sandbox the direct step always fails and the chain falls through to the other extraction providers. Also add api.tavily.com, api.search.brave.com, api.exa.ai, s.jina.ai, r.jina.ai, api.jina.ai, api.firecrawl.dev, api.search.tinyfish.ai, api.fetch.tinyfish.ai, defuddle.md, and archive.org to allowedDomains. See docs/evals/eval-026 for the full investigation.

Option 3: GitHub CLI Integration (Advanced)

Enable native GitHub repository access for maximum reliability with GitHub URLs:

# Install GitHub CLI
brew install gh  # macOS
gh auth login    # Authenticate

# Enable GitHub integration
export SEARCH_PLUS_GITHUB_ENABLED=true

See docs/CONFIGURATION.md#github-cli-integration for complete setup details.

Usage Examples

Basic Web Search

# When Claude's search fails
"Research Python async await best practices"
"Find React hooks documentation"

URL Content Extraction

# Extract from documentation sites
"Extract content from https://nextjs.org/docs/api-reference/create-next-app"

# Handle blocked or problematic URLs
"Get the content from https://reddit.com/r/programming/comments/example"

Complex Research

# Multi-topic research
"Research microservices vs monolith pros cons 2025"

# Site-specific searches
"Search site:github.com awesome list machine learning"

Two Ways to Use Search Plus

1. Automatic (Skill)

Claude automatically uses Search Plus when it detects you need web research or encounters search errors. Just ask:

"Research the latest Claude Code plugin architecture"

2. Agent Mode (Advanced)

For complex multi-step research:

"Use the search-plus agent to investigate this topic"

FAQ

Q: Is this safe to use? A: Yes. Uses industry-standard APIs. No data stored beyond what's necessary.

Q: Will this make my searches slower? A: Actually faster on average (2.3 seconds) compared to failed searches that require retries.

Q: Do I need to pay for this? A: No. Works with free services out-of-the-box. API keys are optional for enhanced performance.

Q: Can this get me blocked from websites? A: Requests go through extraction services (Tavily, Jina, Firecrawl, Defuddle), not directly to the site, and the plugin does not spoof browser headers.

Tests

Run the offline regression suite (no API keys needed) with Node's built-in test runner:

cd plugins/search-plus/skills/meta-search/scripts
node --test tests/*.test.mjs

Note the glob is required: node --test tests/ (directory form) fails with MODULE_NOT_FOUND on Node 22. Most tests are fully offline — fetch, DNS, and the direct-fetch transport are stubbed. Three end-to-end chain tests in tests/content-quality.test.mjs need DNS and skip themselves (reported as skipped, not failed) when it is unavailable, e.g. inside a network-restricted sandbox; run them on a machine with DNS for full coverage.

CI runs the same suite on Node 22 and 24, plus claude plugin validate ., for every pull request and push to main that touches plugins/search-plus/ (workflow).

Advanced Information

License

Apache License 2.0 - See main project LICENSE for details.


Stop fighting with search failures. Install Search Plus and get reliable web research that just works.

Standards

Ships with dual manifests: a Claude Code plugin (.claude-plugin/plugin.json) and an Agent Plugins v1.0.0 package (plugin.json). The skills conform to the Agent Skills specification; CI checks the two manifests stay in sync. Commands, agents, and hooks are Claude Code-specific and not part of the portable package.