GetNotes Tools
KnockOutEZ/wigolo
Tool นี้คืออะไร
wigolo เป็นเครื่องมืออัจฉริยะบนเว็บแบบ local-first สำหรับ AI agent ที่ช่วยให้ AI สามารถค้นหา ดึงข้อมูล รวบรวมข้อมูล และวิเคราะห์เว็บได้อย่างอิสระ โดยไม่ต้องใช้ API key, ไม่พึ่งคลาวด์ และไม่มีค่าใช้จ่ายตามการใช้งาน
ข้อมูลโปรเจกต์
ดาว
732
Forks
52
License
ไม่ระบุ
อัปเดต GitHub ล่าสุด
17 ก.ค. 2569
เพิ่มใน GetNotes
18 ก.ค. 2569
Repository
KnockOutEZ/wigolo
รูปแบบ
เหมาะกับงาน
เหมาะกับอาชีพ
Ecosystem
Node.js · TypeScript
แปลและเรียบเรียงโดย AI
เนื้อหาฉบับภาษาไทย
ใช้อ่านเพื่อทำความเข้าใจเบื้องต้น โปรดตรวจสอบรายละเอียดสำคัญกับเอกสารต้นฉบับด้านล่าง
ระบบอัจฉริยะบนเว็บแบบ Local-first สำหรับ AI agent — ไม่ต้องใช้คีย์, ไม่ต้องพึ่งคลาวด์, ไม่มีค่าใช้จ่ายตามการใช้งาน
ใช้งานได้กับ Claude Code · Cursor · Codex · Gemini CLI · VS Code · Windsurf · Zed · Antigravity และอื่นๆ LangChain · CrewAI · LlamaIndex · Vercel AI SDK · n8n & self-hosted agents · any MCP client · plain REST
Quickstart · Tools · Why wigolo · Benchmark · Docs · Examples · Feedback · FAQ
wigolo มอบพื้นผิวที่ทนทานหนึ่งเดียวให้กับ AI agent สำหรับทุกสิ่งที่เกี่ยวข้องกับเว็บ — การค้นหา, การดึงข้อมูล, การรวบรวมข้อมูล, การแยกข้อมูล, การแคช, การค้นหาสิ่งที่คล้ายกัน, การวิจัย และลูปการรวบรวมข้อมูลแบบอัตโนมัติ มันทำงานได้ทุกที่ที่ agent ของคุณทำงาน: ในฐานะเซิร์ฟเวอร์ MCP ถัดจาก coding agent ของคุณ, ในฐานะ REST/MCP endpoint บนเครื่องที่ self-hosted agent ของคุณอยู่, หรือฝังผ่าน SDK ภายในแอปของคุณเอง เครื่องมือหลักไม่จำเป็นต้องใช้ API key, ไม่มีอะไรที่มันแตะต้องจะออกจาก ~/.wigolo/ และไม่มีค่าใช้จ่ายที่จะเพิ่มขึ้นตามปริมาณการคิดของ agent ของคุณ
เริ่มต้นใช้งานอย่างรวดเร็ว
ต้องใช้ Node ≥ 20 และพื้นที่ว่างบนดิสก์ประมาณ 1.5 GB รองรับ macOS, Linux และ Windows
คำสั่งเดียวเชื่อมต่อเอนจินภายในเครื่องเข้ากับ agent ของคุณ init เป็นแบบ อัตโนมัติโดยค่าเริ่มต้น — ไม่มีข้อความแจ้งเตือน, ปลอดภัยในสคริปต์และ CI — และทำการ ตั้งค่าทั้งหมด: มันจะดาวน์โหลดเอนจินเบราว์เซอร์และโมเดลบนอุปกรณ์, รันการตรวจสอบสุขภาพ, และพิมพ์สรุปแต่ละส่วนประกอบ เพื่อให้ปัญหาการตั้งค่าใดๆ ปรากฏขึ้นที่นี่ทันที ไม่ใช่เงียบๆ ในการเรียกใช้ครั้งแรกของ agent ของคุณ:
npx wigolo init --agents=<your-agent><your-agent>— หนึ่งหรือหลายรายการจากclaude-code·cursor·codex·gemini-cli·vscode·windsurf·zed·antigravity(คั่นด้วยเครื่องหมายจุลภาค) wigolo จะเขียนการกำหนดค่า MCP และคำแนะนำให้คุณ- ไคลเอนต์ MCP อื่นๆ? ละเว้น
--agentsและลงทะเบียนnpx -y wigoloด้วยตัวคุณเอง — คู่มือการติดตั้ง มีบล็อกการกำหนดค่าที่แน่นอนสำหรับไคลเอนต์ทุกตัว รวมถึง Docker, Homebrew และช่องทางไบนารีไฟล์เดียว - ชอบการแจ้งเตือน?
--interactiveคือขั้นตอนแบบข้อความธรรมดา;--wizardคือ TUI ของเทอร์มินัลแบบเต็ม - ต้องการข้ามการดาวน์โหลด?
--no-warmupจะเลื่อนทุกอย่างไปใช้เมื่อมีการใช้งานครั้งแรก การดาวน์โหลดส่วนประกอบที่ล้มเหลวจะไม่ทำให้การตั้งค่าล้มเหลว — init จะรายงานสิ่งที่ยังไม่พร้อมพร้อมวิธีแก้ไขที่ถูกต้องและยังคงเชื่อมต่อ agent ของคุณ
นั่นคือการตั้งค่าทั้งหมด — การค้นหา, การดึงข้อมูล, การรวบรวมข้อมูล, การแยกข้อมูล, การแคช และการค้นหาสิ่งที่คล้ายกัน ทำงานได้โดยไม่ต้องใช้ API key ตรวจสอบว่ามันทำงานได้ดีเมื่อไหร่ก็ได้:
npx wigolo doctorไม่เหมาะกับคุณ? npx wigolo config --uninstall --yes จะลบทุกอย่างออกอย่างสะอาด คุณยังสามารถวาง คู่มือการติดตั้ง ให้กับ AI assistant ใดๆ และให้มันทำการตั้งค่าได้ — มันถูกเขียนมาให้เป็นแบบ self-contained
แนะนำ — คีย์ฟรีทำให้ research และ agent โดดเด่น
การค้นหา, การดึงข้อมูล, การรวบรวมข้อมูล, การแยกข้อมูล, การแคช และการค้นหาสิ่งที่คล้ายกันนั้น ไม่ต้องใช้คีย์เลย แต่ research, agent และ search format=answer ใช้ LLM เพื่อ เขียน คำตอบที่สังเคราะห์และอ้างอิง — หากไม่มี LLM พวกมันจะส่งคืนข้อมูลสรุปดิบและหลักฐานให้ agent ของคุณนำไปประกอบ ซึ่งเป็นประสบการณ์ที่ด้อยกว่ามาก คีย์ Gemini ฟรีก็เพียงพอแล้ว และเป็นการอัปเกรดคุณภาพที่สำคัญที่สุดที่คุณสามารถทำได้:
export WIGOLO_LLM_PROVIDER=gemini
export GEMINI_API_KEY=<free-key> # รับได้ที่ aistudio.google.com/apikey — ระดับฟรีก็เพียงพอแล้วผู้ให้บริการใดๆ ก็ใช้งานได้ (anthropic · openai · groq) หรือจะใช้งานแบบ local และไม่ต้องใช้คีย์เลยด้วย WIGOLO_LLM_PROVIDER=ollama (หรือ URL ที่เข้ากันได้กับ OpenAI) ตั้งค่าใน shell ของคุณหรือในบล็อก env ของ MCP agent ของคุณ ผู้ให้บริการ, โมเดล และลำดับโมเดล local แบบไม่ต้องใช้คีย์: คู่มือการกำหนดค่า
สิ่งที่ agent ของคุณได้รับกลับมา
ไม่ใช่แค่ส่วนย่อ — แต่เป็นหลักฐาน ผลการค้นหาทุกรายการจะมาพร้อมกับข้อความที่คัดลอกมาตรงตามต้นฉบับที่ระบุตำแหน่งที่แน่นอนในแหล่งที่มา, ID การอ้างอิงที่ agent สามารถอ้างถึงได้ และคะแนนที่สามารถตรวจสอบได้ (รูปแบบจริงที่ย่อมา):
{
"results": [{
"title": "Logical replication - PostgreSQL docs",
"url": "https://www.postgresql.org/docs/current/logical-replication.html",
"excerpt": "Logical replication is a method of replicating data objects…",
"citation_id": "src-1",
"source_span": { "start": 1042, "end": 1305 }, // byte-exact provenance
"evidence_score": { "final": 0.86, "semantic": 0.91, "lexical": 0.78, "engine_consensus": 3 }
}],
"citations": [{ "id": "src-1", "url": "…" }],
"freshness_signal": { "published": "2026-05-12", "confidence": "high" }
}ผลลัพธ์ที่อ่อนแอจะถูก wigolo's scorer ตั้งค่าสถานะว่าเป็นขยะ, เอนจินที่ล้มเหลวจะถูกรายงาน, แคชที่ล้าสมัยจะถูกระบุ — agent จะรู้เสมอว่ามันกำลังยืนอยู่บนอะไร สัญญาการตอบกลับฉบับเต็มสำหรับแต่ละเครื่องมือ: เอกสารอ้างอิงเครื่องมือ
เครื่องมือ
| เครื่องมือ | สิ่งที่ทำ |
|---|---|
🔎 search | การค้นหาเว็บแบบหลายเอนจิน (18 อะแดปเตอร์โดยตรง) พร้อมการรวมอันดับ, การจัดอันดับใหม่ด้วย ML และคะแนนต่อผลลัพธ์ที่อธิบายได้ ส่ง อาร์เรย์ ของคำค้นหาเพื่อการค้นหาแบบขนาน |
📄 fetch | โหลด URL หนึ่งรายการผ่านเราเตอร์แบบแบ่งชั้นที่ปรับระดับอัตโนมัติจาก HTTP ธรรมดาไปยังเอนจินเบราว์เซอร์แบบ headless เมื่อเจอการท้าทายจาก anti-bot หรือ SPA shells มาร์กดาวน์ที่สะอาด + เมตาดาต้า + ลิงก |
ทำไมถึงแตกต่าง
wigolo ไม่ใช่ตัวเลือกฟรีที่คุณต้องยอมรับไปก่อนจนกว่างบประมาณจะพร้อม — มันถูกสร้างมาให้ทัดเทียมกับบริการแบบเสียเงินในสายงานเดียวกัน และมีหลักฐานยืนยัน สิ่งที่ทำให้มันแตกต่างอย่างแท้จริงคือ:
- สร้างมาสำหรับเอเจนต์ ไม่ใช่มนุษย์ การเรียก MCP หนึ่งครั้งจะกระจายการสอบถามหลายรายการไปยังหลายเอนจินพร้อมกัน — ซึ่งเครื่องมือโฮสต์แบบวนซ้ำไม่สามารถทำซ้ำได้ — พร้อมการให้คะแนนต่อผลลัพธ์ที่โปร่งใสและเอาต์พุตที่คำนึงถึงงบประมาณ
- เอาต์พุตที่ซื่อสัตย์ แคชเก่า, การดึงข้อมูลล้มเหลว, แบ็กเอนด์ที่เสื่อมสภาพ และการตัดทอน จะถูกแสดงในผลลัพธ์ ไม่เคยถูกปลอมแปลงเป็นข้อมูลว่างเปล่าแต่สำเร็จ เมื่อหน้าเว็บที่ป้องกันด้วยบอทไม่สามารถอ่านได้ คุณจะได้รับข้อผิดพลาด
blocked_by_challengeที่ระบุไว้ — ไม่ใช่แค่เชลล์ของหน้าท้าทายที่ปลอมตัวเป็นเนื้อหา - $0 ต่อการสอบถาม, สอบถามซ้ำได้ฟรี การค้นหาเริ่มต้นจะสื่อสารกับเอนจินสาธารณะผ่านอะแดปเตอร์โดยตรง; reranker และ embeddings ทำงานบนอุปกรณ์ ทุกการตอบสนองจะถูกแคชไว้ ดังนั้นการถามซ้ำจึงรวดเร็วและไม่มีค่าใช้จ่าย
- เป็นส่วนตัวโดยค่าเริ่มต้น แคช, embeddings, โมเดล และการกำหนดค่าจะอยู่ใน
~/.wigolo/ไม่มีข้อมูลใดๆ ไปถึงบุคคลที่สาม เว้นแต่คุณจะเลือกใช้ LLM สำหรับการสังเคราะห์อย่างชัดเจน
wigolo เป็นเลเยอร์เว็บที่เน้นสำหรับเอเจนต์ของคุณ — ไม่ใช่ SaaS ที่โฮสต์, ฐานข้อมูลเวกเตอร์ที่แอปอื่นสอบถาม, หรือแพลตฟอร์มการสแครปข้อมูลขนาดใหญ่ ภายในขอบเขตนั้น มันสามารถแข่งขันกับบริการแบบเสียเงินในด้านคุณภาพของผลลัพธ์ได้ — และไม่มีการคิดค่าบริการ, ไม่มีคีย์ API, และไม่มีค่าใช้จ่ายในการส่งออกข้อมูล
นี่คือตัวอย่างผลลัพธ์จริงหนึ่งรายการที่ถูกวิเคราะห์ — รวมถึงเอนจินที่ล้มเหลวและผลลัพธ์ที่อ่อนแอ เพราะสิ่งเหล่านั้นก็เป็นส่วนหนึ่งของคำตอบเช่นกัน:
เกณฑ์มาตรฐาน
เครื่องมือทั้งสี่บรรจบกันที่คำตอบหลักเดียวกัน — และมีเพียงหนึ่งในนั้นที่ส่งหลักฐานที่ตรงตามตัวอักษรและระบุตำแหน่งไบต์กลับมาด้วย
การสอบถามแบบเย็นหนึ่งครั้ง รันสดภายในเซสชัน Claude Fable 5 เดียว และกระจายไปยังเครื่องมือเว็บสี่ตัวอย่างเท่าเทียมกัน — WebSearch ในตัว, wigolo, Tavily และ Exa — จากนั้นรายงานโดยเอเจนต์เองภายใต้กฎเดียว: ตัดสินจากหลักฐานเท่านั้น ไม่มีการลำเอียง ทั้งสี่บรรจบกันที่คำตอบเดียวกันและแหล่งที่มาอันดับต้นๆ เดียวกัน — แสดงให้เห็นถึงความเท่าเทียม ไม่ใช่แค่การกล่าวอ้าง wigolo เพียงอย่างเดียวที่ส่งคืนข้อความที่ตรงตามตัวอักษรที่ระบุตำแหน่งไบต์ของแหล่งที่มา, การแยกคะแนนที่อธิบายได้, และการวัดระยะไกลต่อเอนจินแบบสด — และเมื่อผลลัพธ์สองรายการอ่อนแอ ตัวให้คะแนนของมันเองก็ระบุว่าเป็นข้อมูลขยะบนหน้าจอ เครื่องมือคลาวด์ก็มีข้อดีของมันเช่นกัน: Exa แสดงเมทริกซ์เปรียบเทียบของเอกสารทางการได้ครบถ้วน การสอบถามที่ซื่อสัตย์หนึ่งครั้ง ไม่ใช่กระดานผู้นำ — ลองรันด้วยตัวคุณเองแล้วคุณจะเห็นรูปแบบเดียวกัน
การต่อสู้เดียวกัน ฟิสิกส์ต่างกัน
| wigolo | Firecrawl | Exa | Tavily | |
|---|---|---|---|---|
| Multi-engine web search | ✅ | ✅ | ✅ | ✅ |
| Fetch & structured extraction | ✅ | ✅ | ✅ | ✅ |
| Whole-site crawl & map | ✅ | ✅ | — | ✅ |
| Verbatim excerpts pinned to byte-offset source spans | ✅ | — | — | — |
| Explainable per-result score decomposition | ✅ | — | — | — |
| Persistent local memory — re-query instantly, offline | ✅ | — | — | — |
| Query data stays on your machine | ✅ | — | — | — |
| API key / account | none | required | required | required |
| Cost per query | $0 | metered | metered | metered |
สถานะคุณสมบัติ ณ เดือนกรกฎาคม 2026 — ตรวจสอบเอกสารของผู้จำหน่ายแต่ละรายสำหรับสถานะปัจจุบัน
แถวสุดท้ายคือสิ่งที่สะสม — เอเจนต์ไม่ได้ถามครั้งเดียว แต่ถามเป็นชุด:
นอกเหนือจาก Editor ของคุณ
เครื่องมือสิบชนิดเดียวกันนี้รองรับเอเจนต์ทุกประเภท ผ่านอินเทอร์เฟซใดก็ได้ที่เหมาะสม — MCP สำหรับเอเจนต์การเขียนโค้ด, REST สำหรับทุกสิ่งอื่น, SDKs สำหรับการฝัง, framework wrappers สำหรับการใช้งาน
REST API — wigolo serve
หนึ่งกระบวนการจะเปิดเผย REST API แบบ plain-JSON ถัดจากการขนส่ง MCP ไม่จำเป็นต้องมีไคลเอนต์ MCP — เพียงแค่ curl:
wigolo serve # 127.0.0.1:3333 — loopback is open; off-loopback requires a token
curl -sX POST http://127.0.0.1:3333/v1/search \
-H 'Content-Type: application/json' \
-d '{"query":"local-first software","max_results":5}'POST /v1/{tool} ครอบคลุมเครื่องมือทั้งสิบชนิด, GET /openapi.json คือสัญญา OpenAPI 3.1, และ /mcp + /sse ให้บริการไคลเอนต์ MCP ระยะไกลจากพอร์ตเดียวกัน หากผูกนอก loopback จะต้องใช้ bearer token — เซิร์ฟเวอร์จะล้มเหลวแบบปิดแทนที่จะเปิดกว้างโดยไม่ตั้งใจ ชี้ n8n, ผู้ช่วยสไตล์ Hermes, หรือเอเจนต์ที่โฮสต์เองใดๆ ไปที่มัน → REST API
SDKs — TypeScript & Python
ไคลเอนต์แบบบางและมีประเภทพร้อมโหมดโลคัลแบบฝังที่ค้นหาหรือเริ่ม daemon ให้คุณ — ไม่ต้องมีขั้นตอน serve แยกต่างหาก
TypeScript — npm install wigolo-sdk (ไม่มีการพึ่งพา; Node / Bun / Deno / edge):
import { createLocalClient } from 'wigolo-sdk/local';
const { client, close } = await createLocalClient(); // reuse a running daemon, or spawn one
const res = await client.search({ query: 'local-first web search', max_results: 5 });
console.log(res.results.map((r) => r.title));
await close(); // stops the daemon only if this call spawned itPython — pip install wigolo (เฉพาะไลบรารีมาตรฐาน; sync + async):
from wigolo import local_client
with local_client() as client: # reuse a healthy daemon, or spawn one
res = client.search(query="local-first web search", max_results=5)
for r in res["results"]:
print(r["title"], r["url"])การผสานรวมกับ Framework
ใส่เครื่องมือของ wigolo ลงใน framework ที่คุณใช้อยู่แล้ว — อินเทอร์เฟซเครื่องมือทั้งสิบชนิด รวมถึง cache / find_similar / research / agent ที่เครื่องมือเว็บของ framework ส่วนใหญ่ไม่มี:
| Framework | Package | สิ่งที่คุณได้รับ |
|---|---|---|
| LangChain | wigolo-langchain | แต่ละเครื่องมือเป็น BaseTool, บวกกับ BaseRetriever สำหรับ search / find_similar สำหรับ RAG |
| CrewAI | wigolo-crewai | wigolo_tools() → มอบชุดเครื่องมือให้กับ crew ใดๆ |
| LlamaIndex | wigolo-llamaindex | BaseReader ที่โหลดหน้าเว็บที่ดึงมา / คลอว์ล / ค้นหาเป็นเอกสาร |
| Vercel AI SDK | wigolo-vercel-ai-sdk | tool factories สำหรับ generateText / streamText, เป็นมิตรกับ edge |
Docker
# stdio MCP — wire it into any MCP client as command: docker
docker run -i --rm -v wigolo-data:/data ghcr.io/knockoutez/wigolo
# HTTP server for remote / multi-client use
docker run -p 3333:3333 -v wigolo-data:/data \
-e WIGOLO_API_TOKEN=a-long-random-secret \
ghcr.io/knockoutez/wigolo serve --host 0.0.0.0อิมเมจขนาดเล็กจะโหลดโมเดลเข้าสู่ volume แบบ lazy-load; :full จะติดตั้งเอนจินเบราว์เซอร์ล่วงหน้า มีอยู่ใน Docker Hub ในชื่อ towhid69420/wigolo ด้วย → การติดตั้งและช่องทางทั้งหมด
ทักษะของเอเจนต์
แคตตาล็อกทักษะ 11 รายการสอนให้เอเจนต์การเขียนโค้ดของคุณใช้งานแต่ละเครื่องมือได้ดี — ติดตั้งโดย init, จัดการด้วย wigolo skills add|list|remove → ทักษะ
ข้อสังเกตที่ซื่อสัตย์สำหรับผู้ที่โฮสต์เอง: ไซต์บางแห่งที่ป้องกันด้วย challenge จะให้คะแนนชื่อเสียง IP ดังนั้น IP ของศูนย์ข้อมูลจะไม่สามารถผ่านกำแพงที่การเชื่อมต่อที่บ้านทำได้ wigolo จะระบุความล้มเหลวเหล่านั้นแทนที่จะปลอมแปลง และ คู่มือการโฮสต์เอง ครอบคลุมคำตอบของพร็อกซีแบบเลือกใช้
ประวัติ Star
แผนภูมิสด — อัปเดตตัวเอง หากยังคงเพิ่มขึ้นเมื่อคุณอ่านข้อความนี้ เพิ่ม ⭐
สถาปัตยกรรม
กระบวนการ Node เดียวที่สื่อสารด้วย MCP (JSON-RPC ผ่าน stdio) ทุกอย่างที่หนักจะอยู่ภายในเครื่องและโหลดแบบ lazy-load ดังนั้นการติดตั้งแบบไม่มีคีย์จึงไม่ต้องเสียค่าใช้จ่ายสำหรับส่วนที่ไม่ได้ใช้งาน
flowchart TD
A["🤖 AI agent<br/>any MCP client · REST · SDK"]
A -->|MCP over stdio| B["<b>wigolo</b><br/>10 tools · dynamic instructions<br/>in-process browser pool + cache + models"]
B --> C{"Tool layer"}
C --> T1["search · fetch · crawl · extract"]
C --> T2["cache · find_similar · research · agent"]
T1 --> F["⚙️ Fetch router<br/>tiered escalation, learned per domain"]
T1 --> S["⚙️ Search<br/>18 engines → rank fusion → ML rerank<br/><i>explainable evidence score</i>"]
T2 --> DB[("🗄️ Local cache<br/>keyword + vector index")]
T2 --> ML["🧠 On-device ML<br/>embeddings + reranker"]
F -.->|optional| LLM["☁️ LLM<br/>synthesis only · opt-in"]
S -.->|optional| SX["🔀 Aggregator backend<br/>opt-in legacy / hybrid"]
F --> WEB["🌍 Public web"]
S --> WEB
style B fill:#7c3aed,stroke:#5b21b6,color:#fff
style WEB fill:#0ea5e9,stroke:#0369a1,color:#fff
style DB fill:#1e293b,stroke:#334155,color:#fff
style LLM stroke-dasharray: 5 5
style SX stroke-dasharray: 5 5
- **โค้ดสำคัญกว่าโมเดล** การทำงานแบบกำหนดผลลัพธ์ เช่น การทำให้เป็นมาตรฐาน, การรวมอันดับ, การลบข้อมูลซ้ำ, การจับคู่ Schema จะไม่ใช้ LLM เลย โมเดลจะถูกสงวนไว้สำหรับการตัดสิน, การเลือกใช้, และจำกัดต่อคำขอ ฟิลด์ที่ LLM เติมจะถูกตรวจสอบกับแหล่งที่มา และจะถูกตั้งค่าเป็น null หากไม่มี
- **การกำหนดเส้นทางตามสัญญาณที่สังเกตได้** ลำดับการดึงข้อมูลจะยกระดับไปใช้เบราว์เซอร์จริงตามสิ่งที่ *เห็น* เช่น ตัวบ่งชี้ SPA, เนื้อหา Challenge, เนื้อหาที่เบาบาง ไม่ใช่การเดาโดเมน มันเรียนรู้ต่อโดเมน, เลิกเรียนรู้เมื่อเว็บไซต์ไม่ต้องการอีกต่อไป, และ `wigolo tune list` จะแสดงให้คุณเห็นว่ามันเรียนรู้อะไรไปบ้าง
- **อ่านหน้าเว็บเหมือนที่เบราว์เซอร์ทำ — และบอกเมื่อทำไม่ได้** การดึงข้อมูลแบบแบ่งระดับจะรอ Challenge ชั่วคราวและนำการอนุญาตกลับมาใช้ใหม่ต่อโดเมนอย่างสุภาพ: เคารพ robots.txt, จำกัดอัตราต่อโดเมน, ปริมาณระดับงานวิจัย เมื่อกำแพงยังคงอยู่ ความล้มเหลวจะถูกระบุ ไม่มีการปกปิด
## การตั้งค่า
การติดตั้งใหม่จะทำงานได้ทันที มีการตั้งค่าสามอย่างที่ช่วยเพิ่มคุณภาพของผลลัพธ์ได้อย่างมีนัยสำคัญ:
```bash
# 1. Synthesis — ตัวแปรที่สำคัญที่สุด (งานวิจัย / agent / คำตอบจากการค้นหาเขียนข้อความจริง)
export WIGOLO_LLM_PROVIDER=gemini # หรือ anthropic / openai / groq / ollama (ไม่ต้องใช้คีย์)
export GEMINI_API_KEY=<your-key>
# 2. ช่องทางการดึงข้อมูลที่กว้างขึ้น
export WIGOLO_SEARCH=hybrid # core engines + aggregator fallback
export WIGOLO_GITHUB_TOKEN=... # GitHub code search 10 → 30 req/min
# 3. ดึงข้อมูลได้มากขึ้น, รักษาความพร้อม
export WIGOLO_TLS_TIER=auto # การเสริมความแข็งแกร่งในการดึงข้อมูลที่เรียนรู้ต่อโดเมน
export WIGOLO_EAGER_WARMUP=1 # จ่ายค่าโหลดโมเดลล่วงหน้าประมาณ 1 วินาทีพฤติกรรมต่อการเรียกใช้ที่ให้ผลตอบแทนดี: คิวรี arrays (["a","b","c"]) เพื่อความกว้างแบบขนาน · search_depth: "deep" สำหรับคิวรีที่สำคัญ · include_domains เป็นตัวกรองที่เข้มงวดสำหรับการค้นหาเอกสาร
ข้อมูลอ้างอิงฉบับเต็ม — ทุกตัวแปรสภาพแวดล้อม, คีย์ไฟล์คอนฟิก, แบ็กเอนด์การค้นหา, Cache TTL, และขีดจำกัดการให้บริการ — อยู่ใน คู่มือการตั้งค่า
เอกสารและตัวอย่าง
docs/ — คู่มือฉบับสมบูรณ์: เริ่มต้นใช้งาน · การติดตั้งและช่องทาง · การตั้งค่า · ข้อมูลอ้างอิงเครื่องมือ · CLI และเชลล์ · REST API · SDKs และการผสานรวม · การโฮสต์ด้วยตนเอง · ทักษะของ Agent · ปลั๊กอิน · การแก้ไขปัญหาและคำถามที่พบบ่อย · ความเป็นส่วนตัวและความปลอดภัย
examples/ — ตัวอย่างที่สามารถรันได้ แต่ละตัวมี README (และส่วนใหญ่มีบันทึกเทอร์มินัล): CLI แบบครั้งเดียว, NDJSON shell pipelines, REST ผ่าน curl, TypeScript & Python SDKs, Vercel AI SDK tools, การชี้ n8n ที่โฮสต์ด้วยตนเองไปยัง wigolo ระยะไกล, watch-with-webhook, และการเขียนปลั๊กอินเครื่องมือค้นหาของคุณเอง
เอกสารยังแสดงผลบนเว็บไซต์: knockoutez.github.io/wigolo/docs
รุ่นเบต้าและข้อเสนอแนะ
wigolo อยู่ใน รุ่นเบต้าสาธารณะ ทุกสิ่งที่ระบุไว้ในเอกสารนี้ใช้งานได้และผ่านชุดการทดสอบ 7,600 รายการ — รุ่นเบต้าเน้นที่ความสมบูรณ์ ไม่ใช่ความเสถียร มันจะยังคงเป็นรุ่นเบต้าจนกว่าจะมีผู้ใช้งาน, ทดลองใช้, และให้ดาวมากพอที่จะทำให้การเรียกว่า v1 มีความหมาย
นั่นทำให้ข้อเสนอแนะของคุณเป็นสิ่งสำคัญที่สุดในตอนนี้ ทุกรายงานจะถูกอ่าน โดยปกติแล้วภายในวันเดียวกัน:
- 🐛 รายงานข้อผิดพลาด — เสียหาย, ทำงานผิดปกติ, ทำให้คุณประหลาดใจ
- 💡 ร้องขอคุณสมบัติ — สิ่งที่ควรทำ
- 💬 ถามอะไรก็ได้ — คำถาม, การตั้งค่า, การแสดงและบอกเล่า
และหาก wigolo มีประโยชน์ในการตั้งค่าของคุณ วิธีที่จะช่วยให้มันคงอยู่ต่อไป: การให้ ⭐ ดาว (เป็นวิธีที่ Open Source ถูกค้นพบ), ☕ กาแฟ (ไม่มีแผนบริการแบบเสียเงินและจะไม่มีวันมี), หรือเพียงแค่ อีเมล — มันจะส่งตรงไปยังนักพัฒนาคนเดียวที่เขียนโค้ดนี้
คำถามที่พบบ่อย
ไม่มีอะไรแอบแฝงโดยเจตนา ส่วนที่แพง — การจัดอันดับ, การฝัง, เอ็นจิ้นเบราว์เซอร์ — ทำงานบนฮาร์ดแวร์ ของคุณ ดังนั้นจึงไม่มีค่าใช้จ่ายต่อการค้นหาที่ต้องกู้คืน และไม่มีเหตุผลที่จะต้องมีมิเตอร์วัดค่า ได้รับการสนับสนุนจากการบริจาค; ใบอนุญาต AGPL ป้องกันการเปลี่ยนไปใช้ผลิตภัณฑ์โฮสต์แบบปิดอย่างถูกกฎหมาย
ลองรันคิวรีหนึ่งครั้งแล้วตัดสินเอง — ส่วนการเปรียบเทียบด้านบนเป็นการรันแบบ 4 ทางแบบสด ไม่ใช่แค่กราฟ คิวรีของ Agent ในชีวิตประจำวันให้ผลลัพธ์ที่เท่าเทียมกัน; เครื่องมือแบบเสียเงินยังคงชนะในบางกรณีพิเศษของการดึงข้อมูลเชิงลึก และการรวบรวมข้อมูลคือจุดแข็งที่สุดของ wigolo ทุกผลลัพธ์จะแสดงคะแนน ดังนั้นคุณไม่จำเป็นต้องเชื่อคำพูดของใคร
มันถูกออกแบบมาเพื่อสิ่งนั้นโดยเฉพาะ: 18 เอ็นจิ้นที่รวมเข้าด้วยกันด้วยการรวมอันดับ (หากเอ็นจิ้นใดล้มเหลว ผลลัพธ์แทบไม่เปลี่ยนแปลง), ลำดับการดึงข้อมูลแบบแบ่งระดับพร้อมการเรียนรู้ต่อโดเมน, และตัวสำรอง Aggregator ที่เป็นทางเลือก แบ็กเอนด์ที่เสื่อมสภาพจะถูก รายงานในผลลัพธ์ ไม่มีการซ่อน — และแคชในเครื่องหมายความว่าทุกสิ่งที่เคยเห็นยังคงทำงานได้ไม่ว่าจะเกิดอะไรขึ้น
wigolo อ่านเว็บสาธารณะเหมือนที่เบราว์เซอร์ทำ — เคารพ robots.txt โดยค่าเริ่มต้น, จำกัดอัตราต่อโดเมน, ปริมาณระดับงานวิจัยสำหรับ Agent หนึ่งตัวบนเครื่องเดียว มันเป็นไปในทิศทางที่สุภาพโดยเจตนา ไม่ใช่แพลตฟอร์มการเก็บเกี่ยวข้อมูล
ได้, ฟรี, ทั่วทั้งบริษัท ใบอนุญาตจะบังคับใช้ก็ต่อเมื่อคุณ แก้ไข wigolo และรันเป็นบริการเครือข่าย — จากนั้นคุณต้องเผยแพร่การแก้ไขเหล่านั้น การใช้เป็นเครื่องมือสำหรับนักพัฒนาในเครื่องไม่มีข้อผูกมัดใดๆ คำถามเกี่ยวกับการอนุญาตเชิงพาณิชย์: ติดต่อสอบถาม
นั่นคือสมองบนอุปกรณ์: เอ็นจิ้นเบราว์เซอร์เต็มรูปแบบพร้อมกับโมเดลการจัดอันดับและการฝังที่บริการคลาวด์รันอยู่ฝั่งของพวกเขาและเรียกเก็บเงินจากคุณ ดิสก์ราคาถูก; มิเตอร์ไม่ถูก
มีให้ใช้งานบน
- npm —
wigolo(ช่องทางหลัก — Quickstart ด้านบน) - PyPI —
wigolo(Python SDK) - Docker —
ghcr.io/knockoutez/wigolo·towhid69420/wigolo - Official MCP Registry —
io.github.KnockOutEZ/wigolo - Directories — Glama · Smithery · mcp.so · LobeHub
Homebrew, curl | sh, และไบนารีไฟล์เดียวมีอยู่ใน คู่มือการติดตั้ง — หนึ่งช่องทางต่อเครื่อง; ทั้งหมดใช้ ~/.wigolo ร่วมกัน
การมีส่วนร่วม
รายงานข้อผิดพลาด, คำขอคุณสมบัติ, และ PRs ยินดีต้อนรับทั้งหมด — ดู CONTRIBUTING.md รักษา tool handlers ให้บาง, เพิ่มการทดสอบ, รันชุดทดสอบก่อนเปิด PR จุดเริ่มต้นที่เป็นมิตรที่สุด: wigolo มีระบบปลั๊กอินสำหรับเครื่องมือค้นหาและตัวแยกข้อมูลแบบกำหนดเอง — เพิ่มเครื่องมือค้นหาในประมาณ 100 บรรทัด, เทมเพลตใน examples/plugin-search-engine
ใบอนุญาต
GNU AGPL-3.0-only ใช้งาน, แก้ไข, และโฮสต์ด้วยตนเองได้ฟรี — รวมถึงภายในบริษัท ข้อผูกมัดเดียว: หากคุณรันเวอร์ชันที่ แก้ไข เป็นบริการเครือข่าย คุณต้องเผยแพร่ซอร์สโค้ดที่แก้ไขภายใต้ใบอนุญาตเดียวกัน นั่นทำให้ wigolo ยังคงเป็น Open Source ในขณะที่ป้องกันการแยกโค้ดไปเป็นผลิตภัณฑ์โฮสต์แบบปิด ดู SECURITY.md เพื่อรายงานช่องโหว่ และ TRADEMARK.md สำหรับการใช้ชื่อ สำหรับคำถามเกี่ยวกับการอนุญาตเชิงพาณิชย์ โปรดติดต่อสอบถาม
wigolo เป็นของฟรีและตั้งใจที่จะเป็นเช่นนั้น — ได้รับการดูแล ไม่ใช่ถูกจำกัดด้วยกำแพงการจ่ายเงิน หากมันช่วยคุณประหยัดค่าใช้จ่ายในการค้นหาแบบมีมิเตอร์วัดค่า การให้ ⭐, การแจ้งปัญหาที่ชัดเจน, หรือ ☕ กาแฟ ช่วยให้มันยั่งยืนต่อไป
สร้างและดูแลโดย @KnockOutEZ · ktowhid20@gmail.com
เอกสารโปรเจกต์
อ่านเอกสารต้นฉบับ
README วิธีติดตั้ง วิธีใช้งาน และข้อกำหนดจาก repository ต้นฉบับ

Local-first web intelligence for AI agents — no keys, no cloud, no metered bill.
works with Claude Code · Cursor · Codex · Gemini CLI · OpenCode · VS Code · Windsurf · Zed · Antigravity and beyond LangChain · CrewAI · LlamaIndex · Vercel AI SDK · n8n & self-hosted agents · any MCP client · plain REST
Quickstart · Tools · Why wigolo · Benchmark · Docs · Examples · Feedback · FAQ
New features and updates ship steadily. Follow @yourtowhid on X for all of it and new ways to use wigolo, and reach out there for collaborations or feedback · also on LinkedIn
wigolo gives an AI agent one surface for everything web-related: search, fetch, crawl, extract, cache, find-similar, research, and autonomous gather loops. It runs wherever your agent runs — as an MCP server next to your coding agent, as a REST/MCP endpoint on the box where your self-hosted agents live, or embedded through an SDK inside your own app. The core tools need no API keys, nothing it touches leaves ~/.wigolo/, and no bill grows with how much your agent thinks.

Quickstart
npx wigolo init # set up the local engine — any system
npx wigolo init --agents=claude-code,cursor # …or set up + wire your day-to-day agents in one commandRequires Node ≥ 20 and ~1.5 GB of free disk on macOS, Linux, or Windows. Bare init sets up the local engine: it downloads the browser engine and on-device models, runs a health check, and reports each component. Adding --agents wires the named agents in the same run, so a coding agent you use daily is ready in one command.
- Supported agents —
--agentstakes any ofclaude-code·cursor·codex·gemini-cli·opencode·vscode·windsurf·zed·antigravity(comma-separated); wigolo writes the MCP config and, where supported, instructions for each. - Any other setup — any MCP client, agent framework, or self-hosted agent registers
npx -y wigoloin its own MCP config. The installation guide has the exact config block for every client, plus Docker, Homebrew, and single-file-binary channels. - More on the way — the supported list keeps growing, and a PR to add your agent is welcome; see CONTRIBUTING.md.
- Interactive setup —
--interactiveis a plain-text flow;--wizardis the full terminal TUI. - Defer downloads —
--no-warmupwaits until first use. A failed component download never fails setup; init reports what's not ready with the exact fix and still completes.
init is unattended by default, so it's safe in scripts and CI, and any setup problem surfaces right here in the per-component report, before your agent's first call. Search, fetch, crawl, extract, cache, and find-similar work with no API key. Check it's healthy anytime:
npx wigolo doctorTo remove everything cleanly, run npx wigolo config --uninstall --yes. You can also paste the installation guide into any AI assistant and let it do the setup; it's written to be self-contained.
Recommended — a free key for research & agent
Search, fetch, crawl, extract, cache, and find-similar are fully keyless. research, agent, and search format=answer use an LLM to write the synthesized, cited answer. Without one they hand back a raw brief and evidence for your agent to assemble. A free Gemini key turns that into a finished answer:
export WIGOLO_LLM_PROVIDER=gemini
export GEMINI_API_KEY=<free-key> # grab one at aistudio.google.com/apikey — the free tier is plentyAny provider works (anthropic · openai · groq), or stay fully local and keyless with WIGOLO_LLM_PROVIDER=ollama (or any OpenAI-compatible URL). Set it in your shell or your agent's MCP env block. Providers, models, and the keyless local-model ladder are in the configuration guide.
What your agent gets back
Every search result is evidence the agent can act on. It carries a verbatim excerpt pinned to its exact position in the source, a citation ID the agent can quote, and a score it can inspect (abridged real shape):
{
"results": [{
"title": "Logical replication - PostgreSQL docs",
"url": "https://www.postgresql.org/docs/current/logical-replication.html",
"excerpt": "Logical replication is a method of replicating data objects…",
"citation_id": "src-1",
"source_span": { "start": 1042, "end": 1305 }, // byte-exact provenance
"evidence_score": { "final": 0.86, "semantic": 0.91, "lexical": 0.78, "engine_consensus": 3 }
}],
"citations": [{ "id": "src-1", "url": "…" }],
"freshness_signal": { "published": "2026-05-12", "confidence": "high" }
}Weak results get flagged as junk by wigolo's own scorer. Failed engines are reported and stale cache is labeled, so the agent always knows what it's standing on. Full response contracts per tool are in the tools reference.
Tools
| Tool | What it does |
|---|---|
🔎 search | Multi-engine web search (18 direct adapters) with rank fusion, ML reranking, and an explainable per-result score. Pass a query array for parallel breadth. Scope by domain and time range, match an exact phrase, or return image results. |
📄 fetch | Load one URL through a tiered router that auto-escalates from plain HTTP to a headless browser engine on anti-bot challenges or SPA shells. Clean markdown + metadata + links. Handles PDFs, a single-heading section, authenticated sessions, and page actions (click / type / scroll / screenshot). |
🕸️ crawl | Multi-page crawl — BFS, DFS, sitemap, or map-only. Per-domain rate limits, robots.txt respect, boilerplate dedup. |
🧩 extract | Structured data from a page: tables, metadata, JSON-LD, brand identity, named schemas (Article / Recipe / Product / …), or any custom JSON Schema. |
💾 cache | Query everything already seen — keyword or hybrid semantic. Plus stats, clear, and change detection. |
🧲 find_similar | Pages similar to a URL or a concept, via 3-way fusion of keyword + semantic + live web. |
🧠 research | Decompose a question → fan out sub-queries → fetch sources → synthesize a cited report (or a structured brief the host LLM writes from). |
🤖 agent | Autonomous gather loop: plan → search → fetch → extract → synthesize, with a step log, time budget, and optional output schema. |
🔁 diff + ⏱️ watch | See exactly what changed on a page since last visit; re-check on demand and deliver changes to a webhook. |
Every tool also runs from the terminal (wigolo search "…" --json), from an interactive shell with NDJSON piping (wigolo shell), over REST, and through the SDKs — CLI reference. Per-tool guides with the full parameter set are in docs/tools.md; runnable examples are in examples/.
Why it's different
wigolo isn't a free stand-in for the paid tools — it's built to match them. It's a focused web layer for your agents: an MCP and REST surface they call directly, with the search and extraction quality the paid services charge for. What separates it:
- Built for agents. One MCP call fans out many queries across many engines in parallel, which a serial host tool-loop can't replicate. Every result carries transparent per-result scoring, and output is budget-aware.
- Honest output. Stale cache, failed fetches, degraded backends, and truncation are surfaced in the result. When a bot-protected page can't be read, you get a labeled
blocked_by_challengefailure, not a challenge shell returned as content. - $0 per query, free to re-query. Default search talks to public engines through direct adapters; the reranker and embeddings run on-device. Every response is cached, so asking again is instant and costs nothing.
- Private by default. Cache, embeddings, models, and config live under
~/.wigolo/. Nothing reaches a third party unless you explicitly opt into an LLM for synthesis.
Here's what one real result looks like, dissected. It includes the failed engine and the weak result, because those are part of the answer too:
Benchmark
All four tools converged on the same core answer, and only one of them handed back verbatim, byte-pinned evidence while doing it.
One cold query ran live inside a single Claude Fable 5 session, fanned out to four web tools on equal footing (built-in WebSearch, wigolo, Tavily, Exa), and was judged by the agent on the evidence alone. All four converged on the same answer and the same top source, so the parity is demonstrated on-screen. wigolo alone returned verbatim excerpts pinned to byte-offset source spans, an explainable score decomposition, and live per-engine telemetry, and its own scorer flagged two weak results as junk. The cloud tools earn their place too: Exa rendered the official docs' comparison matrix in full. Run your own query and you'll see the same shape.

How it compares
| wigolo | Firecrawl | Exa | Tavily | |
|---|---|---|---|---|
| Multi-engine web search | ✅ | ✅ | ✅ | ✅ |
| Fetch & structured extraction | ✅ | ✅ | ✅ | ✅ |
| Whole-site crawl & map | ✅ | ✅ | — | ✅ |
| Verbatim excerpts pinned to byte-offset source spans | ✅ | — | — | — |
| Explainable per-result score decomposition | ✅ | — | — | — |
| Persistent local memory — re-query instantly, offline | ✅ | — | — | — |
| Query data stays on your machine | ✅ | — | — | — |
| API key / account | none | required | required | required |
| Cost per query | $0 | metered | metered | metered |
Feature standing as of July 2026 — check each vendor's docs for current state.
That last row compounds, because agents ask in bursts:
Beyond your editor
The same ten tools serve every kind of agent, over whichever surface fits: MCP for coding agents, REST for everything else, SDKs to embed, and framework wrappers to drop in.
REST API — wigolo serve
One process exposes a plain-JSON REST API next to the MCP transport. No MCP client needed, just curl:
wigolo serve # 127.0.0.1:3333 — loopback is open; off-loopback requires a token
curl -sX POST http://127.0.0.1:3333/v1/search \
-H 'Content-Type: application/json' \
-d '{"query":"local-first software","max_results":5}'POST /v1/{tool} covers all ten tools, GET /openapi.json is the OpenAPI 3.1 contract, and /mcp + /sse serve remote MCP clients from the same port. Bind past loopback and a bearer token is required, so the server fails closed by default. Point n8n, a Hermes-style assistant, or any self-hosted agent at it. → REST API
SDKs — TypeScript & Python
Thin, typed clients with an embedded local mode that finds or starts the daemon for you. No separate serve step.
TypeScript — npm install wigolo-sdk (zero-dep; Node / Bun / Deno / edge):
import { createLocalClient } from 'wigolo-sdk/local';
const { client, close } = await createLocalClient(); // reuse a running daemon, or spawn one
const res = await client.search({ query: 'local-first web search', max_results: 5 });
console.log(res.results.map((r) => r.title));
await close(); // stops the daemon only if this call spawned itPython — pip install wigolo (standard library only; sync + async):
from wigolo import local_client
with local_client() as client: # reuse a healthy daemon, or spawn one
res = client.search(query="local-first web search", max_results=5)
for r in res["results"]:
print(r["title"], r["url"])Framework integrations
Drop wigolo's tools into the framework you already use. You get the full ten-tool surface, including the cache / find_similar / research / agent that most framework web-tools don't ship:
| Framework | Package | What you get |
|---|---|---|
| LangChain | wigolo-langchain | each tool as a BaseTool, plus a BaseRetriever over search / find_similar for RAG |
| CrewAI | wigolo-crewai | wigolo_tools() → hand the set to any crew |
| LlamaIndex | wigolo-llamaindex | a BaseReader that loads fetched / crawled / searched pages as documents |
| Vercel AI SDK | wigolo-vercel-ai-sdk | tool factories for generateText / streamText, edge-friendly |
Docker
# stdio MCP — wire it into any MCP client as command: docker
docker run -i --rm -v wigolo-data:/data ghcr.io/knockoutez/wigolo
# HTTP server for remote / multi-client use
docker run -p 3333:3333 -v wigolo-data:/data \
-e WIGOLO_API_TOKEN=a-long-random-secret \
ghcr.io/knockoutez/wigolo serve --host 0.0.0.0The slim image lazy-loads models into the volume; :full preinstalls the browser engine. Also on Docker Hub as towhid69420/wigolo. → installation & all channels
Agent skills
An 11-pack skill catalog teaches your coding agent to drive each tool well. It's installed by init and managed with wigolo skills add|list|remove. → skills
One note for self-hosters: some challenge-protected sites score IP reputation, so a datacenter IP won't clear walls a home connection would. wigolo labels those failures, and the self-hosting guide covers the opt-in proxy answer.
Star history
Refreshed daily from the GitHub API. Add a ⭐ if wigolo is useful to you.
Architecture
A single Node process speaks MCP (JSON-RPC over stdio). Everything heavy is local and lazy-loaded, so a zero-key install pays nothing for the parts it isn't using.
flowchart TD
A["🤖 AI agent<br/>any MCP client · REST · SDK"]
A -->|MCP over stdio| B["<b>wigolo</b><br/>10 tools · dynamic instructions<br/>in-process browser pool + cache + models"]
B --> C{"Tool layer"}
C --> T1["search · fetch · crawl · extract"]
C --> T2["cache · find_similar · research · agent"]
T1 --> F["⚙️ Fetch router<br/>tiered escalation, learned per domain"]
T1 --> S["⚙️ Search<br/>18 engines → rank fusion → ML rerank<br/><i>explainable evidence score</i>"]
T2 --> DB[("🗄️ Local cache<br/>keyword + vector index")]
T2 --> ML["🧠 On-device ML<br/>embeddings + reranker"]
F -.->|optional| LLM["☁️ LLM<br/>synthesis only · opt-in"]
S -.->|optional| SX["🔀 Aggregator backend<br/>opt-in legacy / hybrid"]
F --> WEB["🌍 Public web"]
S --> WEB
style B fill:#7c3aed,stroke:#5b21b6,color:#fff
style WEB fill:#0ea5e9,stroke:#0369a1,color:#fff
style DB fill:#1e293b,stroke:#334155,color:#fff
style LLM stroke-dasharray: 5 5
style SX stroke-dasharray: 5 5- Code beats model. Deterministic work stays off the LLM: canonicalization, rank fusion, dedup, and schema matching. The model is reserved for judgment, opt-in, and capped per request. LLM-filled fields are checked against the source and nulled if absent.
- Signal-driven routing. The fetch ladder escalates to a real browser on observable signals, not domain guesses: SPA markers, challenge bodies, thin content. It learns per domain, unlearns when a site stops needing it, and
wigolo tune listshows you exactly what it learned. - Reads pages the way a browser does. Tiered fetching waits out interstitial challenges and reuses clearances per domain, politely: robots.txt respected, per-domain rate limits, research-grade volumes. When a wall stays up, the failure is labeled and reported.
Configuration
A clean install works out of the box. Three settings raise output quality:
# 1. Synthesis — the biggest lever (research / agent / search-answer write real prose)
export WIGOLO_LLM_PROVIDER=gemini # or anthropic / openai / groq / ollama (keyless)
export GEMINI_API_KEY=<your-key>
# 2. Wider retrieval funnel
export WIGOLO_SEARCH=hybrid # core engines + aggregator fallback
export WIGOLO_GITHUB_TOKEN=... # GitHub code search 10 → 30 req/min
# 3. Land more fetches, stay warm
export WIGOLO_TLS_TIER=auto # per-domain learned fetch hardening
export WIGOLO_EAGER_WARMUP=1 # pay the ~1s model load up frontPer-call habits that pay off: query arrays (["a","b","c"]) for parallel breadth · search_depth: "deep" for queries that matter · include_domains as a hard filter for docs lookups. The full reference covers every environment variable, config-file key, search backend, cache TTL, and serve limit; it's in the configuration guide.
Docs & examples
docs/ — the complete manual: getting started · installation & channels · configuration · tools reference · CLI & shell · REST API · SDKs & integrations · self-hosting · agent skills · plugins · troubleshooting & FAQ · privacy & security
examples/ — runnable, each with a README (and most with a terminal recording): one-shot CLI, NDJSON shell pipelines, REST via curl, TypeScript & Python SDKs, Vercel AI SDK tools, pointing self-hosted n8n at a remote wigolo, watch-with-webhook, and writing your own search-engine plugin. The docs are also rendered on the site at knockoutez.github.io/wigolo/docs.
Beta & feedback
wigolo is in public beta. Everything documented here works and is held to a 7,600-test suite; it's stable, and beta is about the polish bar. It stays beta until enough people have used it, kicked it, and starred it that calling it v1 means something. Your feedback shapes what comes next, and every report is read, usually the same day:
- 🐛 Report a bug — broke, misbehaved, surprised you
- 💡 Request a feature — something it should do
- 💬 Ask anything — questions, setups, show & tell
If wigolo earns a place in your setup, three things keep it going: a ⭐ star (it's how open source gets found), a ☕ coffee (there's no paid tier and never will be), or an email that goes straight to the one developer who wrote the code.
Troubleshooting
wigolo doctor names any broken component and the exact env var or command that fixes it; wigolo doctor --fix repairs the common cases, and wigolo verify health-checks every component. A component failing during init doesn't break wigolo: init still exits 0, and core search / fetch / crawl / extract / cache work with no models and no browser. Quick hits:
- Slow or failed downloads — re-run
wigolo warmup --all(or--browser/--embeddings/--reranker); they resume and retry. - Browser won't launch on Linux —
wigolo warmup --browserinstalls the OS libraries (or prints the exact command). - Native build error / unusual Node — use an LTS: Node 20, 22, or 24.
- Behind a proxy —
USE_PROXY=true+PROXY_URL; addNODE_EXTRA_CA_CERTSfor TLS-inspecting proxies.
The full guide covers per-symptom fixes, a "what still works when X fails" map, platform notes (incl. linux-arm64), and offline installs: docs/troubleshooting.md.
FAQ
No catch by design. The expensive parts (ranking, embeddings, the browser engine) run on your hardware, so there's no per-query cost to recover and no reason for a meter. It's sustained by donations, and the AGPL license legally prevents a switch into a closed hosted product.
The benchmark section above is a live 4-way run you can reproduce: everyday agent queries land at parity, the paid tools still win some deep-extraction edge cases, and crawling is where wigolo is strongest. Every result shows its scoring, so you don't have to take anyone's word for it.
It's engineered for exactly that: 18 engines fused with rank fusion (any one failing barely moves results), a tiered fetch ladder with per-domain learning, and an optional aggregator fallback. Degraded backends are reported in the output, and the local cache means everything already seen keeps working regardless.
wigolo reads the public web the way a browser does: robots.txt respected by default, per-domain rate limits, and research-grade volumes for one agent on one machine. It sits deliberately at the polite end of the spectrum.
Yes, freely, company-wide. The license only bites if you modify wigolo and run it as a network service, in which case you must publish those modifications; using it as a local dev tool carries zero obligation. For commercial-licensing questions, reach out.
That's the on-device brain: a full browser engine plus the ranking and embedding models the cloud services run on their side and bill you for. Once it's on disk, every query uses it for free.
Available on
- npm —
wigolo(primary channel — the Quickstart above) - PyPI —
wigolo(Python SDK) - Docker —
ghcr.io/knockoutez/wigolo·towhid69420/wigolo - Official MCP Registry —
io.github.KnockOutEZ/wigolo - Directories — Glama · Smithery · mcp.so · LobeHub
Homebrew, curl | sh, and the single-file binary are covered in the installation guide. Use one channel per machine; they all share ~/.wigolo.
Contributing
Bug reports, feature requests, and PRs are all welcome; see CONTRIBUTING.md. Keep tool handlers thin, add tests, and run the suite before opening a PR. The friendliest entry point is the plugin system for custom search engines and extractors: add a search engine in ~100 lines, with a template in examples/plugin-search-engine.
License
GNU AGPL-3.0-only. Free to use, modify, and self-host, including inside a company. The one obligation: if you run a modified version as a network service, you must publish your modified source under the same license. That keeps wigolo open while preventing a closed, hosted fork. See SECURITY.md to report a vulnerability and TRADEMARK.md for use of the name. For commercial-licensing questions, reach out.
wigolo is free and actively maintained, and it's meant to stay that way. If it saves you a metered search bill, a ⭐, a sharp issue, or a ☕ coffee helps keep it sustainable.
Built and maintained by @KnockOutEZ · ktowhid20@gmail.com · X · LinkedIn
