[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M717XEG495Y2SY4TPN6Y8D6V":3,"skill-same:01M717XEG495Y2SY4TPN6Y8D6V":70},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":14,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":55,"install":56,"resources":69},"01M717XEG495Y2SY4TPN6Y8D6V","azure-cosmos-py",null,"Azure Cosmos DB SDK for Python (NoSQL API). Use for document CRUD, queries, containers, and globally distributed data.","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\u002Fazure-cosmos-py\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"azure","azure cosmos py","cosmos","crud","2026","unknown","for","db","community","document","queries","use","python","api","nosql","data","azure cosmos db","distributed","sdk","containers","2026-11-10 10:12:30",false,"---\nname: azure-cosmos-py\ndescription: Azure Cosmos DB SDK for Python (NoSQL API). Use for document CRUD, queries, containers, and globally distributed data.\nrisk: unknown\nsource: community\ndate_added: '2026-02-27'\n---\n\n# Azure Cosmos DB SDK for Python\n\nClient library for Azure Cosmos DB NoSQL API — globally distributed, multi-model database.\n\n## Installation\n\n```bash\npip install azure-cosmos azure-identity\n```\n\n## Environment Variables\n\n```bash\nCOSMOS_ENDPOINT=https:\u002F\u002F\u003Caccount>.documents.azure.com:443\u002F\nCOSMOS_DATABASE=mydb\nCOSMOS_CONTAINER=mycontainer\n```\n\n## Authentication\n\n```python\nfrom azure.identity import DefaultAzureCredential\nfrom azure.cosmos import CosmosClient\n\ncredential = DefaultAzureCredential()\nendpoint = \"https:\u002F\u002F\u003Caccount>.documents.azure.com:443\u002F\"\n\nclient = CosmosClient(url=endpoint, credential=credential)\n```\n\n## Client Hierarchy\n\n| Client | Purpose | Get From |\n|--------|---------|----------|\n| `CosmosClient` | Account-level operations | Direct instantiation |\n| `DatabaseProxy` | Database operations | `client.get_database_client()` |\n| `ContainerProxy` | Container\u002Fitem operations | `database.get_container_client()` |\n\n## Core Workflow\n\n### Setup Database and Container\n\n```python\n# Get or create database\ndatabase = client.create_database_if_not_exists(id=\"mydb\")\n\n# Get or create container with partition key\ncontainer = database.create_container_if_not_exists(\n    id=\"mycontainer\",\n    partition_key=PartitionKey(path=\"\u002Fcategory\")\n)\n\n# Get existing\ndatabase = client.get_database_client(\"mydb\")\ncontainer = database.get_container_client(\"mycontainer\")\n```\n\n### Create Item\n\n```python\nitem = {\n    \"id\": \"item-001\",           # Required: unique within partition\n    \"category\": \"electronics\",   # Partition key value\n    \"name\": \"Laptop\",\n    \"price\": 999.99,\n    \"tags\": [\"computer\", \"portable\"]\n}\n\ncreated = container.create_item(body=item)\nprint(f\"Created: {created['id']}\")\n```\n\n### Read Item\n\n```python\n# Read requires id AND partition key\nitem = container.read_item(\n    item=\"item-001\",\n    partition_key=\"electronics\"\n)\nprint(f\"Name: {item['name']}\")\n```\n\n### Update Item (Replace)\n\n```python\nitem = container.read_item(item=\"item-001\", partition_key=\"electronics\")\nitem[\"price\"] = 899.99\nitem[\"on_sale\"] = True\n\nupdated = container.replace_item(item=item[\"id\"], body=item)\n```\n\n### Upsert Item\n\n```python\n# Create if not exists, replace if exists\nitem = {\n    \"id\": \"item-002\",\n    \"category\": \"electronics\",\n    \"name\": \"Tablet\",\n    \"price\": 499.99\n}\n\nresult = container.upsert_item(body=item)\n```\n\n### Delete Item\n\n```python\ncontainer.delete_item(\n    item=\"item-001\",\n    partition_key=\"electronics\"\n)\n```\n\n## Queries\n\n### Basic Query\n\n```python\n# Query within a partition (efficient)\nquery = \"SELECT * FROM c WHERE c.price \u003C @max_price\"\nitems = container.query_items(\n    query=query,\n    parameters=[{\"name\": \"@max_price\", \"value\": 500}],\n    partition_key=\"electronics\"\n)\n\nfor item in items:\n    print(f\"{item['name']}: ${item['price']}\")\n```\n\n### Cross-Partition Query\n\n```python\n# Cross-partition (more expensive, use sparingly)\nquery = \"SELECT * FROM c WHERE c.price \u003C @max_price\"\nitems = container.query_items(\n    query=query,\n    parameters=[{\"name\": \"@max_price\", \"value\": 500}],\n    enable_cross_partition_query=True\n)\n\nfor item in items:\n    print(item)\n```\n\n### Query with Projection\n\n```python\nquery = \"SELECT c.id, c.name, c.price FROM c WHERE c.category = @category\"\nitems = container.query_items(\n    query=query,\n    parameters=[{\"name\": \"@category\", \"value\": \"electronics\"}],\n    partition_key=\"electronics\"\n)\n```\n\n### Read All Items\n\n```python\n# Read all in a partition\nitems = container.read_all_items()  # Cross-partition\n# Or with partition key\nitems = container.query_items(\n    query=\"SELECT * FROM c\",\n    partition_key=\"electronics\"\n)\n```\n\n## Partition Keys\n\n**Critical**: Always include partition key for efficient operations.\n\n```python\nfrom azure.cosmos import PartitionKey\n\n# Single partition key\ncontainer = database.create_container_if_not_exists(\n    id=\"orders\",\n    partition_key=PartitionKey(path=\"\u002Fcustomer_id\")\n)\n\n# Hierarchical partition key (preview)\ncontainer = database.create_container_if_not_exists(\n    id=\"events\",\n    partition_key=PartitionKey(path=[\"\u002Ftenant_id\", \"\u002Fuser_id\"])\n)\n```\n\n## Throughput\n\n```python\n# Create container with provisioned throughput\ncontainer = database.create_container_if_not_exists(\n    id=\"mycontainer\",\n    partition_key=PartitionKey(path=\"\u002Fpk\"),\n    offer_throughput=400  # RU\u002Fs\n)\n\n# Read current throughput\noffer = container.read_offer()\nprint(f\"Throughput: {offer.offer_throughput} RU\u002Fs\")\n\n# Update throughput\ncontainer.replace_throughput(throughput=1000)\n```\n\n## Async Client\n\n```python\nfrom azure.cosmos.aio import CosmosClient\nfrom azure.identity.aio import DefaultAzureCredential\n\nasync def cosmos_operations():\n    credential = DefaultAzureCredential()\n    \n    async with CosmosClient(endpoint, credential=credential) as client:\n        database = client.get_database_client(\"mydb\")\n        container = database.get_container_client(\"mycontainer\")\n        \n        # Create\n        await container.create_item(body={\"id\": \"1\", \"pk\": \"test\"})\n        \n        # Read\n        item = await container.read_item(item=\"1\", partition_key=\"test\")\n        \n        # Query\n        async for item in container.query_items(\n            query=\"SELECT * FROM c\",\n            partition_key=\"test\"\n        ):\n            print(item)\n\nimport asyncio\nasyncio.run(cosmos_operations())\n```\n\n## Error Handling\n\n```python\nfrom azure.cosmos.exceptions import CosmosHttpResponseError\n\ntry:\n    item = container.read_item(item=\"nonexistent\", partition_key=\"pk\")\nexcept CosmosHttpResponseError as e:\n    if e.status_code == 404:\n        print(\"Item not found\")\n    elif e.status_code == 429:\n        print(f\"Rate limited. Retry after: {e.headers.get('x-ms-retry-after-ms')}ms\")\n    else:\n        raise\n```\n\n## Best Practices\n\n1. **Always specify partition key** for point reads and queries\n2. **Use parameterized queries** to prevent injection and improve caching\n3. **Avoid cross-partition queries** when possible\n4. **Use `upsert_item`** for idempotent writes\n5. **Use async client** for high-throughput scenarios\n6. **Design partition key** for even data distribution\n7. **Use `read_item`** instead of query for single document retrieval\n\n## Reference Files\n\n| File | Contents |\n|------|----------|\n| references\u002Fpartitioning.md | Partition key strategies, hierarchical keys, hot partition detection and mitigation |\n| references\u002Fquery-patterns.md | Query optimization, aggregations, pagination, transactions, change feed |\n| scripts\u002Fsetup_cosmos_container.py | CLI tool for creating containers with partitioning, throughput, and indexing |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n","# Azure Cosmos DB SDK for Python\n\nClient library for Azure Cosmos DB NoSQL API — globally distributed, multi-model database.\n\n## Installation\n\n```bash\npip install azure-cosmos azure-identity\n```\n\n## Environment Variables\n\n```bash\nCOSMOS_ENDPOINT=https:\u002F\u002F\u003Caccount>.documents.azure.com:443\u002F\nCOSMOS_DATABASE=mydb\nCOSMOS_CONTAINER=mycontainer\n```\n\n## Authentication\n\n```python\nfrom azure.identity import DefaultAzureCredential\nfrom azure.cosmos import CosmosClient\n\ncredential = DefaultAzureCredential()\nendpoint = \"https:\u002F\u002F\u003Caccount>.documents.azure.com:443\u002F\"\n\nclient = CosmosClient(url=endpoint, credential=credential)\n```\n\n## Client Hierarchy\n\n| Client | Purpose | Get From |\n|--------|---------|----------|\n| `CosmosClient` | Account-level operations | Direct instantiation |\n| `DatabaseProxy` | Database operations | `client.get_database_client()` |\n| `ContainerProxy` | Container\u002Fitem operations | `database.get_container_client()` |\n\n## Core Workflow\n\n### Setup Database and Container\n\n```python\n# Get or create database\ndatabase = client.create_database_if_not_exists(id=\"mydb\")\n\n# Get or create container with partition key\ncontainer = database.create_container_if_not_exists(\n    id=\"mycontainer\",\n    partition_key=PartitionKey(path=\"\u002Fcategory\")\n)\n\n# Get existing\ndatabase = client.get_database_client(\"mydb\")\ncontainer = database.get_container_client(\"mycontainer\")\n```\n\n### Create Item\n\n```python\nitem = {\n    \"id\": \"item-001\",           # Required: unique within partition\n    \"category\": \"electronics\",   # Partition key value\n    \"name\": \"Laptop\",\n    \"price\": 999.99,\n    \"tags\": [\"computer\", \"portable\"]\n}\n\ncreated = container.create_item(body=item)\nprint(f\"Created: {created['id']}\")\n```\n\n### Read Item\n\n```python\n# Read requires id AND partition key\nitem = container.read_item(\n    item=\"item-001\",\n    partition_key=\"electronics\"\n)\nprint(f\"Name: {item['name']}\")\n```\n\n### Update Item (Replace)\n\n```python\nitem = container.read_item(item=\"item-001\", partition_key=\"electronics\")\nitem[\"price\"] = 899.99\nitem[\"on_sale\"] = True\n\nupdated = container.replace_item(item=item[\"id\"], body=item)\n```\n\n### Upsert Item\n\n```python\n# Create if not exists, replace if exists\nitem = {\n    \"id\": \"item-002\",\n    \"category\": \"electronics\",\n    \"name\": \"Tablet\",\n    \"price\": 499.99\n}\n\nresult = container.upsert_item(body=item)\n```\n\n### Delete Item\n\n```python\ncontainer.delete_item(\n    item=\"item-001\",\n    partition_key=\"electronics\"\n)\n```\n\n## Queries\n\n### Basic Query\n\n```python\n# Query within a partition (efficient)\nquery = \"SELECT * FROM c WHERE c.price \u003C @max_price\"\nitems = container.query_items(\n    query=query,\n    parameters=[{\"name\": \"@max_price\", \"value\": 500}],\n    partition_key=\"electronics\"\n)\n\nfor item in items:\n    print(f\"{item['name']}: ${item['price']}\")\n```\n\n### Cross-Partition Query\n\n```python\n# Cross-partition (more expensive, use sparingly)\nquery = \"SELECT * FROM c WHERE c.price \u003C @max_price\"\nitems = container.query_items(\n    query=query,\n    parameters=[{\"name\": \"@max_price\", \"value\": 500}],\n    enable_cross_partition_query=True\n)\n\nfor item in items:\n    print(item)\n```\n\n### Query with Projection\n\n```python\nquery = \"SELECT c.id, c.name, c.price FROM c WHERE c.category = @category\"\nitems = container.query_items(\n    query=query,\n    parameters=[{\"name\": \"@category\", \"value\": \"electronics\"}],\n    partition_key=\"electronics\"\n)\n```\n\n### Read All Items\n\n```python\n# Read all in a partition\nitems = container.read_all_items()  # Cross-partition\n# Or with partition key\nitems = container.query_items(\n    query=\"SELECT * FROM c\",\n    partition_key=\"electronics\"\n)\n```\n\n## Partition Keys\n\n**Critical**: Always include partition key for efficient operations.\n\n```python\nfrom azure.cosmos import PartitionKey\n\n# Single partition key\ncontainer = database.create_container_if_not_exists(\n    id=\"orders\",\n    partition_key=PartitionKey(path=\"\u002Fcustomer_id\")\n)\n\n# Hierarchical partition key (preview)\ncontainer = database.create_container_if_not_exists(\n    id=\"events\",\n    partition_key=PartitionKey(path=[\"\u002Ftenant_id\", \"\u002Fuser_id\"])\n)\n```\n\n## Throughput\n\n```python\n# Create container with provisioned throughput\ncontainer = database.create_container_if_not_exists(\n    id=\"mycontainer\",\n    partition_key=PartitionKey(path=\"\u002Fpk\"),\n    offer_throughput=400  # RU\u002Fs\n)\n\n# Read current throughput\noffer = container.read_offer()\nprint(f\"Throughput: {offer.offer_throughput} RU\u002Fs\")\n\n# Update throughput\ncontainer.replace_throughput(throughput=1000)\n```\n\n## Async Client\n\n```python\nfrom azure.cosmos.aio import CosmosClient\nfrom azure.identity.aio import DefaultAzureCredential\n\nasync def cosmos_operations():\n    credential = DefaultAzureCredential()\n    \n    async with CosmosClient(endpoint, credential=credential) as client:\n        database = client.get_database_client(\"mydb\")\n        container = database.get_container_client(\"mycontainer\")\n        \n        # Create\n        await container.create_item(body={\"id\": \"1\", \"pk\": \"test\"})\n        \n        # Read\n        item = await container.read_item(item=\"1\", partition_key=\"test\")\n        \n        # Query\n        async for item in container.query_items(\n            query=\"SELECT * FROM c\",\n            partition_key=\"test\"\n        ):\n            print(item)\n\nimport asyncio\nasyncio.run(cosmos_operations())\n```\n\n## Error Handling\n\n```python\nfrom azure.cosmos.exceptions import CosmosHttpResponseError\n\ntry:\n    item = container.read_item(item=\"nonexistent\", partition_key=\"pk\")\nexcept CosmosHttpResponseError as e:\n    if e.status_code == 404:\n        print(\"Item not found\")\n    elif e.status_code == 429:\n        print(f\"Rate limited. Retry after: {e.headers.get('x-ms-retry-after-ms')}ms\")\n    else:\n        raise\n```\n\n## Best Practices\n\n1. **Always specify partition key** for point reads and queries\n2. **Use parameterized queries** to prevent injection and improve caching\n3. **Avoid cross-partition queries** when possible\n4. **Use `upsert_item`** for idempotent writes\n5. **Use async client** for high-throughput scenarios\n6. **Design partition key** for even data distribution\n7. **Use `read_item`** instead of query for single document retrieval\n\n## Reference Files\n\n| File | Contents |\n|------|----------|\n| references\u002Fpartitioning.md | Partition key strategies, hierarchical keys, hot partition detection and mitigation |\n| references\u002Fquery-patterns.md | Query optimization, aggregations, pagination, transactions, change feed |\n| scripts\u002Fsetup_cosmos_container.py | CLI tool for creating containers with partitioning, throughput, and indexing |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n",{"name":5,"risk":29,"source":32,"date_added":49,"description":7},"2026-02-27","main","7a38d8e7073e61c16eda85681cb32fb68a8657a5","skills-store\u002Fglobal\u002Fazure-cosmos-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":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add sapsapshen\u002Fai-memory-router --skill azure-cosmos-py",{"tool":62,"command":63},"bunx","bunx skills add sapsapshen\u002Fai-memory-router --skill azure-cosmos-py",{"tool":65,"command":66},"pnpm","pnpm dlx skills add sapsapshen\u002Fai-memory-router --skill azure-cosmos-py","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fglobal\u002Fazure-cosmos-py\u002FSKILL.md",true,[],[71,95,119,129,142,159],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":82,"publishedAt":44},"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",[77],{"categoryNo":78,"categoryName":79,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[83,84,85,86,87,88,89,90,91,92,93,94],"wechat search","wechat","search","capabilities","openclaw","design","web search","compliance","web","official","fetch","with",{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":101,"publishedAt":44},"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",[],[102,103,104,105,106,107,85,108,109,110,111,112,113,114,39,115,116,117,118,37],"trend","trend tap","tap","api keys","Bash","time","trending","hacker","aggregator","do","when","brew","live","google","install","read","across",{"skillNo":120,"name":121,"nameZh":6,"description":122,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":125,"publishedAt":44},"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",[],[126,127,102,113,114,39,115,106,85,117,128,118,37,112,110,109,108,116,107,105],"trend radar","radar","pulse",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":135,"publishedAt":44},"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",[],[136,137,138,139,140,141],"news","tech","tech news daily","daily","rss","翻译",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":151,"publishedAt":44},"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",[148],{"categoryNo":149,"categoryName":150,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",[144,91,152,153,154,94,113,155,156,157,104,158,116],"Audio","cli","youtube","images","https","files","pdfs",{"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":44},"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",[],[161,166,167,168,116,169,156,170,171,172,173,174],"status","play","go","latest","github","discover","control","cmd","volume"]