# Wigolo Cache

Local-first knowledge cache, full-text and hybrid semantic search over every page...

- Repository: https://github.com/KnockOutEZ/wigolo (5517 stars)
- Category: Engineering
- License: AGPL-3.0-only
- Last updated: 2026-11-01
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add KnockOutEZ/wigolo --skill wigolo-cache -g -a claude-code -y`
Codex: `npx skills add KnockOutEZ/wigolo --skill wigolo-cache -g -a codex -y`
Cursor: `npx skills add KnockOutEZ/wigolo --skill wigolo-cache -g -a cursor -y`
Gemini CLI: `npx skills add KnockOutEZ/wigolo --skill wigolo-cache -g -a gemini-cli -y`

## Description

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 disk", "search what I've already fetched", "cache stats", or "what changed since I last looked". Also clears matching entries and re-checks cached URLs for changes.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# wigolo cache

The local knowledge store. Every page wigolo fetches, crawls, or searches lands here with clean markdown and embeddings, so the second read is instant and free. **Check the cache before any `search` or `fetch`.**

## Quick Reference

```json
// Keyword search over cached content
{ "query": "oauth2 pkce" }

// Scope to a URL glob
{ "query": "pkce", "url_pattern": "*auth0.com*" }

// Higher-recall hybrid (keyword + semantic) lookup
{ "query": "token refresh rotation", "mode": "hybrid" }

// Only entries cached after a date
{ "query": "release notes", "since": "2026-06-01" }

// Cache statistics (no query needed)
{ "stats": true }

// Re-fetch matching cached URLs and report what changed
{ "url_pattern": "*docs.example.com*", "check_changes": true }

// Clear matching entries (requires at least one filter)
{ "url_pattern": "*staging.example.com*", "clear": true }
```

## Parameters

| Parameter | Type | Default | When to use |
|-----------|------|---------|-------------|
| `query` | string | none | Full-text keyword search over cached bodies |
| `url_pattern` | string | none | URL glob filter, e.g. `"*example.com*"` |
| `since` | string | none | ISO date, only entries cached after this date |
| `clear` | boolean | false | Delete matching entries (needs query, url_pattern, or since) |
| `stats` | boolean | false | Return total URLs, size, and date range |
| `check_changes` | boolean | false | Re-fetch matching URLs, report changed/unchanged + diff summary |
| `mode` | string | "fts" | "fts" (keyword BM25) or "hybrid" (keyword + semantic, fused) |
| `limit` | number | 20 | Max results to return |
| `max_tokens_out` | number | none | Token-budget cap on returned bodies (cl100k-base) |

## The Cache-First Workflow

Cached content is instant (0ms network), free (no engine query), and already extracted (clean markdown). A miss costs nothing; a redundant fetch wastes 5-15 seconds. So the first move is always:

The rest: https://github.com/KnockOutEZ/wigolo/blob/HEAD/skills/wigolo-cache/SKILL.md
