[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F9RKZRBD2T52BC6DH7DSDX":3,"skill-same:01M6F9RKZRBD2T52BC6DH7DSDX":80},{"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":57,"commitSha":58,"skillDirectory":59,"forksCount":60,"repositoryHtmlUrl":61,"repositoryHomepageUrl":62,"ownerHtmlUrl":63,"ownerBlogUrl":6,"ownerDescription":64,"updatedAt":65,"install":66,"resources":79},"01M6F9RKZRBD2T52BC6DH7DSDX","deepgram-core-workflow-b",null,"Implement real-time streaming transcription with Deepgram WebSocket.\nUse when building live transcription, voice interfaces,\nreal-time captioning, or voice AI applications.\nTrigger: \"deepgram streaming\", \"real-time transcription\", \"live transcription\",\n\"websocket transcription\", \"voice streaming\", \"deepgram live\".","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fdeepgram-core-workflow-b\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"workflow","deepgram core workflow b","deepgram","core","write","openclaw","trigger","io","live","time","use","edit","code","read","Bash","applications","saas","real-time","websocket","streaming","2026-11-10 10:12:30",false,"---\nname: deepgram-core-workflow-b\ndescription: |\n  Implement real-time streaming transcription with Deepgram WebSocket.\n  Use when building live transcription, voice interfaces,\n  real-time captioning, or voice AI applications.\n  Trigger: \"deepgram streaming\", \"real-time transcription\", \"live transcription\",\n  \"websocket transcription\", \"voice streaming\", \"deepgram live\".\nallowed-tools: Read, Write, Edit, Bash(npm:*), Bash(pip:*), Grep\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ncompatible-with: claude-code, codex, openclaw\ntags: [saas, deepgram, voice-ai, transcription, streaming, websocket]\n\n---\n# Deepgram Core Workflow B: Live Streaming Transcription\n\n## Overview\nReal-time streaming transcription using Deepgram's WebSocket API. The SDK manages the WebSocket connection via `listen.live()`. Covers microphone capture, interim\u002Ffinal result handling, speaker diarization, UtteranceEnd detection, auto-reconnect, and building an SSE endpoint for browser clients.\n\n## Prerequisites\n- `@deepgram\u002Fsdk` installed, `DEEPGRAM_API_KEY` configured\n- Audio source: microphone (via Sox\u002F`rec`), file stream, or WebSocket audio from browser\n- For mic capture: `sox` installed (`apt install sox` \u002F `brew install sox`)\n\n## Instructions\n\n### Step 1: Basic Live Transcription\n\n```typescript\nimport { createClient, LiveTranscriptionEvents } from '@deepgram\u002Fsdk';\n\nconst deepgram = createClient(process.env.DEEPGRAM_API_KEY!);\n\nconst connection = deepgram.listen.live({\n  model: 'nova-3',\n  language: 'en',\n  smart_format: true,\n  punctuate: true,\n  interim_results: true,      \u002F\u002F Show in-progress results\n  utterance_end_ms: 1000,     \u002F\u002F Silence threshold for utterance end\n  vad_events: true,           \u002F\u002F Voice activity detection events\n  encoding: 'linear16',       \u002F\u002F 16-bit PCM\n  sample_rate: 16000,         \u002F\u002F 16 kHz\n  channels: 1,                \u002F\u002F Mono\n});\n\n\u002F\u002F Connection lifecycle events\nconnection.on(LiveTranscriptionEvents.Open, () => {\n  console.log('WebSocket connected to Deepgram');\n});\n\nconnection.on(LiveTranscriptionEvents.Close, () => {\n  console.log('WebSocket closed');\n});\n\nconnection.on(LiveTranscriptionEvents.Error, (err) => {\n  console.error('Deepgram error:', err);\n});\n\n\u002F\u002F Transcript events\nconnection.on(LiveTranscriptionEvents.Transcript, (data) => {\n  const transcript = data.channel.alternatives[0]?.transcript;\n  if (!transcript) return;\n\n  if (data.is_final) {\n    console.log(`[FINAL] ${transcript}`);\n  } else {\n    process.stdout.write(`\\r[interim] ${transcript}`);\n  }\n});\n\n\u002F\u002F UtteranceEnd — fires when speaker pauses\nconnection.on(LiveTranscriptionEvents.UtteranceEnd, () => {\n  console.log('\\n--- utterance end ---');\n});\n```\n\n### Step 2: Microphone Capture with Sox\n\n```typescript\nimport { spawn } from 'child_process';\n\nfunction startMicrophone(connection: any) {\n  \u002F\u002F Sox captures from default mic: 16kHz, 16-bit signed LE, mono\n  const mic = spawn('rec', [\n    '-q',              \u002F\u002F Quiet (no progress)\n    '-r', '16000',     \u002F\u002F Sample rate\n    '-e', 'signed',    \u002F\u002F Encoding\n    '-b', '16',        \u002F\u002F Bit depth\n    '-c', '1',         \u002F\u002F Mono\n    '-t', 'raw',       \u002F\u002F Raw PCM output\n    '-',               \u002F\u002F Output to stdout\n  ]);\n\n  mic.stdout.on('data', (chunk: Buffer) => {\n    if (connection.getReadyState() === 1) {  \u002F\u002F WebSocket.OPEN\n      connection.send(chunk);\n    }\n  });\n\n  mic.on('error', (err) => {\n    console.error('Microphone error:', err.message);\n    console.log('Install sox: apt install sox \u002F brew install sox');\n  });\n\n  return mic;\n}\n\n\u002F\u002F Usage\nconst mic = startMicrophone(connection);\n\n\u002F\u002F Graceful shutdown\nprocess.on('SIGINT', () => {\n  mic.kill();\n  connection.finish();  \u002F\u002F Sends CloseStream message, waits for final results\n  setTimeout(() => process.exit(0), 2000);\n});\n```\n\n### Step 3: Live Diarization\n\n```typescript\nconst connection = deepgram.listen.live({\n  model: 'nova-3',\n  smart_format: true,\n  diarize: true,\n  interim_results: false,  \u002F\u002F Only final for cleaner diarization\n  utterance_end_ms: 1500,\n  encoding: 'linear16',\n  sample_rate: 16000,\n  channels: 1,\n});\n\nconnection.on(LiveTranscriptionEvents.Transcript, (data) => {\n  if (!data.is_final) return;\n\n  const words = data.channel.alternatives[0]?.words ?? [];\n  if (words.length === 0) return;\n\n  \u002F\u002F Group consecutive words by speaker\n  let currentSpeaker = words[0].speaker;\n  let segment = '';\n\n  for (const word of words) {\n    if (word.speaker !== currentSpeaker) {\n      console.log(`Speaker ${currentSpeaker}: ${segment.trim()}`);\n      currentSpeaker = word.speaker;\n      segment = '';\n    }\n    segment += ` ${word.punctuated_word ?? word.word}`;\n  }\n  console.log(`Speaker ${currentSpeaker}: ${segment.trim()}`);\n});\n```\n\n### Step 4: Auto-Reconnect with Backoff\n\n```typescript\nclass ReconnectingLiveTranscription {\n  private client: ReturnType\u003Ctypeof createClient>;\n  private connection: any = null;\n  private reconnectAttempts = 0;\n  private maxReconnectAttempts = 10;\n  private baseDelay = 1000;\n\n  constructor(apiKey: string, private options: Record\u003Cstring, any>) {\n    this.client = createClient(apiKey);\n  }\n\n  connect() {\n    this.connection = this.client.listen.live(this.options);\n\n    this.connection.on(LiveTranscriptionEvents.Open, () => {\n      console.log('Connected');\n      this.reconnectAttempts = 0;  \u002F\u002F Reset on success\n    });\n\n    this.connection.on(LiveTranscriptionEvents.Close, () => {\n      this.scheduleReconnect();\n    });\n\n    this.connection.on(LiveTranscriptionEvents.Error, (err: Error) => {\n      console.error('Connection error:', err.message);\n      this.scheduleReconnect();\n    });\n\n    return this.connection;\n  }\n\n  private scheduleReconnect() {\n    if (this.reconnectAttempts >= this.maxReconnectAttempts) {\n      console.error('Max reconnection attempts reached');\n      return;\n    }\n    const delay = this.baseDelay * Math.pow(2, this.reconnectAttempts)\n      + Math.random() * 1000;  \u002F\u002F Jitter\n    this.reconnectAttempts++;\n    console.log(`Reconnecting in ${Math.round(delay)}ms (attempt ${this.reconnectAttempts})`);\n    setTimeout(() => this.connect(), delay);\n  }\n\n  send(chunk: Buffer) {\n    if (this.connection?.getReadyState() === 1) {\n      this.connection.send(chunk);\n    }\n  }\n\n  close() {\n    this.maxReconnectAttempts = 0;  \u002F\u002F Prevent reconnect\n    this.connection?.finish();\n  }\n}\n```\n\n### Step 5: SSE Endpoint for Browser Clients\n\n```typescript\nimport express from 'express';\nimport { createClient, LiveTranscriptionEvents } from '@deepgram\u002Fsdk';\n\nconst app = express();\n\napp.get('\u002Fapi\u002Ftranscribe\u002Fstream', (req, res) => {\n  res.setHeader('Content-Type', 'text\u002Fevent-stream');\n  res.setHeader('Cache-Control', 'no-cache');\n  res.setHeader('Connection', 'keep-alive');\n\n  const deepgram = createClient(process.env.DEEPGRAM_API_KEY!);\n  const connection = deepgram.listen.live({\n    model: 'nova-3',\n    smart_format: true,\n    interim_results: true,\n    encoding: 'linear16',\n    sample_rate: 16000,\n    channels: 1,\n  });\n\n  connection.on(LiveTranscriptionEvents.Transcript, (data) => {\n    const transcript = data.channel.alternatives[0]?.transcript;\n    if (transcript) {\n      res.write(`data: ${JSON.stringify({\n        transcript,\n        is_final: data.is_final,\n        speech_final: data.speech_final,\n      })}\\n\\n`);\n    }\n  });\n\n  \u002F\u002F Client provides audio via a paired WebSocket (see browser setup)\n  req.on('close', () => {\n    connection.finish();\n  });\n});\n```\n\n### Step 6: KeepAlive for Long Sessions\n\n```typescript\n\u002F\u002F Deepgram closes idle connections after ~10s of no audio.\n\u002F\u002F Send KeepAlive messages during silence periods.\nconnection.on(LiveTranscriptionEvents.Open, () => {\n  const keepAliveInterval = setInterval(() => {\n    if (connection.getReadyState() === 1) {\n      connection.keepAlive();\n    }\n  }, 8000);  \u002F\u002F Every 8 seconds\n\n  connection.on(LiveTranscriptionEvents.Close, () => {\n    clearInterval(keepAliveInterval);\n  });\n});\n```\n\n## Output\n- Live WebSocket transcription with interim\u002Ffinal results\n- Microphone capture pipeline (Sox -> Deepgram)\n- Speaker diarization in streaming mode\n- Auto-reconnect with exponential backoff and jitter\n- SSE endpoint for browser integration\n- KeepAlive handling for long sessions\n\n## Error Handling\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| WebSocket closes immediately | Invalid API key or bad encoding params | Check key, verify `encoding`\u002F`sample_rate` match audio |\n| No transcripts received | Audio not being sent or wrong format | Verify `connection.send(chunk)` is called with raw PCM |\n| High latency | Network congestion | Use `interim_results: true` for perceived speed |\n| `rec` command not found | Sox not installed | `apt install sox` or `brew install sox` |\n| Connection drops after 10s | No audio + no KeepAlive | Send `connection.keepAlive()` every 8s |\n| Garbled output | Sample rate mismatch | Ensure audio sample rate matches `sample_rate` option |\n\n## Resources\n- [Live Streaming Audio](https:\u002F\u002Fdevelopers.deepgram.com\u002Fdocs\u002Flive-streaming-audio)\n- [Streaming API Reference](https:\u002F\u002Fdevelopers.deepgram.com\u002Freference\u002Fspeech-to-text\u002Flisten-streaming)\n- [End of Speech Detection](https:\u002F\u002Fdevelopers.deepgram.com\u002Fdocs\u002Funderstanding-end-of-speech-detection)\n- [SDK LiveTranscriptionEvents](https:\u002F\u002Fgithub.com\u002Fdeepgram\u002Fdeepgram-js-sdk)\n\n## Next Steps\nProceed to `deepgram-data-handling` for transcript processing and storage patterns.\n\n","# Deepgram Core Workflow B: Live Streaming Transcription\n\n## Overview\nReal-time streaming transcription using Deepgram's WebSocket API. The SDK manages the WebSocket connection via `listen.live()`. Covers microphone capture, interim\u002Ffinal result handling, speaker diarization, UtteranceEnd detection, auto-reconnect, and building an SSE endpoint for browser clients.\n\n## Prerequisites\n- `@deepgram\u002Fsdk` installed, `DEEPGRAM_API_KEY` configured\n- Audio source: microphone (via Sox\u002F`rec`), file stream, or WebSocket audio from browser\n- For mic capture: `sox` installed (`apt install sox` \u002F `brew install sox`)\n\n## Instructions\n\n### Step 1: Basic Live Transcription\n\n```typescript\nimport { createClient, LiveTranscriptionEvents } from '@deepgram\u002Fsdk';\n\nconst deepgram = createClient(process.env.DEEPGRAM_API_KEY!);\n\nconst connection = deepgram.listen.live({\n  model: 'nova-3',\n  language: 'en',\n  smart_format: true,\n  punctuate: true,\n  interim_results: true,      \u002F\u002F Show in-progress results\n  utterance_end_ms: 1000,     \u002F\u002F Silence threshold for utterance end\n  vad_events: true,           \u002F\u002F Voice activity detection events\n  encoding: 'linear16',       \u002F\u002F 16-bit PCM\n  sample_rate: 16000,         \u002F\u002F 16 kHz\n  channels: 1,                \u002F\u002F Mono\n});\n\n\u002F\u002F Connection lifecycle events\nconnection.on(LiveTranscriptionEvents.Open, () => {\n  console.log('WebSocket connected to Deepgram');\n});\n\nconnection.on(LiveTranscriptionEvents.Close, () => {\n  console.log('WebSocket closed');\n});\n\nconnection.on(LiveTranscriptionEvents.Error, (err) => {\n  console.error('Deepgram error:', err);\n});\n\n\u002F\u002F Transcript events\nconnection.on(LiveTranscriptionEvents.Transcript, (data) => {\n  const transcript = data.channel.alternatives[0]?.transcript;\n  if (!transcript) return;\n\n  if (data.is_final) {\n    console.log(`[FINAL] ${transcript}`);\n  } else {\n    process.stdout.write(`\\r[interim] ${transcript}`);\n  }\n});\n\n\u002F\u002F UtteranceEnd — fires when speaker pauses\nconnection.on(LiveTranscriptionEvents.UtteranceEnd, () => {\n  console.log('\\n--- utterance end ---');\n});\n```\n\n### Step 2: Microphone Capture with Sox\n\n```typescript\nimport { spawn } from 'child_process';\n\nfunction startMicrophone(connection: any) {\n  \u002F\u002F Sox captures from default mic: 16kHz, 16-bit signed LE, mono\n  const mic = spawn('rec', [\n    '-q',              \u002F\u002F Quiet (no progress)\n    '-r', '16000',     \u002F\u002F Sample rate\n    '-e', 'signed',    \u002F\u002F Encoding\n    '-b', '16',        \u002F\u002F Bit depth\n    '-c', '1',         \u002F\u002F Mono\n    '-t', 'raw',       \u002F\u002F Raw PCM output\n    '-',               \u002F\u002F Output to stdout\n  ]);\n\n  mic.stdout.on('data', (chunk: Buffer) => {\n    if (connection.getReadyState() === 1) {  \u002F\u002F WebSocket.OPEN\n      connection.send(chunk);\n    }\n  });\n\n  mic.on('error', (err) => {\n    console.error('Microphone error:', err.message);\n    console.log('Install sox: apt install sox \u002F brew install sox');\n  });\n\n  return mic;\n}\n\n\u002F\u002F Usage\nconst mic = startMicrophone(connection);\n\n\u002F\u002F Graceful shutdown\nprocess.on('SIGINT', () => {\n  mic.kill();\n  connection.finish();  \u002F\u002F Sends CloseStream message, waits for final results\n  setTimeout(() => process.exit(0), 2000);\n});\n```\n\n### Step 3: Live Diarization\n\n```typescript\nconst connection = deepgram.listen.live({\n  model: 'nova-3',\n  smart_format: true,\n  diarize: true,\n  interim_results: false,  \u002F\u002F Only final for cleaner diarization\n  utterance_end_ms: 1500,\n  encoding: 'linear16',\n  sample_rate: 16000,\n  channels: 1,\n});\n\nconnection.on(LiveTranscriptionEvents.Transcript, (data) => {\n  if (!data.is_final) return;\n\n  const words = data.channel.alternatives[0]?.words ?? [];\n  if (words.length === 0) return;\n\n  \u002F\u002F Group consecutive words by speaker\n  let currentSpeaker = words[0].speaker;\n  let segment = '';\n\n  for (const word of words) {\n    if (word.speaker !== currentSpeaker) {\n      console.log(`Speaker ${currentSpeaker}: ${segment.trim()}`);\n      currentSpeaker = word.speaker;\n      segment = '';\n    }\n    segment += ` ${word.punctuated_word ?? word.word}`;\n  }\n  console.log(`Speaker ${currentSpeaker}: ${segment.trim()}`);\n});\n```\n\n### Step 4: Auto-Reconnect with Backoff\n\n```typescript\nclass ReconnectingLiveTranscription {\n  private client: ReturnType\u003Ctypeof createClient>;\n  private connection: any = null;\n  private reconnectAttempts = 0;\n  private maxReconnectAttempts = 10;\n  private baseDelay = 1000;\n\n  constructor(apiKey: string, private options: Record\u003Cstring, any>) {\n    this.client = createClient(apiKey);\n  }\n\n  connect() {\n    this.connection = this.client.listen.live(this.options);\n\n    this.connection.on(LiveTranscriptionEvents.Open, () => {\n      console.log('Connected');\n      this.reconnectAttempts = 0;  \u002F\u002F Reset on success\n    });\n\n    this.connection.on(LiveTranscriptionEvents.Close, () => {\n      this.scheduleReconnect();\n    });\n\n    this.connection.on(LiveTranscriptionEvents.Error, (err: Error) => {\n      console.error('Connection error:', err.message);\n      this.scheduleReconnect();\n    });\n\n    return this.connection;\n  }\n\n  private scheduleReconnect() {\n    if (this.reconnectAttempts >= this.maxReconnectAttempts) {\n      console.error('Max reconnection attempts reached');\n      return;\n    }\n    const delay = this.baseDelay * Math.pow(2, this.reconnectAttempts)\n      + Math.random() * 1000;  \u002F\u002F Jitter\n    this.reconnectAttempts++;\n    console.log(`Reconnecting in ${Math.round(delay)}ms (attempt ${this.reconnectAttempts})`);\n    setTimeout(() => this.connect(), delay);\n  }\n\n  send(chunk: Buffer) {\n    if (this.connection?.getReadyState() === 1) {\n      this.connection.send(chunk);\n    }\n  }\n\n  close() {\n    this.maxReconnectAttempts = 0;  \u002F\u002F Prevent reconnect\n    this.connection?.finish();\n  }\n}\n```\n\n### Step 5: SSE Endpoint for Browser Clients\n\n```typescript\nimport express from 'express';\nimport { createClient, LiveTranscriptionEvents } from '@deepgram\u002Fsdk';\n\nconst app = express();\n\napp.get('\u002Fapi\u002Ftranscribe\u002Fstream', (req, res) => {\n  res.setHeader('Content-Type', 'text\u002Fevent-stream');\n  res.setHeader('Cache-Control', 'no-cache');\n  res.setHeader('Connection', 'keep-alive');\n\n  const deepgram = createClient(process.env.DEEPGRAM_API_KEY!);\n  const connection = deepgram.listen.live({\n    model: 'nova-3',\n    smart_format: true,\n    interim_results: true,\n    encoding: 'linear16',\n    sample_rate: 16000,\n    channels: 1,\n  });\n\n  connection.on(LiveTranscriptionEvents.Transcript, (data) => {\n    const transcript = data.channel.alternatives[0]?.transcript;\n    if (transcript) {\n      res.write(`data: ${JSON.stringify({\n        transcript,\n        is_final: data.is_final,\n        speech_final: data.speech_final,\n      })}\\n\\n`);\n    }\n  });\n\n  \u002F\u002F Client provides audio via a paired WebSocket (see browser setup)\n  req.on('close', () => {\n    connection.finish();\n  });\n});\n```\n\n### Step 6: KeepAlive for Long Sessions\n\n```typescript\n\u002F\u002F Deepgram closes idle connections after ~10s of no audio.\n\u002F\u002F Send KeepAlive messages during silence periods.\nconnection.on(LiveTranscriptionEvents.Open, () => {\n  const keepAliveInterval = setInterval(() => {\n    if (connection.getReadyState() === 1) {\n      connection.keepAlive();\n    }\n  }, 8000);  \u002F\u002F Every 8 seconds\n\n  connection.on(LiveTranscriptionEvents.Close, () => {\n    clearInterval(keepAliveInterval);\n  });\n});\n```\n\n## Output\n- Live WebSocket transcription with interim\u002Ffinal results\n- Microphone capture pipeline (Sox -> Deepgram)\n- Speaker diarization in streaming mode\n- Auto-reconnect with exponential backoff and jitter\n- SSE endpoint for browser integration\n- KeepAlive handling for long sessions\n\n## Error Handling\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| WebSocket closes immediately | Invalid API key or bad encoding params | Check key, verify `encoding`\u002F`sample_rate` match audio |\n| No transcripts received | Audio not being sent or wrong format | Verify `connection.send(chunk)` is called with raw PCM |\n| High latency | Network congestion | Use `interim_results: true` for perceived speed |\n| `rec` command not found | Sox not installed | `apt install sox` or `brew install sox` |\n| Connection drops after 10s | No audio + no KeepAlive | Send `connection.keepAlive()` every 8s |\n| Garbled output | Sample rate mismatch | Ensure audio sample rate matches `sample_rate` option |\n\n## Resources\n- [Live Streaming Audio](https:\u002F\u002Fdevelopers.deepgram.com\u002Fdocs\u002Flive-streaming-audio)\n- [Streaming API Reference](https:\u002F\u002Fdevelopers.deepgram.com\u002Freference\u002Fspeech-to-text\u002Flisten-streaming)\n- [End of Speech Detection](https:\u002F\u002Fdevelopers.deepgram.com\u002Fdocs\u002Funderstanding-end-of-speech-detection)\n- [SDK LiveTranscriptionEvents](https:\u002F\u002Fgithub.com\u002Fdeepgram\u002Fdeepgram-js-sdk)\n\n## Next Steps\nProceed to `deepgram-data-handling` for transcript processing and storage patterns.\n\n",{"name":5,"tags":49,"author":52,"license":15,"version":53,"description":54,"allowed-tools":55,"compatible-with":56},[40,26,50,51,43,42],"voice-ai","transcription","Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Implement real-time streaming transcription with Deepgram WebSocket.\nUse when building live transcription, voice interfaces,\nreal-time captioning, or voice AI applications.\nTrigger: \"deepgram streaming\", \"real-time transcription\", \"live transcription\",\n\"websocket transcription\", \"voice streaming\", \"deepgram live\".\n","Read, Write, Edit, Bash(npm:*), Bash(pip:*), Grep","claude-code, codex, openclaw","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fdeepgram-core-workflow-b",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":67,"prompt":77,"zipAvailable":78},[68,71,74],{"tool":69,"command":70},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill deepgram-core-workflow-b",{"tool":72,"command":73},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill deepgram-core-workflow-b",{"tool":75,"command":76},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill deepgram-core-workflow-b","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fdeepgram-core-workflow-b\u002FSKILL.md",true,[],[81,91,101,110,116,123],{"skillNo":82,"name":83,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":87,"publishedAt":44},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[86],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[88,89,90],"model","model hierarchy","model hierarchy skill",{"skillNo":92,"name":93,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":97,"publishedAt":44},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[96],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[98,99,100],"MCP","zoom","zoom mcp",{"skillNo":102,"name":103,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":44},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[107,108,109,99],"sdk","zoom apps sdk","apps",{"skillNo":111,"name":112,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":115,"publishedAt":44},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[112],{"skillNo":117,"name":118,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":122,"publishedAt":44},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[121],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[118],{"skillNo":124,"name":125,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":128,"publishedAt":44},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[125]]