[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M718HAWJTN75Z37VG3VHPSAD":3,"skill-same:01M718HAWJTN75Z37VG3VHPSAD":73},{"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":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":53,"commitSha":54,"skillDirectory":55,"forksCount":14,"repositoryHtmlUrl":56,"repositoryHomepageUrl":6,"ownerHtmlUrl":57,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":58,"install":59,"resources":72},"01M718HAWJTN75Z37VG3VHPSAD","earllm-build",null,"Build, maintain, and extend the EarLLM One Android project — a Kotlin\u002FCompose app that connects Bluetooth earbuds to an LLM via voice pipeline.","sapsapshen\u002Fai-memory-router","sapsapshen","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F20347959?v=4","01M6XDQEF1DP50DKF37H81J3J5","shenmian","01M6XDQEJPE41Y3DT2763X8ZJN",0,"MIT","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fglobal\u002Fearllm-build\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"build","earllm build","codex","antigravity","android","codex-cli","kotlin","bluetooth","gemini","compose","extend","safe","2026","cli","code","maintain","pipeline","project","community","app","2026-11-10 10:12:30",false,"---\nname: earllm-build\ndescription: \"Build, maintain, and extend the EarLLM One Android project — a Kotlin\u002FCompose app that connects Bluetooth earbuds to an LLM via voice pipeline.\"\nrisk: safe\nsource: community\ndate_added: '2026-03-06'\nauthor: renat\ntags:\n- android\n- kotlin\n- bluetooth\n- llm\n- voice\ntools:\n- claude-code\n- antigravity\n- cursor\n- gemini-cli\n- codex-cli\n---\n\n# EarLLM One — Build & Maintain\n\n## Overview\n\nBuild, maintain, and extend the EarLLM One Android project — a Kotlin\u002FCompose app that connects Bluetooth earbuds to an LLM via voice pipeline.\n\n## When to Use This Skill\n\n- When the user mentions \"earllm\" or related topics\n- When the user mentions \"earbudllm\" or related topics\n- When the user mentions \"earbud app\" or related topics\n- When the user mentions \"voice pipeline kotlin\" or related topics\n- When the user mentions \"bluetooth audio android\" or related topics\n- When the user mentions \"sco microphone\" or related topics\n\n## Do Not Use This Skill When\n\n- The task is unrelated to earllm build\n- A simpler, more specific tool can handle the request\n- The user needs general-purpose assistance without domain expertise\n\n## How It Works\n\nEarLLM One is a multi-module Android app (Kotlin + Jetpack Compose) that captures voice from Bluetooth earbuds, transcribes it, sends it to an LLM, and speaks the response back.\n\n## Project Location\n\n`C:\\Users\\renat\\earbudllm`\n\n## Module Dependency Graph\n\n```\napp ──→ voice ──→ audio ──→ core-logging\n  │       │\n  ├──→ bluetooth ──→ core-logging\n  └──→ llm ──→ core-logging\n```\n\n## Modules And Key Files\n\n| Module | Purpose | Key Files |\n|--------|---------|-----------|\n| **core-logging** | Structured logging, performance tracking | `EarLogger.kt`, `PerformanceTracker.kt` |\n| **bluetooth** | BT discovery, pairing, A2DP\u002FHFP profiles | `BluetoothController.kt`, `BluetoothState.kt`, `BluetoothPermissions.kt` |\n| **audio** | Audio routing (SCO\u002FBLE), capture, headset buttons | `AudioRouteController.kt`, `VoiceCaptureController.kt`, `HeadsetButtonController.kt` |\n| **voice** | STT (SpeechRecognizer + Vosk stub), TTS, pipeline | `SpeechToTextController.kt`, `TextToSpeechController.kt`, `VoicePipeline.kt` |\n| **llm** | LLM interface, stub, OpenAI-compatible client | `LlmClient.kt`, `StubLlmClient.kt`, `RealLlmClient.kt`, `SecureTokenStore.kt` |\n| **app** | UI, ViewModel, Service, Settings, all screens | `MainViewModel.kt`, `EarLlmForegroundService.kt`, 6 Compose screens |\n\n## Build Configuration\n\n- **SDK**: minSdk 26, targetSdk 34, compileSdk 34\n- **Build tools**: AGP 8.2.2, Kotlin 1.9.22, Gradle 8.5\n- **Compose BOM**: 2024.02.00\n- **Key deps**: OkHttp, AndroidX Security (EncryptedSharedPreferences), DataStore, Media\n\n## Target Hardware\n\n| Device | Model | Key Details |\n|--------|-------|-------------|\n| Phone | Samsung Galaxy S24 Ultra | Android 14, One UI 6.1, Snapdragon 8 Gen 3 |\n| Earbuds | Xiaomi Redmi Buds 6 Pro | BT 5.3, A2DP\u002FHFP\u002FAVRCP, ANC, LDAC |\n\n## Critical Technical Facts\n\nThese are verified facts from official documentation and device testing. Treat them as ground truth when making decisions:\n\n1. **Bluetooth SCO is limited to 8kHz mono input** on most devices. Some support 16kHz mSBC. BLE Audio (Android 12+, `TYPE_BLE_HEADSET = 26`) supports up to 32kHz stereo. Always prefer BLE Audio when available.\n\n2. **`startBluetoothSco()` is deprecated since Android 12 (API 31).** Use `AudioManager.setCommunicationDevice(AudioDeviceInfo)` and `clearCommunicationDevice()` instead. The project already implements both paths in `AudioRouteController.kt`.\n\n3. **Samsung One UI 7\u002F8 has a known HFP corruption bug** where A2DP playback corrupts the SCO link. The app handles this with silence detection and automatic fallback to the phone's built-in mic.\n\n4. **Redmi Buds 6 Pro tap controls must be set to \"Default\" (Play\u002FPause)** in the Xiaomi Earbuds companion app. If set to ANC or custom functions, events are handled internally by the earbuds and never reach Android.\n\n5. **Android 14+ requires `FOREGROUND_SERVICE_MICROPHONE` permission** and `foregroundServiceType=\"microphone\"` in the service declaration. `RECORD_AUDIO` must be granted before `startForeground()`.\n\n6. **`VOICE_COMMUNICATION` audio source enables AEC** (Acoustic Echo Cancellation), which is critical to prevent TTS audio output from feeding back into the STT microphone input. Never change this source without understanding the echo implications.\n\n7. **Never play TTS (A2DP) while simultaneously recording via SCO.** The correct sequence is: stop playback → switch to HFP → record → switch to A2DP → play response.\n\n## Data Flow\n\n```\nHeadset button tap\n  → MediaSession (HeadsetButtonController)\n  → TapAction.RECORD_TOGGLE\n  → VoicePipeline.toggleRecording()\n  → VoiceCaptureController captures PCM (16kHz mono)\n  → stopRecording() returns ByteArray\n  → SpeechToTextController.transcribe(pcmData)\n  → LlmClient.chat(messages)\n  → TextToSpeechController.speak(response)\n  → Audio output via A2DP to earbuds\n```\n\n## Adding A New Feature\n\n1. Identify which module(s) are affected\n2. Read existing code in those modules first\n3. Follow the StateFlow pattern — expose state via `MutableStateFlow` \u002F `StateFlow`\n4. Update `MainViewModel.kt` if the feature needs UI integration\n5. Add unit tests in the module's `src\u002Ftest\u002F` directory\n6. Update docs if the feature changes behavior\n\n## Modifying Audio Capture\n\n- `VoiceCaptureController.kt` handles PCM recording at 16kHz mono\n- WAV headers use hex byte values (not char literals) to avoid shell quoting issues\n- VU meter: RMS calculation → dB conversion → normalized 0-1 range\n- Buffer size: `getMinBufferSize().coerceAtLeast(4096)`\n\n## Changing Bluetooth Behavior\n\n- `BluetoothController.kt` manages discovery, pairing, profile proxies\n- Earbuds detection uses name heuristics: \"buds\", \"earbuds\", \"tws\", \"pods\", \"ear\"\n- Always handle both Bluetooth Classic and BLE Audio paths\n\n## Modifying The Llm Integration\n\n- `LlmClient.kt` defines the interface — keep it generic\n- `StubLlmClient.kt` for offline testing (500ms simulated delay)\n- `RealLlmClient.kt` uses OkHttp to call OpenAI-compatible APIs\n- API keys stored in `SecureTokenStore.kt` (EncryptedSharedPreferences)\n\n## Generating A Build Artifact\n\nAfter code changes, regenerate the ZIP:\n```powershell\n\n## From Project Root\n\npowershell -Command \"Remove-Item 'EarLLM_One_v1.0.zip' -Force -ErrorAction SilentlyContinue; Compress-Archive -Path (Get-ChildItem -Exclude '*.zip','_zip_verify','.git') -DestinationPath 'EarLLM_One_v1.0.zip' -Force\"\n```\n\n## Running Tests\n\n```bash\n.\u002Fgradlew test --stacktrace          # Unit tests\n.\u002Fgradlew connectedAndroidTest       # Instrumented tests (device required)\n```\n\n## Phase 2 Roadmap\n\n- Real-time streaming voice conversation with LLM through earbuds\n- Smart assistant: categorize speech into meetings, shopping lists, memos, emails\n- Vosk offline STT integration (currently stubbed)\n- Wake-word detection to avoid keeping SCO open continuously\n- Streaming TTS (Android built-in TTS does NOT support streaming)\n\n## Stt Engine Reference\n\n| Engine | Size | WER | Streaming | Best For |\n|--------|------|-----|-----------|----------|\n| Vosk small-en | 40 MB | ~10% | Yes | Real-time mobile |\n| Vosk lgraph | 128 MB | ~8% | Yes | Better accuracy |\n| Whisper tiny | 40 MB | ~10-12% | No (batch) | Post-utterance polish |\n| Android SpeechRecognizer | 0 MB | varies | Yes | Online, no extra deps |\n\n## Best Practices\n\n- Provide clear, specific context about your project and requirements\n- Review all suggestions before applying them to production code\n- Combine with other complementary skills for comprehensive analysis\n\n## Common Pitfalls\n\n- Using this skill for tasks outside its domain expertise\n- Applying recommendations without understanding your specific context\n- Not providing enough project context for accurate analysis\n","# EarLLM One — Build & Maintain\n\n## Overview\n\nBuild, maintain, and extend the EarLLM One Android project — a Kotlin\u002FCompose app that connects Bluetooth earbuds to an LLM via voice pipeline.\n\n## When to Use This Skill\n\n- When the user mentions \"earllm\" or related topics\n- When the user mentions \"earbudllm\" or related topics\n- When the user mentions \"earbud app\" or related topics\n- When the user mentions \"voice pipeline kotlin\" or related topics\n- When the user mentions \"bluetooth audio android\" or related topics\n- When the user mentions \"sco microphone\" or related topics\n\n## Do Not Use This Skill When\n\n- The task is unrelated to earllm build\n- A simpler, more specific tool can handle the request\n- The user needs general-purpose assistance without domain expertise\n\n## How It Works\n\nEarLLM One is a multi-module Android app (Kotlin + Jetpack Compose) that captures voice from Bluetooth earbuds, transcribes it, sends it to an LLM, and speaks the response back.\n\n## Project Location\n\n`C:\\Users\\renat\\earbudllm`\n\n## Module Dependency Graph\n\n```\napp ──→ voice ──→ audio ──→ core-logging\n  │       │\n  ├──→ bluetooth ──→ core-logging\n  └──→ llm ──→ core-logging\n```\n\n## Modules And Key Files\n\n| Module | Purpose | Key Files |\n|--------|---------|-----------|\n| **core-logging** | Structured logging, performance tracking | `EarLogger.kt`, `PerformanceTracker.kt` |\n| **bluetooth** | BT discovery, pairing, A2DP\u002FHFP profiles | `BluetoothController.kt`, `BluetoothState.kt`, `BluetoothPermissions.kt` |\n| **audio** | Audio routing (SCO\u002FBLE), capture, headset buttons | `AudioRouteController.kt`, `VoiceCaptureController.kt`, `HeadsetButtonController.kt` |\n| **voice** | STT (SpeechRecognizer + Vosk stub), TTS, pipeline | `SpeechToTextController.kt`, `TextToSpeechController.kt`, `VoicePipeline.kt` |\n| **llm** | LLM interface, stub, OpenAI-compatible client | `LlmClient.kt`, `StubLlmClient.kt`, `RealLlmClient.kt`, `SecureTokenStore.kt` |\n| **app** | UI, ViewModel, Service, Settings, all screens | `MainViewModel.kt`, `EarLlmForegroundService.kt`, 6 Compose screens |\n\n## Build Configuration\n\n- **SDK**: minSdk 26, targetSdk 34, compileSdk 34\n- **Build tools**: AGP 8.2.2, Kotlin 1.9.22, Gradle 8.5\n- **Compose BOM**: 2024.02.00\n- **Key deps**: OkHttp, AndroidX Security (EncryptedSharedPreferences), DataStore, Media\n\n## Target Hardware\n\n| Device | Model | Key Details |\n|--------|-------|-------------|\n| Phone | Samsung Galaxy S24 Ultra | Android 14, One UI 6.1, Snapdragon 8 Gen 3 |\n| Earbuds | Xiaomi Redmi Buds 6 Pro | BT 5.3, A2DP\u002FHFP\u002FAVRCP, ANC, LDAC |\n\n## Critical Technical Facts\n\nThese are verified facts from official documentation and device testing. Treat them as ground truth when making decisions:\n\n1. **Bluetooth SCO is limited to 8kHz mono input** on most devices. Some support 16kHz mSBC. BLE Audio (Android 12+, `TYPE_BLE_HEADSET = 26`) supports up to 32kHz stereo. Always prefer BLE Audio when available.\n\n2. **`startBluetoothSco()` is deprecated since Android 12 (API 31).** Use `AudioManager.setCommunicationDevice(AudioDeviceInfo)` and `clearCommunicationDevice()` instead. The project already implements both paths in `AudioRouteController.kt`.\n\n3. **Samsung One UI 7\u002F8 has a known HFP corruption bug** where A2DP playback corrupts the SCO link. The app handles this with silence detection and automatic fallback to the phone's built-in mic.\n\n4. **Redmi Buds 6 Pro tap controls must be set to \"Default\" (Play\u002FPause)** in the Xiaomi Earbuds companion app. If set to ANC or custom functions, events are handled internally by the earbuds and never reach Android.\n\n5. **Android 14+ requires `FOREGROUND_SERVICE_MICROPHONE` permission** and `foregroundServiceType=\"microphone\"` in the service declaration. `RECORD_AUDIO` must be granted before `startForeground()`.\n\n6. **`VOICE_COMMUNICATION` audio source enables AEC** (Acoustic Echo Cancellation), which is critical to prevent TTS audio output from feeding back into the STT microphone input. Never change this source without understanding the echo implications.\n\n7. **Never play TTS (A2DP) while simultaneously recording via SCO.** The correct sequence is: stop playback → switch to HFP → record → switch to A2DP → play response.\n\n## Data Flow\n\n```\nHeadset button tap\n  → MediaSession (HeadsetButtonController)\n  → TapAction.RECORD_TOGGLE\n  → VoicePipeline.toggleRecording()\n  → VoiceCaptureController captures PCM (16kHz mono)\n  → stopRecording() returns ByteArray\n  → SpeechToTextController.transcribe(pcmData)\n  → LlmClient.chat(messages)\n  → TextToSpeechController.speak(response)\n  → Audio output via A2DP to earbuds\n```\n\n## Adding A New Feature\n\n1. Identify which module(s) are affected\n2. Read existing code in those modules first\n3. Follow the StateFlow pattern — expose state via `MutableStateFlow` \u002F `StateFlow`\n4. Update `MainViewModel.kt` if the feature needs UI integration\n5. Add unit tests in the module's `src\u002Ftest\u002F` directory\n6. Update docs if the feature changes behavior\n\n## Modifying Audio Capture\n\n- `VoiceCaptureController.kt` handles PCM recording at 16kHz mono\n- WAV headers use hex byte values (not char literals) to avoid shell quoting issues\n- VU meter: RMS calculation → dB conversion → normalized 0-1 range\n- Buffer size: `getMinBufferSize().coerceAtLeast(4096)`\n\n## Changing Bluetooth Behavior\n\n- `BluetoothController.kt` manages discovery, pairing, profile proxies\n- Earbuds detection uses name heuristics: \"buds\", \"earbuds\", \"tws\", \"pods\", \"ear\"\n- Always handle both Bluetooth Classic and BLE Audio paths\n\n## Modifying The Llm Integration\n\n- `LlmClient.kt` defines the interface — keep it generic\n- `StubLlmClient.kt` for offline testing (500ms simulated delay)\n- `RealLlmClient.kt` uses OkHttp to call OpenAI-compatible APIs\n- API keys stored in `SecureTokenStore.kt` (EncryptedSharedPreferences)\n\n## Generating A Build Artifact\n\nAfter code changes, regenerate the ZIP:\n```powershell\n\n## From Project Root\n\npowershell -Command \"Remove-Item 'EarLLM_One_v1.0.zip' -Force -ErrorAction SilentlyContinue; Compress-Archive -Path (Get-ChildItem -Exclude '*.zip','_zip_verify','.git') -DestinationPath 'EarLLM_One_v1.0.zip' -Force\"\n```\n\n## Running Tests\n\n```bash\n.\u002Fgradlew test --stacktrace          # Unit tests\n.\u002Fgradlew connectedAndroidTest       # Instrumented tests (device required)\n```\n\n## Phase 2 Roadmap\n\n- Real-time streaming voice conversation with LLM through earbuds\n- Smart assistant: categorize speech into meetings, shopping lists, memos, emails\n- Vosk offline STT integration (currently stubbed)\n- Wake-word detection to avoid keeping SCO open continuously\n- Streaming TTS (Android built-in TTS does NOT support streaming)\n\n## Stt Engine Reference\n\n| Engine | Size | WER | Streaming | Best For |\n|--------|------|-----|-----------|----------|\n| Vosk small-en | 40 MB | ~10% | Yes | Real-time mobile |\n| Vosk lgraph | 128 MB | ~8% | Yes | Better accuracy |\n| Whisper tiny | 40 MB | ~10-12% | No (batch) | Post-utterance polish |\n| Android SpeechRecognizer | 0 MB | varies | Yes | Online, no extra deps |\n\n## Best Practices\n\n- Provide clear, specific context about your project and requirements\n- Review all suggestions before applying them to production code\n- Combine with other complementary skills for comprehensive analysis\n\n## Common Pitfalls\n\n- Using this skill for tasks outside its domain expertise\n- Applying recommendations without understanding your specific context\n- Not providing enough project context for accurate analysis\n",{"name":5,"risk":30,"tags":44,"tools":47,"author":51,"source":37,"date_added":52,"description":7},[23,25,26,45,46],"llm","voice",[48,22,49,50,24],"claude-code","cursor","gemini-cli","renat","2026-03-06","main","7a38d8e7073e61c16eda85681cb32fb68a8657a5","skills-store\u002Fglobal\u002Fearllm-build","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router","https:\u002F\u002Fgithub.com\u002Fsapsapshen","2026-04-14 21:12:12",{"source":8,"skillName":5,"commands":60,"prompt":70,"zipAvailable":71},[61,64,67],{"tool":62,"command":63},"npx","npx skills add sapsapshen\u002Fai-memory-router --skill earllm-build",{"tool":65,"command":66},"bunx","bunx skills add sapsapshen\u002Fai-memory-router --skill earllm-build",{"tool":68,"command":69},"pnpm","pnpm dlx skills add sapsapshen\u002Fai-memory-router --skill earllm-build","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fglobal\u002Fearllm-build\u002FSKILL.md",true,[],[74,98,124,134,147,165],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":85,"publishedAt":39},"01M71ATQRKG48SH06FQ697T5G9","wechat-search","Search WeChat Official Account articles using OpenClaw's web search and fetch capabilities with compliance-focused design.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fwechat-search-release\u002FSKILL.md",[80],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[86,87,88,89,90,91,92,93,94,95,96,97],"wechat search","wechat","search","capabilities","openclaw","design","web search","compliance","web","official","fetch","with",{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":39},"01M71ATNAVGZB35PFYM2GC5N00","trend-tap","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend tap', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-tap\u002FSKILL.md",[],[105,106,107,108,109,110,88,111,112,113,114,115,116,117,118,119,120,121,122,123],"trend","trend tap","tap","api keys","Bash","time","trending","hacker","aggregator","do","when","brew","live","data","google","install","read","across","api",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":130,"publishedAt":39},"01M71ATJ9AM5KM15AA8PS302EB","trend-radar","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend pulse', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-radar\u002FSKILL.md",[],[131,132,105,116,117,118,119,109,88,121,133,122,123,115,113,112,111,120,110,108],"trend radar","radar","pulse",{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":140,"publishedAt":39},"01M71ATGF095N3EJM9G8SD0BB5","tech-news-daily","每日科技新闻汇——从全球多个 RSS 源抓取最新科技新闻，翻译（英→中）、去重、排版成每日简报。当用户询问科技新闻、科技新鲜事、每日科技、技术动态、Daily Tech News 或类似表达时触发此技能。","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftech-news-daily\u002FSKILL.md",[],[141,142,143,144,145,146],"news","tech","tech news daily","daily","rss","翻译",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":158,"publishedAt":39},"01M71ATFAEAMQ17M70NQNY7SR8","summarize","Summarize URLs or files with the summarize CLI (web, PDFs, images, audio, YouTube).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsummarize\u002FSKILL.md",[153],{"categoryNo":154,"categoryName":155,"taxonomyType":156,"taxonomyTypeDesc":157},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",[149,94,159,32,160,97,116,161,162,163,107,164,120],"Audio","youtube","images","https","files","pdfs",{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":171,"publishedAt":39},"01M71ATDNS3R0M4H936PACQAWZ","sonoscli","Control Sonos speakers (discover\u002Fstatus\u002Fplay\u002Fvolume\u002Fgroup).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsonoscli\u002FSKILL.md",[],[167,172,173,174,120,175,162,176,177,178,179,180],"status","play","go","latest","github","discover","control","cmd","volume"]