Podman prerequisites¶
Linux (rootless)¶
systemctl --user enable --now podman.socket
export CAUTEM_DRIVER=podman
# export CAUTEM_PODMAN_SOCKET=$XDG_RUNTIME_DIR/podman/podman.sock
# or: export DOCKER_HOST=unix:///run/user/$UID/podman/podman.sock
podman info
cautem status
macOS (Podman Machine)¶
Discovery also checks
~/.local/share/containers/podman/machine/podman.sock and podman info.
Images¶
Use the same sandbox tags as Docker (cautem-sandbox:local, :cursor, …
or GHCR catalog). Build with Docker tooling on a host that can push/load into
Podman’s store, or podman pull / podman load equivalents.
Gateway¶
Gateway still runs on the host (binary or compose). Select it before create with providers or proxy enabled — same as Docker.
AppArmor profile¶
The Podman backend accepts app_armor_profile in its gateway driver table:
Supported values are RuntimeDefault, Unconfined, and
Localhost/<profile-name>. RuntimeDefault and Localhost/... require
Podman's system info to report AppArmor support; configuration fails before sandbox
creation otherwise. Unconfined explicitly disables AppArmor confinement.
Caller supplied driver configuration¶
Caller template.driver_config is disabled by default. Enable it in the Podman
backend table only when a workload needs Podman specific mounts or CDI devices:
Named volume mounts must refer to an existing volume with the default admission labels for the target workspace:
podman volume create \
--label openshell.ai/sandbox-attachable=true \
--label openshell.ai/sandbox-attachable-workspace=team-a \
agent-cache
The backend checks these labels and the volume identity again before restart.
Bind and image mounts remain rejected while resource_admission.enabled is
true because Podman cannot provide a trusted label resolver for those sources.
Bind mounts also require enable_bind_mounts = true.
