Images & Tags¶
Images are filesystem snapshots. Every non-disposable contree run
produces a new image. Tags give images human-readable names so you
can find and reuse them later.
All data — images, operations, and uploaded files — is scoped to a Project. Multiple tokens can access the same project and share its data. Different projects have separate scopes — nothing is visible across project boundaries.
Listing images¶
Show tagged images:
contree images
Filter by tag prefix:
contree images --prefix=ubuntu
contree images --prefix=my-app
Include untagged images:
contree images -a
Filter by time:
contree images --since 1d # last 24 hours
contree images --since 2025-04-01
Tagging images¶
With one argument, tags the current session image. With two, the first is the image reference:
contree tag my-app:v1.0 # current session image
contree tag UUID my-app:v1.0 # specific image by UUID
contree tag tag:alpine:latest my-alpine # re-tag by reference
The CLI resolves tag references to UUIDs automatically — you don’t need to look up the UUID first.
Tags follow a free-form name:version convention. Common patterns:
contree tag UUID my-app:latest
contree tag UUID my-app:v2.0
contree tag UUID common/python-ml/python:3.11-slim
Remove a tag:
contree tag -d UUID my-app:v1.0
Tag rules¶
Tags are scoped to your Project (API token)
Each image can have multiple tags
Tags are unique — assigning an existing tag to a different image moves it
Allowed characters:
a-z,0-9,_,-, with:,/,.as separatorsMax length: 256 characters
Case-sensitive (lowercase recommended)
Shadow behavior¶
Public images (like ubuntu:latest) have their own tags. When you assign
the same tag to your own image, the public image is still accessible by
UUID but its tag becomes shadowed. Removing your tag restores the public
one.
Using tags¶
Use tag:NAME anywhere an image UUID is expected:
contree use tag:my-app:latest
If both you and a public image share a tag, your image wins.
Importing images¶
Pull images from container registries (Docker Hub, GHCR, etc.):
contree images import ubuntu:latest
contree images import --timeout 600 ubuntu:latest
contree images import python:3.11-slim
contree images import ghcr.io/org/repo:tag
Import is asynchronous — the CLI polls until the operation completes. Press Ctrl+C to cancel.
Import multiple at once:
contree images import ubuntu:latest python:3.11-slim node:20-slim
Private registries¶
Authenticate with --username:
contree images import --username=user registry.example.com/image:tag
The password is prompted securely if --username is provided.
Credentials are used only for the import operation and discarded
immediately after — the server does not store them.
Reusing images across sessions¶
A common workflow is to prepare a base environment, tag it, and reuse it in future sessions:
# Session 1: build the environment
contree use tag:ubuntu:latest
contree run apt-get update -qq
contree run apt-get install -y python3 python3-pip build-essential
contree tag UUID python-dev:latest
# Session 2 (days later): start from the prepared image
contree use tag:python-dev:latest
contree run pip install -r requirements.txt
Tip
Search for existing tagged images before rebuilding:
contree images --prefix=python-dev
Images are your checkpoints. Next: Scripting & Automation.