[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F73CDM54C7SBH5DTQH6FSD":3,"skill-same:01M6F73CDM54C7SBH5DTQH6FSD":80},{"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":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":57,"commitSha":58,"skillDirectory":59,"forksCount":60,"repositoryHtmlUrl":61,"repositoryHomepageUrl":62,"ownerHtmlUrl":63,"ownerBlogUrl":6,"ownerDescription":64,"updatedAt":65,"install":66,"resources":79},"01M6F73CDM54C7SBH5DTQH6FSD","apify-hello-world",null,"Run your first Apify Actor and retrieve results via apify-client.\nUse when starting a new Apify integration, testing connectivity,\nor learning the Actor call\u002Fdataset retrieval pattern.\nTrigger: \"apify hello world\", \"apify example\", \"run an apify actor\",\n\"apify quick start\", \"first apify scrape\".","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\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fapify-hello-world\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"hello world","apify hello world","apify","world","hello","code","scrape","Bash","node","read","write","edit","scraping","run","pattern","io","dataset","quick start","quick","testing","2026-11-10 10:12:30",false,"---\nname: apify-hello-world\ndescription: |\n  Run your first Apify Actor and retrieve results via apify-client.\n  Use when starting a new Apify integration, testing connectivity,\n  or learning the Actor call\u002Fdataset retrieval pattern.\n  Trigger: \"apify hello world\", \"apify example\", \"run an apify actor\",\n  \"apify quick start\", \"first apify scrape\".\nallowed-tools: Read, Write, Edit, Bash(npm:*), Bash(npx:*), Bash(node:*)\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ntags: [saas, scraping, automation, apify]\ncompatible-with: claude-code\n---\n\n# Apify Hello World\n\n## Overview\n\nRun a public Actor from the Apify Store, wait for it to finish, and retrieve the scraped data. This demonstrates the fundamental call-wait-collect pattern used in every Apify integration.\n\n## Prerequisites\n\n- `npm install apify-client` completed\n- `APIFY_TOKEN` environment variable set\n- See `apify-install-auth` if not ready\n\n## Core Pattern: Call Actor, Get Data\n\n```typescript\nimport { ApifyClient } from 'apify-client';\n\nconst client = new ApifyClient({ token: process.env.APIFY_TOKEN });\n\n\u002F\u002F 1. Run an Actor and wait for it to finish\nconst run = await client.actor('apify\u002Fwebsite-content-crawler').call({\n  startUrls: [{ url: 'https:\u002F\u002Fdocs.apify.com\u002Facademy' }],\n  maxCrawlPages: 5,\n});\n\n\u002F\u002F 2. Retrieve results from the default dataset\nconst { items } = await client.dataset(run.defaultDatasetId).listItems();\n\nconsole.log(`Crawled ${items.length} pages:`);\nitems.forEach(item => {\n  console.log(`  - ${item.url}: ${item.text?.substring(0, 80)}...`);\n});\n```\n\n## Instructions\n\n### Step 1: Create the Script\n\nCreate `hello-apify.ts` (or `.js`) with the code above.\n\n### Step 2: Run It\n\n```bash\n# With tsx (recommended)\nnpx tsx hello-apify.ts\n\n# Or with Node.js (plain JS)\nnode hello-apify.js\n```\n\n### Step 3: Understand the Output\n\nThe Actor runs on Apify's cloud infrastructure. When it finishes:\n- `run.id` — unique run identifier\n- `run.status` — `SUCCEEDED`, `FAILED`, `TIMED-OUT`, or `ABORTED`\n- `run.defaultDatasetId` — ID of the dataset containing results\n- `run.defaultKeyValueStoreId` — ID of the KV store with metadata\n\n## Popular Starter Actors\n\n| Actor ID | Purpose | Typical Input |\n|----------|---------|---------------|\n| `apify\u002Fwebsite-content-crawler` | Crawl and extract text | `{ startUrls, maxCrawlPages }` |\n| `apify\u002Fweb-scraper` | General-purpose scraper | `{ startUrls, pageFunction }` |\n| `apify\u002Fcheerio-scraper` | Fast HTML scraper | `{ startUrls, pageFunction }` |\n| `apify\u002Fgoogle-search-scraper` | Google SERP results | `{ queries, maxPagesPerQuery }` |\n\n## Synchronous vs Asynchronous Runs\n\n```typescript\n\u002F\u002F SYNCHRONOUS — .call() waits for the Actor to finish (simple, blocking)\nconst run = await client.actor('apify\u002Fweb-scraper').call(input);\n\n\u002F\u002F ASYNCHRONOUS — .start() returns immediately, poll later\nconst run = await client.actor('apify\u002Fweb-scraper').start(input);\n\u002F\u002F ... do other work ...\nconst finishedRun = await client.run(run.id).waitForFinish();\n```\n\n## Working with Results\n\n```typescript\n\u002F\u002F Get all items (paginated internally)\nconst { items } = await client.dataset(run.defaultDatasetId).listItems();\n\n\u002F\u002F Get items with pagination control\nconst page1 = await client.dataset(run.defaultDatasetId).listItems({\n  limit: 100,\n  offset: 0,\n});\n\n\u002F\u002F Download entire dataset as CSV\u002FJSON\u002Fetc.\nconst buffer = await client.dataset(run.defaultDatasetId).downloadItems('csv');\n\n\u002F\u002F Get a named output from the key-value store\nconst screenshot = await client\n  .keyValueStore(run.defaultKeyValueStoreId)\n  .getRecord('screenshot');\n```\n\n## Run Configuration Options\n\n```typescript\nconst run = await client.actor('apify\u002Fweb-scraper').call(\n  input,       \u002F\u002F Actor-specific input object\n  {\n    memory: 1024,          \u002F\u002F Memory in MB (128–32768, powers of 2)\n    timeout: 300,          \u002F\u002F Timeout in seconds (default: Actor's setting)\n    build: 'latest',       \u002F\u002F Which build to use\n    waitSecs: 120,         \u002F\u002F Max wait for .call() (0 = don't wait)\n  }\n);\n```\n\n## Error Handling\n\n| Error | Cause | Solution |\n|-------|-------|----------|\n| `Actor not found` | Wrong Actor ID | Check ID at apify.com\u002Fstore |\n| `run.status === 'FAILED'` | Actor crashed | Check `run.statusMessage` for details |\n| `run.status === 'TIMED-OUT'` | Exceeded timeout | Increase `timeout` or reduce workload |\n| `Dataset is empty` | Actor produced no output | Verify input parameters; check Actor logs |\n| `402 Payment Required` | Insufficient compute units | Top up at console.apify.com\u002Fbilling |\n\n## Complete Example: Scrape and Save\n\n```typescript\nimport { ApifyClient } from 'apify-client';\nimport { writeFileSync } from 'fs';\n\nconst client = new ApifyClient({ token: process.env.APIFY_TOKEN });\n\nasync function scrapeAndSave() {\n  console.log('Starting Actor run...');\n\n  const run = await client.actor('apify\u002Fwebsite-content-crawler').call({\n    startUrls: [{ url: 'https:\u002F\u002Fexample.com' }],\n    maxCrawlPages: 10,\n  });\n\n  if (run.status !== 'SUCCEEDED') {\n    throw new Error(`Actor run failed: ${run.status} — ${run.statusMessage}`);\n  }\n\n  const { items } = await client.dataset(run.defaultDatasetId).listItems();\n  writeFileSync('results.json', JSON.stringify(items, null, 2));\n  console.log(`Saved ${items.length} items to results.json`);\n}\n\nscrapeAndSave().catch(console.error);\n```\n\n## Resources\n\n- [Apify Store — Browse Actors](https:\u002F\u002Fapify.com\u002Fstore)\n- [Run Actor via API](https:\u002F\u002Fdocs.apify.com\u002Facademy\u002Fapi\u002Frun-actor-and-retrieve-data-via-api)\n- [JS Client Examples](https:\u002F\u002Fdocs.apify.com\u002Fapi\u002Fclient\u002Fjs\u002Fdocs\u002Fguides\u002Fexamples)\n\n## Next Steps\n\nProceed to `apify-local-dev-loop` for local Actor development.\n\n","# Apify Hello World\n\n## Overview\n\nRun a public Actor from the Apify Store, wait for it to finish, and retrieve the scraped data. This demonstrates the fundamental call-wait-collect pattern used in every Apify integration.\n\n## Prerequisites\n\n- `npm install apify-client` completed\n- `APIFY_TOKEN` environment variable set\n- See `apify-install-auth` if not ready\n\n## Core Pattern: Call Actor, Get Data\n\n```typescript\nimport { ApifyClient } from 'apify-client';\n\nconst client = new ApifyClient({ token: process.env.APIFY_TOKEN });\n\n\u002F\u002F 1. Run an Actor and wait for it to finish\nconst run = await client.actor('apify\u002Fwebsite-content-crawler').call({\n  startUrls: [{ url: 'https:\u002F\u002Fdocs.apify.com\u002Facademy' }],\n  maxCrawlPages: 5,\n});\n\n\u002F\u002F 2. Retrieve results from the default dataset\nconst { items } = await client.dataset(run.defaultDatasetId).listItems();\n\nconsole.log(`Crawled ${items.length} pages:`);\nitems.forEach(item => {\n  console.log(`  - ${item.url}: ${item.text?.substring(0, 80)}...`);\n});\n```\n\n## Instructions\n\n### Step 1: Create the Script\n\nCreate `hello-apify.ts` (or `.js`) with the code above.\n\n### Step 2: Run It\n\n```bash\n# With tsx (recommended)\nnpx tsx hello-apify.ts\n\n# Or with Node.js (plain JS)\nnode hello-apify.js\n```\n\n### Step 3: Understand the Output\n\nThe Actor runs on Apify's cloud infrastructure. When it finishes:\n- `run.id` — unique run identifier\n- `run.status` — `SUCCEEDED`, `FAILED`, `TIMED-OUT`, or `ABORTED`\n- `run.defaultDatasetId` — ID of the dataset containing results\n- `run.defaultKeyValueStoreId` — ID of the KV store with metadata\n\n## Popular Starter Actors\n\n| Actor ID | Purpose | Typical Input |\n|----------|---------|---------------|\n| `apify\u002Fwebsite-content-crawler` | Crawl and extract text | `{ startUrls, maxCrawlPages }` |\n| `apify\u002Fweb-scraper` | General-purpose scraper | `{ startUrls, pageFunction }` |\n| `apify\u002Fcheerio-scraper` | Fast HTML scraper | `{ startUrls, pageFunction }` |\n| `apify\u002Fgoogle-search-scraper` | Google SERP results | `{ queries, maxPagesPerQuery }` |\n\n## Synchronous vs Asynchronous Runs\n\n```typescript\n\u002F\u002F SYNCHRONOUS — .call() waits for the Actor to finish (simple, blocking)\nconst run = await client.actor('apify\u002Fweb-scraper').call(input);\n\n\u002F\u002F ASYNCHRONOUS — .start() returns immediately, poll later\nconst run = await client.actor('apify\u002Fweb-scraper').start(input);\n\u002F\u002F ... do other work ...\nconst finishedRun = await client.run(run.id).waitForFinish();\n```\n\n## Working with Results\n\n```typescript\n\u002F\u002F Get all items (paginated internally)\nconst { items } = await client.dataset(run.defaultDatasetId).listItems();\n\n\u002F\u002F Get items with pagination control\nconst page1 = await client.dataset(run.defaultDatasetId).listItems({\n  limit: 100,\n  offset: 0,\n});\n\n\u002F\u002F Download entire dataset as CSV\u002FJSON\u002Fetc.\nconst buffer = await client.dataset(run.defaultDatasetId).downloadItems('csv');\n\n\u002F\u002F Get a named output from the key-value store\nconst screenshot = await client\n  .keyValueStore(run.defaultKeyValueStoreId)\n  .getRecord('screenshot');\n```\n\n## Run Configuration Options\n\n```typescript\nconst run = await client.actor('apify\u002Fweb-scraper').call(\n  input,       \u002F\u002F Actor-specific input object\n  {\n    memory: 1024,          \u002F\u002F Memory in MB (128–32768, powers of 2)\n    timeout: 300,          \u002F\u002F Timeout in seconds (default: Actor's setting)\n    build: 'latest',       \u002F\u002F Which build to use\n    waitSecs: 120,         \u002F\u002F Max wait for .call() (0 = don't wait)\n  }\n);\n```\n\n## Error Handling\n\n| Error | Cause | Solution |\n|-------|-------|----------|\n| `Actor not found` | Wrong Actor ID | Check ID at apify.com\u002Fstore |\n| `run.status === 'FAILED'` | Actor crashed | Check `run.statusMessage` for details |\n| `run.status === 'TIMED-OUT'` | Exceeded timeout | Increase `timeout` or reduce workload |\n| `Dataset is empty` | Actor produced no output | Verify input parameters; check Actor logs |\n| `402 Payment Required` | Insufficient compute units | Top up at console.apify.com\u002Fbilling |\n\n## Complete Example: Scrape and Save\n\n```typescript\nimport { ApifyClient } from 'apify-client';\nimport { writeFileSync } from 'fs';\n\nconst client = new ApifyClient({ token: process.env.APIFY_TOKEN });\n\nasync function scrapeAndSave() {\n  console.log('Starting Actor run...');\n\n  const run = await client.actor('apify\u002Fwebsite-content-crawler').call({\n    startUrls: [{ url: 'https:\u002F\u002Fexample.com' }],\n    maxCrawlPages: 10,\n  });\n\n  if (run.status !== 'SUCCEEDED') {\n    throw new Error(`Actor run failed: ${run.status} — ${run.statusMessage}`);\n  }\n\n  const { items } = await client.dataset(run.defaultDatasetId).listItems();\n  writeFileSync('results.json', JSON.stringify(items, null, 2));\n  console.log(`Saved ${items.length} items to results.json`);\n}\n\nscrapeAndSave().catch(console.error);\n```\n\n## Resources\n\n- [Apify Store — Browse Actors](https:\u002F\u002Fapify.com\u002Fstore)\n- [Run Actor via API](https:\u002F\u002Fdocs.apify.com\u002Facademy\u002Fapi\u002Frun-actor-and-retrieve-data-via-api)\n- [JS Client Examples](https:\u002F\u002Fdocs.apify.com\u002Fapi\u002Fclient\u002Fjs\u002Fdocs\u002Fguides\u002Fexamples)\n\n## Next Steps\n\nProceed to `apify-local-dev-loop` for local Actor development.\n\n",{"name":5,"tags":49,"author":52,"license":15,"version":53,"description":54,"allowed-tools":55,"compatible-with":56},[50,36,51,26],"saas","automation","Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Run your first Apify Actor and retrieve results via apify-client.\nUse when starting a new Apify integration, testing connectivity,\nor learning the Actor call\u002Fdataset retrieval pattern.\nTrigger: \"apify hello world\", \"apify example\", \"run an apify actor\",\n\"apify quick start\", \"first apify scrape\".\n","Read, Write, Edit, Bash(npm:*), Bash(npx:*), Bash(node:*)","claude-code","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fapify-hello-world",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":8,"skillName":5,"commands":67,"prompt":77,"zipAvailable":78},[68,71,74],{"tool":69,"command":70},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill apify-hello-world",{"tool":72,"command":73},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill apify-hello-world",{"tool":75,"command":76},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill apify-hello-world","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fapify-hello-world\u002FSKILL.md",true,[],[81,91,101,110,116,123],{"skillNo":82,"name":83,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":87,"publishedAt":44},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[86],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[88,89,90],"model","model hierarchy","model hierarchy skill",{"skillNo":92,"name":93,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":97,"publishedAt":44},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[96],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[98,99,100],"MCP","zoom","zoom mcp",{"skillNo":102,"name":103,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":44},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[107,108,109,99],"sdk","zoom apps sdk","apps",{"skillNo":111,"name":112,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":115,"publishedAt":44},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[112],{"skillNo":117,"name":118,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":122,"publishedAt":44},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[121],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[118],{"skillNo":124,"name":125,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":128,"publishedAt":44},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[125]]