[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6BV8QDFJ6PXBVK5NFBZT5M7":3,"skill-same:01M6BV8QDFJ6PXBVK5NFBZT5M7":257},{"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":16,"sourceHtmlUrl":17,"categories":18,"keywords":27,"publishedAt":46,"linkOnly":47,"markdownContent":48,"markdownBody":49,"frontMatter":50,"refName":52,"commitSha":53,"skillDirectory":54,"forksCount":14,"repositoryHtmlUrl":55,"repositoryHomepageUrl":6,"ownerHtmlUrl":56,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":57,"install":58,"resources":71},"01M6BV8QDFJ6PXBVK5NFBZT5M7","webapp-testing",null,"Test local web applications using Playwright. Use when verifying frontend functionality, debugging UI behavior, capturing browser screenshots, or viewing browser logs.","bnferguson\u002Fdotfiles","bnferguson","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F47749?v=4","01M6BV4H2TJKK8P14W86V1ZCPP","Brandon Ferguson","01M6BV4H7GJWTZJ1BVHQ1TX11Y",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwebapp-testing\u002FSKILL.md",[19,24],{"categoryNo":20,"categoryName":21,"taxonomyType":22,"taxonomyTypeDesc":23},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":25,"categoryName":26,"taxonomyType":22,"taxonomyTypeDesc":23},"01JBSEEDCAT000000000000009","前端开发",[28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"webapp testing","webapp","testing","ui","when","test local","local","use","behavior","applications","logs","browser","debugging","web","test","playwright","screenshots","frontend","2026-11-10 10:12:30",false,"---\nname: webapp-testing\ndescription: \"Test local web applications using Playwright. Use when verifying frontend functionality, debugging UI behavior, capturing browser screenshots, or viewing browser logs.\"\nlicense: Complete terms in LICENSE.txt\n---\n\n# Web Application Testing\n\nTo test local web applications, write native Python Playwright scripts.\n\n**Helper Scripts Available**:\n- `scripts\u002Fwith_server.py` - Manages server lifecycle (supports multiple servers)\n\n**Always run scripts with `--help` first** to see usage. DO NOT read the source until you try running the script first and find that a customized solution is abslutely necessary. These scripts can be very large and thus pollute your context window. They exist to be called directly as black-box scripts rather than ingested into your context window.\n\n## Decision Tree: Choosing Your Approach\n\n```\nUser task → Is it static HTML?\n    ├─ Yes → Read HTML file directly to identify selectors\n    │         ├─ Success → Write Playwright script using selectors\n    │         └─ Fails\u002FIncomplete → Treat as dynamic (below)\n    │\n    └─ No (dynamic webapp) → Is the server already running?\n        ├─ No → Run: python scripts\u002Fwith_server.py --help\n        │        Then use the helper + write simplified Playwright script\n        │\n        └─ Yes → Reconnaissance-then-action:\n            1. Navigate and wait for networkidle\n            2. Take screenshot or inspect DOM\n            3. Identify selectors from rendered state\n            4. Execute actions with discovered selectors\n```\n\n## Example: Using with_server.py\n\nTo start a server, run `--help` first, then use the helper:\n\n**Single server:**\n```bash\npython scripts\u002Fwith_server.py --server \"npm run dev\" --port 5173 -- python your_automation.py\n```\n\n**Multiple servers (e.g., backend + frontend):**\n```bash\npython scripts\u002Fwith_server.py \\\n  --server \"cd backend && python server.py\" --port 3000 \\\n  --server \"cd frontend && npm run dev\" --port 5173 \\\n  -- python your_automation.py\n```\n\nTo create an automation script, include only Playwright logic (servers are managed automatically):\n```python\nfrom playwright.sync_api import sync_playwright\n\nwith sync_playwright() as p:\n    browser = p.chromium.launch(headless=True) # Always launch chromium in headless mode\n    page = browser.new_page()\n    page.goto('http:\u002F\u002Flocalhost:5173') # Server already running and ready\n    page.wait_for_load_state('networkidle') # CRITICAL: Wait for JS to execute\n    # ... your automation logic\n    browser.close()\n```\n\n## Reconnaissance-Then-Action Pattern\n\n1. **Inspect rendered DOM**:\n   ```python\n   page.screenshot(path='\u002Ftmp\u002Finspect.png', full_page=True)\n   content = page.content()\n   page.locator('button').all()\n   ```\n\n2. **Identify selectors** from inspection results\n\n3. **Execute actions** using discovered selectors\n\n## Common Pitfall\n\n❌ **Don't** inspect the DOM before waiting for `networkidle` on dynamic apps\n✅ **Do** wait for `page.wait_for_load_state('networkidle')` before inspection\n\n## Best Practices\n\n- **Use bundled scripts as black boxes** - To accomplish a task, consider whether one of the scripts available in `scripts\u002F` can help. These scripts handle common, complex workflows reliably without cluttering the context window. Use `--help` to see usage, then invoke directly. \n- Use `sync_playwright()` for synchronous scripts\n- Always close the browser when done\n- Use descriptive selectors: `text=`, `role=`, CSS selectors, or IDs\n- Add appropriate waits: `page.wait_for_selector()` or `page.wait_for_timeout()`\n\n## Reference Files\n\n- **examples\u002F** - Examples showing common patterns:\n  - `element_discovery.py` - Discovering buttons, links, and inputs on a page\n  - `static_html_automation.py` - Using file:\u002F\u002F URLs for local HTML\n  - `console_logging.py` - Capturing console logs during automation","# Web Application Testing\n\nTo test local web applications, write native Python Playwright scripts.\n\n**Helper Scripts Available**:\n- `scripts\u002Fwith_server.py` - Manages server lifecycle (supports multiple servers)\n\n**Always run scripts with `--help` first** to see usage. DO NOT read the source until you try running the script first and find that a customized solution is abslutely necessary. These scripts can be very large and thus pollute your context window. They exist to be called directly as black-box scripts rather than ingested into your context window.\n\n## Decision Tree: Choosing Your Approach\n\n```\nUser task → Is it static HTML?\n    ├─ Yes → Read HTML file directly to identify selectors\n    │         ├─ Success → Write Playwright script using selectors\n    │         └─ Fails\u002FIncomplete → Treat as dynamic (below)\n    │\n    └─ No (dynamic webapp) → Is the server already running?\n        ├─ No → Run: python scripts\u002Fwith_server.py --help\n        │        Then use the helper + write simplified Playwright script\n        │\n        └─ Yes → Reconnaissance-then-action:\n            1. Navigate and wait for networkidle\n            2. Take screenshot or inspect DOM\n            3. Identify selectors from rendered state\n            4. Execute actions with discovered selectors\n```\n\n## Example: Using with_server.py\n\nTo start a server, run `--help` first, then use the helper:\n\n**Single server:**\n```bash\npython scripts\u002Fwith_server.py --server \"npm run dev\" --port 5173 -- python your_automation.py\n```\n\n**Multiple servers (e.g., backend + frontend):**\n```bash\npython scripts\u002Fwith_server.py \\\n  --server \"cd backend && python server.py\" --port 3000 \\\n  --server \"cd frontend && npm run dev\" --port 5173 \\\n  -- python your_automation.py\n```\n\nTo create an automation script, include only Playwright logic (servers are managed automatically):\n```python\nfrom playwright.sync_api import sync_playwright\n\nwith sync_playwright() as p:\n    browser = p.chromium.launch(headless=True) # Always launch chromium in headless mode\n    page = browser.new_page()\n    page.goto('http:\u002F\u002Flocalhost:5173') # Server already running and ready\n    page.wait_for_load_state('networkidle') # CRITICAL: Wait for JS to execute\n    # ... your automation logic\n    browser.close()\n```\n\n## Reconnaissance-Then-Action Pattern\n\n1. **Inspect rendered DOM**:\n   ```python\n   page.screenshot(path='\u002Ftmp\u002Finspect.png', full_page=True)\n   content = page.content()\n   page.locator('button').all()\n   ```\n\n2. **Identify selectors** from inspection results\n\n3. **Execute actions** using discovered selectors\n\n## Common Pitfall\n\n❌ **Don't** inspect the DOM before waiting for `networkidle` on dynamic apps\n✅ **Do** wait for `page.wait_for_load_state('networkidle')` before inspection\n\n## Best Practices\n\n- **Use bundled scripts as black boxes** - To accomplish a task, consider whether one of the scripts available in `scripts\u002F` can help. These scripts handle common, complex workflows reliably without cluttering the context window. Use `--help` to see usage, then invoke directly. \n- Use `sync_playwright()` for synchronous scripts\n- Always close the browser when done\n- Use descriptive selectors: `text=`, `role=`, CSS selectors, or IDs\n- Add appropriate waits: `page.wait_for_selector()` or `page.wait_for_timeout()`\n\n## Reference Files\n\n- **examples\u002F** - Examples showing common patterns:\n  - `element_discovery.py` - Discovering buttons, links, and inputs on a page\n  - `static_html_automation.py` - Using file:\u002F\u002F URLs for local HTML\n  - `console_logging.py` - Capturing console logs during automation",{"name":5,"license":51,"description":7},"Complete terms in LICENSE.txt","main","e63965e4644984470d4cc8b3014a8b001f0c2666",".agents\u002Fskills\u002Fwebapp-testing","https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles","https:\u002F\u002Fgithub.com\u002Fbnferguson","2026-11-11 03:04:59",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add bnferguson\u002Fdotfiles --skill webapp-testing",{"tool":64,"command":65},"bunx","bunx skills add bnferguson\u002Fdotfiles --skill webapp-testing",{"tool":67,"command":68},"pnpm","pnpm dlx skills add bnferguson\u002Fdotfiles --skill webapp-testing","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwebapp-testing\u002FSKILL.md",true,[72,78,82,86,91,97,101,105,109,113,117,121,125,129,133,137,141,145,149,153,157,161,165,169,173,177,181,185,189,193,197,201,205,209,213,217,221,225,229,233,237,241,245,249,253],{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"examples\u002Fconsole_logging.py","SCRIPT","脚本",1027,"https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwebapp-testing\u002Fexamples\u002Fconsole_logging.py",{"path":79,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":80,"sourceHtmlUrl":81},"examples\u002Felement_discovery.py",1463,"https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwebapp-testing\u002Fexamples\u002Felement_discovery.py",{"path":83,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":84,"sourceHtmlUrl":85},"examples\u002Fstatic_html_automation.py",953,"https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwebapp-testing\u002Fexamples\u002Fstatic_html_automation.py",{"path":87,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":90,"sourceHtmlUrl":16},"LICENSE.txt","LICENSE","许可证",11357,{"path":92,"resourceType":93,"resourceTypeDesc":94,"sizeBytes":95,"sourceHtmlUrl":96},"references\u002Fadvisor.md","REFERENCE","参考文档",3138,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Freferences\u002Fadvisor.md",{"path":98,"resourceType":93,"resourceTypeDesc":94,"sizeBytes":99,"sourceHtmlUrl":100},"references\u002Fdev-fix-bug.md",14664,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Freferences\u002Fdev-fix-bug.md",{"path":102,"resourceType":93,"resourceTypeDesc":94,"sizeBytes":103,"sourceHtmlUrl":104},"references\u002Fdevelopment.md",1259,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Freferences\u002Fdevelopment.md",{"path":106,"resourceType":93,"resourceTypeDesc":94,"sizeBytes":107,"sourceHtmlUrl":108},"references\u002Fmobile-testing\u002Fcomponent-view.md",11175,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Freferences\u002Fmobile-testing\u002Fcomponent-view.md",{"path":110,"resourceType":93,"resourceTypeDesc":94,"sizeBytes":111,"sourceHtmlUrl":112},"references\u002Fmobile-testing\u002Fcomponent-view\u002Freference.md",24625,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Freferences\u002Fmobile-testing\u002Fcomponent-view\u002Freference.md",{"path":114,"resourceType":93,"resourceTypeDesc":94,"sizeBytes":115,"sourceHtmlUrl":116},"references\u002Fqa-example.md",5177,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Freferences\u002Fqa-example.md",{"path":118,"resourceType":93,"resourceTypeDesc":94,"sizeBytes":119,"sourceHtmlUrl":120},"references\u002Fqa.md",38618,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Freferences\u002Fqa.md",{"path":122,"resourceType":93,"resourceTypeDesc":94,"sizeBytes":123,"sourceHtmlUrl":124},"references\u002Fteam-libraries.md",7574,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Freferences\u002Fteam-libraries.md",{"path":126,"resourceType":93,"resourceTypeDesc":94,"sizeBytes":127,"sourceHtmlUrl":128},"references\u002Ftemplate-alignment.md",1315,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Freferences\u002Ftemplate-alignment.md",{"path":130,"resourceType":93,"resourceTypeDesc":94,"sizeBytes":131,"sourceHtmlUrl":132},"references\u002Ftemplates\u002Fdev\u002Fcore.md",1924,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Freferences\u002Ftemplates\u002Fdev\u002Fcore.md",{"path":134,"resourceType":93,"resourceTypeDesc":94,"sizeBytes":135,"sourceHtmlUrl":136},"references\u002Ftemplates\u002Fdev\u002Fextension.md",1396,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Freferences\u002Ftemplates\u002Fdev\u002Fextension.md",{"path":138,"resourceType":93,"resourceTypeDesc":94,"sizeBytes":139,"sourceHtmlUrl":140},"references\u002Ftemplates\u002Fdev\u002Fmobile.md",1383,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Freferences\u002Ftemplates\u002Fdev\u002Fmobile.md",{"path":142,"resourceType":93,"resourceTypeDesc":94,"sizeBytes":143,"sourceHtmlUrl":144},"references\u002Ftemplates\u002Ffix-bug\u002Fcore.md",1534,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Freferences\u002Ftemplates\u002Ffix-bug\u002Fcore.md",{"path":146,"resourceType":93,"resourceTypeDesc":94,"sizeBytes":147,"sourceHtmlUrl":148},"references\u002Ftemplates\u002Ffix-bug\u002Fextension.md",1754,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Freferences\u002Ftemplates\u002Ffix-bug\u002Fextension.md",{"path":150,"resourceType":93,"resourceTypeDesc":94,"sizeBytes":151,"sourceHtmlUrl":152},"references\u002Ftemplates\u002Ffix-bug\u002Fmobile.md",2118,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Freferences\u002Ftemplates\u002Ffix-bug\u002Fmobile.md",{"path":154,"resourceType":93,"resourceTypeDesc":94,"sizeBytes":155,"sourceHtmlUrl":156},"references\u002Ftemplates\u002Fqa\u002Fdefault.md",9428,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Freferences\u002Ftemplates\u002Fqa\u002Fdefault.md",{"path":158,"resourceType":93,"resourceTypeDesc":94,"sizeBytes":159,"sourceHtmlUrl":160},"references\u002Ftemplates\u002Fqa\u002Fpr.extension.md",5452,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Freferences\u002Ftemplates\u002Fqa\u002Fpr.extension.md",{"path":162,"resourceType":93,"resourceTypeDesc":94,"sizeBytes":163,"sourceHtmlUrl":164},"references\u002Ftemplates\u002Fqa\u002Fpr.mobile.md",6022,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Freferences\u002Ftemplates\u002Fqa\u002Fpr.mobile.md",{"path":166,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":167,"sourceHtmlUrl":168},"scripts\u002Facceptance-cli",447,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Facceptance-cli",{"path":170,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":171,"sourceHtmlUrl":172},"scripts\u002Fcreate-harness-runner",678,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Fcreate-harness-runner",{"path":174,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":175,"sourceHtmlUrl":176},"scripts\u002Fdetect-platform",2052,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Fdetect-platform",{"path":178,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":179,"sourceHtmlUrl":180},"scripts\u002Ffind-package-symbol",865,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Ffind-package-symbol",{"path":182,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":183,"sourceHtmlUrl":184},"scripts\u002Finit-template",8773,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Finit-template",{"path":186,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":187,"sourceHtmlUrl":188},"scripts\u002Flint-template",470,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Flint-template",{"path":190,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":191,"sourceHtmlUrl":192},"scripts\u002Flist-templates",5945,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Flist-templates",{"path":194,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":195,"sourceHtmlUrl":196},"scripts\u002Fprepare-sandbox",4841,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Fprepare-sandbox",{"path":198,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":199,"sourceHtmlUrl":200},"scripts\u002Fresolve-harness",19661,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Fresolve-harness",{"path":202,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":203,"sourceHtmlUrl":204},"scripts\u002Ftemplate-command",2023,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Ftemplate-command",{"path":206,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":207,"sourceHtmlUrl":208},"scripts\u002Ftests\u002Facceptance-cli.test.mjs",3903,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Ftests\u002Facceptance-cli.test.mjs",{"path":210,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":211,"sourceHtmlUrl":212},"scripts\u002Ftests\u002Ffind-package-symbol.test.sh",2570,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Ftests\u002Ffind-package-symbol.test.sh",{"path":214,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":215,"sourceHtmlUrl":216},"scripts\u002Ftests\u002Fprepare-sandbox.test.sh",39710,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Ftests\u002Fprepare-sandbox.test.sh",{"path":218,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":219,"sourceHtmlUrl":220},"scripts\u002Ftests\u002Fqa-ci-parity.test.mjs",4699,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Ftests\u002Fqa-ci-parity.test.mjs",{"path":222,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":223,"sourceHtmlUrl":224},"scripts\u002Ftests\u002Fqa-install.test.sh",2181,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Ftests\u002Fqa-install.test.sh",{"path":226,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":227,"sourceHtmlUrl":228},"scripts\u002Ftests\u002Fresolve-harness.test.sh",34283,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Ftests\u002Fresolve-harness.test.sh",{"path":230,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":231,"sourceHtmlUrl":232},"scripts\u002Ftests\u002Fresume-task-pin.fixture.mjs",7434,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Ftests\u002Fresume-task-pin.fixture.mjs",{"path":234,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":235,"sourceHtmlUrl":236},"scripts\u002Ftests\u002Fresume-task-pin.test.mjs",6727,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Ftests\u002Fresume-task-pin.test.mjs",{"path":238,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":239,"sourceHtmlUrl":240},"scripts\u002Ftests\u002Fresume-task-runtime.live.mjs",1401,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Ftests\u002Fresume-task-runtime.live.mjs",{"path":242,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":243,"sourceHtmlUrl":244},"scripts\u002Ftests\u002Freview-route.test.sh",3790,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Ftests\u002Freview-route.test.sh",{"path":246,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":247,"sourceHtmlUrl":248},"scripts\u002Ftests\u002Fshell.test.mjs",466,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Ftests\u002Fshell.test.mjs",{"path":250,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":251,"sourceHtmlUrl":252},"scripts\u002Fverify-harness.mjs",5723,"https:\u002F\u002Fgithub.com\u002FMetaMask\u002Fskills\u002Fblob\u002Fmain\u002Fdomains\u002Fagentic\u002Fskills\u002Frecipe-cook\u002Fscripts\u002Fverify-harness.mjs",{"path":254,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":255,"sourceHtmlUrl":256},"scripts\u002Fwith_server.py",3693,"https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwebapp-testing\u002Fscripts\u002Fwith_server.py",[258,287,305,314,327,339],{"skillNo":259,"name":260,"nameZh":6,"description":261,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":262,"sourceHtmlUrl":263,"categories":264,"keywords":268,"publishedAt":46},"01M6BVA3RS3M016FANZ6792F9H","skill-creator","Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.","https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002Fclaude\u002Fconfig\u002Fskills\u002Fskill-creator\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002Fclaude\u002Fconfig\u002Fskills\u002Fskill-creator\u002FSKILL.md",[265],{"categoryNo":266,"categoryName":267,"taxonomyType":22,"taxonomyTypeDesc":23},"01JBSEEDCAT000000000000023","Skill与智能体开发",[269,270,271,272,273,274,275,276,277,278,279,280,32,281,282,283,284,285,286],"creator","skill creator","integrations","new","specialized","guide","new skill","existing skill","users","with","for","Existing","tool","knowledge","capabilities","update","create","workflows",{"skillNo":288,"name":289,"nameZh":6,"description":290,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":291,"licenseFileUrl":6,"sourceHtmlUrl":292,"categories":293,"keywords":302,"publishedAt":46},"01M6BV94WN2RPYM8N6PN8TBNT8","writing-shape","Writing, exploit: shape raw material into an article, paragraph by paragraph.","MIT","https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwriting-shape\u002FSKILL.md",[294,297],{"categoryNo":295,"categoryName":296,"taxonomyType":22,"taxonomyTypeDesc":23},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":298,"categoryName":299,"taxonomyType":300,"taxonomyTypeDesc":301},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[303,304],"writing","writing shape",{"skillNo":306,"name":307,"nameZh":6,"description":308,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":291,"licenseFileUrl":6,"sourceHtmlUrl":309,"categories":310,"keywords":311,"publishedAt":46},"01M6BV8MDXKXNVHKS3QF3YDFTF","wait-what","Stop. That last message did not land: re-pitch it.","https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwait-what\u002FSKILL.md",[],[312,313],"wait what","land",{"skillNo":315,"name":316,"nameZh":6,"description":317,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":291,"licenseFileUrl":6,"sourceHtmlUrl":318,"categories":319,"keywords":323,"publishedAt":46},"01M6BV756DJHT5BDA1HVRVHJJ7","prototype","Build a throwaway prototype to answer a design question. Use when the user wants to sanity-check whether a state model or logic feels right, or explore what a UI should look like.","https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fprototype\u002FSKILL.md",[320],{"categoryNo":321,"categoryName":322,"taxonomyType":300,"taxonomyTypeDesc":301},"01JBSEEDCAT000000000000032","设计师",[316,324,31,325,326],"explore","state","design",{"skillNo":328,"name":329,"nameZh":6,"description":330,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":291,"licenseFileUrl":6,"sourceHtmlUrl":331,"categories":332,"keywords":334,"publishedAt":46},"01M6BV6SBW166685KVBPWM2K4N","improve-codebase-architecture","Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.","https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fimprove-codebase-architecture\u002FSKILL.md",[333],{"categoryNo":25,"categoryName":26,"taxonomyType":22,"taxonomyTypeDesc":23},[335,336,337,338],"improve codebase architecture","architecture","improve","report",{"skillNo":340,"name":341,"nameZh":6,"description":342,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":291,"licenseFileUrl":6,"sourceHtmlUrl":343,"categories":344,"keywords":345,"publishedAt":46},"01M6BV6QY1JMRZ0030601KGTG7","implement","Implement a piece of work based on a spec or set of tickets.","https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fimplement\u002FSKILL.md",[],[341,346,347],"spec","SET"]