{"id":"7bfa2988-bfd1-4ad1-95a1-71cf8395f625","shortId":"uAAJT5","kind":"skill","title":"web-search","tagline":"Web search and content extraction skill for AI coding agents. Zero API keys required. Decision tree with fallback chains across 5 tools.","description":"# Web Search\n\nWeb search, scraping, and content extraction for AI coding agents. Zero API keys required. Five tools organized in fallback chains: WebSearch and Crawl4AI as primary, Jina as secondary, duckduckgo-search and WebFetch as fallbacks. Use when your agent needs web information -- finding pages, extracting content, or conducting research.\n\nTerminology used in this file:\n- **Playwright:** Browser automation framework used by Crawl4AI for JavaScript-rendered pages.\n- **SPA:** Single-page application; content is rendered dynamically in JavaScript.\n- **MCP:** Model Context Protocol, a standard for exposing tool servers to AI agents.\n\n## Setup\n\n```bash\npython3 -m pip install crawl4ai duckduckgo-search\ncrawl4ai-setup\n```\n\n- **Claude Code:** copy this skill folder into `.claude/skills/web-search/`\n- **Codex CLI:** append this SKILL.md content to your project's root `AGENTS.md`\n\nFor the full installation walkthrough (prerequisites, verification, troubleshooting), see [references/installation-guide.md](references/installation-guide.md).\n\n## Staying Updated\n\nThis skill ships with an `UPDATES.md` changelog and `UPDATE-GUIDE.md` for your AI agent.\n\nAfter installing, tell your agent: \"Check `UPDATES.md` in the web-search skill for any new features or changes.\"\n\nWhen updating, tell your agent: \"Read `UPDATE-GUIDE.md` and apply the latest changes from `UPDATES.md`.\"\n\nFollow `UPDATE-GUIDE.md` so customized local files are diffed before any overwrite.\n\n---\n\n## Quick Start\n\nRun this minimal fallback-safe sequence:\n\n```bash\n# 1) Find candidate pages\npython3 -c \"from duckduckgo_search import DDGS; import json; print(json.dumps(DDGS().text('your query', max_results=5), indent=2))\"\n\n# 2) Extract one page quickly (no local deps)\ncurl -s \"https://r.jina.ai/http://example.com/article\" | head -80\n\n# 3) Escalate to Crawl4AI if JS rendering is needed\ncrwl https://example.com/app --f markdown --bypass-cache\n```\n\nUse this routing rule: search with `WebSearch` first, extract with Jina/WebFetch for simple pages, escalate to Crawl4AI for JS-heavy targets.\n\n## Decision Tree\n\n```text\nNeed info from the web?\n  |\n  +-- Need to SEARCH for pages/answers?\n  |     +-- Default first choice --> WebSearch (built-in, zero setup)\n  |     +-- WebSearch unavailable? --> Jina s.jina.ai (no key needed)\n  |     +-- Both fail? --> duckduckgo-search Python lib (emergency fallback)\n  |\n  +-- Need to EXTRACT content from a known URL?\n  |     +-- JS-heavy SPA, dynamic content? --> Crawl4AI crwl (full browser rendering)\n  |     +-- Simple text page (article, docs, blog)? --> Jina r.jina.ai (fast, no install)\n  |     +-- Jina/Crawl4AI unavailable? --> WebFetch (built-in, AI-summarized)\n  |     +-- Need structured data extraction? --> Crawl4AI with extraction strategy\n  |     +-- Multiple URLs in batch? --> Crawl4AI batch mode\n  |\n  +-- Need DEEP RESEARCH (search + extract + combine)?\n        --> WebSearch to find URLs --> Crawl4AI/Jina extract each --> synthesize\n\nRule of thumb: WebSearch for finding, Jina for reading, Crawl4AI for rendering.\n```\n\n---\n\n## Tool Reference\n\n### WebSearch (Built-in) -- Primary Search\n\n**What:** Claude Code built-in web search tool. Returns search results with links and snippets.\n**Install required:** None (built-in to Claude Code)\n**Strengths:** Zero setup, zero API keys, integrated into agent workflow, always available\n**Weaknesses:** No direct SDK/CLI access (tool-only), results are search-result blocks not raw JSON\n\n```text\n# Invoked as a Claude Code tool:\nWebSearch(query=\"your search query\")\n\n# Supports domain filtering:\nWebSearch(query=\"your query\", allowed_domains=[\"docs.python.org\"])\nWebSearch(query=\"your query\", blocked_domains=[\"pinterest.com\"])\n```\n\n**Returns:** Search result blocks with titles, URLs, and content snippets.\n\n### WebFetch (Built-in) -- Fallback URL Extraction\n\n**What:** Claude Code built-in URL fetcher. Fetches page content, converts HTML to markdown, processes with AI.\n**Install required:** None (built-in to Claude Code)\n**Strengths:** Zero setup, AI-processed output, handles redirects, 15-min cache\n**Weaknesses:** Cannot handle authenticated/private URLs, may summarize large content\n\n```text\n# Invoked as a Claude Code tool:\nWebFetch(url=\"https://example.com/page\", prompt=\"Extract the main content\")\n```\n\n**Limitations:**\n- Will fail for authenticated URLs (Google Docs, Confluence, Jira, private GitHub)\n- HTTP auto-upgraded to HTTPS\n- Large content may be summarized rather than returned in full\n- When redirected to a different host, returns redirect URL instead of content\n\n### Crawl4AI -- JS-Rendering Web Scraper\n\n**What:** Open-source scraper with full Playwright browser rendering. Outputs LLM-friendly markdown.\n**Install required:** `pip install crawl4ai && crawl4ai-setup`\n**Strengths:** Full JS rendering, handles SPAs, batch crawling, structured extraction\n**Weaknesses:** Requires Playwright install, heavier than Jina\n\n```bash\n# CLI (simplest)\ncrwl https://example.com\ncrwl https://example.com -o markdown\n\n# Python API\nfrom crawl4ai import AsyncWebCrawler\nasync with AsyncWebCrawler() as crawler:\n    result = await crawler.arun(url='https://example.com')\n    print(result.markdown)\n```\n\n### Jina Reader/Search -- Zero-Install Extraction & Search\n\n**What:** URL-to-markdown converter and search via HTTP API. No install needed -- just curl.\n**API key:** Not required. `JINA_API_KEY` is optional and only increases rate limits.\n**Strengths:** Zero install, fast (~1s), works everywhere curl works, search + extract in one service\n**Weaknesses:** No JS rendering, rate limited without API key\n\n```bash\n# Read a URL (returns markdown)\ncurl -s 'https://r.jina.ai/https://example.com'\n\n# Search (returns search results)\ncurl -s 'https://s.jina.ai/your+search+query'\n\n# With API key (higher rate limits, optional)\ncurl -s -H \"Authorization: Bearer $JINA_API_KEY\" 'https://r.jina.ai/https://example.com'\n```\n\n### duckduckgo-search -- Emergency Search Fallback\n\n**What:** Python library for DuckDuckGo search. Zero API keys, zero registration.\n**Install required:** `pip install duckduckgo-search`\n**Strengths:** Completely free, no API key, no rate limit concerns, reliable fallback\n**Weaknesses:** Less AI-optimized results than WebSearch, Python-only\n\n```python\nfrom duckduckgo_search import DDGS\nresults = DDGS().text(\"your query\", max_results=5)\nfor r in results:\n    print(r['title'], r['href'], r['body'])\n```\n\n```bash\n# One-liner from CLI\npython3 -c \"from duckduckgo_search import DDGS; import json; print(json.dumps(DDGS().text('your query', max_results=5), indent=2))\"\n```\n\n---\n\n## Core Workflows\n\n### Pattern 1: Quick Web Search\n\nWhen: Need factual answers or find relevant pages\n\n1. Use WebSearch: `WebSearch(query=\"your query here\")`\n2. Parse results: each result has title, URL, and content snippet\n3. Fallback: `curl -s 'https://s.jina.ai/your+query+here'`\n4. Emergency: `python3 -c \"from duckduckgo_search import DDGS; ...\"`\n\n### Pattern 2: URL Content Extraction\n\nWhen: Have a URL, need its content as clean text/markdown\n\na) JS-heavy site: `crwl URL` (Crawl4AI, full rendering)\nb) Lightweight static page: `curl -s 'https://r.jina.ai/URL'` (Jina)\nc) Both fail: `WebFetch(url=\"URL\", prompt=\"Extract the main content\")`\n\nDecision: Is it a SPA/JS-heavy? Use Crawl4AI. Static content? Use Jina first. If output is empty/broken, escalate.\n\n### Pattern 3: Deep Research\n\nWhen: Need comprehensive research on a topic with multiple sources\n\n1. WebSearch to find relevant pages\n2. Pick top 3-5 URLs from results\n3. Extract each with Crawl4AI or Jina\n4. If any extraction fails (JS site), use the other tool\n5. Synthesize extracted content into research summary\n\nToken budget: ~5K per extracted page, budget 25K total for 5 pages\n\n### Pattern 4: Batch URL Scraping\n\nWhen: Need content from multiple URLs (5+)\n\n```python\nimport asyncio\nfrom crawl4ai import AsyncWebCrawler\nurls = ['url1', 'url2', 'url3']\n\nasync def batch():\n    async with AsyncWebCrawler() as crawler:\n        for url in urls:\n            result = await crawler.arun(url=url)\n            print(f'--- {url} ---')\n            print(result.markdown[:2000])\n\nasyncio.run(batch())\n```\n\n### Pattern 5: Fallback Chain\n\nWhen: Primary tool fails\n\nSearch chain: WebSearch (built-in) --> Jina s.jina.ai --> duckduckgo-search\n\nExtract chain: Crawl4AI crwl --> Jina r.jina.ai --> WebFetch (built-in)\n\nAlways try the primary tool first, escalate on failure.\n\n---\n\n## MCP Configuration\n\nJina MCP (optional enhancement, not required):\n\n```json\n{\n  \"jina-reader\": {\n    \"command\": \"npx\",\n    \"args\": [\"-y\", \"jina-ai-reader-mcp\"]\n  }\n}\n```\n\nMCP (Model Context Protocol) is optional. Your agent can use CLI/Python/built-in tools directly.\n\n---\n\n## Environment Setup\n\n**Zero API keys required.** All tools work out of the box.\n\nOptional:\n- `JINA_API_KEY` (get from https://jina.ai) -- increases rate limits, not required\n\n```bash\nexport JINA_API_KEY='jina_...'  # optional\n```\n\nInstall:\n- `pip install crawl4ai duckduckgo-search`\n- `crawl4ai-setup`  # installs Playwright browsers\n\nBuilt-in tools (WebSearch, WebFetch) require no installation.\n\nVerify: `./scripts/search-check.sh`\n\n---\n\n## Anti-Patterns\n\n| Do NOT | Do instead |\n|---|---|\n| Use Crawl4AI for simple text pages | Use Jina `r.jina.ai` (zero overhead) |\n| Use Jina for JS-heavy SPAs | Use Crawl4AI (Jina has no JS rendering) |\n| Skip the fallback chain | Always have a backup: WebSearch->Jina->duckduckgo, Crawl4AI->Jina->WebFetch |\n| Extract full pages when you need one fact | Use WebSearch (returns relevant snippets directly) |\n| Batch with Jina for 10+ URLs | Use Crawl4AI batch mode (designed for it) |\n| Forget rate limits | Jina without API key has stricter limits |\n| Use WebFetch for authenticated URLs | It will fail; use browser-ops skill or direct API access |\n\n---\n\n## Error Handling\n\n| Symptom | Tool | Cause | Fix |\n|---|---|---|---|\n| No results returned | WebSearch | Query too specific or topic too niche | Broaden query, try Jina s.jina.ai or duckduckgo-search |\n| Redirect notification | WebFetch | URL redirects to different host | Make a new WebFetch request with the provided redirect URL |\n| Auth failure | WebFetch | Authenticated/private URL | Use browser-ops skill or direct API access instead |\n| Content summarized | WebFetch | Page content too large | Use Jina r.jina.ai or Crawl4AI for full content |\n| 429 Too Many Requests | Jina | Rate limit hit | Add `JINA_API_KEY` header, or add delay between requests |\n| Empty/truncated output | Jina | JS-rendered content not captured | Escalate to Crawl4AI: `crwl URL` |\n| crwl: command not found | Crawl4AI | Not installed or not on PATH | `pip install crawl4ai && crawl4ai-setup` |\n| Playwright browser not found | Crawl4AI | `crawl4ai-setup` not run | Run: `crawl4ai-setup` |\n| TimeoutError | Crawl4AI | Page too slow or blocking | Add timeout parameter, check if site blocks bots |\n| SSL certificate error | Any | Expired or self-signed cert | Retry; for Crawl4AI add `ignore_https_errors=True` |\n| 403 Forbidden | Jina/Crawl4AI | Site blocking automated access | Try different tool from fallback chain |\n| ImportError: duckduckgo_search | duckduckgo-search | Package not installed | `pip install duckduckgo-search` |\n| RatelimitException | duckduckgo-search | Too many requests too fast | Add 1-2s delay between calls, or switch to WebSearch |\n\n---\n\n## Bundled Resources Index\n\n| Path | What | When to load |\n|---|---|---|\n| `./UPDATES.md` | Structured changelog for AI agents | When checking for new features or updates |\n| `./UPDATE-GUIDE.md` | Instructions for AI agents performing updates | When updating this skill |\n| `./references/installation-guide.md` | Detailed install walkthrough for Claude Code and Codex CLI | First-time setup or environment repair |\n| `./references/tool-comparison.md` | Side-by-side comparison: latency, cost, JS support, accuracy | When choosing between tools for a specific use case |\n| `./references/error-patterns.md` | Detailed failure modes and recovery per tool | When debugging a failed extraction or search |\n| `./scripts/search-check.sh` | Health check: verifies all tools are available | Before first web search task in a session |\n| `./scripts/setup.sh` | One-shot installer for all dependencies | First-time setup or after environment reset |","tags":["web","search","fieldwork","skills","buildoak","agent-skills","ai-agents","ai-tools","automation","browser-automation","claude-code","claude-skills"],"capabilities":["skill","source-buildoak","skill-web-search","topic-agent-skills","topic-ai-agents","topic-ai-tools","topic-automation","topic-browser-automation","topic-claude-code","topic-claude-skills","topic-codex"],"categories":["fieldwork-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/buildoak/fieldwork-skills/web-search","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add buildoak/fieldwork-skills","source_repo":"https://github.com/buildoak/fieldwork-skills","install_from":"skills.sh"}},"qualityScore":"0.457","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 15 github stars · SKILL.md body (12,279 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T19:06:34.029Z","embedding":null,"createdAt":"2026-04-18T23:07:19.846Z","updatedAt":"2026-04-22T19:06:34.029Z","lastSeenAt":"2026-04-22T19:06:34.029Z","tsv":"'-2':1572 '-5':1047 '-80':269 '/app':282 '/http://example.com/article':267 '/https://example.com''':784,811 '/page':595 '/references/error-patterns.md':1650 '/references/installation-guide.md':1613 '/references/tool-comparison.md':1630 '/scripts/search-check.sh':1263,1665 '/scripts/setup.sh':1681 '/update-guide.md':1602 '/updates.md':1589 '/url''':993 '/your+query+here''':950 '/your+search+query''':793 '1':231,913,925,1037,1571 '10':1328 '15':572 '1s':755 '2':254,255,909,933,961,1043 '2000':1133 '25k':1083 '3':270,944,1024,1046,1051 '4':951,1058,1089 '403':1534 '429':1438 '5':24,252,872,907,1069,1086,1099,1137 '5k':1078 'access':477,1363,1421,1540 'accuraci':1640 'across':23 'add':1446,1452,1508,1529,1570 'agent':13,37,66,117,176,181,200,469,1202,1594,1606 'agents.md':150 'ai':11,35,116,175,385,553,567,851,1192,1593,1605 'ai-optim':850 'ai-process':566 'ai-summar':384 'allow':509 'alway':471,1165,1300 'answer':920 'anti':1265 'anti-pattern':1264 'api':15,39,465,697,731,737,742,772,795,807,825,840,1211,1223,1236,1342,1362,1420,1448 'append':141 'appli':204 'applic':98 'arg':1188 'articl':370 'async':702,1111,1114 'asyncio':1102 'asyncio.run':1134 'asyncwebcrawl':701,704,1106,1116 'auth':1408 'authent':605,1350 'authenticated/private':578,1411 'author':804 'auto':615 'auto-upgrad':614 'autom':84,1539 'avail':472,1672 'await':708,1124 'b':985 'backup':1303 'bash':119,230,687,774,884,1233 'batch':398,400,676,1090,1113,1135,1324,1332 'bearer':805 'block':486,516,522,1507,1514,1538 'blog':372 'bodi':883 'bot':1515 'box':1220 'broaden':1381 'browser':83,365,655,1252,1357,1415,1488 'browser-op':1356,1414 'budget':1077,1082 'built':328,382,432,440,456,531,540,558,1148,1163,1254 'built-in':327,381,431,439,455,530,539,557,1147,1162,1253 'bundl':1581 'bypass':286 'bypass-cach':285 'c':236,891,954,995 'cach':287,574 'call':1576 'candid':233 'cannot':576 'captur':1464 'case':1649 'caus':1368 'cert':1525 'certif':1517 'chain':22,47,1139,1145,1156,1299,1546 'chang':195,207 'changelog':170,1591 'check':182,1511,1596,1667 'choic':325 'choos':1642 'claud':131,437,459,494,537,561,588,1618 'claude/skills/web-search':138 'clean':973 'cli':140,688,889,1622 'cli/python/built-in':1205 'code':12,36,132,438,460,495,538,562,589,1619 'codex':139,1621 'combin':407 'command':1186,1471 'comparison':1635 'complet':837 'comprehens':1029 'concern':845 'conduct':75 'configur':1175 'confluenc':609 'content':7,32,73,99,144,351,361,527,546,583,600,620,640,942,963,971,1005,1014,1072,1095,1423,1427,1437,1462 'context':107,1197 'convert':547,726 'copi':133 'core':910 'cost':1637 'crawl':677 'crawl4ai':50,88,124,129,273,304,362,391,399,425,641,666,668,699,982,1012,1055,1104,1157,1243,1248,1272,1290,1307,1331,1434,1467,1474,1483,1485,1491,1493,1499,1502,1528 'crawl4ai-setup':128,667,1247,1484,1492,1498 'crawl4ai/jina':412 'crawler':706,1118 'crawler.arun':709,1125 'crwl':279,363,690,692,980,1158,1468,1470 'curl':263,736,758,780,789,801,946,989 'custom':213 'data':389 'ddgs':241,246,864,866,896,901,959 'debug':1659 'decis':18,310,1006 'deep':403,1025 'def':1112 'default':323 'delay':1453,1574 'dep':262 'depend':1688 'design':1334 'detail':1614,1651 'dif':217 'differ':633,1396,1542 'direct':475,1207,1323,1361,1419 'doc':371,608 'docs.python.org':511 'domain':503,510,517 'duckduckgo':57,126,238,342,813,822,834,861,893,956,1153,1245,1306,1388,1548,1551,1559,1563 'duckduckgo-search':56,125,341,812,833,1152,1244,1387,1550,1558,1562 'dynam':102,360 'emerg':346,815,952 'empty/broken':1021 'empty/truncated':1456 'enhanc':1179 'environ':1208,1628,1695 'error':1364,1518,1532 'escal':271,302,1022,1171,1465 'everywher':757 'example.com':281,594,691,693,711 'example.com/app':280 'example.com/page':593 'expir':1520 'export':1234 'expos':112 'extract':8,33,72,256,296,350,390,393,406,413,535,597,679,719,761,964,1002,1052,1061,1071,1080,1155,1310,1662 'f':283,1129 'fact':1317 'factual':919 'fail':340,603,997,1062,1143,1354,1661 'failur':1173,1409,1652 'fallback':21,46,62,227,347,533,817,847,945,1138,1298,1545 'fallback-saf':226 'fast':375,754,1569 'featur':193,1599 'fetch':544 'fetcher':543 'file':81,215 'filter':504 'find':70,232,410,421,922,1040 'first':295,324,1017,1170,1624,1674,1690 'first-tim':1623,1689 'five':42 'fix':1369 'folder':136 'follow':210 'forbidden':1535 'forget':1337 'found':1473,1490 'framework':85 'free':838 'friend':660 'full':153,364,628,653,671,983,1311,1436 'get':1225 'github':612 'googl':607 'h':803 'handl':570,577,674,1365 'head':268 'header':1450 'health':1666 'heavi':308,358,978,1287 'heavier':684 'higher':797 'hit':1445 'host':634,1397 'href':881 'html':548 'http':613,730 'https':618,1531 'ignor':1530 'import':240,242,700,863,895,897,958,1101,1105 'importerror':1547 'increas':748,1228 'indent':253,908 'index':1583 'info':314 'inform':69 'instal':123,154,178,377,452,554,662,665,683,718,733,753,829,832,1240,1242,1250,1261,1476,1482,1555,1557,1615,1685 'instead':638,1270,1422 'instruct':1603 'integr':467 'invok':491,585 'javascript':91,104 'javascript-rend':90 'jina':53,334,373,422,686,714,741,806,994,1016,1057,1150,1159,1176,1184,1191,1222,1235,1238,1278,1283,1291,1305,1308,1326,1340,1384,1431,1442,1447,1458 'jina-ai-reader-mcp':1190 'jina-read':1183 'jina.ai':1227 'jina/crawl4ai':378,1536 'jina/webfetch':298 'jira':610 'js':275,307,357,643,672,767,977,1063,1286,1294,1460,1638 'js-heavi':306,356,976,1285 'js-render':642,1459 'json':243,489,898,1182 'json.dumps':245,900 'key':16,40,337,466,738,743,773,796,808,826,841,1212,1224,1237,1343,1449 'known':354 'larg':582,619,1429 'latenc':1636 'latest':206 'less':849 'lib':345 'librari':820 'lightweight':986 'limit':601,750,770,799,844,1230,1339,1346,1444 'liner':887 'link':449 'llm':659 'llm-friend':658 'load':1588 'local':214,261 'm':121 'main':599,1004 'make':1398 'mani':1440,1566 'markdown':284,550,661,695,725,779 'max':250,870,905 'may':580,621 'mcp':105,1174,1177,1194,1195 'min':573 'minim':225 'mode':401,1333,1653 'model':106,1196 'multipl':395,1035,1097 'need':67,278,313,318,338,348,387,402,734,918,969,1028,1094,1315 'new':192,1400,1598 'nich':1380 'none':454,556 'notif':1391 'npx':1187 'o':694 'one':257,763,886,1316,1683 'one-lin':885 'one-shot':1682 'op':1358,1416 'open':649 'open-sourc':648 'optim':852 'option':745,800,1178,1200,1221,1239 'organ':44 'output':569,657,1019,1457 'overhead':1281 'overwrit':220 'packag':1553 'page':71,93,97,234,258,301,369,545,924,988,1042,1081,1087,1276,1312,1426,1503 'pages/answers':322 'paramet':1510 'pars':934 'path':1480,1584 'pattern':912,960,1023,1088,1136,1266 'per':1079,1656 'perform':1607 'pick':1044 'pinterest.com':518 'pip':122,664,831,1241,1481,1556 'playwright':82,654,682,1251,1487 'prerequisit':156 'primari':52,434,1141,1168 'print':244,712,877,899,1128,1131 'privat':611 'process':551,568 'project':147 'prompt':596,1001 'protocol':108,1198 'provid':1405 'python':344,696,819,857,859,1100 'python-on':856 'python3':120,235,890,953 'queri':249,498,501,506,508,513,515,869,904,929,931,1374,1382 'quick':221,259,914 'r':874,878,880,882 'r.jina.ai':266,374,783,810,992,1160,1279,1432 'r.jina.ai/http://example.com/article':265 'r.jina.ai/https://example.com''':782,809 'r.jina.ai/url''':991 'rate':749,769,798,843,1229,1338,1443 'ratelimitexcept':1561 'rather':624 'raw':488 'read':201,424,775 'reader':1185,1193 'reader/search':715 'recoveri':1655 'redirect':571,630,636,1390,1394,1406 'refer':429 'references/installation-guide.md':160,161 'registr':828 'relev':923,1041,1321 'reliabl':846 'render':92,101,276,366,427,644,656,673,768,984,1295,1461 'repair':1629 'request':1402,1441,1455,1567 'requir':17,41,453,555,663,681,740,830,1181,1213,1232,1259 'research':76,404,1026,1030,1074 'reset':1696 'resourc':1582 'result':251,447,481,485,521,707,788,853,865,871,876,906,935,937,1050,1123,1371 'result.markdown':713,1132 'retri':1526 'return':445,519,626,635,778,786,1320,1372 'root':149 'rout':290 'rule':291,416 'run':223,1496,1497 's.jina.ai':335,792,949,1151,1385 's.jina.ai/your+query+here''':948 's.jina.ai/your+search+query''':791 'safe':228 'scrape':30,1092 'scraper':646,651 'sdk/cli':476 'search':3,5,27,29,58,127,188,239,292,320,343,405,435,443,446,484,500,520,720,728,760,785,787,814,816,823,835,862,894,916,957,1144,1154,1246,1389,1549,1552,1560,1564,1664,1676 'search-result':483 'secondari':55 'see':159 'self':1523 'self-sign':1522 'sequenc':229 'server':114 'servic':764 'session':1680 'setup':118,130,331,463,565,669,1209,1249,1486,1494,1500,1626,1692 'ship':166 'shot':1684 'side':1632,1634 'side-by-sid':1631 'sign':1524 'simpl':300,367,1274 'simplest':689 'singl':96 'single-pag':95 'site':979,1064,1513,1537 'skill':9,135,165,189,1359,1417,1612 'skill-web-search' 'skill.md':143 'skip':1296 'slow':1505 'snippet':451,528,943,1322 'sourc':650,1036 'source-buildoak' 'spa':94,359 'spa/js-heavy':1010 'spas':675,1288 'specif':1376,1647 'ssl':1516 'standard':110 'start':222 'static':987,1013 'stay':162 'strategi':394 'strength':461,563,670,751,836 'stricter':1345 'structur':388,678,1590 'summar':386,581,623,1424 'summari':1075 'support':502,1639 'switch':1578 'symptom':1366 'synthes':415,1070 'target':309 'task':1677 'tell':179,198 'terminolog':77 'text':247,312,368,490,584,867,902,1275 'text/markdown':974 'thumb':418 'time':1625,1691 'timeout':1509 'timeouterror':1501 'titl':524,879,939 'token':1076 'tool':25,43,113,428,444,479,496,590,1068,1142,1169,1206,1215,1256,1367,1543,1644,1657,1670 'tool-on':478 'top':1045 'topic':1033,1378 'topic-agent-skills' 'topic-ai-agents' 'topic-ai-tools' 'topic-automation' 'topic-browser-automation' 'topic-claude-code' 'topic-claude-skills' 'topic-codex' 'total':1084 'tree':19,311 'tri':1166,1383,1541 'troubleshoot':158 'true':1533 'unavail':333,379 'updat':163,197,1601,1608,1610 'update-guide.md':172,202,211 'updates.md':169,183,209 'upgrad':616 'url':355,396,411,525,534,542,579,592,606,637,710,723,777,940,962,968,981,999,1000,1048,1091,1098,1107,1120,1122,1126,1127,1130,1329,1351,1393,1407,1412,1469 'url-to-markdown':722 'url1':1108 'url2':1109 'url3':1110 'use':63,78,86,288,926,1011,1015,1065,1204,1271,1277,1282,1289,1318,1330,1347,1355,1413,1430,1648 'verif':157 'verifi':1262,1668 'via':729 'walkthrough':155,1616 'weak':473,575,680,765,848 'web':2,4,26,28,68,187,317,442,645,915,1675 'web-search':1,186 'webfetch':60,380,529,591,998,1161,1258,1309,1348,1392,1401,1410,1425 'websearch':48,294,326,332,408,419,430,497,505,512,855,927,928,1038,1146,1257,1304,1319,1373,1580 'without':771,1341 'work':756,759,1216 'workflow':470,911 'y':1189 'zero':14,38,330,462,464,564,717,752,824,827,1210,1280 'zero-instal':716","prices":[{"id":"bf2f99ae-c703-4ba1-93f7-be026d7e89ab","listingId":"7bfa2988-bfd1-4ad1-95a1-71cf8395f625","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"buildoak","category":"fieldwork-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T23:07:19.846Z"}],"sources":[{"listingId":"7bfa2988-bfd1-4ad1-95a1-71cf8395f625","source":"github","sourceId":"buildoak/fieldwork-skills/web-search","sourceUrl":"https://github.com/buildoak/fieldwork-skills/tree/main/skills/web-search","isPrimary":false,"firstSeenAt":"2026-04-18T23:07:19.846Z","lastSeenAt":"2026-04-22T19:06:34.029Z"}],"details":{"listingId":"7bfa2988-bfd1-4ad1-95a1-71cf8395f625","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"buildoak","slug":"web-search","github":{"repo":"buildoak/fieldwork-skills","stars":15,"topics":["agent-skills","ai-agents","ai-tools","automation","browser-automation","claude-code","claude-skills","codex"],"license":"apache-2.0","html_url":"https://github.com/buildoak/fieldwork-skills","pushed_at":"2026-03-18T08:36:25Z","description":"Battle-tested skills for AI agents that do real work","skill_md_sha":"cbe1d200257518d51fc163b29b9b951ee7ec2166","skill_md_path":"skills/web-search/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/buildoak/fieldwork-skills/tree/main/skills/web-search"},"layout":"multi","source":"github","category":"fieldwork-skills","frontmatter":{"name":"web-search","description":"Web search and content extraction skill for AI coding agents. Zero API keys required. Decision tree with fallback chains across 5 tools."},"skills_sh_url":"https://skills.sh/buildoak/fieldwork-skills/web-search"},"updatedAt":"2026-04-22T19:06:34.029Z"}}