Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Azure Container Registry SDK for Python. Use for managing container images, artifacts, and repositories.
.claude/skills/azure-containerregistry-py/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | — | — |
| case-01 | ✗→✓ | ▲ Improved | — | — |
| case-19 | ✗→✓ | ▲ Improved | — | — |
| case-10 | ✗→✓ | ▲ Improved | — | — |
| case-11 | ✗→✓ | ▲ Improved | — | — |
Manage container images, artifacts, and repositories in Azure Container Registry.
bashpip install azure-containerregistry
bashAZURE_CONTAINERREGISTRY_ENDPOINT=https://<registry-name>.azurecr.io
pythonfrom azure.containerregistry import ContainerRegistryClient from azure.identity import DefaultAzureCredential client = ContainerRegistryClient( endpoint=os.environ["AZURE_CONTAINERREGISTRY_ENDPOINT"], credential=DefaultAzureCredential() )
pythonfrom azure.containerregistry import ContainerRegistryClient client = ContainerRegistryClient( endpoint="https://mcr.microsoft.com", credential=None, audience="https://mcr.microsoft.com" )
pythonclient = ContainerRegistryClient(endpoint, DefaultAzureCredential()) for repository in client.list_repository_names(): print(repository)
pythonproperties = client.get_repository_properties("my-image") print(f"Created: {properties.created_on}") print(f"Modified: {properties.last_updated_on}") print(f"Manifests: {properties.manifest_count}") print(f"Tags: {properties.tag_count}")
pythonfrom azure.containerregistry import RepositoryProperties client.update_repository_properties( "my-image", properties=RepositoryProperties( can_delete=False, can_write=False ) )
pythonclient.delete_repository("my-image")
pythonfor tag in client.list_tag_properties("my-image"): print(f"{tag.name}: {tag.created_on}")
pythonfrom azure.containerregistry import ArtifactTagOrder # Most recent first for tag in client.list_tag_properties( "my-image", order_by=ArtifactTagOrder.LAST_UPDATED_ON_DESCENDING ): print(f"{tag.name}: {tag.last_updated_on}")
pythonfrom azure.containerregistry import ArtifactManifestOrder for manifest in client.list_manifest_properties( "my-image", order_by=ArtifactManifestOrder.LAST_UPDATED_ON_DESCENDING ): print(f"Digest: {manifest.digest}") print(f"Tags: {manifest.tags}") print(f"Size: {manifest.size_in_bytes}")
pythonmanifest = client.get_manifest_properties("my-image", "latest") print(f"Digest: {manifest.digest}") print(f"Architecture: {manifest.architecture}") print(f"OS: {manifest.operating_system}")
pythonfrom azure.containerregistry import ArtifactManifestProperties client.update_manifest_properties( "my-image", "latest", properties=ArtifactManifestProperties( can_delete=False, can_write=False ) )
python# Delete by digest client.delete_manifest("my-image", "sha256:abc123...") # Delete by tag manifest = client.get_manifest_properties("my-image", "old-tag") client.delete_manifest("my-image", manifest.digest)
pythontag = client.get_tag_properties("my-image", "latest") print(f"Digest: {tag.digest}") print(f"Created: {tag.created_on}")
pythonclient.delete_tag("my-image", "old-tag")
pythonfrom azure.containerregistry import ContainerRegistryClient client = ContainerRegistryClient(endpoint, DefaultAzureCredential()) # Download manifest manifest = client.download_manifest("my-image", "latest") print(f"Media type: {manifest.media_type}") print(f"Digest: {manifest.digest}") # Download blob blob = client.download_blob("my-image", "sha256:abc123...") with open("layer.tar.gz", "wb") as f: for chunk in blob: f.write(chunk)
pythonfrom azure.containerregistry.aio import ContainerRegistryClient from azure.identity.aio import DefaultAzureCredential async def list_repos(): credential = DefaultAzureCredential() client = ContainerRegistryClient(endpoint, credential) async for repo in client.list_repository_names(): print(repo) await client.close() await credential.close()
pythonfrom datetime import datetime, timedelta, timezone cutoff = datetime.now(timezone.utc) - timedelta(days=30) for manifest in client.list_manifest_properties("my-image"): if manifest.last_updated_on < cutoff and not manifest.tags: print(f"Deleting {manifest.digest}") client.delete_manifest("my-image", manifest.digest)
| Operation | Description | |-----------|-------------| | list_repository_names | List all repositories | | get_repository_properties | Get repository metadata | | delete_repository | Delete repository and all images | | list_tag_properties | List tags in repository | | get_tag_properties | Get tag metadata | | delete_tag | Delete specific tag | | list_manifest_properties | List manifests in repository | | get_manifest_properties | Get manifest metadata | | delete_manifest | Delete manifest by digest | | download_manifest | Download manifest content | | download_blob | Download layer blob |
This skill is applicable to execute the workflow or actions described in the overview.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-02 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-23 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +57 percentage points is the difference between those two pass rates over the 23 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.