[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6XEMV9YKQR56YP4DC25MHGZ":3,"skill-same:01M6XEMV9YKQR56YP4DC25MHGZ":62},{"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":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":14,"repositoryHtmlUrl":45,"repositoryHomepageUrl":6,"ownerHtmlUrl":46,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":47,"install":48,"resources":61},"01M6XEMV9YKQR56YP4DC25MHGZ","azure-eventhub-py",null,"Azure Event Hubs SDK for Python streaming. Use for high-throughput event ingestion, producers, consumers, and checkpointing.","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\u002Fcopilot\u002Fazure-eventhub-py\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"azure","azure eventhub py","high-throughput","2026","checkpointing","unknown","for","high","event","throughput","azure event hubs","python","community","ingestion","use","streaming","sdk","2026-11-10 10:12:30",false,"---\nname: azure-eventhub-py\ndescription: Azure Event Hubs SDK for Python streaming. Use for high-throughput event ingestion, producers, consumers, and checkpointing.\nrisk: unknown\nsource: community\ndate_added: '2026-02-27'\n---\n\n# Azure Event Hubs SDK for Python\n\nBig data streaming platform for high-throughput event ingestion.\n\n## Installation\n\n```bash\npip install azure-eventhub azure-identity\n# For checkpointing with blob storage\npip install azure-eventhub-checkpointstoreblob-aio\n```\n\n## Environment Variables\n\n```bash\nEVENT_HUB_FULLY_QUALIFIED_NAMESPACE=\u003Cnamespace>.servicebus.windows.net\nEVENT_HUB_NAME=my-eventhub\nSTORAGE_ACCOUNT_URL=https:\u002F\u002F\u003Caccount>.blob.core.windows.net\nCHECKPOINT_CONTAINER=checkpoints\n```\n\n## Authentication\n\n```python\nfrom azure.identity import DefaultAzureCredential\nfrom azure.eventhub import EventHubProducerClient, EventHubConsumerClient\n\ncredential = DefaultAzureCredential()\nnamespace = \"\u003Cnamespace>.servicebus.windows.net\"\neventhub_name = \"my-eventhub\"\n\n# Producer\nproducer = EventHubProducerClient(\n    fully_qualified_namespace=namespace,\n    eventhub_name=eventhub_name,\n    credential=credential\n)\n\n# Consumer\nconsumer = EventHubConsumerClient(\n    fully_qualified_namespace=namespace,\n    eventhub_name=eventhub_name,\n    consumer_group=\"$Default\",\n    credential=credential\n)\n```\n\n## Client Types\n\n| Client | Purpose |\n|--------|---------|\n| `EventHubProducerClient` | Send events to Event Hub |\n| `EventHubConsumerClient` | Receive events from Event Hub |\n| `BlobCheckpointStore` | Track consumer progress |\n\n## Send Events\n\n```python\nfrom azure.eventhub import EventHubProducerClient, EventData\nfrom azure.identity import DefaultAzureCredential\n\nproducer = EventHubProducerClient(\n    fully_qualified_namespace=\"\u003Cnamespace>.servicebus.windows.net\",\n    eventhub_name=\"my-eventhub\",\n    credential=DefaultAzureCredential()\n)\n\nwith producer:\n    # Create batch (handles size limits)\n    event_data_batch = producer.create_batch()\n    \n    for i in range(10):\n        try:\n            event_data_batch.add(EventData(f\"Event {i}\"))\n        except ValueError:\n            # Batch is full, send and create new one\n            producer.send_batch(event_data_batch)\n            event_data_batch = producer.create_batch()\n            event_data_batch.add(EventData(f\"Event {i}\"))\n    \n    # Send remaining\n    producer.send_batch(event_data_batch)\n```\n\n### Send to Specific Partition\n\n```python\n# By partition ID\nevent_data_batch = producer.create_batch(partition_id=\"0\")\n\n# By partition key (consistent hashing)\nevent_data_batch = producer.create_batch(partition_key=\"user-123\")\n```\n\n## Receive Events\n\n### Simple Receive\n\n```python\nfrom azure.eventhub import EventHubConsumerClient\n\ndef on_event(partition_context, event):\n    print(f\"Partition: {partition_context.partition_id}\")\n    print(f\"Data: {event.body_as_str()}\")\n    partition_context.update_checkpoint(event)\n\nconsumer = EventHubConsumerClient(\n    fully_qualified_namespace=\"\u003Cnamespace>.servicebus.windows.net\",\n    eventhub_name=\"my-eventhub\",\n    consumer_group=\"$Default\",\n    credential=DefaultAzureCredential()\n)\n\nwith consumer:\n    consumer.receive(\n        on_event=on_event,\n        starting_position=\"-1\",  # Beginning of stream\n    )\n```\n\n### With Blob Checkpoint Store (Production)\n\n```python\nfrom azure.eventhub import EventHubConsumerClient\nfrom azure.eventhub.extensions.checkpointstoreblob import BlobCheckpointStore\nfrom azure.identity import DefaultAzureCredential\n\ncheckpoint_store = BlobCheckpointStore(\n    blob_account_url=\"https:\u002F\u002F\u003Caccount>.blob.core.windows.net\",\n    container_name=\"checkpoints\",\n    credential=DefaultAzureCredential()\n)\n\nconsumer = EventHubConsumerClient(\n    fully_qualified_namespace=\"\u003Cnamespace>.servicebus.windows.net\",\n    eventhub_name=\"my-eventhub\",\n    consumer_group=\"$Default\",\n    credential=DefaultAzureCredential(),\n    checkpoint_store=checkpoint_store\n)\n\ndef on_event(partition_context, event):\n    print(f\"Received: {event.body_as_str()}\")\n    # Checkpoint after processing\n    partition_context.update_checkpoint(event)\n\nwith consumer:\n    consumer.receive(on_event=on_event)\n```\n\n## Async Client\n\n```python\nfrom azure.eventhub.aio import EventHubProducerClient, EventHubConsumerClient\nfrom azure.identity.aio import DefaultAzureCredential\nimport asyncio\n\nasync def send_events():\n    credential = DefaultAzureCredential()\n    \n    async with EventHubProducerClient(\n        fully_qualified_namespace=\"\u003Cnamespace>.servicebus.windows.net\",\n        eventhub_name=\"my-eventhub\",\n        credential=credential\n    ) as producer:\n        batch = await producer.create_batch()\n        batch.add(EventData(\"Async event\"))\n        await producer.send_batch(batch)\n\nasync def receive_events():\n    async def on_event(partition_context, event):\n        print(event.body_as_str())\n        await partition_context.update_checkpoint(event)\n    \n    async with EventHubConsumerClient(\n        fully_qualified_namespace=\"\u003Cnamespace>.servicebus.windows.net\",\n        eventhub_name=\"my-eventhub\",\n        consumer_group=\"$Default\",\n        credential=DefaultAzureCredential()\n    ) as consumer:\n        await consumer.receive(on_event=on_event)\n\nasyncio.run(send_events())\n```\n\n## Event Properties\n\n```python\nevent = EventData(\"My event body\")\n\n# Set properties\nevent.properties = {\"custom_property\": \"value\"}\nevent.content_type = \"application\u002Fjson\"\n\n# Read properties (on receive)\nprint(event.body_as_str())\nprint(event.sequence_number)\nprint(event.offset)\nprint(event.enqueued_time)\nprint(event.partition_key)\n```\n\n## Get Event Hub Info\n\n```python\nwith producer:\n    info = producer.get_eventhub_properties()\n    print(f\"Name: {info['name']}\")\n    print(f\"Partitions: {info['partition_ids']}\")\n    \n    for partition_id in info['partition_ids']:\n        partition_info = producer.get_partition_properties(partition_id)\n        print(f\"Partition {partition_id}: {partition_info['last_enqueued_sequence_number']}\")\n```\n\n## Best Practices\n\n1. **Use batches** for sending multiple events\n2. **Use checkpoint store** in production for reliable processing\n3. **Use async client** for high-throughput scenarios\n4. **Use partition keys** for ordered delivery within a partition\n5. **Handle batch size limits** — catch ValueError when batch is full\n6. **Use context managers** (`with`\u002F`async with`) for proper cleanup\n7. **Set appropriate consumer groups** for different applications\n\n## Reference Files\n\n| File | Contents |\n|------|----------|\n| references\u002Fcheckpointing.md | Checkpoint store patterns, blob checkpointing, checkpoint strategies |\n| references\u002Fpartitions.md | Partition management, load balancing, starting positions |\n| scripts\u002Fsetup_consumer.py | CLI for Event Hub info, consumer setup, and event sending\u002Freceiving |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n","# Azure Event Hubs SDK for Python\n\nBig data streaming platform for high-throughput event ingestion.\n\n## Installation\n\n```bash\npip install azure-eventhub azure-identity\n# For checkpointing with blob storage\npip install azure-eventhub-checkpointstoreblob-aio\n```\n\n## Environment Variables\n\n```bash\nEVENT_HUB_FULLY_QUALIFIED_NAMESPACE=\u003Cnamespace>.servicebus.windows.net\nEVENT_HUB_NAME=my-eventhub\nSTORAGE_ACCOUNT_URL=https:\u002F\u002F\u003Caccount>.blob.core.windows.net\nCHECKPOINT_CONTAINER=checkpoints\n```\n\n## Authentication\n\n```python\nfrom azure.identity import DefaultAzureCredential\nfrom azure.eventhub import EventHubProducerClient, EventHubConsumerClient\n\ncredential = DefaultAzureCredential()\nnamespace = \"\u003Cnamespace>.servicebus.windows.net\"\neventhub_name = \"my-eventhub\"\n\n# Producer\nproducer = EventHubProducerClient(\n    fully_qualified_namespace=namespace,\n    eventhub_name=eventhub_name,\n    credential=credential\n)\n\n# Consumer\nconsumer = EventHubConsumerClient(\n    fully_qualified_namespace=namespace,\n    eventhub_name=eventhub_name,\n    consumer_group=\"$Default\",\n    credential=credential\n)\n```\n\n## Client Types\n\n| Client | Purpose |\n|--------|---------|\n| `EventHubProducerClient` | Send events to Event Hub |\n| `EventHubConsumerClient` | Receive events from Event Hub |\n| `BlobCheckpointStore` | Track consumer progress |\n\n## Send Events\n\n```python\nfrom azure.eventhub import EventHubProducerClient, EventData\nfrom azure.identity import DefaultAzureCredential\n\nproducer = EventHubProducerClient(\n    fully_qualified_namespace=\"\u003Cnamespace>.servicebus.windows.net\",\n    eventhub_name=\"my-eventhub\",\n    credential=DefaultAzureCredential()\n)\n\nwith producer:\n    # Create batch (handles size limits)\n    event_data_batch = producer.create_batch()\n    \n    for i in range(10):\n        try:\n            event_data_batch.add(EventData(f\"Event {i}\"))\n        except ValueError:\n            # Batch is full, send and create new one\n            producer.send_batch(event_data_batch)\n            event_data_batch = producer.create_batch()\n            event_data_batch.add(EventData(f\"Event {i}\"))\n    \n    # Send remaining\n    producer.send_batch(event_data_batch)\n```\n\n### Send to Specific Partition\n\n```python\n# By partition ID\nevent_data_batch = producer.create_batch(partition_id=\"0\")\n\n# By partition key (consistent hashing)\nevent_data_batch = producer.create_batch(partition_key=\"user-123\")\n```\n\n## Receive Events\n\n### Simple Receive\n\n```python\nfrom azure.eventhub import EventHubConsumerClient\n\ndef on_event(partition_context, event):\n    print(f\"Partition: {partition_context.partition_id}\")\n    print(f\"Data: {event.body_as_str()}\")\n    partition_context.update_checkpoint(event)\n\nconsumer = EventHubConsumerClient(\n    fully_qualified_namespace=\"\u003Cnamespace>.servicebus.windows.net\",\n    eventhub_name=\"my-eventhub\",\n    consumer_group=\"$Default\",\n    credential=DefaultAzureCredential()\n)\n\nwith consumer:\n    consumer.receive(\n        on_event=on_event,\n        starting_position=\"-1\",  # Beginning of stream\n    )\n```\n\n### With Blob Checkpoint Store (Production)\n\n```python\nfrom azure.eventhub import EventHubConsumerClient\nfrom azure.eventhub.extensions.checkpointstoreblob import BlobCheckpointStore\nfrom azure.identity import DefaultAzureCredential\n\ncheckpoint_store = BlobCheckpointStore(\n    blob_account_url=\"https:\u002F\u002F\u003Caccount>.blob.core.windows.net\",\n    container_name=\"checkpoints\",\n    credential=DefaultAzureCredential()\n)\n\nconsumer = EventHubConsumerClient(\n    fully_qualified_namespace=\"\u003Cnamespace>.servicebus.windows.net\",\n    eventhub_name=\"my-eventhub\",\n    consumer_group=\"$Default\",\n    credential=DefaultAzureCredential(),\n    checkpoint_store=checkpoint_store\n)\n\ndef on_event(partition_context, event):\n    print(f\"Received: {event.body_as_str()}\")\n    # Checkpoint after processing\n    partition_context.update_checkpoint(event)\n\nwith consumer:\n    consumer.receive(on_event=on_event)\n```\n\n## Async Client\n\n```python\nfrom azure.eventhub.aio import EventHubProducerClient, EventHubConsumerClient\nfrom azure.identity.aio import DefaultAzureCredential\nimport asyncio\n\nasync def send_events():\n    credential = DefaultAzureCredential()\n    \n    async with EventHubProducerClient(\n        fully_qualified_namespace=\"\u003Cnamespace>.servicebus.windows.net\",\n        eventhub_name=\"my-eventhub\",\n        credential=credential\n    ) as producer:\n        batch = await producer.create_batch()\n        batch.add(EventData(\"Async event\"))\n        await producer.send_batch(batch)\n\nasync def receive_events():\n    async def on_event(partition_context, event):\n        print(event.body_as_str())\n        await partition_context.update_checkpoint(event)\n    \n    async with EventHubConsumerClient(\n        fully_qualified_namespace=\"\u003Cnamespace>.servicebus.windows.net\",\n        eventhub_name=\"my-eventhub\",\n        consumer_group=\"$Default\",\n        credential=DefaultAzureCredential()\n    ) as consumer:\n        await consumer.receive(on_event=on_event)\n\nasyncio.run(send_events())\n```\n\n## Event Properties\n\n```python\nevent = EventData(\"My event body\")\n\n# Set properties\nevent.properties = {\"custom_property\": \"value\"}\nevent.content_type = \"application\u002Fjson\"\n\n# Read properties (on receive)\nprint(event.body_as_str())\nprint(event.sequence_number)\nprint(event.offset)\nprint(event.enqueued_time)\nprint(event.partition_key)\n```\n\n## Get Event Hub Info\n\n```python\nwith producer:\n    info = producer.get_eventhub_properties()\n    print(f\"Name: {info['name']}\")\n    print(f\"Partitions: {info['partition_ids']}\")\n    \n    for partition_id in info['partition_ids']:\n        partition_info = producer.get_partition_properties(partition_id)\n        print(f\"Partition {partition_id}: {partition_info['last_enqueued_sequence_number']}\")\n```\n\n## Best Practices\n\n1. **Use batches** for sending multiple events\n2. **Use checkpoint store** in production for reliable processing\n3. **Use async client** for high-throughput scenarios\n4. **Use partition keys** for ordered delivery within a partition\n5. **Handle batch size limits** — catch ValueError when batch is full\n6. **Use context managers** (`with`\u002F`async with`) for proper cleanup\n7. **Set appropriate consumer groups** for different applications\n\n## Reference Files\n\n| File | Contents |\n|------|----------|\n| references\u002Fcheckpointing.md | Checkpoint store patterns, blob checkpointing, checkpoint strategies |\n| references\u002Fpartitions.md | Partition management, load balancing, starting positions |\n| scripts\u002Fsetup_consumer.py | CLI for Event Hub info, consumer setup, and event sending\u002Freceiving |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n",{"name":5,"risk":24,"source":31,"date_added":41,"description":7},"2026-02-27","main","7a38d8e7073e61c16eda85681cb32fb68a8657a5","skills-store\u002Fcopilot\u002Fazure-eventhub-py","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router","https:\u002F\u002Fgithub.com\u002Fsapsapshen","2026-04-14 21:12:12",{"source":8,"skillName":5,"commands":49,"prompt":59,"zipAvailable":60},[50,53,56],{"tool":51,"command":52},"npx","npx skills add sapsapshen\u002Fai-memory-router --skill azure-eventhub-py",{"tool":54,"command":55},"bunx","bunx skills add sapsapshen\u002Fai-memory-router --skill azure-eventhub-py",{"tool":57,"command":58},"pnpm","pnpm dlx skills add sapsapshen\u002Fai-memory-router --skill azure-eventhub-py","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcopilot\u002Fazure-eventhub-py\u002FSKILL.md",true,[],[63,87,113,123,136,155],{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":74,"publishedAt":36},"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",[69],{"categoryNo":70,"categoryName":71,"taxonomyType":72,"taxonomyTypeDesc":73},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[75,76,77,78,79,80,81,82,83,84,85,86],"wechat search","wechat","search","capabilities","openclaw","design","web search","compliance","web","official","fetch","with",{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":36},"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",[],[94,95,96,97,98,99,77,100,101,102,103,104,105,106,107,108,109,110,111,112],"trend","trend tap","tap","api keys","Bash","time","trending","hacker","aggregator","do","when","brew","live","data","google","install","read","across","api",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":36},"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",[],[120,121,94,105,106,107,108,98,77,110,122,111,112,104,102,101,100,109,99,97],"trend radar","radar","pulse",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":129,"publishedAt":36},"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",[],[130,131,132,133,134,135],"news","tech","tech news daily","daily","rss","翻译",{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":147,"publishedAt":36},"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",[142],{"categoryNo":143,"categoryName":144,"taxonomyType":145,"taxonomyTypeDesc":146},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",[138,83,148,149,150,86,105,151,152,153,96,154,109],"Audio","cli","youtube","images","https","files","pdfs",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":159,"categories":160,"keywords":161,"publishedAt":36},"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",[],[157,162,163,164,109,165,152,166,167,168,169,170],"status","play","go","latest","github","discover","control","cmd","volume"]