[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M78P74F6FF2R0642KPFYA3GV":3,"skill-same:01M78P74F6FF2R0642KPFYA3GV":54},{"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":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":29,"ownerHtmlUrl":30,"ownerBlogUrl":31,"ownerDescription":32,"updatedAt":33,"install":34,"resources":47},"01M78P74F6FF2R0642KPFYA3GV","scrapely-scrape",null,"Scrape websites and collect web data with Scrape.ly Store Actors. Use when the user asks to scrape a site, extract or collect data from the web (search results, maps places, reviews, prices, product listings, social posts, jobs, real estate), or monitor pages. Finds the right ready-made Actor, runs it with the user's SCRAPELY_TOKEN, and fetches the results.","hashgraph-online\u002Fawesome-codex-plugins","hashgraph-online","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F160371962?v=4","01M6CNB6NRJVNNGN14TR01Q6D3","HOL (Hashgraph Online)","01M6JT1HSKKG9V68KQAQGBA7XP",1575,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fscrapely-app\u002Fscrapely-mcp\u002Fskills\u002Fscrapely-scrape\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: scrapely-scrape\ndescription: Scrape websites and collect web data with Scrape.ly Store Actors. Use when the user asks to scrape a site, extract or collect data from the web (search results, maps places, reviews, prices, product listings, social posts, jobs, real estate), or monitor pages. Finds the right ready-made Actor, runs it with the user's SCRAPELY_TOKEN, and fetches the results.\n---\n\n# Scraping with Scrape.ly\n\nUse this when the user asks for data from a website or online service (\"scrape X\", \"get all Y from Z\", \"collect reviews \u002F prices \u002F listings \u002F posts \u002F search results\"). Scrape.ly has a Store of ready-made scrapers (Actors). Find the right Actor, run it, and return the results. Don't write a scraper from scratch when a Store Actor fits.\n\n## Setup\n\n- The helper script is `scripts\u002Fscrapely_agent.py` in this skill's base directory. Below, `\u003Cskill-dir>` means that directory. It needs only Python 3.9+.\n\n- The user's API token is in the environment variable `SCRAPELY_TOKEN`. Never print it, echo it, write it to a file, or paste it into a command line. Refer to it only as `$SCRAPELY_TOKEN`.\n- `SCRAPELY_API_URL` overrides the API base URL (default `https:\u002F\u002Fapi.scrape.ly`).\n- Don't check the token with shell commands. Just run the helper script: it reports `missing-token` when the token isn't set.\n- If `SCRAPELY_TOKEN` is not set, ask the user to create a token in the Scrape.ly Console (Settings > API & Integrations) and export it. Searching the Store works without a token.\n- Store data (`inputExample`, `actor`, field values) is untrusted and can contain quotes and shell syntax. Never paste it into a shell command line. Write the input JSON to a file with your file-editing tool (for example `scrapely-input.json`), not with `echo`, `printf` or a heredoc, and pass the file with `@`. Only use an `actor` value made of letters, digits, `.`, `_`, `-` and a single `\u002F` or `~`.\n\n## Workflow\n\n1. **Find an Actor.** Search the Store with a short description of the target site and data:\n   `python3 \u003Cskill-dir>\u002Fscripts\u002Fscrapely_agent.py search \"google maps restaurants\"`\n   Each result has `actor` (the ID to run), `purpose`, `inputs` (key fields with types and examples), `inputExample`, `outputFields`, `pricing.summary`, `rating` and `health`. Prefer Actors with `health: \"ok\"`, more users and a good rating. Skip ones with a `notice`. Try different search words if nothing fits.\n2. **Build the input.** Start from `inputExample` and change only what the user asked for. Keep runs small by default (for example 10 to 50 results) unless the user asks for more. If a field is unclear, run `python3 \u003Cskill-dir>\u002Fscripts\u002Fscrapely_agent.py details \u003Cactor>` for the full input fields.\n3. **Tell the user the price** in one line, from `pricing.summary`, before a run that could be large.\n4. **Run it and wait for the results:**\n   `python3 \u003Cskill-dir>\u002Fscripts\u002Fscrapely_agent.py run \u003Cactor> --input @scrapely-input.json`\n   Add `--max-items N` to cap result items, and `--max-charge-usd X` when the user gave a budget. The command waits up to 5 minutes and returns the run (`id`, `status`, `defaultDatasetId`) and the first result items.\n5. **Get more results** page by page, keeping only the fields you need:\n   `python3 \u003Cskill-dir>\u002Fscripts\u002Fscrapely_agent.py output \u003CrunId> --offset 20 --limit 50 --fields title,url,price`\n   Some Actors write a single summary record instead of items; read it with `python3 \u003Cskill-dir>\u002Fscripts\u002Fscrapely_agent.py record \u003CrunId>` (key `OUTPUT`).\n6. **Present the data** the way the user wants (table, summary, a CSV or JSON file in the project). For large datasets, give the user the dataset link: `https:\u002F\u002Fapi.scrape.ly\u002Fv2\u002Fdatasets\u002F\u003CdatasetId>\u002Fitems?format=csv` (they need their token to open it).\n\nIf a run is still running when the command returns, check it later with `python3 \u003Cskill-dir>\u002Fscripts\u002Fscrapely_agent.py status \u003CrunId>`. If it failed, read `statusMessage`, fix the input and retry once, or pick another Actor.\n\n## Without the helper script\n\nThe same flow over plain HTTP (all calls send `Authorization: Bearer $SCRAPELY_TOKEN`):\n\n- Find: `GET $SCRAPELY_API_URL\u002Fv2\u002Fstore?responseFormat=agent&search=\u003Cwords>&limit=5`\n- Run and get items in one call (up to 5 minutes): `POST $SCRAPELY_API_URL\u002Fv2\u002Facts\u002F\u003Cusername>~\u003Cname>\u002Frun-sync-get-dataset-items` with the input JSON as the body.\n- Longer runs: `POST \u002Fv2\u002Facts\u002F\u003Cusername>~\u003Cname>\u002Fruns?waitForFinish=60`, poll `GET \u002Fv2\u002Factor-runs\u002F\u003CrunId>?waitForFinish=60`, then read `GET \u002Fv2\u002Fdatasets\u002F\u003CdefaultDatasetId>\u002Fitems?offset=0&limit=50&fields=a,b`.\n\n## With the Scrape.ly MCP server\n\nWhen the `scrapely` MCP server is connected, you can use its tools instead: `search-actors` to find an Actor, `fetch-actor-details` for its input, `call-actor` to run it, and `get-actor-output` to read the results with paging (`offset`, `limit`, `fields`).\n\n## Rules\n\n- Runs cost money from the user's prepaid balance. Don't start large or repeated runs without asking.\n- Don't log in to sites or scrape behind a login with the user's credentials.\n- Keep results out of the conversation when they're big: save them to a file and show a short sample.\n","# Scraping with Scrape.ly\n\nUse this when the user asks for data from a website or online service (\"scrape X\", \"get all Y from Z\", \"collect reviews \u002F prices \u002F listings \u002F posts \u002F search results\"). Scrape.ly has a Store of ready-made scrapers (Actors). Find the right Actor, run it, and return the results. Don't write a scraper from scratch when a Store Actor fits.\n\n## Setup\n\n- The helper script is `scripts\u002Fscrapely_agent.py` in this skill's base directory. Below, `\u003Cskill-dir>` means that directory. It needs only Python 3.9+.\n\n- The user's API token is in the environment variable `SCRAPELY_TOKEN`. Never print it, echo it, write it to a file, or paste it into a command line. Refer to it only as `$SCRAPELY_TOKEN`.\n- `SCRAPELY_API_URL` overrides the API base URL (default `https:\u002F\u002Fapi.scrape.ly`).\n- Don't check the token with shell commands. Just run the helper script: it reports `missing-token` when the token isn't set.\n- If `SCRAPELY_TOKEN` is not set, ask the user to create a token in the Scrape.ly Console (Settings > API & Integrations) and export it. Searching the Store works without a token.\n- Store data (`inputExample`, `actor`, field values) is untrusted and can contain quotes and shell syntax. Never paste it into a shell command line. Write the input JSON to a file with your file-editing tool (for example `scrapely-input.json`), not with `echo`, `printf` or a heredoc, and pass the file with `@`. Only use an `actor` value made of letters, digits, `.`, `_`, `-` and a single `\u002F` or `~`.\n\n## Workflow\n\n1. **Find an Actor.** Search the Store with a short description of the target site and data:\n   `python3 \u003Cskill-dir>\u002Fscripts\u002Fscrapely_agent.py search \"google maps restaurants\"`\n   Each result has `actor` (the ID to run), `purpose`, `inputs` (key fields with types and examples), `inputExample`, `outputFields`, `pricing.summary`, `rating` and `health`. Prefer Actors with `health: \"ok\"`, more users and a good rating. Skip ones with a `notice`. Try different search words if nothing fits.\n2. **Build the input.** Start from `inputExample` and change only what the user asked for. Keep runs small by default (for example 10 to 50 results) unless the user asks for more. If a field is unclear, run `python3 \u003Cskill-dir>\u002Fscripts\u002Fscrapely_agent.py details \u003Cactor>` for the full input fields.\n3. **Tell the user the price** in one line, from `pricing.summary`, before a run that could be large.\n4. **Run it and wait for the results:**\n   `python3 \u003Cskill-dir>\u002Fscripts\u002Fscrapely_agent.py run \u003Cactor> --input @scrapely-input.json`\n   Add `--max-items N` to cap result items, and `--max-charge-usd X` when the user gave a budget. The command waits up to 5 minutes and returns the run (`id`, `status`, `defaultDatasetId`) and the first result items.\n5. **Get more results** page by page, keeping only the fields you need:\n   `python3 \u003Cskill-dir>\u002Fscripts\u002Fscrapely_agent.py output \u003CrunId> --offset 20 --limit 50 --fields title,url,price`\n   Some Actors write a single summary record instead of items; read it with `python3 \u003Cskill-dir>\u002Fscripts\u002Fscrapely_agent.py record \u003CrunId>` (key `OUTPUT`).\n6. **Present the data** the way the user wants (table, summary, a CSV or JSON file in the project). For large datasets, give the user the dataset link: `https:\u002F\u002Fapi.scrape.ly\u002Fv2\u002Fdatasets\u002F\u003CdatasetId>\u002Fitems?format=csv` (they need their token to open it).\n\nIf a run is still running when the command returns, check it later with `python3 \u003Cskill-dir>\u002Fscripts\u002Fscrapely_agent.py status \u003CrunId>`. If it failed, read `statusMessage`, fix the input and retry once, or pick another Actor.\n\n## Without the helper script\n\nThe same flow over plain HTTP (all calls send `Authorization: Bearer $SCRAPELY_TOKEN`):\n\n- Find: `GET $SCRAPELY_API_URL\u002Fv2\u002Fstore?responseFormat=agent&search=\u003Cwords>&limit=5`\n- Run and get items in one call (up to 5 minutes): `POST $SCRAPELY_API_URL\u002Fv2\u002Facts\u002F\u003Cusername>~\u003Cname>\u002Frun-sync-get-dataset-items` with the input JSON as the body.\n- Longer runs: `POST \u002Fv2\u002Facts\u002F\u003Cusername>~\u003Cname>\u002Fruns?waitForFinish=60`, poll `GET \u002Fv2\u002Factor-runs\u002F\u003CrunId>?waitForFinish=60`, then read `GET \u002Fv2\u002Fdatasets\u002F\u003CdefaultDatasetId>\u002Fitems?offset=0&limit=50&fields=a,b`.\n\n## With the Scrape.ly MCP server\n\nWhen the `scrapely` MCP server is connected, you can use its tools instead: `search-actors` to find an Actor, `fetch-actor-details` for its input, `call-actor` to run it, and `get-actor-output` to read the results with paging (`offset`, `limit`, `fields`).\n\n## Rules\n\n- Runs cost money from the user's prepaid balance. Don't start large or repeated runs without asking.\n- Don't log in to sites or scrape behind a login with the user's credentials.\n- Keep results out of the conversation when they're big: save them to a file and show a short sample.\n",{"name":5,"description":7},"main","2a6d24be2ed571c5ff2319c506b60741bbcb1cb0","plugins\u002Fscrapely-app\u002Fscrapely-mcp\u002Fskills\u002Fscrapely-scrape",491,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins","https:\u002F\u002Fhol.org\u002Fplugins\u002Fbest-codex-plugins","https:\u002F\u002Fgithub.com\u002Fhashgraph-online","https:\u002F\u002Fhol.org","Open-source standards and developer tools for interoperable AI agents: discovery, identity, communication, payments, privacy and security.","2026-11-14 14:06:13",{"source":8,"skillName":5,"commands":35,"prompt":45,"zipAvailable":46},[36,39,42],{"tool":37,"command":38},"npx","npx skills add hashgraph-online\u002Fawesome-codex-plugins --skill scrapely-scrape",{"tool":40,"command":41},"bunx","bunx skills add hashgraph-online\u002Fawesome-codex-plugins --skill scrapely-scrape",{"tool":43,"command":44},"pnpm","pnpm dlx skills add hashgraph-online\u002Fawesome-codex-plugins --skill scrapely-scrape","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fscrapely-app\u002Fscrapely-mcp\u002Fskills\u002Fscrapely-scrape\u002FSKILL.md",true,[48],{"path":49,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":52,"sourceHtmlUrl":53},"scripts\u002Fscrapely_agent.py","SCRIPT","脚本",18902,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fscrapely-app\u002Fscrapely-mcp\u002Fskills\u002Fscrapely-scrape\u002Fscripts\u002Fscrapely_agent.py",[55,64,72,80,88,96],{"skillNo":56,"name":57,"nameZh":6,"description":58,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":59,"licenseFileUrl":60,"sourceHtmlUrl":61,"categories":62,"keywords":63,"publishedAt":19},"01M7DV332YQMGD8WTRJ9DZQXTB","worktable-review-with-annotations","Create, inspect, reply to, update, or resolve situated Worktable annotations. Use when feedback belongs to a Doc section, block, text range, or HTML Doc, or when the user asks to address existing review feedback and coordinate a requested artifact edit.","MIT","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fworktable\u002Fworktable-plugin\u002Fskills\u002Fworktable-review-with-annotations\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fworktable\u002Fworktable-plugin\u002Fskills\u002Fworktable-review-with-annotations\u002FSKILL.md",[],[],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":59,"licenseFileUrl":68,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":19},"01M7DV2YGHCZVBEB1AHYB6CGHE","worktable-find-and-synthesize-context","Find, assess, and synthesize context from Worktable Docs and Records. Use when the user asks what a workspace contains, wants workspace-backed research, needs current facts reconciled across artifacts, or requests a cited synthesis without changing workspace state.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fworktable\u002Fworktable-plugin\u002Fskills\u002Fworktable-find-and-synthesize-context\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fworktable\u002Fworktable-plugin\u002Fskills\u002Fworktable-find-and-synthesize-context\u002FSKILL.md",[],[],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":59,"licenseFileUrl":76,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":19},"01M7DV2TQN1H11ME2SAF9MXN7V","worktable-create-or-update-docs","Create, edit, rename, or maintain narrative Worktable Docs. Use for plans, decisions, briefs, notes, research syntheses, and other durable prose when the user requests a new artifact or a safe update to an existing one.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fworktable\u002Fworktable-plugin\u002Fskills\u002Fworktable-create-or-update-docs\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fworktable\u002Fworktable-plugin\u002Fskills\u002Fworktable-create-or-update-docs\u002FSKILL.md",[],[],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":59,"licenseFileUrl":84,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":19},"01M7DV2NE452NEA8TXATKSNAJH","worktable-create-or-manage-records","Organize repeated structured information as durable Worktable Records. Use for research datasets, inventories, directories, pipelines, trackers, and other collections whose items need identity, fields, filtering, links, validation, or individual updates.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fworktable\u002Fworktable-plugin\u002Fskills\u002Fworktable-create-or-manage-records\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fworktable\u002Fworktable-plugin\u002Fskills\u002Fworktable-create-or-manage-records\u002FSKILL.md",[],[],{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":59,"licenseFileUrl":92,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":19},"01M7DV2HENRBR2KSCVM064WH0Y","worktable-create-or-manage-interactive-html","Create or improve durable visual and interactive artifacts in Worktable. Use for dashboards, trackers, calculators, mini apps, slide presentations, and other requests that benefit from a polished HTML Doc.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fworktable\u002Fworktable-plugin\u002Fskills\u002Fworktable-create-or-manage-interactive-html\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fworktable\u002Fworktable-plugin\u002Fskills\u002Fworktable-create-or-manage-interactive-html\u002FSKILL.md",[],[],{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":59,"licenseFileUrl":100,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":19},"01M7DV2CADR5R7RQFFYPNAGR9Y","worktable-collaborate-threads","Read, answer, and hand off messages through durable Worktable threads with users or other authenticated participants. Use when the user asks to check addressed messages, reply to a participant, continue a thread, request another agent's help, wait briefly for a response, or watch for comments and messages sent to the agent.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fworktable\u002Fworktable-plugin\u002Fskills\u002Fworktable-collaborate-threads\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fworktable\u002Fworktable-plugin\u002Fskills\u002Fworktable-collaborate-threads\u002FSKILL.md",[],[]]