[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GJH7AP8M2TCD41ZPZDZBZ7":3,"skill-same:01M6GJH7AP8M2TCD41ZPZDZBZ7":88},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":66,"commitSha":67,"skillDirectory":68,"forksCount":69,"repositoryHtmlUrl":70,"repositoryHomepageUrl":6,"ownerHtmlUrl":71,"ownerBlogUrl":6,"ownerDescription":72,"updatedAt":73,"install":74,"resources":87},"01M6GJH7AP8M2TCD41ZPZDZBZ7","scrapling",null,"Web scraping with Scrapling - HTTP fetching, stealth browser automation, Cloudflare bypass, and spider crawling via CLI and Python.","zapabob\u002FSkills","zapabob","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F130830376?v=4","01M6DBMYZAGRTFQDSQYW3W764P","峯岸 亮","01M6DBMZ3GKDSJ01NZ9XTZD7JD",2,"MIT","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fscrapling\u002Fvariants\u002Fhermes-agent-optional\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[5,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"browser","duckduckgo","with","stealth browser","domain","scraping","web scraping","search","cloudflare","macos","http","windows","web","automation","linux","github","python","browser automation","cli","2026-11-10 10:12:30",false,"---\nname: scrapling\ndescription: Web scraping with Scrapling - HTTP fetching, stealth browser automation, Cloudflare bypass, and spider crawling via CLI and Python.\nversion: 1.0.0\nauthor: FEUAZUR\nlicense: MIT\nplatforms: [linux, macos, windows]\nmetadata:\n  hermes:\n    tags: [Web Scraping, Browser, Cloudflare, Stealth, Crawling, Spider]\n    related_skills: [duckduckgo-search, domain-intel]\n    homepage: https:\u002F\u002Fgithub.com\u002FD4Vinci\u002FScrapling\nprerequisites:\n  commands: [scrapling, python]\n---\n\n# Scrapling\n\n[Scrapling](https:\u002F\u002Fgithub.com\u002FD4Vinci\u002FScrapling) is a web scraping framework with anti-bot bypass, stealth browser automation, and a spider framework. It provides three fetching strategies (HTTP, dynamic JS, stealth\u002FCloudflare) and a full CLI.\n\n**This skill is for educational and research purposes only.** Users must comply with local\u002Finternational data scraping laws and respect website Terms of Service.\n\n## When to Use\n\n- Scraping static HTML pages (faster than browser tools)\n- Scraping JS-rendered pages that need a real browser\n- Bypassing Cloudflare Turnstile or bot detection\n- Crawling multiple pages with a spider\n- When the built-in `web_extract` tool does not return the data you need\n\n## Installation\n\n```bash\npip install \"scrapling[all]\"\nscrapling install\n```\n\nMinimal install (HTTP only, no browser):\n```bash\npip install scrapling\n```\n\nWith browser automation only:\n```bash\npip install \"scrapling[fetchers]\"\nscrapling install\n```\n\n## Quick Reference\n\n| Approach | Class | Use When |\n|----------|-------|----------|\n| HTTP | `Fetcher` \u002F `FetcherSession` | Static pages, APIs, fast bulk requests |\n| Dynamic | `DynamicFetcher` \u002F `DynamicSession` | JS-rendered content, SPAs |\n| Stealth | `StealthyFetcher` \u002F `StealthySession` | Cloudflare, anti-bot protected sites |\n| Spider | `Spider` | Multi-page crawling with link following |\n\n## CLI Usage\n\n### Extract Static Page\n\n```bash\nscrapling extract get 'https:\u002F\u002Fexample.com' output.md\n```\n\nWith CSS selector and browser impersonation:\n\n```bash\nscrapling extract get 'https:\u002F\u002Fexample.com' output.md \\\n  --css-selector '.content' \\\n  --impersonate 'chrome'\n```\n\n### Extract JS-Rendered Page\n\n```bash\nscrapling extract fetch 'https:\u002F\u002Fexample.com' output.md \\\n  --css-selector '.dynamic-content' \\\n  --disable-resources \\\n  --network-idle\n```\n\n### Extract Cloudflare-Protected Page\n\n```bash\nscrapling extract stealthy-fetch 'https:\u002F\u002Fprotected-site.com' output.html \\\n  --solve-cloudflare \\\n  --block-webrtc \\\n  --hide-canvas\n```\n\n### POST Request\n\n```bash\nscrapling extract post 'https:\u002F\u002Fexample.com\u002Fapi' output.json \\\n  --json '{\"query\": \"search term\"}'\n```\n\n### Output Formats\n\nThe output format is determined by the file extension:\n- `.html` -- raw HTML\n- `.md` -- converted to Markdown\n- `.txt` -- plain text\n- `.json` \u002F `.jsonl` -- JSON\n\n## Python: HTTP Scraping\n\n### Single Request\n\n```python\nfrom scrapling.fetchers import Fetcher\n\npage = Fetcher.get('https:\u002F\u002Fquotes.toscrape.com\u002F')\nquotes = page.css('.quote .text::text').getall()\nfor q in quotes:\n    print(q)\n```\n\n### Session (Persistent Cookies)\n\n```python\nfrom scrapling.fetchers import FetcherSession\n\nwith FetcherSession(impersonate='chrome') as session:\n    page = session.get('https:\u002F\u002Fexample.com\u002F', stealthy_headers=True)\n    links = page.css('a::attr(href)').getall()\n    for link in links[:5]:\n        sub = session.get(link)\n        print(sub.css('h1::text').get())\n```\n\n### POST \u002F PUT \u002F DELETE\n\n```python\npage = Fetcher.post('https:\u002F\u002Fapi.example.com\u002Fdata', json={\"key\": \"value\"})\npage = Fetcher.put('https:\u002F\u002Fapi.example.com\u002Fitem\u002F1', data={\"name\": \"updated\"})\npage = Fetcher.delete('https:\u002F\u002Fapi.example.com\u002Fitem\u002F1')\n```\n\n### With Proxy\n\n```python\npage = Fetcher.get('https:\u002F\u002Fexample.com', proxy='http:\u002F\u002Fuser:pass@proxy:8080')\n```\n\n## Python: Dynamic Pages (JS-Rendered)\n\nFor pages that require JavaScript execution (SPAs, lazy-loaded content):\n\n```python\nfrom scrapling.fetchers import DynamicFetcher\n\npage = DynamicFetcher.fetch('https:\u002F\u002Fexample.com', headless=True)\ndata = page.css('.js-loaded-content::text').getall()\n```\n\n### Wait for Specific Element\n\n```python\npage = DynamicFetcher.fetch(\n    'https:\u002F\u002Fexample.com',\n    wait_selector=('.results', 'visible'),\n    network_idle=True,\n)\n```\n\n### Disable Resources for Speed\n\nBlocks fonts, images, media, stylesheets (~25% faster):\n\n```python\nfrom scrapling.fetchers import DynamicSession\n\nwith DynamicSession(headless=True, disable_resources=True, network_idle=True) as session:\n    page = session.fetch('https:\u002F\u002Fexample.com')\n    items = page.css('.item::text').getall()\n```\n\n### Custom Page Automation\n\n```python\nfrom playwright.sync_api import Page\nfrom scrapling.fetchers import DynamicFetcher\n\ndef scroll_and_click(page: Page):\n    page.mouse.wheel(0, 3000)\n    page.wait_for_timeout(1000)\n    page.click('button.load-more')\n    page.wait_for_selector('.extra-results')\n\npage = DynamicFetcher.fetch('https:\u002F\u002Fexample.com', page_action=scroll_and_click)\nresults = page.css('.extra-results .item::text').getall()\n```\n\n## Python: Stealth Mode (Anti-Bot Bypass)\n\nFor Cloudflare-protected or heavily fingerprinted sites:\n\n```python\nfrom scrapling.fetchers import StealthyFetcher\n\npage = StealthyFetcher.fetch(\n    'https:\u002F\u002Fprotected-site.com',\n    headless=True,\n    solve_cloudflare=True,\n    block_webrtc=True,\n    hide_canvas=True,\n)\ncontent = page.css('.protected-content::text').getall()\n```\n\n### Stealth Session\n\n```python\nfrom scrapling.fetchers import StealthySession\n\nwith StealthySession(headless=True, solve_cloudflare=True) as session:\n    page1 = session.fetch('https:\u002F\u002Fprotected-site.com\u002Fpage1')\n    page2 = session.fetch('https:\u002F\u002Fprotected-site.com\u002Fpage2')\n```\n\n## Element Selection\n\nAll fetchers return a `Selector` object with these methods:\n\n### CSS Selectors\n\n```python\npage.css('h1::text').get()              # First h1 text\npage.css('a::attr(href)').getall()      # All link hrefs\npage.css('.quote .text::text').getall() # Nested selection\n```\n\n### XPath\n\n```python\npage.xpath('\u002F\u002Fdiv[@class=\"content\"]\u002Ftext()').getall()\npage.xpath('\u002F\u002Fa\u002F@href').getall()\n```\n\n### Find Methods\n\n```python\npage.find_all('div', class_='quote')       # By tag + attribute\npage.find_by_text('Read more', tag='a')    # By text content\npage.find_by_regex(r'\\$\\d+\\.\\d{2}')       # By regex pattern\n```\n\n### Similar Elements\n\nFind elements with similar structure (useful for product listings, etc.):\n\n```python\nfirst_product = page.css('.product')[0]\nall_similar = first_product.find_similar()\n```\n\n### Navigation\n\n```python\nel = page.css('.target')[0]\nel.parent                # Parent element\nel.children              # Child elements\nel.next_sibling          # Next sibling\nel.prev_sibling          # Previous sibling\n```\n\n## Python: Spider Framework\n\nFor multi-page crawling with link following:\n\n```python\nfrom scrapling.spiders import Spider, Request, Response\n\nclass QuotesSpider(Spider):\n    name = \"quotes\"\n    start_urls = [\"https:\u002F\u002Fquotes.toscrape.com\u002F\"]\n    concurrent_requests = 10\n    download_delay = 1\n\n    async def parse(self, response: Response):\n        for quote in response.css('.quote'):\n            yield {\n                \"text\": quote.css('.text::text').get(),\n                \"author\": quote.css('.author::text').get(),\n                \"tags\": quote.css('.tag::text').getall(),\n            }\n\n        next_page = response.css('.next a::attr(href)').get()\n        if next_page:\n            yield response.follow(next_page)\n\nresult = QuotesSpider().start()\nprint(f\"Scraped {len(result.items)} quotes\")\nresult.items.to_json(\"quotes.json\")\n```\n\n### Multi-Session Spider\n\nRoute requests to different fetcher types:\n\n```python\nfrom scrapling.fetchers import FetcherSession, AsyncStealthySession\n\nclass SmartSpider(Spider):\n    name = \"smart\"\n    start_urls = [\"https:\u002F\u002Fexample.com\u002F\"]\n\n    def configure_sessions(self, manager):\n        manager.add(\"fast\", FetcherSession(impersonate=\"chrome\"))\n        manager.add(\"stealth\", AsyncStealthySession(headless=True), lazy=True)\n\n    async def parse(self, response: Response):\n        for link in response.css('a::attr(href)').getall():\n            if \"protected\" in link:\n                yield Request(link, sid=\"stealth\")\n            else:\n                yield Request(link, sid=\"fast\", callback=self.parse)\n```\n\n### Pause\u002FResume Crawling\n\n```python\nspider = QuotesSpider(crawldir=\".\u002Fcrawl_checkpoint\")\nspider.start()  # Ctrl+C to pause, re-run to resume from checkpoint\n```\n\n## Pitfalls\n\n- **Browser install required**: run `scrapling install` after pip install -- without it, `DynamicFetcher` and `StealthyFetcher` will fail\n- **Timeouts**: DynamicFetcher\u002FStealthyFetcher timeout is in **milliseconds** (default 30000), Fetcher timeout is in **seconds**\n- **Cloudflare bypass**: `solve_cloudflare=True` adds 5-15 seconds to fetch time -- only enable when needed\n- **Resource usage**: StealthyFetcher runs a real browser -- limit concurrent usage\n- **Legal**: always check robots.txt and website ToS before scraping. This library is for educational and research purposes\n- **Python version**: requires Python 3.10+\n","# Scrapling\n\n[Scrapling](https:\u002F\u002Fgithub.com\u002FD4Vinci\u002FScrapling) is a web scraping framework with anti-bot bypass, stealth browser automation, and a spider framework. It provides three fetching strategies (HTTP, dynamic JS, stealth\u002FCloudflare) and a full CLI.\n\n**This skill is for educational and research purposes only.** Users must comply with local\u002Finternational data scraping laws and respect website Terms of Service.\n\n## When to Use\n\n- Scraping static HTML pages (faster than browser tools)\n- Scraping JS-rendered pages that need a real browser\n- Bypassing Cloudflare Turnstile or bot detection\n- Crawling multiple pages with a spider\n- When the built-in `web_extract` tool does not return the data you need\n\n## Installation\n\n```bash\npip install \"scrapling[all]\"\nscrapling install\n```\n\nMinimal install (HTTP only, no browser):\n```bash\npip install scrapling\n```\n\nWith browser automation only:\n```bash\npip install \"scrapling[fetchers]\"\nscrapling install\n```\n\n## Quick Reference\n\n| Approach | Class | Use When |\n|----------|-------|----------|\n| HTTP | `Fetcher` \u002F `FetcherSession` | Static pages, APIs, fast bulk requests |\n| Dynamic | `DynamicFetcher` \u002F `DynamicSession` | JS-rendered content, SPAs |\n| Stealth | `StealthyFetcher` \u002F `StealthySession` | Cloudflare, anti-bot protected sites |\n| Spider | `Spider` | Multi-page crawling with link following |\n\n## CLI Usage\n\n### Extract Static Page\n\n```bash\nscrapling extract get 'https:\u002F\u002Fexample.com' output.md\n```\n\nWith CSS selector and browser impersonation:\n\n```bash\nscrapling extract get 'https:\u002F\u002Fexample.com' output.md \\\n  --css-selector '.content' \\\n  --impersonate 'chrome'\n```\n\n### Extract JS-Rendered Page\n\n```bash\nscrapling extract fetch 'https:\u002F\u002Fexample.com' output.md \\\n  --css-selector '.dynamic-content' \\\n  --disable-resources \\\n  --network-idle\n```\n\n### Extract Cloudflare-Protected Page\n\n```bash\nscrapling extract stealthy-fetch 'https:\u002F\u002Fprotected-site.com' output.html \\\n  --solve-cloudflare \\\n  --block-webrtc \\\n  --hide-canvas\n```\n\n### POST Request\n\n```bash\nscrapling extract post 'https:\u002F\u002Fexample.com\u002Fapi' output.json \\\n  --json '{\"query\": \"search term\"}'\n```\n\n### Output Formats\n\nThe output format is determined by the file extension:\n- `.html` -- raw HTML\n- `.md` -- converted to Markdown\n- `.txt` -- plain text\n- `.json` \u002F `.jsonl` -- JSON\n\n## Python: HTTP Scraping\n\n### Single Request\n\n```python\nfrom scrapling.fetchers import Fetcher\n\npage = Fetcher.get('https:\u002F\u002Fquotes.toscrape.com\u002F')\nquotes = page.css('.quote .text::text').getall()\nfor q in quotes:\n    print(q)\n```\n\n### Session (Persistent Cookies)\n\n```python\nfrom scrapling.fetchers import FetcherSession\n\nwith FetcherSession(impersonate='chrome') as session:\n    page = session.get('https:\u002F\u002Fexample.com\u002F', stealthy_headers=True)\n    links = page.css('a::attr(href)').getall()\n    for link in links[:5]:\n        sub = session.get(link)\n        print(sub.css('h1::text').get())\n```\n\n### POST \u002F PUT \u002F DELETE\n\n```python\npage = Fetcher.post('https:\u002F\u002Fapi.example.com\u002Fdata', json={\"key\": \"value\"})\npage = Fetcher.put('https:\u002F\u002Fapi.example.com\u002Fitem\u002F1', data={\"name\": \"updated\"})\npage = Fetcher.delete('https:\u002F\u002Fapi.example.com\u002Fitem\u002F1')\n```\n\n### With Proxy\n\n```python\npage = Fetcher.get('https:\u002F\u002Fexample.com', proxy='http:\u002F\u002Fuser:pass@proxy:8080')\n```\n\n## Python: Dynamic Pages (JS-Rendered)\n\nFor pages that require JavaScript execution (SPAs, lazy-loaded content):\n\n```python\nfrom scrapling.fetchers import DynamicFetcher\n\npage = DynamicFetcher.fetch('https:\u002F\u002Fexample.com', headless=True)\ndata = page.css('.js-loaded-content::text').getall()\n```\n\n### Wait for Specific Element\n\n```python\npage = DynamicFetcher.fetch(\n    'https:\u002F\u002Fexample.com',\n    wait_selector=('.results', 'visible'),\n    network_idle=True,\n)\n```\n\n### Disable Resources for Speed\n\nBlocks fonts, images, media, stylesheets (~25% faster):\n\n```python\nfrom scrapling.fetchers import DynamicSession\n\nwith DynamicSession(headless=True, disable_resources=True, network_idle=True) as session:\n    page = session.fetch('https:\u002F\u002Fexample.com')\n    items = page.css('.item::text').getall()\n```\n\n### Custom Page Automation\n\n```python\nfrom playwright.sync_api import Page\nfrom scrapling.fetchers import DynamicFetcher\n\ndef scroll_and_click(page: Page):\n    page.mouse.wheel(0, 3000)\n    page.wait_for_timeout(1000)\n    page.click('button.load-more')\n    page.wait_for_selector('.extra-results')\n\npage = DynamicFetcher.fetch('https:\u002F\u002Fexample.com', page_action=scroll_and_click)\nresults = page.css('.extra-results .item::text').getall()\n```\n\n## Python: Stealth Mode (Anti-Bot Bypass)\n\nFor Cloudflare-protected or heavily fingerprinted sites:\n\n```python\nfrom scrapling.fetchers import StealthyFetcher\n\npage = StealthyFetcher.fetch(\n    'https:\u002F\u002Fprotected-site.com',\n    headless=True,\n    solve_cloudflare=True,\n    block_webrtc=True,\n    hide_canvas=True,\n)\ncontent = page.css('.protected-content::text').getall()\n```\n\n### Stealth Session\n\n```python\nfrom scrapling.fetchers import StealthySession\n\nwith StealthySession(headless=True, solve_cloudflare=True) as session:\n    page1 = session.fetch('https:\u002F\u002Fprotected-site.com\u002Fpage1')\n    page2 = session.fetch('https:\u002F\u002Fprotected-site.com\u002Fpage2')\n```\n\n## Element Selection\n\nAll fetchers return a `Selector` object with these methods:\n\n### CSS Selectors\n\n```python\npage.css('h1::text').get()              # First h1 text\npage.css('a::attr(href)').getall()      # All link hrefs\npage.css('.quote .text::text').getall() # Nested selection\n```\n\n### XPath\n\n```python\npage.xpath('\u002F\u002Fdiv[@class=\"content\"]\u002Ftext()').getall()\npage.xpath('\u002F\u002Fa\u002F@href').getall()\n```\n\n### Find Methods\n\n```python\npage.find_all('div', class_='quote')       # By tag + attribute\npage.find_by_text('Read more', tag='a')    # By text content\npage.find_by_regex(r'\\$\\d+\\.\\d{2}')       # By regex pattern\n```\n\n### Similar Elements\n\nFind elements with similar structure (useful for product listings, etc.):\n\n```python\nfirst_product = page.css('.product')[0]\nall_similar = first_product.find_similar()\n```\n\n### Navigation\n\n```python\nel = page.css('.target')[0]\nel.parent                # Parent element\nel.children              # Child elements\nel.next_sibling          # Next sibling\nel.prev_sibling          # Previous sibling\n```\n\n## Python: Spider Framework\n\nFor multi-page crawling with link following:\n\n```python\nfrom scrapling.spiders import Spider, Request, Response\n\nclass QuotesSpider(Spider):\n    name = \"quotes\"\n    start_urls = [\"https:\u002F\u002Fquotes.toscrape.com\u002F\"]\n    concurrent_requests = 10\n    download_delay = 1\n\n    async def parse(self, response: Response):\n        for quote in response.css('.quote'):\n            yield {\n                \"text\": quote.css('.text::text').get(),\n                \"author\": quote.css('.author::text').get(),\n                \"tags\": quote.css('.tag::text').getall(),\n            }\n\n        next_page = response.css('.next a::attr(href)').get()\n        if next_page:\n            yield response.follow(next_page)\n\nresult = QuotesSpider().start()\nprint(f\"Scraped {len(result.items)} quotes\")\nresult.items.to_json(\"quotes.json\")\n```\n\n### Multi-Session Spider\n\nRoute requests to different fetcher types:\n\n```python\nfrom scrapling.fetchers import FetcherSession, AsyncStealthySession\n\nclass SmartSpider(Spider):\n    name = \"smart\"\n    start_urls = [\"https:\u002F\u002Fexample.com\u002F\"]\n\n    def configure_sessions(self, manager):\n        manager.add(\"fast\", FetcherSession(impersonate=\"chrome\"))\n        manager.add(\"stealth\", AsyncStealthySession(headless=True), lazy=True)\n\n    async def parse(self, response: Response):\n        for link in response.css('a::attr(href)').getall():\n            if \"protected\" in link:\n                yield Request(link, sid=\"stealth\")\n            else:\n                yield Request(link, sid=\"fast\", callback=self.parse)\n```\n\n### Pause\u002FResume Crawling\n\n```python\nspider = QuotesSpider(crawldir=\".\u002Fcrawl_checkpoint\")\nspider.start()  # Ctrl+C to pause, re-run to resume from checkpoint\n```\n\n## Pitfalls\n\n- **Browser install required**: run `scrapling install` after pip install -- without it, `DynamicFetcher` and `StealthyFetcher` will fail\n- **Timeouts**: DynamicFetcher\u002FStealthyFetcher timeout is in **milliseconds** (default 30000), Fetcher timeout is in **seconds**\n- **Cloudflare bypass**: `solve_cloudflare=True` adds 5-15 seconds to fetch time -- only enable when needed\n- **Resource usage**: StealthyFetcher runs a real browser -- limit concurrent usage\n- **Legal**: always check robots.txt and website ToS before scraping. This library is for educational and research purposes\n- **Python version**: requires Python 3.10+\n",{"name":5,"author":48,"license":15,"version":49,"metadata":50,"platforms":63,"description":7,"prerequisites":64},"FEUAZUR","1.0.0",{"hermes":51},{"tags":52,"homepage":59,"related_skills":60},[53,54,55,56,57,58],"Web Scraping","Browser","Cloudflare","Stealth","Crawling","Spider","https:\u002F\u002Fgithub.com\u002FD4Vinci\u002FScrapling",[61,62],"duckduckgo-search","domain-intel",[38,33,35],{"commands":65},[5,40],"main","0d1434f89f4bc6b07e9d272accd8c1013768820f","registry\u002Fskills\u002Fscrapling\u002Fvariants\u002Fhermes-agent-optional",0,"https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills","https:\u002F\u002Fgithub.com\u002Fzapabob","The Open University of JAPAN　2019-now\r\n\r\nTokyo University of Science　2007-2010","2026-10-26 16:29:01",{"source":8,"skillName":5,"commands":75,"prompt":85,"zipAvailable":86},[76,79,82],{"tool":77,"command":78},"npx","npx skills add zapabob\u002FSkills --skill scrapling",{"tool":80,"command":81},"bunx","bunx skills add zapabob\u002FSkills --skill scrapling",{"tool":83,"command":84},"pnpm","pnpm dlx skills add zapabob\u002FSkills --skill scrapling","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fscrapling\u002Fvariants\u002Fhermes-agent-optional\u002FSKILL.md",true,[],[89,117,152,179,206,220],{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":104,"publishedAt":43},"01M6GJTE1GESGGF9K028Y7753E","xurl","X\u002FTwitter via xurl CLI: post, search, DM, media, v2 API.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fxurl\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[95,98,99],{"categoryNo":96,"categoryName":97,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":100,"categoryName":101,"taxonomyType":102,"taxonomyTypeDesc":103},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[91,105,33,42,39,38,35,106,31,107,108,109,110,111,112,113,66,114,115,116],"openclaw","official","https","social-media","api","Media","hermes","hermes agent","twitter","social","via","post",{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":134,"publishedAt":43},"01M6GJT8S1PXQ8WPXT1HSNBWH2","writing-plans","Write implementation plans: bite-sized tasks, paths, code.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwriting-plans\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[123,126,129,130,131],{"categoryNo":124,"categoryName":125,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":127,"categoryName":128,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":100,"categoryName":101,"taxonomyType":102,"taxonomyTypeDesc":103},{"categoryNo":132,"categoryName":133,"taxonomyType":102,"taxonomyTypeDesc":103},"01JBSEEDCAT000000000000036","内容创作者",[135,136,137,138,33,139,38,140,35,141,142,143,144,145,146,147,148,149,150,151],"writing","writing plans","plans","design","review","workflow","documentation","tasks","development","code","planning","code-review","subagent","write","superpowers","paths","test-driven-development",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":161,"publishedAt":43},"01M6GJST0H5X7WHBJ3BZK0DVKH","whisper","OpenAI's general-purpose speech recognition model. Supports 99 languages, transcription, translation to English, and language identification. Six model sizes from tiny (39M params) to large (1550M params). Use for speech-to-text, podcast transcription, or multilingual audio processing. Best for robust, multilingual ASR.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwhisper\u002Fvariants\u002Fhermes-agent-optional\u002FSKILL.md",[158],{"categoryNo":159,"categoryName":160,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[154,33,38,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178],"openai","speech","multimodal","Transformers","ASR","Audio","text","model","speech recognition","use","general","multilingual","translation","english","identification","processing","Audio Processing",{"skillNo":180,"name":181,"nameZh":6,"description":182,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":183,"categories":184,"keywords":188,"publishedAt":43},"01M6GJSMRQ8EETZTYMG72P70EA","weights-and-biases","W&B: log ML experiments, sweeps, model registry, dashboards.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fweights-and-biases\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[185],{"categoryNo":186,"categoryName":187,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000013","分析与可视化",[189,33,190,191,35,192,193,194,195,196,197,169,198,199,200,201,202,203,204,205],"weights and biases","tensorflow","experiments","pytorch","visualization","registry","real-time","tuning","dashboards","experiment","log","time","Experiment Tracking","Model Registry","Hyperparameter Tuning","WandB","Real-Time Visualization",{"skillNo":207,"name":208,"nameZh":6,"description":209,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":210,"categories":211,"keywords":213,"publishedAt":43},"01M6GJS19KDPRY112JTR326S06","watchers","Poll RSS, JSON APIs, and GitHub with watermark dedup.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwatchers\u002Fvariants\u002Fhermes-agent-optional\u002FSKILL.md",[212],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[208,33,214,39,38,37,34,215,216,217,218,111,112,219,26],"terminal","monitoring","cron","json","rss","devops",{"skillNo":221,"name":222,"nameZh":6,"description":223,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":224,"categories":225,"keywords":228,"publishedAt":43},"01M6GJRHJD2A6Q830SWF9W48BC","serving-llms-vllm","vLLM: high-throughput LLM serving, OpenAI API, quantization.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fvllm\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[226,227],{"categoryNo":96,"categoryName":97,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":100,"categoryName":101,"taxonomyType":102,"taxonomyTypeDesc":103},[229,230,231,38,232,162,233,234,235,165,236,109,237,238,239,240,241,242,243,244],"llms","vLLM","serving llms vllm","research","openai api","tensor","Inference Serving","Production","llm serving","High Throughput","PagedAttention","Continuous Batching","Quantization","Tensor Parallelism","high-throughput","throughput"]