ea23cf1a504c3bffa839d7142e0b69cf7e4e245e
claudio
Run Claude Code isolated in a podman container, one command per project.
Files
Containerfile: the image (Debian slim + Claude Code).claudio.sh: builds, updates and runs the container..claudio: template for per-project settings (plain bash).
Install
mkdir -p ~/claudio && cp Containerfile claudio.sh ~/claudio/
chmod +x ~/claudio/claudio.sh
echo 'alias claudio=~/claudio/claudio.sh' >> ~/.bashrc
Requires podman (rootless is fine).
Usage
cd ~/projects/myapp
claudio # start Claude Code here (builds the image on first run)
claudio --resume # any extra args are passed to claude
claudio shell # bash inside the container instead of claude
claudio build # build the image
claudio update # rebuild from scratch: latest base image + latest Claude Code
The current directory is mounted at the same path inside the container.
Nothing else from the host is visible unless you add it to a .claudio file.
Per-project settings
Copy the template into a project and uncomment what you need:
cp ~/claudio/.claudio ~/projects/myapp/
MOUNTS=("$HOME/.gitconfig:/home/claude/.gitconfig:ro" "/data/shared")
PODMAN_ARGS=(-e GITHUB_TOKEN -p 3000:3000)
CLAUDE_ARGS=(--model opus)
MOUNTS: extra-vmounts. A bare path is mounted at the same path. Add:rofor read-only.PODMAN_ARGS: extrapodman runoptions.CLAUDE_ARGS: default arguments forclaude.
.claudio is sourced as bash, so only use ones you trust.
State
The container's home (/home/claude) lives in the podman volume claudio-home.
This volume is shared by all projects and holds your login, settings and history.
The container itself is removed after every run.
- Reset everything:
podman volume rm claudio-home - Need more tools in the image? Add them to the
apt-get installline, then runclaudio update.
Notes
- Files written in mounts are owned by your host user (
--userns=keep-id). - SELinux labeling is disabled for the container, so mounts work without relabeling.
- claudio refuses to run from
$HOMEor/.
Languages
Shell
87.9%
Dockerfile
12.1%