Gemini Web Search
Advanced web search using Gemini CLI in headless mode with tool restriction. All searches use Gemini's google_web_search tool.
Quick Start
Basic search:
python .claude/skills/gemini-websearch/scripts/search.py "search for React 19 features"
With validation:
python .claude/skills/gemini-websearch/scripts/search.py "search for TypeScript 5.4 new features" --validate
Batch mode:
python .claude/skills/gemini-websearch/scripts/search.py queries.txt --batch --output results/
View analytics:
python .claude/skills/gemini-websearch/scripts/search.py --show-analytics
Search Workflow
Copy this checklist for research tasks:
Research Progress:
- Step 1: Check cache (1-hour TTL)
- Step 2: Formulate focused search query (prefix with "search ")
- Step 3: Execute headless Gemini search
- Step 4: Parse JSON and extract response content
- Step 5: Validate quality and relevance
- Step 6: Review search success and content quality
- Step 7: Log analytics
Step 1: Check cache MD5-keyed cache with 1-hour TTL. Automatic cleanup on expiry. Tracks cache hit rates.
Step 2: Formulate query Keep queries specific and focused. Break complex questions into multiple targeted searches. Important: Always prefix queries with "search " for best results (e.g., "search for the React 19 best practice").
Step 3: Execute headless search
gemini -p "/tool:google_web_search query:"your query" raw:true"
--yolo --output-format json
The --yolo flag auto-approves tool usage. Returns structured JSON with comprehensive search results.
Step 4: Parse response Extract search results and metadata from JSON output. Note: Gemini CLI doesn't provide citations/grounding metadata in JSON format.
Step 5: Validate results Score based on:
-
Content completeness and length
-
Search tool success verification
-
Response latency (bonus for faster searches)
-
Relevance to original query
False positive detection prevents low-quality results. Note: Gemini CLI doesn't provide citations, so validation focuses on content quality metrics.
Step 6: Review sources Verify that the search tool was called successfully and assess content quality directly from the response.
Step 7: Log analytics Track cache hits, latency, quality scores, validation failures, and query patterns.
Advanced Usage
For detailed examples see examples.md
Batch searches with validation:
python .claude/skills/gemini-websearch/scripts/search.py queries.txt
--batch
--output results/
--validate
--min-quality 0.7
Research with retry logic:
python .claude/skills/gemini-websearch/scripts/search.py "complex technical query"
--validate
--min-quality 0.7
--min-relevance 0.6
--retry-on-fail
--max-retries 2
Disable cache for fresh results:
python .claude/skills/gemini-websearch/scripts/search.py "breaking news topic" --no-cache
Clear cache:
python .claude/skills/gemini-websearch/scripts/search.py --clear-cache
Configuration
Required: Tool Restriction
Create/update .gemini/settings.json to restrict Gemini CLI to only google_web_search :
{ "tools": { "exclude": [ "file_read", "file_write", "file_search", "file_list", "web_fetch", "run_shell_command", "save_memory", "code_execution", "edit_file", "create_file", "delete_file", "list_directory", "move_file", "copy_file" ] } }
This ensures Gemini ONLY uses the web search tool, not other capabilities.
Optional: Authentication
Option 1: API key (optional)
export GEMINI_API_KEY="your-api-key"
Option 2: gcloud authentication
gcloud auth login
Option 3: Application Default Credentials
gcloud auth application-default login
Environment Variables
export SEARCH_CACHE_DIR=".cache/gemini-searches" export SEARCH_CACHE_TTL="3600" # 1 hour export ANALYTICS_LOG="search_analytics.json" export GEMINI_MODEL="gemini-2.5-flash"
Config File
Optional ~/.gemini-search/config.json :
{ "model": "gemini-2.5-flash", "cache_enabled": true, "cache_ttl": 3600, "validation": { "enabled": true, "min_quality": 0.6, "min_citations": 0, "min_relevance": 0.5, "retry_on_fail": true, "max_retries": 2 }, "analytics": { "enabled": true, "log_file": "search_analytics.json", "track_cache_hits": true, "track_latency": true, "track_quality": true } }
Command Reference
Single search:
python .claude/skills/gemini-websearch/scripts/search.py "query" [options]
Batch search:
python .claude/skills/gemini-websearch/scripts/search.py queries.txt --batch [options]
Show analytics:
python .claude/skills/gemini-websearch/scripts/search.py --show-analytics
Clear cache:
python .claude/skills/gemini-websearch/scripts/search.py --clear-cache
Options
-
--model MODEL
-
Gemini model (default: gemini-2.5-flash)
-
--no-cache
-
Disable caching
-
--validate
-
Enable result validation
-
--min-quality FLOAT
-
Minimum quality score (0-1, default: 0.6)
-
--min-citations INT
-
Minimum citation count (default: 0, not applicable for Gemini CLI)
-
--min-relevance FLOAT
-
Minimum relevance score (0-1, default: 0.5)
-
--retry-on-fail
-
Retry if validation fails
-
--max-retries INT
-
Maximum retry attempts (default: 2)
-
--output PATH
-
Output file (single) or directory (batch)
-
--batch
-
Batch mode: query arg is file path
Best Practices
-
Use headless mode for programmatic searches
-
Restrict tools in settings.json for security
-
Enable caching for repeated/related queries
-
Validate critical searches before using results
-
Monitor analytics to optimize query patterns
-
Use batch mode for multi-query research
-
Set quality thresholds based on use case
-
Always prefix queries with "search " for optimal results
-
Assess content quality directly from response text and metadata