[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F97JW5Z0HXFPC6G2WR5WHH":3,"skill-same:01M6F97JW5Z0HXFPC6G2WR5WHH":77},{"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":45,"linkOnly":46,"markdownContent":47,"markdownBody":48,"frontMatter":49,"refName":54,"commitSha":55,"skillDirectory":56,"forksCount":57,"repositoryHtmlUrl":58,"repositoryHomepageUrl":6,"ownerHtmlUrl":59,"ownerBlogUrl":60,"ownerDescription":61,"updatedAt":62,"install":63,"resources":76},"01M6F97JW5Z0HXFPC6G2WR5WHH","speak-common-errors",null,"Diagnose and fix Speak common errors and exceptions.\nUse when encountering Speak errors, debugging failed sessions,\nor troubleshooting language learning integration issues.\nTrigger with phrases like \"speak error\", \"fix speak\",\n\"speak not working\", \"debug speak\", \"speak lesson failed\".","Dicklesworthstone\u002Fpi_agent_rust","Dicklesworthstone","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F35050222?v=4","01M6CG26AR942CSVMN1M5E3DSE","Jeff Emanuel","01M6CG26EPP71PSHW1VDS71121",1991,"MIT","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fspeak-pack\u002Fskills\u002Fspeak-common-errors\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],"speak common errors","errors","speak","common","fix","when","with","error","trigger","io","lesson","language learning","use","sessions","read","learning","Bash","issues","debugging","diagnose","debug","2026-11-10 10:12:30",false,"---\nname: speak-common-errors\ndescription: |\n  Diagnose and fix Speak common errors and exceptions.\n  Use when encountering Speak errors, debugging failed sessions,\n  or troubleshooting language learning integration issues.\n  Trigger with phrases like \"speak error\", \"fix speak\",\n  \"speak not working\", \"debug speak\", \"speak lesson failed\".\nallowed-tools: Read, Grep, Bash(curl:*)\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\n---\n\n# Speak Common Errors\n\n## Overview\nQuick reference for the top 10 most common Speak errors and their solutions.\n\n## Prerequisites\n- Speak SDK installed\n- API credentials configured\n- Access to error logs\n\n## Instructions\n\n### Step 1: Identify the Error\nCheck error message and code in your logs or console.\n\n### Step 2: Find Matching Error Below\nMatch your error to one of the documented cases.\n\n### Step 3: Apply Solution\nFollow the solution steps for your specific error.\n\n## Error Reference\n\n### 1. Authentication Failed\n**Error Message:**\n```\nSpeakAuthError: Invalid API key or App ID\nCode: AUTH_001\n```\n\n**Cause:** API key is missing, expired, or invalid. App ID mismatch.\n\n**Solution:**\n```bash\n# Verify API key is set\necho $SPEAK_API_KEY\necho $SPEAK_APP_ID\n\n# Test authentication\ncurl -X POST https:\u002F\u002Fapi.speak.com\u002Fv1\u002Fhealth \\\n  -H \"Authorization: Bearer ${SPEAK_API_KEY}\" \\\n  -H \"X-App-ID: ${SPEAK_APP_ID}\"\n```\n\n---\n\n### 2. Rate Limit Exceeded\n**Error Message:**\n```\nSpeakRateLimitError: Rate limit exceeded. Retry after 60 seconds.\nCode: RATE_001\nHeaders: X-RateLimit-Reset: 1699876543\n```\n\n**Cause:** Too many API requests in a short period.\n\n**Solution:**\nImplement exponential backoff. See `speak-rate-limits` skill.\n\n```typescript\n\u002F\u002F Quick fix: Add delay between requests\nawait new Promise(resolve => setTimeout(resolve, 1000));\n```\n\n---\n\n### 3. Audio Processing Failed\n**Error Message:**\n```\nSpeakAudioError: Invalid audio format or corrupted audio data\nCode: AUDIO_001\n```\n\n**Cause:** Audio file is in wrong format, too short, or corrupted.\n\n**Solution:**\n```typescript\n\u002F\u002F Validate audio before sending\nfunction validateAudio(audioData: ArrayBuffer): boolean {\n  \u002F\u002F Check minimum length (0.5 seconds at 16kHz = 16000 samples)\n  if (audioData.byteLength \u003C 16000) {\n    console.error('Audio too short');\n    return false;\n  }\n\n  \u002F\u002F Check format (WAV header magic number)\n  const view = new DataView(audioData);\n  const magic = String.fromCharCode(\n    view.getUint8(0), view.getUint8(1),\n    view.getUint8(2), view.getUint8(3)\n  );\n  if (magic !== 'RIFF') {\n    console.error('Invalid audio format (expected WAV)');\n    return false;\n  }\n\n  return true;\n}\n```\n\n**Supported formats:**\n- WAV (PCM, 16-bit, mono, 16kHz) - Recommended\n- MP3 (128kbps minimum)\n- WebM (Opus codec)\n\n---\n\n### 4. Session Expired\n**Error Message:**\n```\nSpeakSessionError: Session expired or not found\nCode: SESSION_001\nSessionId: sess_abc123\n```\n\n**Cause:** Lesson session timed out or was ended.\n\n**Solution:**\n```typescript\n\u002F\u002F Check session status before operations\nasync function safeSessionOperation(\n  session: LessonSession,\n  operation: () => Promise\u003Cany>\n) {\n  const status = await session.getStatus();\n\n  if (status === 'expired' || status === 'ended') {\n    \u002F\u002F Start new session\n    console.log('Session expired, starting new session...');\n    return await startNewSession();\n  }\n\n  return await operation();\n}\n```\n\n---\n\n### 5. Language Not Supported\n**Error Message:**\n```\nSpeakLanguageError: Language 'xyz' is not supported\nCode: LANG_001\n```\n\n**Cause:** Requested language code is invalid or not available.\n\n**Solution:**\n```typescript\nconst SUPPORTED_LANGUAGES = [\n  'en', 'es', 'fr', 'de', 'pt-BR',\n  'ko', 'ja', 'zh-TW', 'zh-CN', 'id'\n];\n\nfunction validateLanguage(lang: string): boolean {\n  if (!SUPPORTED_LANGUAGES.includes(lang)) {\n    console.error(`Unsupported language: ${lang}`);\n    console.log(`Supported: ${SUPPORTED_LANGUAGES.join(', ')}`);\n    return false;\n  }\n  return true;\n}\n```\n\n---\n\n### 6. Speech Recognition Failed\n**Error Message:**\n```\nSpeakRecognitionError: Could not recognize speech\nCode: RECOGNITION_001\nConfidence: 0.12\n```\n\n**Cause:** Audio quality too poor, background noise, or unclear speech.\n\n**Solution:**\n```typescript\n\u002F\u002F Check recognition confidence\nasync function recognizeWithRetry(\n  client: SpeakClient,\n  audioData: ArrayBuffer,\n  minConfidence: number = 0.5\n): Promise\u003CRecognitionResult> {\n  const result = await client.speech.recognize(audioData);\n\n  if (result.confidence \u003C minConfidence) {\n    console.log('Low confidence. Please try again with clearer speech.');\n    throw new Error('Recognition confidence too low');\n  }\n\n  return result;\n}\n```\n\n**Tips for better recognition:**\n- Use a high-quality microphone\n- Reduce background noise\n- Speak clearly and at normal pace\n- Maintain consistent distance from mic\n\n---\n\n### 7. Network Timeout\n**Error Message:**\n```\nSpeakNetworkError: Request timeout after 30000ms\nCode: NETWORK_001\n```\n\n**Cause:** Network connectivity or server latency issues.\n\n**Solution:**\n```typescript\n\u002F\u002F Increase timeout for large audio files\nconst client = new SpeakClient({\n  apiKey: process.env.SPEAK_API_KEY!,\n  appId: process.env.SPEAK_APP_ID!,\n  timeout: 60000, \u002F\u002F 60 seconds\n  retries: 3,\n});\n```\n\n---\n\n### 8. Quota Exceeded\n**Error Message:**\n```\nSpeakQuotaError: Monthly API quota exceeded\nCode: QUOTA_001\nUsage: 100000\u002F100000\n```\n\n**Cause:** Exceeded monthly API call limit for your plan.\n\n**Solution:**\n```typescript\n\u002F\u002F Monitor usage before operations\nasync function checkQuota(client: SpeakClient): Promise\u003Cboolean> {\n  const usage = await client.account.getUsage();\n\n  console.log(`Usage: ${usage.current}\u002F${usage.limit}`);\n  console.log(`Remaining: ${usage.remaining}`);\n\n  if (usage.remaining \u003C 100) {\n    console.warn('Low quota warning!');\n  }\n\n  return usage.remaining > 0;\n}\n```\n\n---\n\n### 9. Invalid Response Format\n**Error Message:**\n```\nSpeakParseError: Invalid response from AI tutor\nCode: PARSE_001\n```\n\n**Cause:** AI tutor returned unexpected response format.\n\n**Solution:**\n```typescript\n\u002F\u002F Validate tutor responses\nfunction validateTutorResponse(response: any): TutorResponse {\n  const required = ['text', 'type'];\n\n  for (const field of required) {\n    if (!(field in response)) {\n      throw new Error(`Missing required field: ${field}`);\n    }\n  }\n\n  return response as TutorResponse;\n}\n```\n\n---\n\n### 10. Concurrent Session Limit\n**Error Message:**\n```\nSpeakLimitError: Maximum concurrent sessions reached\nCode: LIMIT_001\nMaxSessions: 5\nCurrentSessions: 5\n```\n\n**Cause:** Too many active sessions for your account.\n\n**Solution:**\n```typescript\n\u002F\u002F Clean up old sessions before starting new ones\nasync function ensureSessionSlot(\n  client: SpeakClient\n): Promise\u003Cvoid> {\n  const sessions = await client.sessions.list({ status: 'active' });\n\n  if (sessions.length >= 5) {\n    \u002F\u002F End oldest session\n    const oldest = sessions.sort((a, b) =>\n      a.createdAt.getTime() - b.createdAt.getTime()\n    )[0];\n\n    await oldest.end();\n    console.log(`Ended old session: ${oldest.id}`);\n  }\n}\n```\n\n## Quick Diagnostic Commands\n\n```bash\n# Check Speak service status\ncurl -s https:\u002F\u002Fstatus.speak.com\u002Fapi\u002Fstatus | jq\n\n# Verify API connectivity\ncurl -X POST https:\u002F\u002Fapi.speak.com\u002Fv1\u002Fhealth \\\n  -H \"Authorization: Bearer ${SPEAK_API_KEY}\" \\\n  -H \"X-App-ID: ${SPEAK_APP_ID}\"\n\n# Check local configuration\nenv | grep SPEAK\n\n# List active sessions (if CLI available)\nspeak sessions list --status active\n```\n\n## Escalation Path\n1. Collect evidence with `speak-debug-bundle`\n2. Check Speak status page: https:\u002F\u002Fstatus.speak.com\n3. Contact support with request ID from error\n\n## Resources\n- [Speak Status Page](https:\u002F\u002Fstatus.speak.com)\n- [Speak Support](https:\u002F\u002Fsupport.speak.com)\n- [Speak Error Codes](https:\u002F\u002Fdeveloper.speak.com\u002Fdocs\u002Ferrors)\n\n## Next Steps\nFor comprehensive debugging, see `speak-debug-bundle`.\n","# Speak Common Errors\n\n## Overview\nQuick reference for the top 10 most common Speak errors and their solutions.\n\n## Prerequisites\n- Speak SDK installed\n- API credentials configured\n- Access to error logs\n\n## Instructions\n\n### Step 1: Identify the Error\nCheck error message and code in your logs or console.\n\n### Step 2: Find Matching Error Below\nMatch your error to one of the documented cases.\n\n### Step 3: Apply Solution\nFollow the solution steps for your specific error.\n\n## Error Reference\n\n### 1. Authentication Failed\n**Error Message:**\n```\nSpeakAuthError: Invalid API key or App ID\nCode: AUTH_001\n```\n\n**Cause:** API key is missing, expired, or invalid. App ID mismatch.\n\n**Solution:**\n```bash\n# Verify API key is set\necho $SPEAK_API_KEY\necho $SPEAK_APP_ID\n\n# Test authentication\ncurl -X POST https:\u002F\u002Fapi.speak.com\u002Fv1\u002Fhealth \\\n  -H \"Authorization: Bearer ${SPEAK_API_KEY}\" \\\n  -H \"X-App-ID: ${SPEAK_APP_ID}\"\n```\n\n---\n\n### 2. Rate Limit Exceeded\n**Error Message:**\n```\nSpeakRateLimitError: Rate limit exceeded. Retry after 60 seconds.\nCode: RATE_001\nHeaders: X-RateLimit-Reset: 1699876543\n```\n\n**Cause:** Too many API requests in a short period.\n\n**Solution:**\nImplement exponential backoff. See `speak-rate-limits` skill.\n\n```typescript\n\u002F\u002F Quick fix: Add delay between requests\nawait new Promise(resolve => setTimeout(resolve, 1000));\n```\n\n---\n\n### 3. Audio Processing Failed\n**Error Message:**\n```\nSpeakAudioError: Invalid audio format or corrupted audio data\nCode: AUDIO_001\n```\n\n**Cause:** Audio file is in wrong format, too short, or corrupted.\n\n**Solution:**\n```typescript\n\u002F\u002F Validate audio before sending\nfunction validateAudio(audioData: ArrayBuffer): boolean {\n  \u002F\u002F Check minimum length (0.5 seconds at 16kHz = 16000 samples)\n  if (audioData.byteLength \u003C 16000) {\n    console.error('Audio too short');\n    return false;\n  }\n\n  \u002F\u002F Check format (WAV header magic number)\n  const view = new DataView(audioData);\n  const magic = String.fromCharCode(\n    view.getUint8(0), view.getUint8(1),\n    view.getUint8(2), view.getUint8(3)\n  );\n  if (magic !== 'RIFF') {\n    console.error('Invalid audio format (expected WAV)');\n    return false;\n  }\n\n  return true;\n}\n```\n\n**Supported formats:**\n- WAV (PCM, 16-bit, mono, 16kHz) - Recommended\n- MP3 (128kbps minimum)\n- WebM (Opus codec)\n\n---\n\n### 4. Session Expired\n**Error Message:**\n```\nSpeakSessionError: Session expired or not found\nCode: SESSION_001\nSessionId: sess_abc123\n```\n\n**Cause:** Lesson session timed out or was ended.\n\n**Solution:**\n```typescript\n\u002F\u002F Check session status before operations\nasync function safeSessionOperation(\n  session: LessonSession,\n  operation: () => Promise\u003Cany>\n) {\n  const status = await session.getStatus();\n\n  if (status === 'expired' || status === 'ended') {\n    \u002F\u002F Start new session\n    console.log('Session expired, starting new session...');\n    return await startNewSession();\n  }\n\n  return await operation();\n}\n```\n\n---\n\n### 5. Language Not Supported\n**Error Message:**\n```\nSpeakLanguageError: Language 'xyz' is not supported\nCode: LANG_001\n```\n\n**Cause:** Requested language code is invalid or not available.\n\n**Solution:**\n```typescript\nconst SUPPORTED_LANGUAGES = [\n  'en', 'es', 'fr', 'de', 'pt-BR',\n  'ko', 'ja', 'zh-TW', 'zh-CN', 'id'\n];\n\nfunction validateLanguage(lang: string): boolean {\n  if (!SUPPORTED_LANGUAGES.includes(lang)) {\n    console.error(`Unsupported language: ${lang}`);\n    console.log(`Supported: ${SUPPORTED_LANGUAGES.join(', ')}`);\n    return false;\n  }\n  return true;\n}\n```\n\n---\n\n### 6. Speech Recognition Failed\n**Error Message:**\n```\nSpeakRecognitionError: Could not recognize speech\nCode: RECOGNITION_001\nConfidence: 0.12\n```\n\n**Cause:** Audio quality too poor, background noise, or unclear speech.\n\n**Solution:**\n```typescript\n\u002F\u002F Check recognition confidence\nasync function recognizeWithRetry(\n  client: SpeakClient,\n  audioData: ArrayBuffer,\n  minConfidence: number = 0.5\n): Promise\u003CRecognitionResult> {\n  const result = await client.speech.recognize(audioData);\n\n  if (result.confidence \u003C minConfidence) {\n    console.log('Low confidence. Please try again with clearer speech.');\n    throw new Error('Recognition confidence too low');\n  }\n\n  return result;\n}\n```\n\n**Tips for better recognition:**\n- Use a high-quality microphone\n- Reduce background noise\n- Speak clearly and at normal pace\n- Maintain consistent distance from mic\n\n---\n\n### 7. Network Timeout\n**Error Message:**\n```\nSpeakNetworkError: Request timeout after 30000ms\nCode: NETWORK_001\n```\n\n**Cause:** Network connectivity or server latency issues.\n\n**Solution:**\n```typescript\n\u002F\u002F Increase timeout for large audio files\nconst client = new SpeakClient({\n  apiKey: process.env.SPEAK_API_KEY!,\n  appId: process.env.SPEAK_APP_ID!,\n  timeout: 60000, \u002F\u002F 60 seconds\n  retries: 3,\n});\n```\n\n---\n\n### 8. Quota Exceeded\n**Error Message:**\n```\nSpeakQuotaError: Monthly API quota exceeded\nCode: QUOTA_001\nUsage: 100000\u002F100000\n```\n\n**Cause:** Exceeded monthly API call limit for your plan.\n\n**Solution:**\n```typescript\n\u002F\u002F Monitor usage before operations\nasync function checkQuota(client: SpeakClient): Promise\u003Cboolean> {\n  const usage = await client.account.getUsage();\n\n  console.log(`Usage: ${usage.current}\u002F${usage.limit}`);\n  console.log(`Remaining: ${usage.remaining}`);\n\n  if (usage.remaining \u003C 100) {\n    console.warn('Low quota warning!');\n  }\n\n  return usage.remaining > 0;\n}\n```\n\n---\n\n### 9. Invalid Response Format\n**Error Message:**\n```\nSpeakParseError: Invalid response from AI tutor\nCode: PARSE_001\n```\n\n**Cause:** AI tutor returned unexpected response format.\n\n**Solution:**\n```typescript\n\u002F\u002F Validate tutor responses\nfunction validateTutorResponse(response: any): TutorResponse {\n  const required = ['text', 'type'];\n\n  for (const field of required) {\n    if (!(field in response)) {\n      throw new Error(`Missing required field: ${field}`);\n    }\n  }\n\n  return response as TutorResponse;\n}\n```\n\n---\n\n### 10. Concurrent Session Limit\n**Error Message:**\n```\nSpeakLimitError: Maximum concurrent sessions reached\nCode: LIMIT_001\nMaxSessions: 5\nCurrentSessions: 5\n```\n\n**Cause:** Too many active sessions for your account.\n\n**Solution:**\n```typescript\n\u002F\u002F Clean up old sessions before starting new ones\nasync function ensureSessionSlot(\n  client: SpeakClient\n): Promise\u003Cvoid> {\n  const sessions = await client.sessions.list({ status: 'active' });\n\n  if (sessions.length >= 5) {\n    \u002F\u002F End oldest session\n    const oldest = sessions.sort((a, b) =>\n      a.createdAt.getTime() - b.createdAt.getTime()\n    )[0];\n\n    await oldest.end();\n    console.log(`Ended old session: ${oldest.id}`);\n  }\n}\n```\n\n## Quick Diagnostic Commands\n\n```bash\n# Check Speak service status\ncurl -s https:\u002F\u002Fstatus.speak.com\u002Fapi\u002Fstatus | jq\n\n# Verify API connectivity\ncurl -X POST https:\u002F\u002Fapi.speak.com\u002Fv1\u002Fhealth \\\n  -H \"Authorization: Bearer ${SPEAK_API_KEY}\" \\\n  -H \"X-App-ID: ${SPEAK_APP_ID}\"\n\n# Check local configuration\nenv | grep SPEAK\n\n# List active sessions (if CLI available)\nspeak sessions list --status active\n```\n\n## Escalation Path\n1. Collect evidence with `speak-debug-bundle`\n2. Check Speak status page: https:\u002F\u002Fstatus.speak.com\n3. Contact support with request ID from error\n\n## Resources\n- [Speak Status Page](https:\u002F\u002Fstatus.speak.com)\n- [Speak Support](https:\u002F\u002Fsupport.speak.com)\n- [Speak Error Codes](https:\u002F\u002Fdeveloper.speak.com\u002Fdocs\u002Ferrors)\n\n## Next Steps\nFor comprehensive debugging, see `speak-debug-bundle`.\n",{"name":5,"author":50,"license":15,"version":51,"description":52,"allowed-tools":53},"Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Diagnose and fix Speak common errors and exceptions.\nUse when encountering Speak errors, debugging failed sessions,\nor troubleshooting language learning integration issues.\nTrigger with phrases like \"speak error\", \"fix speak\",\n\"speak not working\", \"debug speak\", \"speak lesson failed\".\n","Read, Grep, Bash(curl:*)","main","90b50ed0778745a80fd5bfb13b1843d45b9e82f7","tests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fspeak-pack\u002Fskills\u002Fspeak-common-errors",234,"https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust","https:\u002F\u002Fgithub.com\u002FDicklesworthstone","https:\u002F\u002Fwww.jeffreyemanuel.com\u002F","Building in NY","2026-11-13 11:50:27",{"source":8,"skillName":5,"commands":64,"prompt":74,"zipAvailable":75},[65,68,71],{"tool":66,"command":67},"npx","npx skills add Dicklesworthstone\u002Fpi_agent_rust --skill speak-common-errors",{"tool":69,"command":70},"bunx","bunx skills add Dicklesworthstone\u002Fpi_agent_rust --skill speak-common-errors",{"tool":72,"command":73},"pnpm","pnpm dlx skills add Dicklesworthstone\u002Fpi_agent_rust --skill speak-common-errors","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fspeak-pack\u002Fskills\u002Fspeak-common-errors\u002FSKILL.md",true,[],[78,118,141,167,194,216],{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":82,"licenseFileUrl":83,"sourceHtmlUrl":84,"categories":85,"keywords":91,"publishedAt":45},"01M6FEGPPK0ZTKCCM0R3E3KS33","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.","Apache-2.0","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Futilities\u002Fweb-artifacts-builder\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Futilities\u002Fweb-artifacts-builder\u002FSKILL.md",[86],{"categoryNo":87,"categoryName":88,"taxonomyType":89,"taxonomyTypeDesc":90},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,36,110,111,112,113,114,115,116,117],"web artifacts builder","web","artifacts","artifacts builder","builder","frontend","css","components","react","component","routing","state management","state","shadcn","file","ui","Tools","Tailwind","html","single-file","simple","ui components","multi","for","jsx","suite",{"skillNo":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":82,"licenseFileUrl":122,"sourceHtmlUrl":123,"categories":124,"keywords":129,"publishedAt":45},"01M6FEE9VTK1W4GY21AKREJXRG","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.","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fsecurity\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fsecurity\u002Fwebapp-testing\u002FSKILL.md",[125,128],{"categoryNo":126,"categoryName":127,"taxonomyType":89,"taxonomyTypeDesc":90},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":87,"categoryName":88,"taxonomyType":89,"taxonomyTypeDesc":90},[130,131,132,97,133,134,93,42,135,136,107,137,138,139,140,30,115],"testing","webapp testing","webapp","screenshots","playwright","toolkit","browser","logs","applications","behavior","local",{"skillNo":142,"name":143,"nameZh":6,"description":144,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":145,"sourceHtmlUrl":146,"categories":147,"keywords":148,"publishedAt":45},"01M6FE20F7ZTQBFWKF4MPJ2SBX","neuropixels-analysis","Neuropixels neural recording analysis. Load SpikeGLX\u002FOpenEphys data, preprocess, motion correction, Kilosort4 spike sorting, quality metrics, Allen\u002FIBL curation, AI-assisted visual analysis, for Neuropixels 1.0\u002F2.0 extracellular electrophysiology. Use when working with neural recordings, spike sorting, extracellular electrophysiology, or when the user mentions Neuropixels, SpikeGLX, Open Ephys, Kilosort, quality metrics, or unit curation.","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fscientific\u002Fneuropixels-analysis\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fscientific\u002Fneuropixels-analysis\u002FSKILL.md",[],[149,150,151,152,153,154,155,156,36,157,158,159,160,161,162,163,30,164,165,166,115,29],"analysis","neuropixels analysis","spike","metrics","data","open","quality","user","recordings","Neural","motion","visual","quality metrics","unit","sorting","curation","recording","load",{"skillNo":168,"name":169,"nameZh":6,"description":170,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":82,"licenseFileUrl":171,"sourceHtmlUrl":172,"categories":173,"keywords":177,"publishedAt":45},"01M6FDP0PDK6F1GGX395C7625Z","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\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fskill-creator\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fskill-creator\u002FSKILL.md",[174],{"categoryNo":175,"categoryName":176,"taxonomyType":89,"taxonomyTypeDesc":90},"01JBSEEDCAT000000000000023","Skill与智能体开发",[178,179,180,181,182,183,184,185,186,187,188,189,190,191,30,115,192,29,193],"skill creator","creator","workflows","create","update","capabilities","knowledge","tool","integrations","specialized","guide","new skill","existing skill","users","Existing","new",{"skillNo":195,"name":196,"nameZh":6,"description":197,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":198,"sourceHtmlUrl":199,"categories":200,"keywords":202,"publishedAt":45},"01M6FDM8Y7VK7NYG9SM7QPA3PW","notebooklm","Use this skill to query your Google NotebookLM notebooks directly from Claude Code for source-grounded, citation-backed answers from Gemini. Browser automation, library management, persistent auth. Drastically reduced hallucinations through document-only responses.","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fnotebooklm\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fnotebooklm\u002FSKILL.md",[201],{"categoryNo":175,"categoryName":176,"taxonomyType":89,"taxonomyTypeDesc":90},[196,203,204,205,206,207,208,136,209,210,36,211,212,213,214,115,215],"google","browser automation","gemini","automation","auth","code","library","management","only","document","query","Citation","source",{"skillNo":217,"name":218,"nameZh":6,"description":219,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":82,"licenseFileUrl":220,"sourceHtmlUrl":221,"categories":222,"keywords":229,"publishedAt":45},"01M6FDHPXE10J3XGTCH5HBHS1M","slack-gif-creator","Knowledge and utilities for creating animated GIFs optimized for Slack. Provides constraints, validation tools, and animation concepts. Use when users request animated GIFs for Slack like \"make me a GIF of X doing Y for Slack.\"","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fenterprise-communication\u002Fslack-gif-creator\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fenterprise-communication\u002Fslack-gif-creator\u002FSKILL.md",[223,226],{"categoryNo":224,"categoryName":225,"taxonomyType":89,"taxonomyTypeDesc":90},"01JBSEEDCAT000000000000005","邮件与沟通",{"categoryNo":227,"categoryName":228,"taxonomyType":89,"taxonomyTypeDesc":90},"01JBSEEDCAT000000000000016","图像与多媒体",[230,231,232,179,233,108,234,235,184,36,236,191,237,238,239,115,240,29],"slack gif creator","slack","gif","validation","constraints","Animation","me","make","Utilities","concepts","request"]