[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KVTDBR9Q484QB6CYJGXT2Y":3,"skill-same:01M6KVTDBR9Q484QB6CYJGXT2Y":82},{"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":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":54,"ownerHtmlUrl":55,"ownerBlogUrl":56,"ownerDescription":6,"updatedAt":57,"install":58,"resources":71},"01M6KVTDBR9Q484QB6CYJGXT2Y","adk-streaming",null,"Building voice and video agents with Gemini Live API — bidirectional streaming via WebSocket, LiveRequestQueue, run_live(), RunConfig, and audio\u002Fvideo patterns. Load when the user wants a voice agent, live agent, or real-time audio\u002Fvideo capabilities.","Folken2\u002Fnuvel","Folken2","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F175213316?v=4","01M6KVPA04RKNPCC04H2G96FAS","Albert Folch","01M6KVPA43VNTA4PXSEB1TCD81",2,"MIT","https:\u002F\u002Fgithub.com\u002FFolken2\u002Fnuvel\u002Fblob\u002Fmain\u002Fnuvel\u002Fbackends\u002Fadk\u002Fskills\u002Fadk-streaming\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],"adk","adk streaming","streaming","voice","gemini","load","with","via","voice agent","live","time","patterns","run","Audio","Video","api","real-time","websocket","gemini live api","capabilities","2026-11-10 10:12:30",false,"---\nname: adk-streaming\ndescription: >-\n  Building voice and video agents with Gemini Live API — bidirectional\n  streaming via WebSocket, LiveRequestQueue, run_live(), RunConfig, and\n  audio\u002Fvideo patterns. Load when the user wants a voice agent, live\n  agent, or real-time audio\u002Fvideo capabilities.\n---\n\n# ADK Streaming — Voice & Video Agents\n\nBuild real-time voice and video agents using ADK's bidirectional streaming\nwith the Gemini Live API.\n\n## When to Use\n\nThe user explicitly asks for:\n- Voice agent \u002F voice assistant\n- Live agent \u002F real-time agent\n- Audio\u002Fvideo capabilities\n- Conversational agent with speech\n\n## Architecture\n\n```\nBrowser (mic\u002Fcam) → WebSocket \u002Fws\u002F{user_id}\u002F{session_id}\n    ↓ upstream_task\nLiveRequestQueue (text: send_content, audio: send_realtime)\n    ↓\nRunner.run_live() ←→ Gemini Live API (BIDI mode)\n    ↓ downstream_task\nWebSocket → Browser (audio playback + transcriptions)\n```\n\n## Key Components\n\n| Component | Purpose |\n|-----------|---------|\n| `LiveRequestQueue` | Async FIFO buffer between WebSocket and agent. One per session. |\n| `Runner.run_live()` | Async generator consuming from queue, yielding events |\n| `RunConfig(streaming_mode=StreamingMode.BIDI)` | Configures BIDI mode for Live API |\n| `StreamingMode.BIDI` | WebSocket to Gemini Live API (audio\u002Fvideo) |\n| `StreamingMode.SSE` | HTTP streaming to standard Gemini API (text only) |\n\n## Template Integration\n\nThe generated template includes streaming support gated behind `STREAMING_ENABLED=true`:\n\n1. `streaming.py` — WebSocket handler with upstream\u002Fdownstream tasks\n2. `run_adk.py` — conditional branch that builds Runner manually with `LIVE_MODEL`\n3. `static\u002Ftest_client.html` — minimal browser test client\n4. `config\u002Fllm.py` — `LIVE_MODEL` config (Gemini model string, not LiteLLM)\n\n## Design Decisions for Streaming Agents\n\nWhen designing a streaming agent:\n\n1. **Model**: Must use Gemini directly (`LIVE_MODEL`), not OpenRouter\u002FLiteLLM\n2. **API Key**: Requires `GOOGLE_API_KEY` (not `OPENROUTER_API_KEY`)\n3. **Tools work during streams**: Agent can call FunctionTools mid-conversation\n4. **VAD**: Automatic by default — no manual activity signals needed\n5. **Transcription**: Enable both input and output transcription for logging\n6. **Session resumption**: Enable for connection recovery\n\n## Customization Points\n\nWhen generating a streaming agent, customize these in `streaming.py`:\n\n- **Voice**: Add `speech_config` to `RunConfig` for voice selection\n- **Language**: Set `language_code` in speech config\n- **VAD mode**: Disable auto VAD for push-to-talk UIs\n- **Video**: Add video modality to `response_modalities`\n- **Audio format**: Default is PCM 16kHz input, 24kHz output\n\nLoad references for details on each customization.\n\n## References\n\n- Load `streaming-patterns` for RunConfig options, VAD modes, voice selection, and audio format details.\n- Load `live-api-reference` for LiveRequestQueue API, event types, and error handling.\n","# ADK Streaming — Voice & Video Agents\n\nBuild real-time voice and video agents using ADK's bidirectional streaming\nwith the Gemini Live API.\n\n## When to Use\n\nThe user explicitly asks for:\n- Voice agent \u002F voice assistant\n- Live agent \u002F real-time agent\n- Audio\u002Fvideo capabilities\n- Conversational agent with speech\n\n## Architecture\n\n```\nBrowser (mic\u002Fcam) → WebSocket \u002Fws\u002F{user_id}\u002F{session_id}\n    ↓ upstream_task\nLiveRequestQueue (text: send_content, audio: send_realtime)\n    ↓\nRunner.run_live() ←→ Gemini Live API (BIDI mode)\n    ↓ downstream_task\nWebSocket → Browser (audio playback + transcriptions)\n```\n\n## Key Components\n\n| Component | Purpose |\n|-----------|---------|\n| `LiveRequestQueue` | Async FIFO buffer between WebSocket and agent. One per session. |\n| `Runner.run_live()` | Async generator consuming from queue, yielding events |\n| `RunConfig(streaming_mode=StreamingMode.BIDI)` | Configures BIDI mode for Live API |\n| `StreamingMode.BIDI` | WebSocket to Gemini Live API (audio\u002Fvideo) |\n| `StreamingMode.SSE` | HTTP streaming to standard Gemini API (text only) |\n\n## Template Integration\n\nThe generated template includes streaming support gated behind `STREAMING_ENABLED=true`:\n\n1. `streaming.py` — WebSocket handler with upstream\u002Fdownstream tasks\n2. `run_adk.py` — conditional branch that builds Runner manually with `LIVE_MODEL`\n3. `static\u002Ftest_client.html` — minimal browser test client\n4. `config\u002Fllm.py` — `LIVE_MODEL` config (Gemini model string, not LiteLLM)\n\n## Design Decisions for Streaming Agents\n\nWhen designing a streaming agent:\n\n1. **Model**: Must use Gemini directly (`LIVE_MODEL`), not OpenRouter\u002FLiteLLM\n2. **API Key**: Requires `GOOGLE_API_KEY` (not `OPENROUTER_API_KEY`)\n3. **Tools work during streams**: Agent can call FunctionTools mid-conversation\n4. **VAD**: Automatic by default — no manual activity signals needed\n5. **Transcription**: Enable both input and output transcription for logging\n6. **Session resumption**: Enable for connection recovery\n\n## Customization Points\n\nWhen generating a streaming agent, customize these in `streaming.py`:\n\n- **Voice**: Add `speech_config` to `RunConfig` for voice selection\n- **Language**: Set `language_code` in speech config\n- **VAD mode**: Disable auto VAD for push-to-talk UIs\n- **Video**: Add video modality to `response_modalities`\n- **Audio format**: Default is PCM 16kHz input, 24kHz output\n\nLoad references for details on each customization.\n\n## References\n\n- Load `streaming-patterns` for RunConfig options, VAD modes, voice selection, and audio format details.\n- Load `live-api-reference` for LiveRequestQueue API, event types, and error handling.\n",{"name":5,"description":7},"main","41d246dd855999c6bc4be528bc8d0d1b10ac8c47","nuvel\u002Fbackends\u002Fadk\u002Fskills\u002Fadk-streaming",1,"https:\u002F\u002Fgithub.com\u002FFolken2\u002Fnuvel","https:\u002F\u002Ffolken2.github.io\u002Fnuvel\u002F","https:\u002F\u002Fgithub.com\u002FFolken2","folch.ai","2026-11-05 22:40:38",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add Folken2\u002Fnuvel --skill adk-streaming",{"tool":64,"command":65},"bunx","bunx skills add Folken2\u002Fnuvel --skill adk-streaming",{"tool":67,"command":68},"pnpm","pnpm dlx skills add Folken2\u002Fnuvel --skill adk-streaming","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FFolken2\u002Fnuvel\u002Fblob\u002Fmain\u002Fnuvel\u002Fbackends\u002Fadk\u002Fskills\u002Fadk-streaming\u002FSKILL.md",true,[72,78],{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"references\u002Flive-api-reference.md","REFERENCE","参考文档",2803,"https:\u002F\u002Fgithub.com\u002FFolken2\u002Fnuvel\u002Fblob\u002Fmain\u002Fnuvel\u002Fbackends\u002Fadk\u002Fskills\u002Fadk-streaming\u002Freferences\u002Flive-api-reference.md",{"path":79,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":80,"sourceHtmlUrl":81},"references\u002Fstreaming-patterns.md",3074,"https:\u002F\u002Fgithub.com\u002FFolken2\u002Fnuvel\u002Fblob\u002Fmain\u002Fnuvel\u002Fbackends\u002Fadk\u002Fskills\u002Fadk-streaming\u002Freferences\u002Fstreaming-patterns.md",[83,92,107,137,153,169],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":89,"publishedAt":44},"01M6KVZNJQ7AVMVBS205404CS7","greet","Greet a user warmly by name.","https:\u002F\u002Fgithub.com\u002FFolken2\u002Fnuvel\u002Fblob\u002Fmain\u002Ftests\u002Ftest_agent_plugins\u002Ffixtures\u002Fvalid-full\u002Fskills\u002Fgreet\u002FSKILL.md",[],[85,90,91],"user","name",{"skillNo":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":101,"publishedAt":44},"01M6KVZHYK2C9S5GRM3PZAFDXG","hello","A simple hello skill that survives a broken mcp.json.","https:\u002F\u002Fgithub.com\u002FFolken2\u002Fnuvel\u002Fblob\u002Fmain\u002Ftests\u002Ftest_agent_plugins\u002Ffixtures\u002Fbad-mcp\u002Fskills\u002Fhello\u002FSKILL.md",[98],{"categoryNo":99,"categoryName":100,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[94,102,103,104,105,106],"MCP","hello skill","json","broken","simple",{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":122,"publishedAt":44},"01M6KVZC94REQZ852EJ99ZXATK","grok-workflows","Prompt templates and workflows for using xAI GrokBot with Nuvel — code, design, research, and automated pipelines.","https:\u002F\u002Fgithub.com\u002FFolken2\u002Fnuvel\u002Fblob\u002Fmain\u002Fplugins\u002Fgrokbot-plugin\u002Fskills\u002Fgrok-workflows\u002FSKILL.md",[113,116,117],{"categoryNo":114,"categoryName":115,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":99,"categoryName":100,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":118,"categoryName":119,"taxonomyType":120,"taxonomyTypeDesc":121},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[123,124,125,126,127,128,129,130,131,132,133,134,30,135,136],"workflows","grok","grok workflows","design","research","prompt","prompt templates","code","templates","xai","grokbot","pipelines","for","nuvel",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":143,"publishedAt":44},"01M6KVZ7BA5MJ1N614MTP2JXCQ","grok-setup","Configure xAI GrokBot with Nuvel API integration and project context for Nuvel-aligned development.","https:\u002F\u002Fgithub.com\u002FFolken2\u002Fnuvel\u002Fblob\u002Fmain\u002Fplugins\u002Fgrokbot-plugin\u002Fskills\u002Fgrok-setup\u002FSKILL.md",[],[124,144,145,135,30,146,136,147,148,149,133,150,151,39,132,152],"grok setup","setup","project","project context","api integration","configure","development","integration","context",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":160,"publishedAt":44},"01M6KVZ3WYQ6V6XVCRE77WT2WY","cursor-setup","Configure Cursor IDE with Nuvel rules, MCP server integration, and project settings for OrgMemory-aware development.","https:\u002F\u002Fgithub.com\u002FFolken2\u002Fnuvel\u002Fblob\u002Fmain\u002Fplugins\u002Fcursor-plugin\u002Fskills\u002Fcursor-setup\u002FSKILL.md",[159],{"categoryNo":99,"categoryName":100,"taxonomyType":21,"taxonomyTypeDesc":22},[161,162,145,151,102,163,150,164,165,149,166,167,146,30,135,168,136],"cursor","cursor setup","mcp server","server","ide","Rules","settings","project settings",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":175,"publishedAt":44},"01M6KVZ0GGSJM4AC8PK7G53H85","cursor-review","Use Cursor IDE with Nuvel OrgMemory to review changes — diff analysis, standards checking, and pre-commit review.","https:\u002F\u002Fgithub.com\u002FFolken2\u002Fnuvel\u002Fblob\u002Fmain\u002Fplugins\u002Fcursor-plugin\u002Fskills\u002Fcursor-review\u002FSKILL.md",[],[176,161,177,178,179,180,181,165,182,183,184,30,185,186,136],"cursor review","review","commit","review changes","pre-commit","analysis","use","diff","standards","changes","diff analysis"]