[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M718KHTEK0Q5NVJFZ1J467X3":3,"skill-same:01M718KHTEK0Q5NVJFZ1J467X3":158},{"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":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":55,"commitSha":56,"skillDirectory":57,"forksCount":58,"repositoryHtmlUrl":59,"repositoryHomepageUrl":6,"ownerHtmlUrl":60,"ownerBlogUrl":61,"ownerDescription":6,"updatedAt":62,"install":63,"resources":76},"01M718KHTEK0Q5NVJFZ1J467X3","video-sdk\u002Flinux",null,"Zoom Video SDK for Linux - C++ headless bots, raw audio\u002Fvideo capture\u002Finjection, Qt\u002FGTK integration, Docker support","anthropics\u002Fknowledge-work-plugins","anthropics","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F76263028?v=4","01M697XGDPXJAVQ8391V2BCYTE","Anthropic","01M7188MPC48111TN566QNQE3X",35660,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\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],"video sdk","linux","video sdk linux","sdk","Video","capture","injection","data","integration","support","zoom","false","docker","for","c++","headless","Audio","bots","virtual","2026-11-10 10:12:30",false,"---\nname: video-sdk\u002Flinux\ndescription: \"Zoom Video SDK for Linux - C++ headless bots, raw audio\u002Fvideo capture\u002Finjection, Qt\u002FGTK integration, Docker support\"\nuser-invocable: false\ntriggers:\n- linux video sdk\n- zoom linux\n- raw data linux\n- qt zoom\n- gtk zoom\n- virtual audio linux\n---\n\n# Zoom Video SDK - Linux Development\n\nExpert guidance for developing with the Zoom Video SDK on Linux. Build headless bots, raw media capture\u002Finjection applications, and custom UI integrations with Qt\u002FGTK.\n\n**Official Documentation**: https:\u002F\u002Fdevelopers.zoom.us\u002Fdocs\u002Fvideo-sdk\u002Flinux\u002F\n**API Reference**: https:\u002F\u002Fmarketplacefront.zoom.us\u002Fsdk\u002Fcustom\u002Flinux\u002F\n**Sample Repository**: https:\u002F\u002Fgithub.com\u002Fzoom\u002Fvideosdk-linux-raw-recording-sample\n\n## Quick Links\n\n**New to Video SDK? Follow this path:**\n\n1. **[SDK Architecture Pattern](concepts\u002Fsdk-architecture-pattern.md)** - Universal 3-step pattern for ANY feature\n2. **[Session Join Pattern](examples\u002Fsession-join-pattern.md)** - Complete working code to join a session\n3. **[Raw Data vs Canvas](concepts\u002Fraw-data-vs-canvas.md)** - **CRITICAL**: Linux has NO Canvas API - raw data ONLY\n4. **[Raw Video Capture](examples\u002Fraw-video-capture.md)** - Capture and process YUV420 frames\n\n**Reference:**\n- **[Singleton Hierarchy](concepts\u002Fsingleton-hierarchy.md)** - 5-level SDK navigation map\n- **[API Reference](references\u002Flinux-reference.md)** - Complete API documentation\n- **[Qt\u002FGTK Integration](examples\u002Fqt-gtk-integration.md)** - UI framework patterns\n- **[Troubleshooting](troubleshooting\u002Fcommon-issues.md)** - Quick diagnostics\n- **[SKILL.md](SKILL.md)** - Complete documentation navigation\n\n**Having issues?**\n- PulseAudio setup → [PulseAudio Guide](troubleshooting\u002Fpulseaudio-setup.md)\n- Qt dependencies → [Qt Dependencies](troubleshooting\u002Fqt-dependencies.md)\n- Build errors → [Build Errors Guide](troubleshooting\u002Fbuild-errors.md)\n\n## Key Differences from Windows\u002FmacOS\n\n| Feature | Linux | Windows\u002FMac |\n|---------|-------|-------------|\n| **Canvas API** | ❌ Not available | ✅ Available |\n| **Raw Data Pipe** | ✅ **ONLY option** | ✅ Available |\n| **UI Integration** | Qt, GTK, SDL2, OpenGL | Win32\u002FWinForms\u002FWPF, Cocoa |\n| **Headless Support** | ✅ Excellent (Docker) | Limited |\n| **Audio** | PulseAudio required | Native |\n| **Virtual Devices** | ✅ Required for headless | Optional |\n\n## SDK Overview\n\nThe Zoom Video SDK for Linux is a C++ library optimized for:\n- **Headless Bots**: Docker\u002FWSL support, no display required\n- **Raw Data Access**: Capture YUV420 video, PCM audio\n- **Raw Data Injection**: Virtual camera\u002Fmic for custom media\n- **Screen Sharing**: Capture or inject share data\n- **Cloud Recording**: Record sessions to Zoom cloud\n- **Live Streaming**: Stream to RTMP endpoints\n- **Live Transcription**: Real-time speech-to-text\n- **Qt\u002FGTK Integration**: Full UI framework support\n\n## Prerequisites\n\n### System Requirements\n\n- **OS**: Ubuntu 20.04+, Debian 11+, or compatible\n- **Architecture**: x64 (recommended), ARM64\n- **Compiler**: GCC 9+, Clang 10+\n- **CMake**: 3.14 or later\n- **Qt5**: Bundled with SDK (do NOT install system Qt5)\n\n### Dependencies\n\n```bash\nsudo apt update\nsudo apt install -y build-essential gcc cmake libglib2.0-dev liblzma-dev \\\n    libxcb-image0 libxcb-keysyms1 libxcb-xfixes0 libxcb-xkb1 libxcb-shape0 \\\n    libxcb-shm0 libxcb-randr0 libxcb-xtest0 libgbm1 libxtst6 libgl1 libnss3 \\\n    libasound2 libpulse0\n\n# For headless Linux\nsudo apt install -y pulseaudio\n\n# PulseAudio configuration (CRITICAL for audio)\nmkdir -p ~\u002F.config\necho \"[General]\" > ~\u002F.config\u002Fzoomus.conf\necho \"system.audio.type=default\" >> ~\u002F.config\u002Fzoomus.conf\n\n# Log directory\nmkdir -p ~\u002F.zoom\u002Flogs\n```\n\n## Quick Start\n\n```cpp\n#include \"zoom_video_sdk_api.h\"\n#include \"zoom_video_sdk_interface.h\"\n#include \"zoom_video_sdk_delegate_interface.h\"\n\nUSING_ZOOM_VIDEO_SDK_NAMESPACE\n\n\u002F\u002F 1. Create SDK\nIZoomVideoSDK* sdk = CreateZoomVideoSDKObj();\n\n\u002F\u002F 2. Initialize\nZoomVideoSDKInitParams init_params;\ninit_params.domain = \"https:\u002F\u002Fzoom.us\";\ninit_params.enableLog = true;\ninit_params.logFilePrefix = \"bot\";\ninit_params.videoRawDataMemoryMode = ZoomVideoSDKRawDataMemoryModeHeap;\ninit_params.shareRawDataMemoryMode = ZoomVideoSDKRawDataMemoryModeHeap;\ninit_params.audioRawDataMemoryMode = ZoomVideoSDKRawDataMemoryModeHeap;\n\nsdk->initialize(init_params);\n\n\u002F\u002F 3. Add delegate\nsdk->addListener(myDelegate);\n\n\u002F\u002F 4. Join session\nZoomVideoSDKSessionContext ctx;\nctx.sessionName = \"my-session\";\nctx.userName = \"Linux Bot\";\nctx.token = \"jwt-token\";\nctx.audioOption.connect = true;\nctx.audioOption.mute = false;\nctx.videoOption.localVideoOn = false;\n\n\u002F\u002F For headless: Virtual audio speaker\nctx.virtualAudioSpeaker = new VirtualSpeaker();\n\nIZoomVideoSDKSession* session = sdk->joinSession(ctx);\n```\n\nSee **[Session Join Pattern](examples\u002Fsession-join-pattern.md)** for complete code.\n\n## Key Features\n\n| Feature | Linux Support | Guide |\n|---------|---------------|-------|\n| **Session Management** | ✅ Full | [Session Join](examples\u002Fsession-join-pattern.md) |\n| **Raw Video (YUV420)** | ✅ ONLY rendering option | [Raw Video](examples\u002Fraw-video-capture.md) |\n| **Raw Audio (PCM)** | ✅ Full | [Raw Audio](examples\u002Fraw-audio-capture.md) |\n| **Virtual Camera\u002FMic** | ✅ Full | [Virtual Devices](examples\u002Fvirtual-audio-video.md) |\n| **Cloud Recording** | ✅ Full | [Recording](examples\u002Fcloud-recording.md) |\n| **Live Streaming** | ✅ Full | [Live Stream](examples\u002Flive-streaming.md) |\n| **Live Transcription** | ✅ Full | [Transcription](examples\u002Ftranscription.md) |\n| **Command Channel** | ✅ Full | [Commands](examples\u002Fcommand-channel.md) |\n| **Chat** | ✅ Full | [Chat](examples\u002Fchat.md) |\n| **Qt Integration** | ✅ Recommended | [Qt\u002FGTK](examples\u002Fqt-gtk-integration.md) |\n| **GTK Integration** | ✅ Supported | [Qt\u002FGTK](examples\u002Fqt-gtk-integration.md) |\n| **Docker\u002FHeadless** | ✅ Excellent | [Virtual Devices](examples\u002Fvirtual-audio-video.md) |\n\n## Critical Gotchas\n\n### ⚠️ CRITICAL #1: No Canvas API on Linux\n\n**Problem**: Linux SDK does NOT have Canvas API like Windows\u002FMac.\n\n**Solution**: You MUST use Raw Data Pipe and implement your own rendering.\n\nSee: **[Raw Data vs Canvas](concepts\u002Fraw-data-vs-canvas.md)**\n\n### ⚠️ CRITICAL #2: PulseAudio Required for Audio\n\n**Problem**: SDK requires PulseAudio for raw audio functions.\n\n**Solution**:\n```bash\nsudo apt install -y pulseaudio\nmkdir -p ~\u002F.config\necho \"[General]\" > ~\u002F.config\u002Fzoomus.conf\necho \"system.audio.type=default\" >> ~\u002F.config\u002Fzoomus.conf\n```\n\nSee: **[PulseAudio Setup](troubleshooting\u002Fpulseaudio-setup.md)**\n\n### ⚠️ CRITICAL #3: Qt5 Dependencies\n\n**Problem**: SDK requires Qt5 libraries (bundled, NOT system Qt5).\n\n**Solution**:\n```bash\n# Copy from SDK package\ncp -r samples\u002Fqt_libs\u002FQt\u002Flib\u002F* lib\u002Fzoom_video_sdk\u002F\n\n# Create symlinks\ncd lib\u002Fzoom_video_sdk\nfor lib in libQt5*.so.5; do ln -sf $lib ${lib%.5}; done\n```\n\nSee: **[Qt Dependencies](troubleshooting\u002Fqt-dependencies.md)**\n\n### ⚠️ CRITICAL #4: Heap Memory Mode\n\nAlways use heap mode for raw data:\n\n```cpp\ninit_params.videoRawDataMemoryMode = ZoomVideoSDKRawDataMemoryModeHeap;\ninit_params.shareRawDataMemoryMode = ZoomVideoSDKRawDataMemoryModeHeap;\ninit_params.audioRawDataMemoryMode = ZoomVideoSDKRawDataMemoryModeHeap;\n```\n\n### ⚠️ CRITICAL #5: Virtual Audio for Headless\n\n**Problem**: Docker\u002Fheadless environments have no audio devices.\n\n**Solution**: Use virtual audio speaker and mic.\n\n```cpp\nsession_context.virtualAudioSpeaker = new VirtualSpeaker();\nsession_context.virtualAudioMic = new VirtualMic();\n```\n\nSee: **[Virtual Audio\u002FVideo](examples\u002Fvirtual-audio-video.md)**\n\n## Sample Repositories\n\n### Official Samples\n\n| Repository | Description |\n|-----------|-------------|\n| **[raw-recording-sample](https:\u002F\u002Fgithub.com\u002Fzoom\u002Fvideosdk-linux-raw-recording-sample)** | Raw audio\u002Fvideo capture |\n| **[qt-quickstart](https:\u002F\u002Fgithub.com\u002Ftanchunsiong\u002Fvideosdk-linux-qt-quickstart)** | Qt6 UI integration |\n| **[gtk-quickstart](https:\u002F\u002Fgithub.com\u002Ftanchunsiong\u002Fvideosdk-linux-gtk-quickstart)** | GTK3 UI integration |\n\n### Sample Architecture\n\n```\nHeadless Bot (Docker):\n┌──────────────────────────────────┐\n│  Virtual Audio Speaker\u002FMic       │\n├──────────────────────────────────┤\n│  Raw Data Processing             │\n│  - YUV420 → File\u002FStream   \n\n\n## Merged from video-sdk\u002Flinux\u002FSKILL.md\n\n# Zoom Video SDK Linux - Complete Documentation Index\n\n## Quick Start Path\n\n**If you're new to the SDK, follow this order:**\n\n1. **Read the architecture pattern** → [concepts\u002Fsdk-architecture-pattern.md](concepts\u002Fsdk-architecture-pattern.md)\n   - Universal formula: Singleton → Delegate → Subscribe\n   - Once you understand this, you can implement any feature\n\n2. **Understand Linux specifics** → [concepts\u002Fraw-data-vs-canvas.md](concepts\u002Fraw-data-vs-canvas.md)\n   - **CRITICAL**: Linux has NO Canvas API - raw data ONLY\n\n3. **Implement session join** → [examples\u002Fsession-join-pattern.md](examples\u002Fsession-join-pattern.md)\n   - Complete working JWT + session join code\n\n4. **Setup environment** → [troubleshooting\u002Fpulseaudio-setup.md](troubleshooting\u002Fpulseaudio-setup.md)\n   - PulseAudio configuration (required for audio)\n   - [troubleshooting\u002Fqt-dependencies.md](troubleshooting\u002Fqt-dependencies.md)\n   - Qt5 library setup (bundled with SDK)\n\n5. **Implement features** → Choose from examples below\n\n---\n\n## Documentation Structure\n\n```\nvideo-sdk\u002Flinux\u002F\n├── SKILL.md                          # Main skill overview\n├── SKILL.md                          # This file - navigation guide\n├── linux.md                          # Platform summary\n│\n├── concepts\u002F                         # Core architectural patterns\n│   ├── sdk-architecture-pattern.md  # Universal formula for ANY feature\n│   ├── singleton-hierarchy.md       # 5-level navigation guide\n│   └── raw-data-vs-canvas.md        # Linux-specific: raw data ONLY\n│\n├── examples\u002F                         # Complete working code\n│   ├── session-join-pattern.md      # JWT auth + session join\n│   └── command-channel.md           # Command channel with threading\n│\n├── troubleshooting\u002F                  # Problem solving guides\n│   ├── pulseaudio-setup.md          # Audio configuration\n│   ├── qt-dependencies.md           # Qt5 library setup\n│   ├── build-errors.md              # Common build issues\n│   └── common-issues.md             # Quick diagnostic workflow\n│\n└── references\u002F                       # Reference documentation\n    └── linux-reference.md           # API hierarchy, methods, error codes\n```\n\n---\n\n## By Use Case\n\n### I want to build a headless bot\n1. [SDK Architecture Pattern](concepts\u002Fsdk-architecture-pattern.md) - Understand the pattern\n2. [Session Join Pattern](examples\u002Fsession-join-pattern.md) - Join sessions\n3. [PulseAudio Setup](troubleshooting\u002Fpulseaudio-setup.md) - Configure audio\n4. [Raw Data vs Canvas](concepts\u002Fraw-data-vs-canvas.md) - Understand Linux differences\n\n### I'm getting build errors\n1. [Build Errors Guide](troubleshooting\u002Fbuild-errors.md) - SDK build issues\n2. [Qt Dependencies](troubleshooting\u002Fqt-dependencies.md) - Qt5 setup\n3. [Common Issues](troubleshooting\u002Fcommon-issues.md) - Quick diagnostics\n\n### I'm getting runtime errors\n1. [PulseAudio Setup](troubleshooting\u002Fpulseaudio-setup.md) - Audio not working\n2. [Qt Dependencies](troubleshooting\u002Fqt-dependencies.md) - Library not found\n3. [Common Issues](troubleshooting\u002Fcommon-issues.md) - Error code tables\n\n### I want to use command channel\n1. [Command Channel](examples\u002Fcommand-channel.md) - Send\u002Freceive commands\n2. [Common Issues](troubleshooting\u002Fcommon-issues.md) - Threading requirements\n\n### I want to implement a specific feature\n1. [SDK Architecture Pattern](concepts\u002Fsdk-architecture-pattern.md) - **START HERE!**\n2. [Singleton Hierarchy](concepts\u002Fsingleton-hierarchy.md) - Navigate to the feature\n3. [API Reference](references\u002Flinux-reference.md) - Method signatures\n\n---\n\n## Most Critical Documents\n\n### 1. SDK Architecture Pattern (MASTER DOCUMENT)\n**[concepts\u002Fsdk-architecture-pattern.md](concepts\u002Fsdk-architecture-pattern.md)**\n\nThe universal 3-step pattern:\n1. Get singleton (SDK, helpers, session, users)\n2. Implement delegate (event callbacks)\n3. Subscribe and use\n\n### 2. Raw Data vs Canvas (LINUX-SPECIFIC)\n**[concepts\u002Fraw-data-vs-canvas.md](concepts\u002Fraw-data-vs-canvas.md)**\n\n**CRITICAL**: Unlike Windows\u002FMac, Linux SDK has NO Canvas API. You MUST use raw data pipe.\n\n### 3. PulseAudio Setup (MOST COMMON ISSUE)\n**[troubleshooting\u002Fpulseaudio-setup.md](troubleshooting\u002Fpulseaudio-setup.md)**\n\nAudio requires PulseAudio configuration.\n\n### 4. Qt Dependencies\n**[troubleshooting\u002Fqt-dependencies.md](troubleshooting\u002Fqt-dependencies.md)**\n\nSDK requires bundled Qt5 libraries, NOT system Qt5.\n\n---\n\n## Key Learnings\n\n### Critical Discoveries:\n\n1. **Linux has NO Canvas API**\n   - Windows\u002FMac have Canvas API for SDK-rendered video\n   - Linux MUST use Raw Data Pipe\n   - See: [Raw Data vs Canvas](concepts\u002Fraw-data-vs-canvas.md)\n\n2. **PulseAudio is MANDATORY**\n   - SDK requires PulseAudio for raw audio\n   - Must configure ~\u002F.config\u002Fzoomus.conf\n   - See: [PulseAudio Setup](troubleshooting\u002Fpulseaudio-setup.md)\n\n3. **Use Bundled Qt5, NOT System Qt5**\n   - SDK includes specific Qt5 versions\n   - Copy from samples\u002Fqt_libs\u002F\n   - See: [Qt Dependencies](troubleshooting\u002Fqt-dependencies.md)\n\n4. **Helpers Control YOUR Streams Only**\n   - `videoHelper->startVideo()` starts YOUR camera\n   - To see others, subscribe to their VideoPipe\n   - See: [Singleton Hierarchy](concepts\u002Fsingleton-hierarchy.md)\n\n5. **Virtual Devices for Headless**\n   - Docker\u002Fheadless needs virtual audio speaker\u002Fmic\n   - Set before joining session\n   - See: [Session Join Pattern](examples\u002Fsession-join-pattern.md)\n\n6. **Always Use Heap Memory Mode**\n   ```cpp\n   init_params.videoRawDataMemoryMode = ZoomVideoSDKRawDataMemoryModeHeap;\n   ```\n\n7. **GLib Main Loop Required**\n   - while\u002Fsleep loops don't dispatch SDK events\n   - Must use g_main_loop_run()\n   - See: [Common Issues](troubleshooting\u002Fcommon-issues.md)\n\n8. **All SDK Calls Must Be on Main Thread**\n   - Background thread SDK calls return error 2 (Internal_Error)\n   - Use g_idle_add() to schedule on GLib main thread\n   - See: [Command Channel](examples\u002Fcommand-channel.md)\n\n9. **Command Channel is Session-Scoped**\n   - Does NOT span across different sessions\n   - Both sender and receiver must be in the same session\n   - See: [Command Channel](examples\u002Fcommand-channel.md)\n\n---\n\n## Sample Repositories\n\n- **[raw-recording-sample](https:\u002F\u002Fgithub.com\u002Fzoom\u002Fvideosdk-linux-raw-recording-sample)** - Official raw data sample\n- **[qt-quickstart](https:\u002F\u002Fgithub.com\u002Ftanchunsiong\u002Fvideosdk-linux-qt-quickstart)** - Qt6 UI integration\n- **[gtk-quickstart](https:\u002F\u002Fgithub.com\u002Ftanchunsiong\u002Fvideosdk-linux-gtk-quickstart)** - GTK3 UI integration\n\n---\n\n## Quick Reference\n\n### \"My code won't compile\"\n→ [Build Errors Guide](troubleshooting\u002Fbuild-errors.md)\n\n### \"Audio not working\"\n→ [PulseAudio Setup](troubleshooting\u002Fpulseaudio-setup.md)\n\n### \"Library not found\"\n→ [Qt Dependencies](troubleshooting\u002Fqt-dependencies.md)\n\n### \"How do I implement [feature]?\"\n→ [SDK Architecture Pattern](concepts\u002Fsdk-architecture-pattern.md)\n\n### \"What error code means what?\"\n→ [Common Issues](troubleshooting\u002Fcommon-issues.md)\n\n---\n\n## Document Version\n\nBased on **Zoom Video SDK for Linux v2.x**\n\n---\n\n**Happy coding!**\n\nRemember: The [SDK Architecture Pattern](concepts\u002Fsdk-architecture-pattern.md) is your key to unlocking the entire SDK. Read it first!\n\n## Operations\n\n- [RUNBOOK.md](RUNBOOK.md) - 5-minute preflight and debugging checklist.\n","# Zoom Video SDK - Linux Development\n\nExpert guidance for developing with the Zoom Video SDK on Linux. Build headless bots, raw media capture\u002Finjection applications, and custom UI integrations with Qt\u002FGTK.\n\n**Official Documentation**: https:\u002F\u002Fdevelopers.zoom.us\u002Fdocs\u002Fvideo-sdk\u002Flinux\u002F\n**API Reference**: https:\u002F\u002Fmarketplacefront.zoom.us\u002Fsdk\u002Fcustom\u002Flinux\u002F\n**Sample Repository**: https:\u002F\u002Fgithub.com\u002Fzoom\u002Fvideosdk-linux-raw-recording-sample\n\n## Quick Links\n\n**New to Video SDK? Follow this path:**\n\n1. **[SDK Architecture Pattern](concepts\u002Fsdk-architecture-pattern.md)** - Universal 3-step pattern for ANY feature\n2. **[Session Join Pattern](examples\u002Fsession-join-pattern.md)** - Complete working code to join a session\n3. **[Raw Data vs Canvas](concepts\u002Fraw-data-vs-canvas.md)** - **CRITICAL**: Linux has NO Canvas API - raw data ONLY\n4. **[Raw Video Capture](examples\u002Fraw-video-capture.md)** - Capture and process YUV420 frames\n\n**Reference:**\n- **[Singleton Hierarchy](concepts\u002Fsingleton-hierarchy.md)** - 5-level SDK navigation map\n- **[API Reference](references\u002Flinux-reference.md)** - Complete API documentation\n- **[Qt\u002FGTK Integration](examples\u002Fqt-gtk-integration.md)** - UI framework patterns\n- **[Troubleshooting](troubleshooting\u002Fcommon-issues.md)** - Quick diagnostics\n- **[SKILL.md](SKILL.md)** - Complete documentation navigation\n\n**Having issues?**\n- PulseAudio setup → [PulseAudio Guide](troubleshooting\u002Fpulseaudio-setup.md)\n- Qt dependencies → [Qt Dependencies](troubleshooting\u002Fqt-dependencies.md)\n- Build errors → [Build Errors Guide](troubleshooting\u002Fbuild-errors.md)\n\n## Key Differences from Windows\u002FmacOS\n\n| Feature | Linux | Windows\u002FMac |\n|---------|-------|-------------|\n| **Canvas API** | ❌ Not available | ✅ Available |\n| **Raw Data Pipe** | ✅ **ONLY option** | ✅ Available |\n| **UI Integration** | Qt, GTK, SDL2, OpenGL | Win32\u002FWinForms\u002FWPF, Cocoa |\n| **Headless Support** | ✅ Excellent (Docker) | Limited |\n| **Audio** | PulseAudio required | Native |\n| **Virtual Devices** | ✅ Required for headless | Optional |\n\n## SDK Overview\n\nThe Zoom Video SDK for Linux is a C++ library optimized for:\n- **Headless Bots**: Docker\u002FWSL support, no display required\n- **Raw Data Access**: Capture YUV420 video, PCM audio\n- **Raw Data Injection**: Virtual camera\u002Fmic for custom media\n- **Screen Sharing**: Capture or inject share data\n- **Cloud Recording**: Record sessions to Zoom cloud\n- **Live Streaming**: Stream to RTMP endpoints\n- **Live Transcription**: Real-time speech-to-text\n- **Qt\u002FGTK Integration**: Full UI framework support\n\n## Prerequisites\n\n### System Requirements\n\n- **OS**: Ubuntu 20.04+, Debian 11+, or compatible\n- **Architecture**: x64 (recommended), ARM64\n- **Compiler**: GCC 9+, Clang 10+\n- **CMake**: 3.14 or later\n- **Qt5**: Bundled with SDK (do NOT install system Qt5)\n\n### Dependencies\n\n```bash\nsudo apt update\nsudo apt install -y build-essential gcc cmake libglib2.0-dev liblzma-dev \\\n    libxcb-image0 libxcb-keysyms1 libxcb-xfixes0 libxcb-xkb1 libxcb-shape0 \\\n    libxcb-shm0 libxcb-randr0 libxcb-xtest0 libgbm1 libxtst6 libgl1 libnss3 \\\n    libasound2 libpulse0\n\n# For headless Linux\nsudo apt install -y pulseaudio\n\n# PulseAudio configuration (CRITICAL for audio)\nmkdir -p ~\u002F.config\necho \"[General]\" > ~\u002F.config\u002Fzoomus.conf\necho \"system.audio.type=default\" >> ~\u002F.config\u002Fzoomus.conf\n\n# Log directory\nmkdir -p ~\u002F.zoom\u002Flogs\n```\n\n## Quick Start\n\n```cpp\n#include \"zoom_video_sdk_api.h\"\n#include \"zoom_video_sdk_interface.h\"\n#include \"zoom_video_sdk_delegate_interface.h\"\n\nUSING_ZOOM_VIDEO_SDK_NAMESPACE\n\n\u002F\u002F 1. Create SDK\nIZoomVideoSDK* sdk = CreateZoomVideoSDKObj();\n\n\u002F\u002F 2. Initialize\nZoomVideoSDKInitParams init_params;\ninit_params.domain = \"https:\u002F\u002Fzoom.us\";\ninit_params.enableLog = true;\ninit_params.logFilePrefix = \"bot\";\ninit_params.videoRawDataMemoryMode = ZoomVideoSDKRawDataMemoryModeHeap;\ninit_params.shareRawDataMemoryMode = ZoomVideoSDKRawDataMemoryModeHeap;\ninit_params.audioRawDataMemoryMode = ZoomVideoSDKRawDataMemoryModeHeap;\n\nsdk->initialize(init_params);\n\n\u002F\u002F 3. Add delegate\nsdk->addListener(myDelegate);\n\n\u002F\u002F 4. Join session\nZoomVideoSDKSessionContext ctx;\nctx.sessionName = \"my-session\";\nctx.userName = \"Linux Bot\";\nctx.token = \"jwt-token\";\nctx.audioOption.connect = true;\nctx.audioOption.mute = false;\nctx.videoOption.localVideoOn = false;\n\n\u002F\u002F For headless: Virtual audio speaker\nctx.virtualAudioSpeaker = new VirtualSpeaker();\n\nIZoomVideoSDKSession* session = sdk->joinSession(ctx);\n```\n\nSee **[Session Join Pattern](examples\u002Fsession-join-pattern.md)** for complete code.\n\n## Key Features\n\n| Feature | Linux Support | Guide |\n|---------|---------------|-------|\n| **Session Management** | ✅ Full | [Session Join](examples\u002Fsession-join-pattern.md) |\n| **Raw Video (YUV420)** | ✅ ONLY rendering option | [Raw Video](examples\u002Fraw-video-capture.md) |\n| **Raw Audio (PCM)** | ✅ Full | [Raw Audio](examples\u002Fraw-audio-capture.md) |\n| **Virtual Camera\u002FMic** | ✅ Full | [Virtual Devices](examples\u002Fvirtual-audio-video.md) |\n| **Cloud Recording** | ✅ Full | [Recording](examples\u002Fcloud-recording.md) |\n| **Live Streaming** | ✅ Full | [Live Stream](examples\u002Flive-streaming.md) |\n| **Live Transcription** | ✅ Full | [Transcription](examples\u002Ftranscription.md) |\n| **Command Channel** | ✅ Full | [Commands](examples\u002Fcommand-channel.md) |\n| **Chat** | ✅ Full | [Chat](examples\u002Fchat.md) |\n| **Qt Integration** | ✅ Recommended | [Qt\u002FGTK](examples\u002Fqt-gtk-integration.md) |\n| **GTK Integration** | ✅ Supported | [Qt\u002FGTK](examples\u002Fqt-gtk-integration.md) |\n| **Docker\u002FHeadless** | ✅ Excellent | [Virtual Devices](examples\u002Fvirtual-audio-video.md) |\n\n## Critical Gotchas\n\n### ⚠️ CRITICAL #1: No Canvas API on Linux\n\n**Problem**: Linux SDK does NOT have Canvas API like Windows\u002FMac.\n\n**Solution**: You MUST use Raw Data Pipe and implement your own rendering.\n\nSee: **[Raw Data vs Canvas](concepts\u002Fraw-data-vs-canvas.md)**\n\n### ⚠️ CRITICAL #2: PulseAudio Required for Audio\n\n**Problem**: SDK requires PulseAudio for raw audio functions.\n\n**Solution**:\n```bash\nsudo apt install -y pulseaudio\nmkdir -p ~\u002F.config\necho \"[General]\" > ~\u002F.config\u002Fzoomus.conf\necho \"system.audio.type=default\" >> ~\u002F.config\u002Fzoomus.conf\n```\n\nSee: **[PulseAudio Setup](troubleshooting\u002Fpulseaudio-setup.md)**\n\n### ⚠️ CRITICAL #3: Qt5 Dependencies\n\n**Problem**: SDK requires Qt5 libraries (bundled, NOT system Qt5).\n\n**Solution**:\n```bash\n# Copy from SDK package\ncp -r samples\u002Fqt_libs\u002FQt\u002Flib\u002F* lib\u002Fzoom_video_sdk\u002F\n\n# Create symlinks\ncd lib\u002Fzoom_video_sdk\nfor lib in libQt5*.so.5; do ln -sf $lib ${lib%.5}; done\n```\n\nSee: **[Qt Dependencies](troubleshooting\u002Fqt-dependencies.md)**\n\n### ⚠️ CRITICAL #4: Heap Memory Mode\n\nAlways use heap mode for raw data:\n\n```cpp\ninit_params.videoRawDataMemoryMode = ZoomVideoSDKRawDataMemoryModeHeap;\ninit_params.shareRawDataMemoryMode = ZoomVideoSDKRawDataMemoryModeHeap;\ninit_params.audioRawDataMemoryMode = ZoomVideoSDKRawDataMemoryModeHeap;\n```\n\n### ⚠️ CRITICAL #5: Virtual Audio for Headless\n\n**Problem**: Docker\u002Fheadless environments have no audio devices.\n\n**Solution**: Use virtual audio speaker and mic.\n\n```cpp\nsession_context.virtualAudioSpeaker = new VirtualSpeaker();\nsession_context.virtualAudioMic = new VirtualMic();\n```\n\nSee: **[Virtual Audio\u002FVideo](examples\u002Fvirtual-audio-video.md)**\n\n## Sample Repositories\n\n### Official Samples\n\n| Repository | Description |\n|-----------|-------------|\n| **[raw-recording-sample](https:\u002F\u002Fgithub.com\u002Fzoom\u002Fvideosdk-linux-raw-recording-sample)** | Raw audio\u002Fvideo capture |\n| **[qt-quickstart](https:\u002F\u002Fgithub.com\u002Ftanchunsiong\u002Fvideosdk-linux-qt-quickstart)** | Qt6 UI integration |\n| **[gtk-quickstart](https:\u002F\u002Fgithub.com\u002Ftanchunsiong\u002Fvideosdk-linux-gtk-quickstart)** | GTK3 UI integration |\n\n### Sample Architecture\n\n```\nHeadless Bot (Docker):\n┌──────────────────────────────────┐\n│  Virtual Audio Speaker\u002FMic       │\n├──────────────────────────────────┤\n│  Raw Data Processing             │\n│  - YUV420 → File\u002FStream   \n\n\n## Merged from video-sdk\u002Flinux\u002FSKILL.md\n\n# Zoom Video SDK Linux - Complete Documentation Index\n\n## Quick Start Path\n\n**If you're new to the SDK, follow this order:**\n\n1. **Read the architecture pattern** → [concepts\u002Fsdk-architecture-pattern.md](concepts\u002Fsdk-architecture-pattern.md)\n   - Universal formula: Singleton → Delegate → Subscribe\n   - Once you understand this, you can implement any feature\n\n2. **Understand Linux specifics** → [concepts\u002Fraw-data-vs-canvas.md](concepts\u002Fraw-data-vs-canvas.md)\n   - **CRITICAL**: Linux has NO Canvas API - raw data ONLY\n\n3. **Implement session join** → [examples\u002Fsession-join-pattern.md](examples\u002Fsession-join-pattern.md)\n   - Complete working JWT + session join code\n\n4. **Setup environment** → [troubleshooting\u002Fpulseaudio-setup.md](troubleshooting\u002Fpulseaudio-setup.md)\n   - PulseAudio configuration (required for audio)\n   - [troubleshooting\u002Fqt-dependencies.md](troubleshooting\u002Fqt-dependencies.md)\n   - Qt5 library setup (bundled with SDK)\n\n5. **Implement features** → Choose from examples below\n\n---\n\n## Documentation Structure\n\n```\nvideo-sdk\u002Flinux\u002F\n├── SKILL.md                          # Main skill overview\n├── SKILL.md                          # This file - navigation guide\n├── linux.md                          # Platform summary\n│\n├── concepts\u002F                         # Core architectural patterns\n│   ├── sdk-architecture-pattern.md  # Universal formula for ANY feature\n│   ├── singleton-hierarchy.md       # 5-level navigation guide\n│   └── raw-data-vs-canvas.md        # Linux-specific: raw data ONLY\n│\n├── examples\u002F                         # Complete working code\n│   ├── session-join-pattern.md      # JWT auth + session join\n│   └── command-channel.md           # Command channel with threading\n│\n├── troubleshooting\u002F                  # Problem solving guides\n│   ├── pulseaudio-setup.md          # Audio configuration\n│   ├── qt-dependencies.md           # Qt5 library setup\n│   ├── build-errors.md              # Common build issues\n│   └── common-issues.md             # Quick diagnostic workflow\n│\n└── references\u002F                       # Reference documentation\n    └── linux-reference.md           # API hierarchy, methods, error codes\n```\n\n---\n\n## By Use Case\n\n### I want to build a headless bot\n1. [SDK Architecture Pattern](concepts\u002Fsdk-architecture-pattern.md) - Understand the pattern\n2. [Session Join Pattern](examples\u002Fsession-join-pattern.md) - Join sessions\n3. [PulseAudio Setup](troubleshooting\u002Fpulseaudio-setup.md) - Configure audio\n4. [Raw Data vs Canvas](concepts\u002Fraw-data-vs-canvas.md) - Understand Linux differences\n\n### I'm getting build errors\n1. [Build Errors Guide](troubleshooting\u002Fbuild-errors.md) - SDK build issues\n2. [Qt Dependencies](troubleshooting\u002Fqt-dependencies.md) - Qt5 setup\n3. [Common Issues](troubleshooting\u002Fcommon-issues.md) - Quick diagnostics\n\n### I'm getting runtime errors\n1. [PulseAudio Setup](troubleshooting\u002Fpulseaudio-setup.md) - Audio not working\n2. [Qt Dependencies](troubleshooting\u002Fqt-dependencies.md) - Library not found\n3. [Common Issues](troubleshooting\u002Fcommon-issues.md) - Error code tables\n\n### I want to use command channel\n1. [Command Channel](examples\u002Fcommand-channel.md) - Send\u002Freceive commands\n2. [Common Issues](troubleshooting\u002Fcommon-issues.md) - Threading requirements\n\n### I want to implement a specific feature\n1. [SDK Architecture Pattern](concepts\u002Fsdk-architecture-pattern.md) - **START HERE!**\n2. [Singleton Hierarchy](concepts\u002Fsingleton-hierarchy.md) - Navigate to the feature\n3. [API Reference](references\u002Flinux-reference.md) - Method signatures\n\n---\n\n## Most Critical Documents\n\n### 1. SDK Architecture Pattern (MASTER DOCUMENT)\n**[concepts\u002Fsdk-architecture-pattern.md](concepts\u002Fsdk-architecture-pattern.md)**\n\nThe universal 3-step pattern:\n1. Get singleton (SDK, helpers, session, users)\n2. Implement delegate (event callbacks)\n3. Subscribe and use\n\n### 2. Raw Data vs Canvas (LINUX-SPECIFIC)\n**[concepts\u002Fraw-data-vs-canvas.md](concepts\u002Fraw-data-vs-canvas.md)**\n\n**CRITICAL**: Unlike Windows\u002FMac, Linux SDK has NO Canvas API. You MUST use raw data pipe.\n\n### 3. PulseAudio Setup (MOST COMMON ISSUE)\n**[troubleshooting\u002Fpulseaudio-setup.md](troubleshooting\u002Fpulseaudio-setup.md)**\n\nAudio requires PulseAudio configuration.\n\n### 4. Qt Dependencies\n**[troubleshooting\u002Fqt-dependencies.md](troubleshooting\u002Fqt-dependencies.md)**\n\nSDK requires bundled Qt5 libraries, NOT system Qt5.\n\n---\n\n## Key Learnings\n\n### Critical Discoveries:\n\n1. **Linux has NO Canvas API**\n   - Windows\u002FMac have Canvas API for SDK-rendered video\n   - Linux MUST use Raw Data Pipe\n   - See: [Raw Data vs Canvas](concepts\u002Fraw-data-vs-canvas.md)\n\n2. **PulseAudio is MANDATORY**\n   - SDK requires PulseAudio for raw audio\n   - Must configure ~\u002F.config\u002Fzoomus.conf\n   - See: [PulseAudio Setup](troubleshooting\u002Fpulseaudio-setup.md)\n\n3. **Use Bundled Qt5, NOT System Qt5**\n   - SDK includes specific Qt5 versions\n   - Copy from samples\u002Fqt_libs\u002F\n   - See: [Qt Dependencies](troubleshooting\u002Fqt-dependencies.md)\n\n4. **Helpers Control YOUR Streams Only**\n   - `videoHelper->startVideo()` starts YOUR camera\n   - To see others, subscribe to their VideoPipe\n   - See: [Singleton Hierarchy](concepts\u002Fsingleton-hierarchy.md)\n\n5. **Virtual Devices for Headless**\n   - Docker\u002Fheadless needs virtual audio speaker\u002Fmic\n   - Set before joining session\n   - See: [Session Join Pattern](examples\u002Fsession-join-pattern.md)\n\n6. **Always Use Heap Memory Mode**\n   ```cpp\n   init_params.videoRawDataMemoryMode = ZoomVideoSDKRawDataMemoryModeHeap;\n   ```\n\n7. **GLib Main Loop Required**\n   - while\u002Fsleep loops don't dispatch SDK events\n   - Must use g_main_loop_run()\n   - See: [Common Issues](troubleshooting\u002Fcommon-issues.md)\n\n8. **All SDK Calls Must Be on Main Thread**\n   - Background thread SDK calls return error 2 (Internal_Error)\n   - Use g_idle_add() to schedule on GLib main thread\n   - See: [Command Channel](examples\u002Fcommand-channel.md)\n\n9. **Command Channel is Session-Scoped**\n   - Does NOT span across different sessions\n   - Both sender and receiver must be in the same session\n   - See: [Command Channel](examples\u002Fcommand-channel.md)\n\n---\n\n## Sample Repositories\n\n- **[raw-recording-sample](https:\u002F\u002Fgithub.com\u002Fzoom\u002Fvideosdk-linux-raw-recording-sample)** - Official raw data sample\n- **[qt-quickstart](https:\u002F\u002Fgithub.com\u002Ftanchunsiong\u002Fvideosdk-linux-qt-quickstart)** - Qt6 UI integration\n- **[gtk-quickstart](https:\u002F\u002Fgithub.com\u002Ftanchunsiong\u002Fvideosdk-linux-gtk-quickstart)** - GTK3 UI integration\n\n---\n\n## Quick Reference\n\n### \"My code won't compile\"\n→ [Build Errors Guide](troubleshooting\u002Fbuild-errors.md)\n\n### \"Audio not working\"\n→ [PulseAudio Setup](troubleshooting\u002Fpulseaudio-setup.md)\n\n### \"Library not found\"\n→ [Qt Dependencies](troubleshooting\u002Fqt-dependencies.md)\n\n### \"How do I implement [feature]?\"\n→ [SDK Architecture Pattern](concepts\u002Fsdk-architecture-pattern.md)\n\n### \"What error code means what?\"\n→ [Common Issues](troubleshooting\u002Fcommon-issues.md)\n\n---\n\n## Document Version\n\nBased on **Zoom Video SDK for Linux v2.x**\n\n---\n\n**Happy coding!**\n\nRemember: The [SDK Architecture Pattern](concepts\u002Fsdk-architecture-pattern.md) is your key to unlocking the entire SDK. Read it first!\n\n## Operations\n\n- [RUNBOOK.md](RUNBOOK.md) - 5-minute preflight and debugging checklist.\n",{"name":5,"triggers":48,"description":7,"user-invocable":44},[49,50,51,52,53,54],"linux video sdk","zoom linux","raw data linux","qt zoom","gtk zoom","virtual audio linux","main","e605d8ddbfb688da57dfaaceebd93f12a64ef1d3","partner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux",3944,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins","https:\u002F\u002Fgithub.com\u002Fanthropics","https:\u002F\u002Fanthropic.com","2026-11-14 06:21:52",{"source":8,"skillName":5,"commands":64,"prompt":74,"zipAvailable":75},[65,68,71],{"tool":66,"command":67},"npx","npx skills add anthropics\u002Fknowledge-work-plugins --skill video-sdk\u002Flinux",{"tool":69,"command":70},"bunx","bunx skills add anthropics\u002Fknowledge-work-plugins --skill video-sdk\u002Flinux",{"tool":72,"command":73},"pnpm","pnpm dlx skills add anthropics\u002Fknowledge-work-plugins --skill video-sdk\u002Flinux","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\u002FSKILL.md",true,[77,83,87,91,95,99,103,107,111,114,118,122,126,130,134,138,142,146,150,154],{"path":78,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":81,"sourceHtmlUrl":82},"concepts\u002Fraw-data-vs-canvas.md","REFERENCE","参考文档",17200,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\u002Fconcepts\u002Fraw-data-vs-canvas.md",{"path":84,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":85,"sourceHtmlUrl":86},"concepts\u002Fsdk-architecture-pattern.md",15251,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\u002Fconcepts\u002Fsdk-architecture-pattern.md",{"path":88,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":89,"sourceHtmlUrl":90},"concepts\u002Fsingleton-hierarchy.md",15367,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\u002Fconcepts\u002Fsingleton-hierarchy.md",{"path":92,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":93,"sourceHtmlUrl":94},"examples\u002Fchat.md",215,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\u002Fexamples\u002Fchat.md",{"path":96,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":97,"sourceHtmlUrl":98},"examples\u002Fcloud-recording.md",395,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\u002Fexamples\u002Fcloud-recording.md",{"path":100,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":101,"sourceHtmlUrl":102},"examples\u002Fcommand-channel.md",9973,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\u002Fexamples\u002Fcommand-channel.md",{"path":104,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":105,"sourceHtmlUrl":106},"examples\u002Flive-streaming.md",234,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\u002Fexamples\u002Flive-streaming.md",{"path":108,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":109,"sourceHtmlUrl":110},"examples\u002Fqt-gtk-integration.md",261,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\u002Fexamples\u002Fqt-gtk-integration.md",{"path":112,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":93,"sourceHtmlUrl":113},"examples\u002Fraw-audio-capture.md","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\u002Fexamples\u002Fraw-audio-capture.md",{"path":115,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":116,"sourceHtmlUrl":117},"examples\u002Fraw-video-capture.md",251,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\u002Fexamples\u002Fraw-video-capture.md",{"path":119,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":120,"sourceHtmlUrl":121},"examples\u002Fsession-join-pattern.md",21957,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\u002Fexamples\u002Fsession-join-pattern.md",{"path":123,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":124,"sourceHtmlUrl":125},"examples\u002Ftranscription.md",255,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\u002Fexamples\u002Ftranscription.md",{"path":127,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":128,"sourceHtmlUrl":129},"examples\u002Fvirtual-audio-video.md",279,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\u002Fexamples\u002Fvirtual-audio-video.md",{"path":131,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":132,"sourceHtmlUrl":133},"linux.md",26405,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\u002Flinux.md",{"path":135,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":136,"sourceHtmlUrl":137},"references\u002Flinux-reference.md",27480,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\u002Freferences\u002Flinux-reference.md",{"path":139,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":140,"sourceHtmlUrl":141},"RUNBOOK.md",2282,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\u002FRUNBOOK.md",{"path":143,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":144,"sourceHtmlUrl":145},"troubleshooting\u002Fbuild-errors.md",2074,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\u002Ftroubleshooting\u002Fbuild-errors.md",{"path":147,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":148,"sourceHtmlUrl":149},"troubleshooting\u002Fcommon-issues.md",5435,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\u002Ftroubleshooting\u002Fcommon-issues.md",{"path":151,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":152,"sourceHtmlUrl":153},"troubleshooting\u002Fpulseaudio-setup.md",1782,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\u002Ftroubleshooting\u002Fpulseaudio-setup.md",{"path":155,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":156,"sourceHtmlUrl":157},"troubleshooting\u002Fqt-dependencies.md",1986,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fvideo-sdk\u002Flinux\u002Ftroubleshooting\u002Fqt-dependencies.md",[159,185,210,232,261,287],{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":165,"publishedAt":43},"01M718Y97HCGW12Q53PSJDY03W","ticket-deflector","Reads a forwarded customer email or ticket, pulls order and refund status from a payments connector (PayPal, Square, or Stripe) or Shopify, account history from the CRM, and open tickets from a support desk (Zoho Desk), drafts a tone-matched reply in the owner's writing voice, and can issue a refund through the payments connector with explicit owner approval. With Shopify connected it also runs a proactive order-triage mode that surfaces orders needing attention — unfulfilled past the promised window, payment problems, pending refunds, stuck shipments — and drafts the next action for each before the customer has to ask. Use when the user says \"draft a response,\" \"answer this customer,\" \"where's my order,\" \"I want a refund,\" \"check my orders,\" or \"anything about to blow up.\"","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fsmall-business\u002Fskills\u002Fticket-deflector\u002FSKILL.md",[],[166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,33,182,183,184],"ticket","ticket deflector","mode","up","payments","open","writing","when","workflow","ask","Connector","text","mail","window","next","customer","crm","past","read",{"skillNo":186,"name":187,"nameZh":6,"description":188,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":189,"categories":190,"keywords":191,"publishedAt":43},"01M718Y55HFAN5705ME5VEDZ9K","tax-season-organizer","Prepares tax-season materials for the owner's accountant, not tax advice. US federal tax; a non-US business gets its closed-books packet instead. Two modes: (1) quarterly estimated tax from YTD net income in the ledger (MYOB, NetSuite, QuickBooks, Xero, or Zoho Books); (2) year-end 1099 prep, scanning the ledger, PayPal, and Stripe for contractors paid over USD 600 into a 1099-NEC list with missing W-9 flags.\nAny tax request routes first to \u002Ftax-prep, which confirms the books are closed and reconciled before running this skill. Use this skill directly only when the owner says the period's books are already closed: \"books are closed, now do the 1099s,\" \"run the quarterly estimate off the closed numbers,\" or \"just the contractor W-9 list.\"","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fsmall-business\u002Fskills\u002Ftax-season-organizer\u002FSKILL.md",[],[192,193,194,195,196,197,198,199,200,201,173,202,203,204,205,206,184,207,208,209],"tax season organizer","tax","us federal","which","netsuite","paid","end","usd","only","now","books","xero","scanning","run","request","flags","list","stripe",{"skillNo":211,"name":212,"nameZh":6,"description":213,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":214,"categories":215,"keywords":216,"publishedAt":43},"01M718Y13VVPHDD9NTDBVFJ2AZ","tax-prep","Prepares tax materials as a two-link chain — month-end-prep confirms the books are closed and reconciled first, then tax-season-organizer calculates the quarterly estimated payment or builds the year-end 1099-NEC list and accountant packet from those closed numbers. Requires a ledger (MYOB, NetSuite, QuickBooks, Xero, or Zoho Books); uses Gusto, PayPal, and Stripe when connected, else CSV upload. US federal tax math; a non-US business gets the closed-books packet. Prep material for a CPA, never tax advice, nothing filed. Trigger on \"quarterly taxes,\" \"estimated tax payment,\" \"how much should I set aside,\" \"1099s,\" \"1099-NEC,\" \"W-9s,\" \"year-end tax prep,\" \"get my books ready for my accountant,\" any phrasing that suggests a tax deadline is coming, or a question about net profit or YTD income that sounds like worry about a tax bill. An owner who says the period's books are already closed routes to tax-season-organizer directly.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fsmall-business\u002Fskills\u002Ftax-prep\u002FSKILL.md",[],[217,193,218,219,194,220,221,196,222,223,224,225,226,37,227,198,228,229,230,231],"tax prep","prep","SET","as","ready","never","zoho books","get","chain","profit","trigger","material","question","paypal","business",{"skillNo":233,"name":234,"nameZh":6,"description":235,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":236,"categories":237,"keywords":243,"publishedAt":43},"01M718XWTWQZ01GYSG9T8RW8TW","speed-to-lead","Makes sure no inbound lead goes unanswered. Watches web forms, the shared inbox, and the CRM for new inquiries, qualifies each one against the owner's criteria, drafts a reply in the owner's voice with real meeting times for the owner to approve and send, routes anything hot to a human right away, and logs the whole thing to the CRM. Never sends on its own. Built to run on a schedule so overnight inquiries are drafted and sorted by morning, and works from forwarded or pasted inquiries when no connector is available. Use this whenever the owner is worried about inbound leads or response time — including phrasings like \"leads are going cold,\" \"did anyone answer that inquiry,\" \"I keep missing form submissions,\" \"nothing falls through the cracks,\" \"handle my inbound,\" \"respond to this lead,\" or \"we lose people because nobody gets back fast enough.\" Reach for it for a single unanswered inquiry as readily as for a standing setup.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fsmall-business\u002Fskills\u002Fspeed-to-lead\u002FSKILL.md",[238],{"categoryNo":239,"categoryName":240,"taxonomyType":241,"taxonomyTypeDesc":242},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[244,245,246,247,248,249,222,250,251,252,253,254,255,256,173,257,258,176,259,260],"speed to lead","lead","speed","shared","back","cold","time","inbox","send","respond","new","web forms","people","schedule","logs","sure","human",{"skillNo":262,"name":263,"nameZh":6,"description":264,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":265,"categories":266,"keywords":270,"publishedAt":43},"01M718XQYMN1KY3TPS33967FK0","social-content-engine","Runs the owner's content operation as a standing thing rather than a one-off: keeps a rolling posting calendar, learns the owner's voice, generates on-brand Canva graphics, writes captions that sound like them, repurposes one asset into every channel format, and stages posts for approval instead of publishing on its own. Pulls product photos and prices from Shopify when connected; with no connectors, drafts the calendar and asset briefs for manual posting. Use this whenever the owner talks about posting, content, or social — including \"I need to post more,\" \"we've gone quiet on Instagram,\" \"what should we post this month,\" \"make the content,\" \"give me a month of posts,\" \"write this in my voice,\" \"repurpose this,\" or \"set up our content calendar.\" Reach for it for a single post as readily as for a full quarter. One handoff: a finished, approved campaign brief goes to canva-creator; this skill owns the standing operation.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fsmall-business\u002Fskills\u002Fsocial-content-engine\u002FSKILL.md",[267],{"categoryNo":268,"categoryName":269,"taxonomyType":241,"taxonomyTypeDesc":242},"01JBSEEDCAT000000000000036","内容创作者",[271,272,273,274,275,276,219,277,278,279,280,169,281,173,282,283,284,184,285,286],"social","social content engine","engine","content engine","social content","content","brief","posts","Captions","prices","campaign","me","product","calendar","write","drafts",{"skillNo":288,"name":289,"nameZh":6,"description":290,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":291,"categories":292,"keywords":293,"publishedAt":43},"01M718XMPJVH0EVRVP998BVZPC","smb-router","The front door to the Small Business plugin. Listens to what the owner needs right now — vague or specific — and routes them to the best skill or slash command for the moment. Also serves as a guide: explains what's available, suggests what to try next, and adapts recommendations based on stored business context. Trigger whenever the owner asks \"what can you do,\" \"help me with my business,\" \"what should I focus on,\" \"I don't know where to start,\" or any open-ended business request that doesn't clearly match a single skill.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fsmall-business\u002Fskills\u002Fsmb-router\u002FSKILL.md",[],[294,295,296,220,297,37,227,298,171,299,201,231,300,301,302,303,304,282,305,180],"router","smb","smb router","do","front","single","you","vague","can","with","plugin","focus"]