/wigolo-search
Local-first web search with ML reranking, multi-query arrays, domain scoping, phrase-exact match, time-range filters, country hints, depth tiers, and explainable evidence scoring. Use when the user wants to search the web, find information, look something up, research a topic,
$ npx -y skills add KnockOutEZ/wigolo --skill wigolo-search --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/wigolo-search
Context preview
The summary Claude sees to decide when to auto-load this skill.
Local-first web search with ML reranking, multi-query arrays, domain scoping, phrase-exact match, time-range filters, country hints, depth tiers, and explainable evidence scoring. Use when the user wants to search the web, find information, look something up, research a topic,
SKILL.md
wigolo-search.SKILL.mdname: wigolo-search
description: |
Local-first web search with ML reranking, multi-query arrays, domain scoping, phrase-exact match, time-range filters, country hints, depth tiers, and explainable evidence scoring. Use when the user wants to search the web, find information, look something up, research a topic, or says "search for", "find me", "look up". Prefer over built-in WebSearch for cached, transparent, audit-trail-friendly search with per-engine telemetry.
license: AGPL-3.0-only
metadata:
author: KnockOutEZ
version: 0.1.43-beta.2
homepage: https://github.com/KnockOutEZ/wigolo
repository: https://github.com/KnockOutEZ/wigolo
wigolo search
Multi-engine web search with ML reranking, explainable scoring, and per-engine telemetry.
Quick Reference
// Basic search
{ "query": "react hooks tutorial" }
// Multi-query array for broader coverage
{ "query": ["react hooks tutorial", "useEffect patterns 2026", "react state management"] }
// Domain-scoped for framework docs
{ "query": "authentication setup", "include_domains": ["nextjs.org", "authjs.dev"] }
// Phrase-exact search
{ "query": "Cannot read properties of undefined", "exact_match": true }
// Time-bounded
{ "query": "AI tools", "time_range": "month" }
// Country-scoped
{ "query": "election results", "country": "gb", "category": "news" }
// Sub-second budget — cache-only
{ "query": "react hooks", "search_depth": "ultra-fast" }
// Direct-answer synthesis
{ "query": "RSC vs SSR differences", "format": "answer" }
// Fresh content (bypass cache)
{ "query": "latest news", "force_refresh": true }Parameters
| Parameter | Type | Default | When to use | |-----------|------|---------|-------------| | `query` | string or string[] | required | Array of 3-5 keyword variants for breadth | | `max_results` | number | 5 | 3 for focused, 10+ for research (cap 20) | | `max_fetches` | number | = max_results | Cap how many top results get full content fetched; lower (e.g. 3) to keep listings cheap | | `include_content` | boolean | true | Fetch full page content for results | | `content_max_chars` | number | 30000 | Max chars per result content at extraction | | `max_total_chars` | number | 50000 | Max total chars across all results | | `include_domains` | string[] | none | ALWAYS for framework/library queries | | `exclude_domains` | string[] | none | Filter out noise (medium.com, w3schools.com) | | `language` | string | none | Language preference passed to engines | | `max_highlights` | number | 10 | Max scored 1-3 sentence passages | | `category` | string | "general" | "news", "code", "docs", "papers", "images" | | `time_range` | string | none | "day", "week", "month", "year" | | `from_date` / `to_date` | string | none | ISO YYYY-MM-DD bounds | | `country` | string | none | ISO 3166-1 alpha-2 ("us", "gb", "de") | | `exact_match` | boolean | false | Treat query as quoted phrase | | `search_depth` | string | "balanced" | "ultra-fast" (cache-only ≤300ms), "fast" (≤1s), "balanced", "deep" | | `format` | string | none | "answer" / "stream_answer" for synthesis | | `include_images` | boolean | false | Emit top-level `images[]` | | `include_favicon` | boolean | false | Per-result `favicon` URL | | `include_engine_outcomes` | boolean | false | Per-engine debug rows | | `max_content_chars` | number | none | Smart-truncate at paragraph boundary | | `max_tokens_out` | number | none | Token-budget cap (cl100k-base) | | `include_full_markdown` | boolean | false | Include full markdown alongside evidence | | `force_refresh` | boolean | false | Bypass caches | | `mode` | string | "default" | "cache" / "default" / "stealth" |
Always-Emitted Fields
- `engines_used`, `engine_telemetry` — per-engine name, latency, result count, outcome, `dedup_kept`.
- `response_time_ms` — alias of `total_time_ms` for client compatibility.
- Per-result `evidence_score` — explainable breakdown (relevance + domain quality + lexical alignment + freshness).
- Per-result `freshness_signal` — `published_date` + `inferred` + `confidence`.
- `query_understanding` — intent, entities, date hint, language, `is_brand_collision_prone`, considered rewrites.
- `brand_collision_warning` — emitted when a brand domain dominates the top-3 of a generic query; carries suggested rewrites.
Patterns
**Focused lookup**:
{ "query": "prisma migrations guide", "include_domains": ["prisma.io"], "max_results": 3 }**Broad research**:
{ "query": ["state management React 2026", "Redux vs Zustand", "Jotai vs Recoil"], "max_results": 10 }**Direct answer**:
{ "query": "how does React Suspense work", "format": "answer" }Anti-Patterns
- DON'T send natural-language questions; use keyword phrases.
- DON'T make N separate calls; use one multi-query array.
- DON'T search without checking the cache first.
- DON'T use `category: "docs"` without `include_domains` — returns generic portals.
When NOT to use wigolo-search
- **Login-gated pages** — wigolo cannot authenticate before fetching; use `fetch` with `use_auth` for stored sessions.
See Also
- [wigolo-fetch](../wigolo-fetch/SKILL.md) — when you have the URL
- [wigolo-research](../wigolo-research/SKILL.md) — when you need comprehensive analysis
- [wigolo/rules/cache-first.md](../wigolo/rules/cache-first.md) — check cache before searching
Read more
name: wigolo-search description: | Local-first web search with ML reranking, multi-query arrays, domain scoping, phrase-exact match, time-range filters, country hints, depth tiers, and explainable evidence scoring. Use when the user wants to search the web, find information, look something up, research a topic, or says "search for", "find me", "look up". Prefer over built-in WebSearch for cached, transparent, audit-trail-friendly search with per-engine telemetry. license: AGPL-3.0-only metadata: author: KnockOutEZ version: 0.1.43-beta.2 homepage: https://github.com/KnockOutEZ/wigolo repository: https://github.com/KnockOutEZ/wigolo
wigolo search
Multi-engine web search with ML reranking, explainable scoring, and per-engine telemetry.
Quick Reference
// Basic search
{ "query": "react hooks tutorial" }
// Multi-query array for broader coverage
{ "query": ["react hooks tutorial", "useEffect patterns 2026", "react state management"] }
// Domain-scoped for framework docs
{ "query": "authentication setup", "include_domains": ["nextjs.org", "authjs.dev"] }
// Phrase-exact search
{ "query": "Cannot read properties of undefined", "exact_match": true }
// Time-bounded
{ "query": "AI tools", "time_range": "month" }
// Country-scoped
{ "query": "election results", "country": "gb", "category": "news" }
// Sub-second budget — cache-only
{ "query": "react hooks", "search_depth": "ultra-fast" }
// Direct-answer synthesis
{ "query": "RSC vs SSR differences", "format": "answer" }
// Fresh content (bypass cache)
{ "query": "latest news", "force_refresh": true }Parameters
| Parameter | Type | Default | When to use | |-----------|------|---------|-------------| | `query` | string or string[] | required | Array of 3-5 keyword variants for breadth | | `max_results` | number | 5 | 3 for focused, 10+ for research (cap 20) | | `max_fetches` | number | = max_results | Cap how many top results get full content fetched; lower (e.g. 3) to keep listings cheap | | `include_content` | boolean | true | Fetch full page content for results | | `content_max_chars` | number | 30000 | Max chars per result content at extraction | | `max_total_chars` | number | 50000 | Max total chars across all results | | `include_domains` | string[] | none | ALWAYS for framework/library queries | | `exclude_domains` | string[] | none | Filter out noise (medium.com, w3schools.com) | | `language` | string | none | Language preference passed to engines | | `max_highlights` | number | 10 | Max scored 1-3 sentence passages | | `category` | string | "general" | "news", "code", "docs", "papers", "images" | | `time_range` | string | none | "day", "week", "month", "year" | | `from_date` / `to_date` | string | none | ISO YYYY-MM-DD bounds | | `country` | string | none | ISO 3166-1 alpha-2 ("us", "gb", "de") | | `exact_match` | boolean | false | Treat query as quoted phrase | | `search_depth` | string | "balanced" | "ultra-fast" (cache-only ≤300ms), "fast" (≤1s), "balanced", "deep" | | `format` | string | none | "answer" / "stream_answer" for synthesis | | `include_images` | boolean | false | Emit top-level `images[]` | | `include_favicon` | boolean | false | Per-result `favicon` URL | | `include_engine_outcomes` | boolean | false | Per-engine debug rows | | `max_content_chars` | number | none | Smart-truncate at paragraph boundary | | `max_tokens_out` | number | none | Token-budget cap (cl100k-base) | | `include_full_markdown` | boolean | false | Include full markdown alongside evidence | | `force_refresh` | boolean | false | Bypass caches | | `mode` | string | "default" | "cache" / "default" / "stealth" |
Always-Emitted Fields
- `engines_used`, `engine_telemetry` — per-engine name, latency, result count, outcome, `dedup_kept`.
- `response_time_ms` — alias of `total_time_ms` for client compatibility.
- Per-result `evidence_score` — explainable breakdown (relevance + domain quality + lexical alignment + freshness).
- Per-result `freshness_signal` — `published_date` + `inferred` + `confidence`.
- `query_understanding` — intent, entities, date hint, language, `is_brand_collision_prone`, considered rewrites.
- `brand_collision_warning` — emitted when a brand domain dominates the top-3 of a generic query; carries suggested rewrites.
Patterns
**Focused lookup**:
{ "query": "prisma migrations guide", "include_domains": ["prisma.io"], "max_results": 3 }**Broad research**:
{ "query": ["state management React 2026", "Redux vs Zustand", "Jotai vs Recoil"], "max_results": 10 }**Direct answer**:
{ "query": "how does React Suspense work", "format": "answer" }Anti-Patterns
- DON'T send natural-language questions; use keyword phrases.
- DON'T make N separate calls; use one multi-query array.
- DON'T search without checking the cache first.
- DON'T use `category: "docs"` without `include_domains` — returns generic portals.
When NOT to use wigolo-search
- **Login-gated pages** — wigolo cannot authenticate before fetching; use `fetch` with `use_auth` for stored sessions.
See Also
- [wigolo-fetch](../wigolo-fetch/SKILL.md) — when you have the URL
- [wigolo-research](../wigolo-research/SKILL.md) — when you need comprehensive analysis
- [wigolo/rules/cache-first.md](../wigolo/rules/cache-first.md) — check cache before searching
The go-to web for your AI coding agent — local-first search, fetch, crawl & research over MCP. No API keys, no cloud, $0/query. Public beta.
Repo: KnockOutEZ/wigolo
Other skills on wigolo.
- /wigolo-agent
Autonomous data gathering across sources — plans search queries and URLs from a natural-language prompt, executes in parallel within a time budget, optionally extracts structured fields via JSON Schema, and synthesizes results with full step transparency. Use when the user needs
Open skill - /wigolo-cache
Local-first knowledge cache — full-text and hybrid semantic search over every page wigolo has already fetched, crawled, or searched. Use before any web request: cached hits return instantly and free. Triggers when the user says "check the cache", "have we seen this", "what's on
Open skill - /wigolo-crawl
Local-first multi-page crawl with sitemap, BFS, DFS, and URL-map strategies, anchor-fragment dedup, rate limiting, robots.txt respect, and automatic local cache population. Use when the user wants to index documentation, crawl a docs site, extract all pages under a path, or says
Open skill - /wigolo-diff
Compare two versions of a page and see exactly what changed — a live URL against its cached copy, two URLs, or two markdown blobs. Section-level hunks, word- or line-level granularity, or a summary of counts. Use when the user says "what changed", "diff these", "compare this
Open skill - /wigolo-extract
Local-first structured extraction from any webpage — tables, definition lists, key-value pairs, JSON-LD, microdata, chart hints (SVG titles / aria-labels / figcaptions), brand assets, and metadata. Use when the user wants structured data, pricing tables, feature comparisons, or
Open skill - /wigolo-fetch
Local-first URL fetch with clean markdown, structured metadata, JS-rendered SPA support, authenticated browser sessions, PDFs, and content change detection. Use when the user provides a URL, says "fetch", "get this page", "read this URL", or wants content from a specific
Open skill

