[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71JAF3M3MMVVGQ7GR4X8MQW":3,"skill-same:01M71JAF3M3MMVVGQ7GR4X8MQW":74},{"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":53,"commitSha":54,"skillDirectory":5,"forksCount":14,"repositoryHtmlUrl":55,"repositoryHomepageUrl":6,"ownerHtmlUrl":56,"ownerBlogUrl":57,"ownerDescription":58,"updatedAt":59,"install":60,"resources":73},"01M71JAF3M3MMVVGQ7GR4X8MQW","sounds-on-the-web",null,"Audit UI code for audio feedback best practices. Use when reviewing sound implementation, checking audio UX decisions, or auditing accessibility. Outputs file:line findings.","agency-black\u002FSkills","agency-black","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F234862658?v=4","01M6HWVFPNGNR5N2CX9ECSAD57","agencia.black","01M719WF77BF3HN0N9FK1APEFY",0,"MIT","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fsounds-on-the-web\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"web","sounds on the web","implementation","accessibility","file","best practices","decisions","use","audit ui","outputs","for","feedback","ui","line","ux","audit","code","when","Audio","ux decisions","2026-11-10 10:12:30",false,"---\nname: sounds-on-the-web\ndescription: Audit UI code for audio feedback best practices. Use when reviewing sound implementation, checking audio UX decisions, or auditing accessibility. Outputs file:line findings.\nlicense: MIT\nmetadata:\n  author: raphael-salaja\n  version: \"2.0.0\"\n  source: \u002Fcontent\u002Fsounds-on-the-web\u002Findex.mdx\n---\n\n# Sounds on the Web\n\nReview UI code for audio feedback best practices and accessibility.\n\n## How It Works\n\n1. Read the specified files (or prompt user for files\u002Fpattern)\n2. Check against all rules below\n3. Output findings in `file:line` format\n\n## Rule Categories\n\n| Priority | Category | Prefix |\n|----------|----------|--------|\n| 1 | Accessibility | `a11y-` |\n| 2 | Appropriateness | `appropriate-` |\n| 3 | Implementation | `impl-` |\n| 4 | Weight Matching | `weight-` |\n\n## Rules\n\n### Accessibility Rules\n\n#### `a11y-visual-equivalent`\nEvery audio cue must have a visual equivalent; sound never replaces visual feedback.\n\n**Fail:**\n```tsx\nfunction SubmitButton({ onClick }) {\n  const handleClick = () => {\n    playSound(\"success\");\n    onClick(); \u002F\u002F No visual confirmation\n  };\n}\n```\n\n**Pass:**\n```tsx\nfunction SubmitButton({ onClick }) {\n  const [status, setStatus] = useState(\"idle\");\n  \n  const handleClick = () => {\n    playSound(\"success\");\n    setStatus(\"success\"); \u002F\u002F Visual feedback too\n    onClick();\n  };\n  \n  return \u003Cbutton data-status={status}>Submit\u003C\u002Fbutton>;\n}\n```\n\n#### `a11y-toggle-setting`\nProvide explicit toggle to disable sounds in settings.\n\n**Fail:**\n```tsx\n\u002F\u002F No way to disable sounds\nfunction App() {\n  return \u003CSoundProvider>{children}\u003C\u002FSoundProvider>;\n}\n```\n\n**Pass:**\n```tsx\nfunction App() {\n  const { soundEnabled } = usePreferences();\n  return (\n    \u003CSoundProvider enabled={soundEnabled}>\n      {children}\n    \u003C\u002FSoundProvider>\n  );\n}\n```\n\n#### `a11y-reduced-motion-check`\nRespect prefers-reduced-motion as proxy for sound sensitivity.\n\n**Fail:**\n```tsx\nfunction playSound(name: string) {\n  audio.play(); \u002F\u002F Plays regardless of preferences\n}\n```\n\n**Pass:**\n```tsx\nfunction playSound(name: string) {\n  const prefersReducedMotion = window.matchMedia(\n    \"(prefers-reduced-motion: reduce)\"\n  ).matches;\n  \n  if (prefersReducedMotion) return;\n  audio.play();\n}\n```\n\n#### `a11y-volume-control`\nAllow volume adjustment independent of system volume.\n\n**Fail:**\n```tsx\nfunction playSound() {\n  audio.volume = 1; \u002F\u002F Always full volume\n  audio.play();\n}\n```\n\n**Pass:**\n```tsx\nfunction playSound() {\n  const { volume } = usePreferences();\n  audio.volume = volume; \u002F\u002F User-controlled\n  audio.play();\n}\n```\n\n### Appropriateness Rules\n\n#### `appropriate-no-high-frequency`\nDo not add sound to high-frequency interactions (typing, keyboard navigation).\n\n**Fail:**\n```tsx\nfunction Input({ onChange }) {\n  const handleChange = (e) => {\n    playSound(\"keystroke\"); \u002F\u002F Annoying on every keystroke\n    onChange(e);\n  };\n}\n```\n\n**Pass:**\n```tsx\nfunction Input({ onChange }) {\n  \u002F\u002F No sound on typing - visual feedback only\n  return \u003Cinput onChange={onChange} \u002F>;\n}\n```\n\n#### `appropriate-confirmations-only`\nSound is appropriate for confirmations: payments, uploads, form submissions.\n\n**Pass:**\n```tsx\nasync function handlePayment() {\n  await processPayment();\n  playSound(\"success\"); \u002F\u002F Appropriate - significant action\n  showConfirmation();\n}\n```\n\n#### `appropriate-errors-warnings`\nSound is appropriate for errors and warnings that can't be overlooked.\n\n**Pass:**\n```tsx\nfunction handleError(error: Error) {\n  playSound(\"error\"); \u002F\u002F Appropriate - needs attention\n  showErrorToast(error.message);\n}\n```\n\n#### `appropriate-no-decorative`\nDo not add sound to decorative moments with no informational value.\n\n**Fail:**\n```tsx\nfunction Card({ onHover }) {\n  return (\n    \u003Cdiv onMouseEnter={() => playSound(\"hover\")}> {\u002F* Decorative, no value *\u002F}\n      {children}\n    \u003C\u002Fdiv>\n  );\n}\n```\n\n#### `appropriate-no-punishing`\nSound should inform, not punish; avoid harsh sounds for user mistakes.\n\n**Fail:**\n```tsx\nfunction ValidationError() {\n  playSound(\"loud-buzzer\"); \u002F\u002F Punishing\n  return \u003Cspan>Invalid input\u003C\u002Fspan>;\n}\n```\n\n**Pass:**\n```tsx\nfunction ValidationError() {\n  playSound(\"gentle-alert\"); \u002F\u002F Informative but not harsh\n  return \u003Cspan>Invalid input\u003C\u002Fspan>;\n}\n```\n\n### Implementation Rules\n\n#### `impl-preload-audio`\nPreload audio files to avoid playback delay.\n\n**Fail:**\n```tsx\nfunction playSound(name: string) {\n  const audio = new Audio(`\u002Fsounds\u002F${name}.mp3`); \u002F\u002F Loads on demand\n  audio.play();\n}\n```\n\n**Pass:**\n```tsx\nconst sounds = {\n  success: new Audio(\"\u002Fsounds\u002Fsuccess.mp3\"),\n  error: new Audio(\"\u002Fsounds\u002Ferror.mp3\"),\n};\n\n\u002F\u002F Preload on app init\nObject.values(sounds).forEach(audio => audio.load());\n\nfunction playSound(name: keyof typeof sounds) {\n  sounds[name].currentTime = 0;\n  sounds[name].play();\n}\n```\n\n#### `impl-default-subtle`\nDefault volume should be subtle, not loud.\n\n**Fail:**\n```tsx\nconst DEFAULT_VOLUME = 1.0; \u002F\u002F Too loud\n```\n\n**Pass:**\n```tsx\nconst DEFAULT_VOLUME = 0.3; \u002F\u002F Subtle default\n```\n\n#### `impl-reset-current-time`\nReset audio currentTime before replay to allow rapid triggering.\n\n**Fail:**\n```tsx\nfunction playSound() {\n  audio.play(); \u002F\u002F Won't replay if already playing\n}\n```\n\n**Pass:**\n```tsx\nfunction playSound() {\n  audio.currentTime = 0;\n  audio.play();\n}\n```\n\n### Weight Matching Rules\n\n#### `weight-match-action`\nSound weight should match action importance.\n\n**Fail:**\n```tsx\n\u002F\u002F Loud fanfare for minor action\nfunction handleToggle() {\n  playSound(\"triumphant-fanfare\");\n  setEnabled(!enabled);\n}\n```\n\n**Pass:**\n```tsx\n\u002F\u002F Subtle click for minor action\nfunction handleToggle() {\n  playSound(\"soft-click\");\n  setEnabled(!enabled);\n}\n\n\u002F\u002F Richer sound for significant action\nfunction handlePurchase() {\n  playSound(\"success-chime\");\n  completePurchase();\n}\n```\n\n#### `weight-duration-matches-action`\nSound duration should match action duration.\n\n**Fail:**\n```tsx\n\u002F\u002F 2-second sound for instant action\nfunction handleClick() {\n  playSound(\"long-whoosh\"); \u002F\u002F 2000ms\n  \u002F\u002F Action completes immediately\n}\n```\n\n**Pass:**\n```tsx\n\u002F\u002F Short sound for instant action\nfunction handleClick() {\n  playSound(\"click\"); \u002F\u002F 50ms\n}\n\n\u002F\u002F Longer sound for process\nfunction handleUpload() {\n  playSound(\"upload-progress\"); \u002F\u002F Matches upload duration\n}\n```\n\n## Output Format\n\nWhen reviewing files, output findings as:\n\n```\nfile:line - [rule-id] description of issue\n\nExample:\ncomponents\u002Finput\u002Findex.tsx:23 - [appropriate-no-high-frequency] Playing sound on every keystroke\nlib\u002Fsounds.ts:45 - [a11y-reduced-motion-check] Not checking prefers-reduced-motion\n```\n\n## Summary Table\n\nAfter findings, output a summary:\n\n| Rule | Count | Severity |\n|------|-------|----------|\n| `a11y-visual-equivalent` | 2 | HIGH |\n| `appropriate-no-high-frequency` | 1 | HIGH |\n| `impl-preload-audio` | 3 | MEDIUM |\n\n## Sound Appropriateness Matrix\n\n| Interaction | Sound? | Reason |\n|-------------|--------|--------|\n| Payment success | Yes | Significant confirmation |\n| Form submission | Yes | User needs assurance |\n| Error state | Yes | Can't be overlooked |\n| Notification | Yes | May not be looking at screen |\n| Button click | Maybe | Only for significant buttons |\n| Typing | No | Too frequent |\n| Hover | No | Decorative only |\n| Scroll | No | Too frequent |\n| Navigation | No | Keyboard nav would be noisy |\n\n## References\n\n- [Web Audio API Documentation](https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FWeb_Audio_API)\n- [prefers-reduced-motion](https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FCSS\u002F@media\u002Fprefers-reduced-motion)\n","# Sounds on the Web\n\nReview UI code for audio feedback best practices and accessibility.\n\n## How It Works\n\n1. Read the specified files (or prompt user for files\u002Fpattern)\n2. Check against all rules below\n3. Output findings in `file:line` format\n\n## Rule Categories\n\n| Priority | Category | Prefix |\n|----------|----------|--------|\n| 1 | Accessibility | `a11y-` |\n| 2 | Appropriateness | `appropriate-` |\n| 3 | Implementation | `impl-` |\n| 4 | Weight Matching | `weight-` |\n\n## Rules\n\n### Accessibility Rules\n\n#### `a11y-visual-equivalent`\nEvery audio cue must have a visual equivalent; sound never replaces visual feedback.\n\n**Fail:**\n```tsx\nfunction SubmitButton({ onClick }) {\n  const handleClick = () => {\n    playSound(\"success\");\n    onClick(); \u002F\u002F No visual confirmation\n  };\n}\n```\n\n**Pass:**\n```tsx\nfunction SubmitButton({ onClick }) {\n  const [status, setStatus] = useState(\"idle\");\n  \n  const handleClick = () => {\n    playSound(\"success\");\n    setStatus(\"success\"); \u002F\u002F Visual feedback too\n    onClick();\n  };\n  \n  return \u003Cbutton data-status={status}>Submit\u003C\u002Fbutton>;\n}\n```\n\n#### `a11y-toggle-setting`\nProvide explicit toggle to disable sounds in settings.\n\n**Fail:**\n```tsx\n\u002F\u002F No way to disable sounds\nfunction App() {\n  return \u003CSoundProvider>{children}\u003C\u002FSoundProvider>;\n}\n```\n\n**Pass:**\n```tsx\nfunction App() {\n  const { soundEnabled } = usePreferences();\n  return (\n    \u003CSoundProvider enabled={soundEnabled}>\n      {children}\n    \u003C\u002FSoundProvider>\n  );\n}\n```\n\n#### `a11y-reduced-motion-check`\nRespect prefers-reduced-motion as proxy for sound sensitivity.\n\n**Fail:**\n```tsx\nfunction playSound(name: string) {\n  audio.play(); \u002F\u002F Plays regardless of preferences\n}\n```\n\n**Pass:**\n```tsx\nfunction playSound(name: string) {\n  const prefersReducedMotion = window.matchMedia(\n    \"(prefers-reduced-motion: reduce)\"\n  ).matches;\n  \n  if (prefersReducedMotion) return;\n  audio.play();\n}\n```\n\n#### `a11y-volume-control`\nAllow volume adjustment independent of system volume.\n\n**Fail:**\n```tsx\nfunction playSound() {\n  audio.volume = 1; \u002F\u002F Always full volume\n  audio.play();\n}\n```\n\n**Pass:**\n```tsx\nfunction playSound() {\n  const { volume } = usePreferences();\n  audio.volume = volume; \u002F\u002F User-controlled\n  audio.play();\n}\n```\n\n### Appropriateness Rules\n\n#### `appropriate-no-high-frequency`\nDo not add sound to high-frequency interactions (typing, keyboard navigation).\n\n**Fail:**\n```tsx\nfunction Input({ onChange }) {\n  const handleChange = (e) => {\n    playSound(\"keystroke\"); \u002F\u002F Annoying on every keystroke\n    onChange(e);\n  };\n}\n```\n\n**Pass:**\n```tsx\nfunction Input({ onChange }) {\n  \u002F\u002F No sound on typing - visual feedback only\n  return \u003Cinput onChange={onChange} \u002F>;\n}\n```\n\n#### `appropriate-confirmations-only`\nSound is appropriate for confirmations: payments, uploads, form submissions.\n\n**Pass:**\n```tsx\nasync function handlePayment() {\n  await processPayment();\n  playSound(\"success\"); \u002F\u002F Appropriate - significant action\n  showConfirmation();\n}\n```\n\n#### `appropriate-errors-warnings`\nSound is appropriate for errors and warnings that can't be overlooked.\n\n**Pass:**\n```tsx\nfunction handleError(error: Error) {\n  playSound(\"error\"); \u002F\u002F Appropriate - needs attention\n  showErrorToast(error.message);\n}\n```\n\n#### `appropriate-no-decorative`\nDo not add sound to decorative moments with no informational value.\n\n**Fail:**\n```tsx\nfunction Card({ onHover }) {\n  return (\n    \u003Cdiv onMouseEnter={() => playSound(\"hover\")}> {\u002F* Decorative, no value *\u002F}\n      {children}\n    \u003C\u002Fdiv>\n  );\n}\n```\n\n#### `appropriate-no-punishing`\nSound should inform, not punish; avoid harsh sounds for user mistakes.\n\n**Fail:**\n```tsx\nfunction ValidationError() {\n  playSound(\"loud-buzzer\"); \u002F\u002F Punishing\n  return \u003Cspan>Invalid input\u003C\u002Fspan>;\n}\n```\n\n**Pass:**\n```tsx\nfunction ValidationError() {\n  playSound(\"gentle-alert\"); \u002F\u002F Informative but not harsh\n  return \u003Cspan>Invalid input\u003C\u002Fspan>;\n}\n```\n\n### Implementation Rules\n\n#### `impl-preload-audio`\nPreload audio files to avoid playback delay.\n\n**Fail:**\n```tsx\nfunction playSound(name: string) {\n  const audio = new Audio(`\u002Fsounds\u002F${name}.mp3`); \u002F\u002F Loads on demand\n  audio.play();\n}\n```\n\n**Pass:**\n```tsx\nconst sounds = {\n  success: new Audio(\"\u002Fsounds\u002Fsuccess.mp3\"),\n  error: new Audio(\"\u002Fsounds\u002Ferror.mp3\"),\n};\n\n\u002F\u002F Preload on app init\nObject.values(sounds).forEach(audio => audio.load());\n\nfunction playSound(name: keyof typeof sounds) {\n  sounds[name].currentTime = 0;\n  sounds[name].play();\n}\n```\n\n#### `impl-default-subtle`\nDefault volume should be subtle, not loud.\n\n**Fail:**\n```tsx\nconst DEFAULT_VOLUME = 1.0; \u002F\u002F Too loud\n```\n\n**Pass:**\n```tsx\nconst DEFAULT_VOLUME = 0.3; \u002F\u002F Subtle default\n```\n\n#### `impl-reset-current-time`\nReset audio currentTime before replay to allow rapid triggering.\n\n**Fail:**\n```tsx\nfunction playSound() {\n  audio.play(); \u002F\u002F Won't replay if already playing\n}\n```\n\n**Pass:**\n```tsx\nfunction playSound() {\n  audio.currentTime = 0;\n  audio.play();\n}\n```\n\n### Weight Matching Rules\n\n#### `weight-match-action`\nSound weight should match action importance.\n\n**Fail:**\n```tsx\n\u002F\u002F Loud fanfare for minor action\nfunction handleToggle() {\n  playSound(\"triumphant-fanfare\");\n  setEnabled(!enabled);\n}\n```\n\n**Pass:**\n```tsx\n\u002F\u002F Subtle click for minor action\nfunction handleToggle() {\n  playSound(\"soft-click\");\n  setEnabled(!enabled);\n}\n\n\u002F\u002F Richer sound for significant action\nfunction handlePurchase() {\n  playSound(\"success-chime\");\n  completePurchase();\n}\n```\n\n#### `weight-duration-matches-action`\nSound duration should match action duration.\n\n**Fail:**\n```tsx\n\u002F\u002F 2-second sound for instant action\nfunction handleClick() {\n  playSound(\"long-whoosh\"); \u002F\u002F 2000ms\n  \u002F\u002F Action completes immediately\n}\n```\n\n**Pass:**\n```tsx\n\u002F\u002F Short sound for instant action\nfunction handleClick() {\n  playSound(\"click\"); \u002F\u002F 50ms\n}\n\n\u002F\u002F Longer sound for process\nfunction handleUpload() {\n  playSound(\"upload-progress\"); \u002F\u002F Matches upload duration\n}\n```\n\n## Output Format\n\nWhen reviewing files, output findings as:\n\n```\nfile:line - [rule-id] description of issue\n\nExample:\ncomponents\u002Finput\u002Findex.tsx:23 - [appropriate-no-high-frequency] Playing sound on every keystroke\nlib\u002Fsounds.ts:45 - [a11y-reduced-motion-check] Not checking prefers-reduced-motion\n```\n\n## Summary Table\n\nAfter findings, output a summary:\n\n| Rule | Count | Severity |\n|------|-------|----------|\n| `a11y-visual-equivalent` | 2 | HIGH |\n| `appropriate-no-high-frequency` | 1 | HIGH |\n| `impl-preload-audio` | 3 | MEDIUM |\n\n## Sound Appropriateness Matrix\n\n| Interaction | Sound? | Reason |\n|-------------|--------|--------|\n| Payment success | Yes | Significant confirmation |\n| Form submission | Yes | User needs assurance |\n| Error state | Yes | Can't be overlooked |\n| Notification | Yes | May not be looking at screen |\n| Button click | Maybe | Only for significant buttons |\n| Typing | No | Too frequent |\n| Hover | No | Decorative only |\n| Scroll | No | Too frequent |\n| Navigation | No | Keyboard nav would be noisy |\n\n## References\n\n- [Web Audio API Documentation](https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FWeb_Audio_API)\n- [prefers-reduced-motion](https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FCSS\u002F@media\u002Fprefers-reduced-motion)\n",{"name":5,"license":15,"metadata":49,"description":7},{"author":50,"source":51,"version":52},"raphael-salaja","\u002Fcontent\u002Fsounds-on-the-web\u002Findex.mdx","2.0.0","main","681496e0662f4c45c4758fae9d4510ae87311bf2","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills","https:\u002F\u002Fgithub.com\u002Fagency-black","http:\u002F\u002Fwww.dogma.black","Las grandes ideas merecen una ejecución impecable. Construimos plataformas web, aplicaciones y ecosistemas digitales completos. Esta Trinidad es nuestro dogma.","2026-05-29 16:13:55",{"source":8,"skillName":5,"commands":61,"prompt":71,"zipAvailable":72},[62,65,68],{"tool":63,"command":64},"npx","npx skills add agency-black\u002FSkills --skill sounds-on-the-web",{"tool":66,"command":67},"bunx","bunx skills add agency-black\u002FSkills --skill sounds-on-the-web",{"tool":69,"command":70},"pnpm","pnpm dlx skills add agency-black\u002FSkills --skill sounds-on-the-web","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fsounds-on-the-web\u002FSKILL.md",true,[],[75,100,128,156,180,204],{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":44},"01M71JZVZ0TVW7Z5DQBRWSBG8A","zarr-python","Chunked N-D arrays for cloud storage (Zarr-Python 3). Compressed arrays, parallel I\u002FO, S3\u002FGCS via fsspec, NumPy\u002FDask\u002FXarray compatible, for large-scale scientific computing pipelines.","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fzarr-python\u002FSKILL.md",[],[82,83,84,85,86,87,88,89,90,91,92,93,94,34,95,31,96,97,98,99],"zarr python","python","zarr","arrays","Cloud Storage","remote","workflows","scientific","read","write","edit","parallel","dask","s3fs","numpy","s3","scientific computing","scale",{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":104,"sourceHtmlUrl":105,"categories":106,"keywords":110,"publishedAt":44},"01M71JYXC5VAEJT8KXN5GRK32S","xvary-stock-research","Thesis-driven equity analysis from public SEC EDGAR and market data; \u002Fanalyze, \u002Fscore, \u002Fcompare workflows with bundled Python tools (Claude Code, Cursor, Codex).","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fxvary-stock-research\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fxvary-stock-research\u002FSKILL.md",[107],{"categoryNo":108,"categoryName":109,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",[111,112,113,114,115,116,117,83,118,88,119,40,120,121,122,123,124,125,126,127],"xvary","stock","research","xvary stock research","sec edgar","community","equity","thesis","analysis","Market","compare","market data","analyze","with","codex","cursor","2026",{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":132,"licenseFileUrl":133,"sourceHtmlUrl":134,"categories":135,"keywords":142,"publishedAt":44},"01M71JVSDPDQ5040YBN6J1ASKY","webapp-testing","Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fwebapp-testing\u002FSKILL.md",[136,139],{"categoryNo":137,"categoryName":138,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":140,"categoryName":141,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[143,144,145,34,146,147,148,149,150,151,152,124,153,24,154,36,155],"webapp","testing","webapp testing","applications","local","frontend","debugging","toolkit","logs","browser","playwright","behavior","screenshots",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":132,"licenseFileUrl":160,"sourceHtmlUrl":161,"categories":162,"keywords":164,"publishedAt":44},"01M71JV64CW7R6FYYK9JWWGW0X","web-artifacts-builder","Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn\u002Fui). Use for complex artifacts requiring state management, routing, or shadcn\u002Fui components - not for simple single-file HTML\u002FJSX artifacts.","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fweb-artifacts-builder\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fweb-artifacts-builder\u002FSKILL.md",[163],{"categoryNo":140,"categoryName":141,"taxonomyType":21,"taxonomyTypeDesc":22},[165,166,167,24,168,169,170,34,171,172,148,173,31,28,174,175,176,177,178,179],"builder","artifacts builder","artifacts","web artifacts builder","single-file","css","Tailwind","ui components","single","components","react","multi","state","routing","state management",{"skillNo":181,"name":182,"nameZh":6,"description":183,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":184,"categories":185,"keywords":187,"publishedAt":44},"01M71JS4X2FRY41DE84DEP06MN","vercel-react-view-transitions","Guide for implementing smooth, native-feeling animations using React's View Transition API (`\u003CViewTransition>` component, `addTransitionType`, and CSS view transition pseudo-elements). Use this skill whenever the user wants to add page transitions, animate route changes, create shared element animations, animate enter\u002Fexit of components, animate list reorder, implement directional (forward\u002Fback) navigation animations, or integrate view transitions in Next.js. Also use when the user mentions view transitions, `startViewTransition`, `ViewTransition`, transition types, or asks about animating between UI states in React without third-party animation libraries.","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fvercel-react-view-transitions\u002FSKILL.md",[186],{"categoryNo":140,"categoryName":141,"taxonomyType":21,"taxonomyTypeDesc":22},[175,188,189,190,191,192,193,194,195,170,196,197,198,199,41,174,200,201,202,203],"vercel react view transitions","view","react view transitions","vercel","transitions","shared","back","Animation","types","states","element","implementing","api","route","create","libraries",{"skillNo":205,"name":206,"nameZh":6,"description":207,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":208,"categories":209,"keywords":211,"publishedAt":44},"01M71JS1WZ1J4F9YVC2203JBJW","vercel-react-native-skills","React Native and Expo best practices for building performant mobile apps. Use when building React Native components, optimizing list performance, implementing animations, or working with native modules. Triggers on tasks involving React Native, Expo, mobile performance, or native platform APIs.","https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fvercel-react-native-skills\u002FSKILL.md",[210],{"categoryNo":140,"categoryName":141,"taxonomyType":21,"taxonomyTypeDesc":22},[191,212,175,213,214,215,216,217,218,34,219,199,220,31,221,222,41,29,223,174],"vercel react native skills","react native","native","react native skills","modules","platform","animations","performance","triggers","react native components","apps","tasks"]