[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M715BPSMFAFMPRJSTGXB40NJ":3,"skill-same:01M715BPSMFAFMPRJSTGXB40NJ":61},{"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":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":41,"commitSha":42,"skillDirectory":43,"forksCount":14,"repositoryHtmlUrl":44,"repositoryHomepageUrl":6,"ownerHtmlUrl":45,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":46,"install":47,"resources":60},"01M715BPSMFAFMPRJSTGXB40NJ","azure-containerregistry-py",null,"Azure Container Registry SDK for Python. Use for managing container images, artifacts, and repositories.","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\u002Fcursor\u002Fazure-containerregistry-py\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"azure","azure containerregistry py","python","sdk","container images","registry","artifacts","use","container","images","community","azure container registry","for","unknown","repositories","2026","2026-11-10 10:12:30",false,"---\nname: azure-containerregistry-py\ndescription: Azure Container Registry SDK for Python. Use for managing container images, artifacts, and repositories.\nrisk: unknown\nsource: community\ndate_added: '2026-02-27'\n---\n\n# Azure Container Registry SDK for Python\n\nManage container images, artifacts, and repositories in Azure Container Registry.\n\n## Installation\n\n```bash\npip install azure-containerregistry\n```\n\n## Environment Variables\n\n```bash\nAZURE_CONTAINERREGISTRY_ENDPOINT=https:\u002F\u002F\u003Cregistry-name>.azurecr.io\n```\n\n## Authentication\n\n### Entra ID (Recommended)\n\n```python\nfrom azure.containerregistry import ContainerRegistryClient\nfrom azure.identity import DefaultAzureCredential\n\nclient = ContainerRegistryClient(\n    endpoint=os.environ[\"AZURE_CONTAINERREGISTRY_ENDPOINT\"],\n    credential=DefaultAzureCredential()\n)\n```\n\n### Anonymous Access (Public Registry)\n\n```python\nfrom azure.containerregistry import ContainerRegistryClient\n\nclient = ContainerRegistryClient(\n    endpoint=\"https:\u002F\u002Fmcr.microsoft.com\",\n    credential=None,\n    audience=\"https:\u002F\u002Fmcr.microsoft.com\"\n)\n```\n\n## List Repositories\n\n```python\nclient = ContainerRegistryClient(endpoint, DefaultAzureCredential())\n\nfor repository in client.list_repository_names():\n    print(repository)\n```\n\n## Repository Operations\n\n### Get Repository Properties\n\n```python\nproperties = client.get_repository_properties(\"my-image\")\nprint(f\"Created: {properties.created_on}\")\nprint(f\"Modified: {properties.last_updated_on}\")\nprint(f\"Manifests: {properties.manifest_count}\")\nprint(f\"Tags: {properties.tag_count}\")\n```\n\n### Update Repository Properties\n\n```python\nfrom azure.containerregistry import RepositoryProperties\n\nclient.update_repository_properties(\n    \"my-image\",\n    properties=RepositoryProperties(\n        can_delete=False,\n        can_write=False\n    )\n)\n```\n\n### Delete Repository\n\n```python\nclient.delete_repository(\"my-image\")\n```\n\n## List Tags\n\n```python\nfor tag in client.list_tag_properties(\"my-image\"):\n    print(f\"{tag.name}: {tag.created_on}\")\n```\n\n### Filter by Order\n\n```python\nfrom azure.containerregistry import ArtifactTagOrder\n\n# Most recent first\nfor tag in client.list_tag_properties(\n    \"my-image\",\n    order_by=ArtifactTagOrder.LAST_UPDATED_ON_DESCENDING\n):\n    print(f\"{tag.name}: {tag.last_updated_on}\")\n```\n\n## Manifest Operations\n\n### List Manifests\n\n```python\nfrom azure.containerregistry import ArtifactManifestOrder\n\nfor manifest in client.list_manifest_properties(\n    \"my-image\",\n    order_by=ArtifactManifestOrder.LAST_UPDATED_ON_DESCENDING\n):\n    print(f\"Digest: {manifest.digest}\")\n    print(f\"Tags: {manifest.tags}\")\n    print(f\"Size: {manifest.size_in_bytes}\")\n```\n\n### Get Manifest Properties\n\n```python\nmanifest = client.get_manifest_properties(\"my-image\", \"latest\")\nprint(f\"Digest: {manifest.digest}\")\nprint(f\"Architecture: {manifest.architecture}\")\nprint(f\"OS: {manifest.operating_system}\")\n```\n\n### Update Manifest Properties\n\n```python\nfrom azure.containerregistry import ArtifactManifestProperties\n\nclient.update_manifest_properties(\n    \"my-image\",\n    \"latest\",\n    properties=ArtifactManifestProperties(\n        can_delete=False,\n        can_write=False\n    )\n)\n```\n\n### Delete Manifest\n\n```python\n# Delete by digest\nclient.delete_manifest(\"my-image\", \"sha256:abc123...\")\n\n# Delete by tag\nmanifest = client.get_manifest_properties(\"my-image\", \"old-tag\")\nclient.delete_manifest(\"my-image\", manifest.digest)\n```\n\n## Tag Operations\n\n### Get Tag Properties\n\n```python\ntag = client.get_tag_properties(\"my-image\", \"latest\")\nprint(f\"Digest: {tag.digest}\")\nprint(f\"Created: {tag.created_on}\")\n```\n\n### Delete Tag\n\n```python\nclient.delete_tag(\"my-image\", \"old-tag\")\n```\n\n## Upload and Download Artifacts\n\n```python\nfrom azure.containerregistry import ContainerRegistryClient\n\nclient = ContainerRegistryClient(endpoint, DefaultAzureCredential())\n\n# Download manifest\nmanifest = client.download_manifest(\"my-image\", \"latest\")\nprint(f\"Media type: {manifest.media_type}\")\nprint(f\"Digest: {manifest.digest}\")\n\n# Download blob\nblob = client.download_blob(\"my-image\", \"sha256:abc123...\")\nwith open(\"layer.tar.gz\", \"wb\") as f:\n    for chunk in blob:\n        f.write(chunk)\n```\n\n## Async Client\n\n```python\nfrom azure.containerregistry.aio import ContainerRegistryClient\nfrom azure.identity.aio import DefaultAzureCredential\n\nasync def list_repos():\n    credential = DefaultAzureCredential()\n    client = ContainerRegistryClient(endpoint, credential)\n    \n    async for repo in client.list_repository_names():\n        print(repo)\n    \n    await client.close()\n    await credential.close()\n```\n\n## Clean Up Old Images\n\n```python\nfrom datetime import datetime, timedelta, timezone\n\ncutoff = datetime.now(timezone.utc) - timedelta(days=30)\n\nfor manifest in client.list_manifest_properties(\"my-image\"):\n    if manifest.last_updated_on \u003C cutoff and not manifest.tags:\n        print(f\"Deleting {manifest.digest}\")\n        client.delete_manifest(\"my-image\", manifest.digest)\n```\n\n## Client Operations\n\n| Operation | Description |\n|-----------|-------------|\n| `list_repository_names` | List all repositories |\n| `get_repository_properties` | Get repository metadata |\n| `delete_repository` | Delete repository and all images |\n| `list_tag_properties` | List tags in repository |\n| `get_tag_properties` | Get tag metadata |\n| `delete_tag` | Delete specific tag |\n| `list_manifest_properties` | List manifests in repository |\n| `get_manifest_properties` | Get manifest metadata |\n| `delete_manifest` | Delete manifest by digest |\n| `download_manifest` | Download manifest content |\n| `download_blob` | Download layer blob |\n\n## Best Practices\n\n1. **Use Entra ID** for authentication in production\n2. **Delete by digest** not tag to avoid orphaned images\n3. **Lock production images** with can_delete=False\n4. **Clean up untagged manifests** regularly\n5. **Use async client** for high-throughput operations\n6. **Order by last_updated** to find recent\u002Fold images\n7. **Check manifest.tags** before deleting to avoid removing tagged images\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n","# Azure Container Registry SDK for Python\n\nManage container images, artifacts, and repositories in Azure Container Registry.\n\n## Installation\n\n```bash\npip install azure-containerregistry\n```\n\n## Environment Variables\n\n```bash\nAZURE_CONTAINERREGISTRY_ENDPOINT=https:\u002F\u002F\u003Cregistry-name>.azurecr.io\n```\n\n## Authentication\n\n### Entra ID (Recommended)\n\n```python\nfrom azure.containerregistry import ContainerRegistryClient\nfrom azure.identity import DefaultAzureCredential\n\nclient = ContainerRegistryClient(\n    endpoint=os.environ[\"AZURE_CONTAINERREGISTRY_ENDPOINT\"],\n    credential=DefaultAzureCredential()\n)\n```\n\n### Anonymous Access (Public Registry)\n\n```python\nfrom azure.containerregistry import ContainerRegistryClient\n\nclient = ContainerRegistryClient(\n    endpoint=\"https:\u002F\u002Fmcr.microsoft.com\",\n    credential=None,\n    audience=\"https:\u002F\u002Fmcr.microsoft.com\"\n)\n```\n\n## List Repositories\n\n```python\nclient = ContainerRegistryClient(endpoint, DefaultAzureCredential())\n\nfor repository in client.list_repository_names():\n    print(repository)\n```\n\n## Repository Operations\n\n### Get Repository Properties\n\n```python\nproperties = client.get_repository_properties(\"my-image\")\nprint(f\"Created: {properties.created_on}\")\nprint(f\"Modified: {properties.last_updated_on}\")\nprint(f\"Manifests: {properties.manifest_count}\")\nprint(f\"Tags: {properties.tag_count}\")\n```\n\n### Update Repository Properties\n\n```python\nfrom azure.containerregistry import RepositoryProperties\n\nclient.update_repository_properties(\n    \"my-image\",\n    properties=RepositoryProperties(\n        can_delete=False,\n        can_write=False\n    )\n)\n```\n\n### Delete Repository\n\n```python\nclient.delete_repository(\"my-image\")\n```\n\n## List Tags\n\n```python\nfor tag in client.list_tag_properties(\"my-image\"):\n    print(f\"{tag.name}: {tag.created_on}\")\n```\n\n### Filter by Order\n\n```python\nfrom azure.containerregistry import ArtifactTagOrder\n\n# Most recent first\nfor tag in client.list_tag_properties(\n    \"my-image\",\n    order_by=ArtifactTagOrder.LAST_UPDATED_ON_DESCENDING\n):\n    print(f\"{tag.name}: {tag.last_updated_on}\")\n```\n\n## Manifest Operations\n\n### List Manifests\n\n```python\nfrom azure.containerregistry import ArtifactManifestOrder\n\nfor manifest in client.list_manifest_properties(\n    \"my-image\",\n    order_by=ArtifactManifestOrder.LAST_UPDATED_ON_DESCENDING\n):\n    print(f\"Digest: {manifest.digest}\")\n    print(f\"Tags: {manifest.tags}\")\n    print(f\"Size: {manifest.size_in_bytes}\")\n```\n\n### Get Manifest Properties\n\n```python\nmanifest = client.get_manifest_properties(\"my-image\", \"latest\")\nprint(f\"Digest: {manifest.digest}\")\nprint(f\"Architecture: {manifest.architecture}\")\nprint(f\"OS: {manifest.operating_system}\")\n```\n\n### Update Manifest Properties\n\n```python\nfrom azure.containerregistry import ArtifactManifestProperties\n\nclient.update_manifest_properties(\n    \"my-image\",\n    \"latest\",\n    properties=ArtifactManifestProperties(\n        can_delete=False,\n        can_write=False\n    )\n)\n```\n\n### Delete Manifest\n\n```python\n# Delete by digest\nclient.delete_manifest(\"my-image\", \"sha256:abc123...\")\n\n# Delete by tag\nmanifest = client.get_manifest_properties(\"my-image\", \"old-tag\")\nclient.delete_manifest(\"my-image\", manifest.digest)\n```\n\n## Tag Operations\n\n### Get Tag Properties\n\n```python\ntag = client.get_tag_properties(\"my-image\", \"latest\")\nprint(f\"Digest: {tag.digest}\")\nprint(f\"Created: {tag.created_on}\")\n```\n\n### Delete Tag\n\n```python\nclient.delete_tag(\"my-image\", \"old-tag\")\n```\n\n## Upload and Download Artifacts\n\n```python\nfrom azure.containerregistry import ContainerRegistryClient\n\nclient = ContainerRegistryClient(endpoint, DefaultAzureCredential())\n\n# Download manifest\nmanifest = client.download_manifest(\"my-image\", \"latest\")\nprint(f\"Media type: {manifest.media_type}\")\nprint(f\"Digest: {manifest.digest}\")\n\n# Download blob\nblob = client.download_blob(\"my-image\", \"sha256:abc123...\")\nwith open(\"layer.tar.gz\", \"wb\") as f:\n    for chunk in blob:\n        f.write(chunk)\n```\n\n## Async Client\n\n```python\nfrom azure.containerregistry.aio import ContainerRegistryClient\nfrom azure.identity.aio import DefaultAzureCredential\n\nasync def list_repos():\n    credential = DefaultAzureCredential()\n    client = ContainerRegistryClient(endpoint, credential)\n    \n    async for repo in client.list_repository_names():\n        print(repo)\n    \n    await client.close()\n    await credential.close()\n```\n\n## Clean Up Old Images\n\n```python\nfrom datetime import datetime, timedelta, timezone\n\ncutoff = datetime.now(timezone.utc) - timedelta(days=30)\n\nfor manifest in client.list_manifest_properties(\"my-image\"):\n    if manifest.last_updated_on \u003C cutoff and not manifest.tags:\n        print(f\"Deleting {manifest.digest}\")\n        client.delete_manifest(\"my-image\", manifest.digest)\n```\n\n## Client Operations\n\n| Operation | Description |\n|-----------|-------------|\n| `list_repository_names` | List all repositories |\n| `get_repository_properties` | Get repository metadata |\n| `delete_repository` | Delete repository and all images |\n| `list_tag_properties` | List tags in repository |\n| `get_tag_properties` | Get tag metadata |\n| `delete_tag` | Delete specific tag |\n| `list_manifest_properties` | List manifests in repository |\n| `get_manifest_properties` | Get manifest metadata |\n| `delete_manifest` | Delete manifest by digest |\n| `download_manifest` | Download manifest content |\n| `download_blob` | Download layer blob |\n\n## Best Practices\n\n1. **Use Entra ID** for authentication in production\n2. **Delete by digest** not tag to avoid orphaned images\n3. **Lock production images** with can_delete=False\n4. **Clean up untagged manifests** regularly\n5. **Use async client** for high-throughput operations\n6. **Order by last_updated** to find recent\u002Fold images\n7. **Check manifest.tags** before deleting to avoid removing tagged images\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n",{"name":5,"risk":32,"source":29,"date_added":40,"description":7},"2026-02-27","main","7a38d8e7073e61c16eda85681cb32fb68a8657a5","skills-store\u002Fcursor\u002Fazure-containerregistry-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":48,"prompt":58,"zipAvailable":59},[49,52,55],{"tool":50,"command":51},"npx","npx skills add sapsapshen\u002Fai-memory-router --skill azure-containerregistry-py",{"tool":53,"command":54},"bunx","bunx skills add sapsapshen\u002Fai-memory-router --skill azure-containerregistry-py",{"tool":56,"command":57},"pnpm","pnpm dlx skills add sapsapshen\u002Fai-memory-router --skill azure-containerregistry-py","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Fazure-containerregistry-py\u002FSKILL.md",true,[],[62,86,112,122,135,153],{"skillNo":63,"name":64,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":73,"publishedAt":35},"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",[68],{"categoryNo":69,"categoryName":70,"taxonomyType":71,"taxonomyTypeDesc":72},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[74,75,76,77,78,79,80,81,82,83,84,85],"wechat search","wechat","search","capabilities","openclaw","design","web search","compliance","web","official","fetch","with",{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":35},"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",[],[93,94,95,96,97,98,76,99,100,101,102,103,104,105,106,107,108,109,110,111],"trend","trend tap","tap","api keys","Bash","time","trending","hacker","aggregator","do","when","brew","live","data","google","install","read","across","api",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":118,"publishedAt":35},"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",[],[119,120,93,104,105,106,107,97,76,109,121,110,111,103,101,100,99,108,98,96],"trend radar","radar","pulse",{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":128,"publishedAt":35},"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",[],[129,130,131,132,133,134],"news","tech","tech news daily","daily","rss","翻译",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":146,"publishedAt":35},"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",[141],{"categoryNo":142,"categoryName":143,"taxonomyType":144,"taxonomyTypeDesc":145},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",[137,82,147,148,149,85,104,28,150,151,95,152,108],"Audio","cli","youtube","https","files","pdfs",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":159,"publishedAt":35},"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",[],[155,160,161,162,108,163,150,164,165,166,167,168],"status","play","go","latest","github","discover","control","cmd","volume"]