[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FCKQR1EZ9STRTC61KHVGTT":3,"skill-same:01M6FCKQR1EZ9STRTC61KHVGTT":45},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":20,"frontMatter":21,"refName":22,"commitSha":23,"skillDirectory":24,"forksCount":25,"repositoryHtmlUrl":26,"repositoryHomepageUrl":27,"ownerHtmlUrl":28,"ownerBlogUrl":6,"ownerDescription":29,"updatedAt":30,"install":31,"resources":44},"01M6FCKQR1EZ9STRTC61KHVGTT","clawpod",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjoinmassive\u002Fclawpod\u002Fclawpod\u002FSKILL.md",[],[5],"2026-11-10 10:12:30",false,"# Massive Unblocker\n\nFetch and extract content from URLs or search Google using Massive's Unblocker APIs. Handles JS rendering, CAPTCHAs, and retries automatically. Returns HTML or structured JSON.\n\n## When to Use This Skill\n\nUse ClawPod when:\n- A standard web fetch fails, returns a CAPTCHA page, or gives incomplete\u002Fblocked content\n- The target site is known to block bots (e.g., news sites, social media, e-commerce, search engines)\n- The user needs content from a geo-restricted page\n- The page requires JavaScript rendering that a standard fetch can't handle\n- The user explicitly asks to bypass anti-bot protections or scrape a difficult site\n- The user needs Google search results (organic and paid) as structured data or HTML\n- A built-in web search tool returns incomplete or blocked results\n- The user needs localized or geo-targeted Google search results\n\nIf another fetch or search tool fails or returns blocked content, suggest retrying with ClawPod.\n\n## Setup\n\nCheck for the API token:\n\n```bash\n[ -n \"$MASSIVE_UNBLOCKER_TOKEN\" ] && echo \"TOKEN=SET\" || echo \"TOKEN=MISSING\"\n```\n\nIf token is `MISSING`, stop and tell the user:\n\n> To use ClawPod, you need an API token. It takes under a minute to set up:\n>\n> 1. Sign up at **clawpod.joinmassive.com\u002Fsignup** - when you sign up, you get 1,000 free credits. No credit card required.\n> 2. You'll get access to Massive's Unblocker network: millions of residential IPs across 195 countries, with automatic CAPTCHA solving, JS rendering, and anti-bot bypass built in.\n> 3. Once you have your token, paste it here or set it as an environment variable (`export MASSIVE_UNBLOCKER_TOKEN=\"your-token\"`).\n\nDo not proceed until the token is available.\n\n## How It Works\n\nTwo endpoints. Both use `GET` requests with the same auth token.\n\n**Browser** — fetch and render any URL, returns HTML:\n```\nhttps:\u002F\u002Funblocker.joinmassive.com\u002Fbrowser?url=\u003Cencoded-url>\n```\n\n**Search** — Google search results as HTML or structured JSON:\n```\nhttps:\u002F\u002Funblocker.joinmassive.com\u002Fsearch?terms=\u003Cencoded-terms>\n```\n\nAuth header: `Authorization: Bearer $MASSIVE_UNBLOCKER_TOKEN`\n\n## Fetching a URL\n\n```bash\ncurl -s -G --data-urlencode \"url=THE_URL\" \\\n  -H \"Authorization: Bearer $MASSIVE_UNBLOCKER_TOKEN\" \\\n  \"https:\u002F\u002Funblocker.joinmassive.com\u002Fbrowser\"\n```\n\nReplace `THE_URL` with the actual URL. `curl --data-urlencode` handles URL-encoding automatically.\n\n## Fetching Multiple URLs\n\nLoop through them sequentially. Each call can take up to 2 minutes (CAPTCHA solving, retries).\n\n```bash\nURLS=(\n  \"https:\u002F\u002Fexample.com\u002Fpage1\"\n  \"https:\u002F\u002Fexample.com\u002Fpage2\"\n)\n\nfor url in \"${URLS[@]}\"; do\n  echo \"=== $url ===\"\n  curl -s -G --data-urlencode \"url=$url\" \\\n    -H \"Authorization: Bearer $MASSIVE_UNBLOCKER_TOKEN\" \\\n    \"https:\u002F\u002Funblocker.joinmassive.com\u002Fbrowser\"\ndone\n```\n\n## Searching Google\n\nSearch endpoint. `GET` request. Returns all organic and paid Google results as HTML or structured JSON.\n\n```\nhttps:\u002F\u002Funblocker.joinmassive.com\u002Fsearch?terms=\u003Cencoded-terms>\n```\n\nAuth header: `Authorization: Bearer $MASSIVE_UNBLOCKER_TOKEN` (same token as browser fetching)\n\n### Basic Search\n\n```bash\ncurl -s -H \"Authorization: Bearer $MASSIVE_UNBLOCKER_TOKEN\" \\\n  \"https:\u002F\u002Funblocker.joinmassive.com\u002Fsearch?terms=foo+bar+baz&format=json\"\n```\n\nReplace `foo+bar+baz` with the search query. Spaces must be replaced with `+` or `%20`.\n\n### Search with Options\n\n```bash\ncurl -s -H \"Authorization: Bearer $MASSIVE_UNBLOCKER_TOKEN\" \\\n  \"https:\u002F\u002Funblocker.joinmassive.com\u002Fsearch?terms=vpn+comparison&format=json&size=100&offset=20\"\n```\n\n### Search Parameters\n\n| Parameter | Required | Values | Default | Use when |\n|-----------|----------|--------|---------|----------|\n| `terms` | yes | search query (`+` for spaces) | — | Always required |\n| `format` | no | `html`, `json` | `html` | Use `json` for structured results |\n| `serps` | no | `1` to `10` | `1` | Need multiple pages of results |\n| `size` | no | `0` to `100` | unset | Control results per page |\n| `offset` | no | `0` to `100` | `0` | Skip initial results |\n| `language` | no | name, ISO code, or Google code | unset | Localize search language |\n| `uule` | no | encoded location string | unset | Geo-target the search location |\n| `expiration` | no | `0` to N (days) | `1` | Set `0` to bypass cache |\n| `subaccount` | no | up to 255 chars | unset | Separate billing |\n\n### JSON Output\n\nWhen `format=json`, results are returned as structured nested objects with organic results, paid results, and metadata parsed out — no HTML parsing needed.\n\n### Search Tips\n\n- **Always use `format=json`** when possible — it returns structured data that's easier to work with than raw HTML.\n- **Use `size=10`** for a quick overview, `size=100` for comprehensive results.\n- **Use `offset`** to paginate through results beyond the first page.\n- **Use `language`** to get results in a specific language (e.g., `language=es` for Spanish).\n- **Live searches take a few seconds** on average but may take up to 120 seconds if retries are needed.\n\n## Browser Parameters\n\nAppend to the `\u002Fbrowser` query string as needed:\n\n| Parameter | Values | Default | Use when |\n|-----------|--------|---------|----------|\n| `format` | `rendered`, `raw` | `rendered` | Use `raw` to skip JS rendering (faster) |\n| `expiration` | `0` to N (days) | `1` | Set `0` to bypass cache |\n| `delay` | `0.1` to `10` (seconds) | none | Page needs extra time to load dynamic content |\n| `device` | device name string | desktop | Need mobile-specific content |\n| `ip` | `residential`, `isp` | `residential` | ISP IPs for less detection |\n\nExample with browser options:\n\n```bash\ncurl -s -G --data-urlencode \"url=THE_URL\" \\\n  -H \"Authorization: Bearer $MASSIVE_UNBLOCKER_TOKEN\" \\\n  \"https:\u002F\u002Funblocker.joinmassive.com\u002Fbrowser?expiration=0&delay=2\"\n```\n\n## Error Handling\n\n- **401 Unauthorized** — Token is invalid or missing. Tell the user: \"Your ClawPod API token appears to be invalid or expired. You can get a new one at **clawpod.joinmassive.com**.\"\n- **Empty response** — The page may need more time to render. Retry with `delay=3`. If still empty, try `format=rendered` (the default). Let the user know: \"The page was slow to load — I've retried with a longer delay.\"\n- **Timeout or connection error** — Some pages are very slow. Let the user know the request timed out and offer to retry. Do not silently fail.\n\n## Tips\n\n- If content looks different from expected, try `device=mobile` for the mobile version.\n- For fresh results on a previously fetched URL, use `expiration=0` to bypass cache.\n- If still blocked, try `ip=isp` — ISP-grade IPs have lower detection rates.\n- For heavy dynamic content (SPAs, infinite scroll), increase `delay` for more render time.\n\n## Rules\n\n- **One fetch = one result.** The content is in the output. Do not re-fetch the same URL.\n- **URL-encode the target URL.** Always.\n- **Sequential for multiple URLs.** No parallel requests.\n- **2 minute timeout per request.** If a page or search is slow, it's the API handling retries\u002FCAPTCHAs.\n- **Use `format=json` for search.** Structured JSON is preferred over HTML for search results.\n- **Form-encode search terms.** Replace spaces with `+` or `%20` in the `terms` parameter.\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fjoinmassive\u002Fclawpod\u002Fclawpod",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill clawpod",{"tool":37,"command":38},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill clawpod",{"tool":40,"command":41},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill clawpod","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjoinmassive\u002Fclawpod\u002Fclawpod\u002FSKILL.md",true,[],[46,60,70,79,85,92],{"skillNo":47,"name":48,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":49,"categories":50,"keywords":56,"publishedAt":18},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[51],{"categoryNo":52,"categoryName":53,"taxonomyType":54,"taxonomyTypeDesc":55},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[57,58,59],"model","model hierarchy","model hierarchy skill",{"skillNo":61,"name":62,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":66,"publishedAt":18},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[65],{"categoryNo":52,"categoryName":53,"taxonomyType":54,"taxonomyTypeDesc":55},[67,68,69],"MCP","zoom","zoom mcp",{"skillNo":71,"name":72,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":18},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[76,77,78,68],"sdk","zoom apps sdk","apps",{"skillNo":80,"name":81,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":84,"publishedAt":18},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[81],{"skillNo":86,"name":87,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":91,"publishedAt":18},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[90],{"categoryNo":52,"categoryName":53,"taxonomyType":54,"taxonomyTypeDesc":55},[87],{"skillNo":93,"name":94,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":97,"publishedAt":18},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[94]]