[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71P4284MCCV2AK8CT5G9WNZ":3,"skill-same:01M71P4284MCCV2AK8CT5G9WNZ":59},{"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":31,"linkOnly":32,"markdownContent":33,"markdownBody":34,"frontMatter":35,"refName":36,"commitSha":37,"skillDirectory":38,"forksCount":39,"repositoryHtmlUrl":40,"repositoryHomepageUrl":6,"ownerHtmlUrl":41,"ownerBlogUrl":42,"ownerDescription":43,"updatedAt":44,"install":45,"resources":58},"01M71P4284MCCV2AK8CT5G9WNZ","web-search",null,"Find and read live web sources when the answer needs evidence unavailable in the current context.","drsh4dow\u002Fpi-setup","drsh4dow","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F45247070?v=4","01M71P068NASGHSWS11VWW416N","Daniel Moretti","01M71P0698BH81N65NP04X9NVN",10,"MIT","https:\u002F\u002Fgithub.com\u002Fdrsh4dow\u002Fpi-setup\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Fweb-search\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30],"web","web search","search","sources","evidence","find","answer","read","false","live","when","context","2026-11-10 10:56:23",false,"---\nname: web-search\ndescription: Find and read live web sources when the answer needs evidence unavailable in the current context.\ndisable-model-invocation: false\nuser-invokable: false\n---\n\n# Web search\n\nWeb retrieval runs inside `codemode` scripts. Search, fetch, and filter in the\nsame script, and return only what the answer needs: titles, URLs, dates, and\nthe decisive passages. Codemode cuts output past 10,000 tokens from the middle,\nso a script that returns whole results loses part of what it retrieved.\n\n| Need                                      | Route                                      |\n| ----------------------------------------- | ------------------------------------------ |\n| Discover sources                          | `tools.mcp__perplexity__perplexity_search` |\n| Read known URLs                           | `tools.mcp__exa__web_fetch_exa`            |\n| GitHub issues, PRs, code, or repositories | `gh search` through `tools.bash`           |\n| Login, forms, clicks, or visual state     | the `agent-browser` skill                  |\n\nGitHub allows 30 search requests a minute across `gh search` commands, so\nstart with two or three targeted queries and read the items they find.\n\nBoth tools resolve to an MCP result, including failures, which set `isError`.\nIts `content[0].text` holds the Markdown output. `describeTool()` lists the\nparameters this skill leaves out.\n\n## Search\n\nCall `perplexity_search({ query, max_results, max_tokens_per_page,\nsearch_domain_filter, search_recency_filter })`. The defaults, 10 results with\nup to 1,024 tokens of page excerpt each, return about 40,000 characters, so set\nboth to what the question needs; `max_tokens_per_page` accepts 256 to 2,048.\n\nPut identifiers, versions, dates, and source types in the query, and run\nindependent queries in parallel within one script. Restrict official sources\nand papers with `search_domain_filter`, for example `arxiv.org` and\n`openreview.net`, and time-sensitive questions with `search_recency_filter`.\nKeep the default `web` search type, which the benchmarks behind this setup\nmeasured.\n\nResults are numbered `N. **Title**` blocks, each with a `URL:` line and a page\nexcerpt. Split them and keep the lines that bear on the question:\n\n```js\nconst terms = \u002Frate limit|429|retry-after\u002Fi;\nconst r = await tools.mcp__perplexity__perplexity_search({\n  query,\n  max_results: 5,\n});\nreturn r.content[0].text\n  .split(\u002F\\n(?=\\d+\\. \\*\\*)\u002F)\n  .slice(1)\n  .map((result) =>\n    result\n      .split(\"\\n\")\n      .filter((line, i) => i \u003C 2 || terms.test(line))\n      .join(\"\\n\"),\n  );\n```\n\nFetch the page when its excerpt stops short of the decisive passage.\n\n## Fetch\n\nCall `web_fetch_exa({ urls, maxCharacters })` with every URL in one batch. It\nreturns the pages in one text, each starting with a `# Title` line and a `URL:`\nline, so split it with `\u002F\\n(?=# .*\\nURL: )\u002F`. Set `maxCharacters` to the length\nthe question needs, since the default of 3,000 characters per page truncates\nlong documents.\n\nFetch each page once. For a long page, `store()` its text and return its\nheadings, then `load()` it in later scripts to return the sections the answer\nneeds.\n\nA batch leaves out pages it could not fetch, so match the returned `URL:` lines\nagainst the request. Check a missing page's status code with\n`curl -sL -o \u002Fdev\u002Fnull -w '%{http_code}'`: report a 404 as gone, and read any\nother failure with `agent-browser`. Use `agent-browser` as well for an empty or\nshell page, and when the page's current state matters, such as prices, status,\nor a change published today, since Exa may serve a cached copy.\n\n## Establish the answer\n\nRead the decisive passage in the source that owns the claim, in its search\nexcerpt or its fetched page. Excerpts from other sites and extracted fields are\nleads, not sufficient evidence by themselves.\n\nCite canonical URLs for material claims. Add another source only when it could\nchange a disputed, time-sensitive, or consequential conclusion. Mark inference,\ncontradictions, and material evidence gaps explicitly.\n\nA negative search establishes only what those queries found. Refine scope or\nidentifiers before concluding that evidence is unavailable. Finish once the\ninspected evidence adequately answers the request; further searching needs a\nconcrete unresolved question.\n","# Web search\n\nWeb retrieval runs inside `codemode` scripts. Search, fetch, and filter in the\nsame script, and return only what the answer needs: titles, URLs, dates, and\nthe decisive passages. Codemode cuts output past 10,000 tokens from the middle,\nso a script that returns whole results loses part of what it retrieved.\n\n| Need                                      | Route                                      |\n| ----------------------------------------- | ------------------------------------------ |\n| Discover sources                          | `tools.mcp__perplexity__perplexity_search` |\n| Read known URLs                           | `tools.mcp__exa__web_fetch_exa`            |\n| GitHub issues, PRs, code, or repositories | `gh search` through `tools.bash`           |\n| Login, forms, clicks, or visual state     | the `agent-browser` skill                  |\n\nGitHub allows 30 search requests a minute across `gh search` commands, so\nstart with two or three targeted queries and read the items they find.\n\nBoth tools resolve to an MCP result, including failures, which set `isError`.\nIts `content[0].text` holds the Markdown output. `describeTool()` lists the\nparameters this skill leaves out.\n\n## Search\n\nCall `perplexity_search({ query, max_results, max_tokens_per_page,\nsearch_domain_filter, search_recency_filter })`. The defaults, 10 results with\nup to 1,024 tokens of page excerpt each, return about 40,000 characters, so set\nboth to what the question needs; `max_tokens_per_page` accepts 256 to 2,048.\n\nPut identifiers, versions, dates, and source types in the query, and run\nindependent queries in parallel within one script. Restrict official sources\nand papers with `search_domain_filter`, for example `arxiv.org` and\n`openreview.net`, and time-sensitive questions with `search_recency_filter`.\nKeep the default `web` search type, which the benchmarks behind this setup\nmeasured.\n\nResults are numbered `N. **Title**` blocks, each with a `URL:` line and a page\nexcerpt. Split them and keep the lines that bear on the question:\n\n```js\nconst terms = \u002Frate limit|429|retry-after\u002Fi;\nconst r = await tools.mcp__perplexity__perplexity_search({\n  query,\n  max_results: 5,\n});\nreturn r.content[0].text\n  .split(\u002F\\n(?=\\d+\\. \\*\\*)\u002F)\n  .slice(1)\n  .map((result) =>\n    result\n      .split(\"\\n\")\n      .filter((line, i) => i \u003C 2 || terms.test(line))\n      .join(\"\\n\"),\n  );\n```\n\nFetch the page when its excerpt stops short of the decisive passage.\n\n## Fetch\n\nCall `web_fetch_exa({ urls, maxCharacters })` with every URL in one batch. It\nreturns the pages in one text, each starting with a `# Title` line and a `URL:`\nline, so split it with `\u002F\\n(?=# .*\\nURL: )\u002F`. Set `maxCharacters` to the length\nthe question needs, since the default of 3,000 characters per page truncates\nlong documents.\n\nFetch each page once. For a long page, `store()` its text and return its\nheadings, then `load()` it in later scripts to return the sections the answer\nneeds.\n\nA batch leaves out pages it could not fetch, so match the returned `URL:` lines\nagainst the request. Check a missing page's status code with\n`curl -sL -o \u002Fdev\u002Fnull -w '%{http_code}'`: report a 404 as gone, and read any\nother failure with `agent-browser`. Use `agent-browser` as well for an empty or\nshell page, and when the page's current state matters, such as prices, status,\nor a change published today, since Exa may serve a cached copy.\n\n## Establish the answer\n\nRead the decisive passage in the source that owns the claim, in its search\nexcerpt or its fetched page. Excerpts from other sites and extracted fields are\nleads, not sufficient evidence by themselves.\n\nCite canonical URLs for material claims. Add another source only when it could\nchange a disputed, time-sensitive, or consequential conclusion. Mark inference,\ncontradictions, and material evidence gaps explicitly.\n\nA negative search establishes only what those queries found. Refine scope or\nidentifiers before concluding that evidence is unavailable. Finish once the\ninspected evidence adequately answers the request; further searching needs a\nconcrete unresolved question.\n",{"name":5,"description":7,"user-invokable":32,"disable-model-invocation":32},"main","f7936596c1ba2e1472dadccc3f111b9d517fa96c","agent\u002Fskills\u002Fweb-search",2,"https:\u002F\u002Fgithub.com\u002Fdrsh4dow\u002Fpi-setup","https:\u002F\u002Fgithub.com\u002Fdrsh4dow","https:\u002F\u002Fdanielmoretti.com\u002F","Toss A Coin To Your Witcher :pirate_flag: ","2026-11-03 22:13:53",{"source":8,"skillName":5,"commands":46,"prompt":56,"zipAvailable":57},[47,50,53],{"tool":48,"command":49},"npx","npx skills add drsh4dow\u002Fpi-setup --skill web-search",{"tool":51,"command":52},"bunx","bunx skills add drsh4dow\u002Fpi-setup --skill web-search",{"tool":54,"command":55},"pnpm","pnpm dlx skills add drsh4dow\u002Fpi-setup --skill web-search","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdrsh4dow\u002Fpi-setup\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Fweb-search\u002FSKILL.md",true,[],[60,82,113,130,151,162],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":31},"01M71P4GPJMBK21BTZBKY9T8EE","changelog","Write the changelog entry for a pull request. Use when a PR changes behavior that users, operators, or integrators can notice.","https:\u002F\u002Fgithub.com\u002Fdrsh4dow\u002Fpi-setup\u002Fblob\u002Fmain\u002Fevals\u002Fharness-lessons\u002Ffixtures\u002Fchangelog-skill\u002FSKILL.md",[],[62,67,68,69,70,71,72,73,74,75,76,77,78,79,29,80,81],"users","pull","notice","changes","operators","pr","pull request","for","request","behavior","entry","write","use","can","changelog entry",{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":98,"publishedAt":31},"01M71P4E9AZM56JBY227P2G1SC","writing-good-tickets","Write, file, or update an issue or ticket that an agent or a developer can take to one PR. Use when filing a bug or feature, updating an issue, or breaking a plan into tickets.","https:\u002F\u002Fgithub.com\u002Fdrsh4dow\u002Fpi-setup\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Fwriting-good-tickets\u002FSKILL.md",[88,93],{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000018","写作与文案","SCENARIO","使用场景",{"categoryNo":94,"categoryName":95,"taxonomyType":96,"taxonomyTypeDesc":97},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[99,100,101,102,72,103,104,105,79,27,29,106,107,80,108,109,78,110,111,112],"good","writing","tickets","writing good tickets","feature","filing","ticket","file","one","plan","update","bug","take","issue",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":121,"publishedAt":31},"01M71P4C0B0DXTRRSG9RA6Y687","writing-good-prs","Write or update a pull request title and body that a reviewer can trust and own. Use when opening a PR or editing its description.","https:\u002F\u002Fgithub.com\u002Fdrsh4dow\u002Fpi-setup\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Fwriting-good-prs\u002FSKILL.md",[119,120],{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},{"categoryNo":94,"categoryName":95,"taxonomyType":96,"taxonomyTypeDesc":97},[99,122,100,123,68,124,72,125,79,27,29,80,126,127,73,75,109,78,128,129],"prs","writing good prs","trust","editing","reviewer","title","opening a pr","body",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":138,"publishedAt":31},"01M71P49D1AG2MR6AYNPMMT34Z","writing-good-commits","Write or reword a git commit message and size the commit it describes. Use when committing, or when reshaping commits during a rebase.","https:\u002F\u002Fgithub.com\u002Fdrsh4dow\u002Fpi-setup\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Fwriting-good-commits\u002FSKILL.md",[136,137],{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},{"categoryNo":94,"categoryName":95,"taxonomyType":96,"taxonomyTypeDesc":97},[139,99,100,140,141,142,78,143,144,145,79,27,146,147,29,148,149,150],"commits","writing good commits","message","size","git commit message","git","git commit","rebase","commit message","committing","commit","it",{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":159,"publishedAt":31},"01M71P480BDE55JMPVVEBCFS7P","writing-for-agents","Writing documents for agents. Use when creating or editing skills, or modifying AGENTS.md or CLAUDE.md.","https:\u002F\u002Fgithub.com\u002Fdrsh4dow\u002Fpi-setup\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Fwriting-for-agents\u002FSKILL.md",[157,158],{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},{"categoryNo":94,"categoryName":95,"taxonomyType":96,"taxonomyTypeDesc":97},[160,74,100,125,79,27,161,29],"writing for agents","documents",{"skillNo":163,"name":164,"nameZh":6,"description":165,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":166,"categories":167,"keywords":168,"publishedAt":31},"01M71P45SNCD7DDSA6FRVCPA17","wizard","Generate an interactive bash wizard that walks a human through steps only they can perform. Use when provisioning infrastructure, setting up credentials or CI secrets, walking an unfamiliar third-party dashboard, or running a one-off migration or cutover. Don't invoke this for steps the agent can perform itself.","https:\u002F\u002Fgithub.com\u002Fdrsh4dow\u002Fpi-setup\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Fwizard\u002FSKILL.md",[],[164,169,170,74,171,172,173,174,79,175,27,29,176,107,177,80,178,179,180,181],"running","setting","up","ci","provisioning infrastructure","only","invoke","Bash","interactive","credentials","dashboard","generate","human"]