Containers used `sleep infinity` as PID 1, which never reacts to SIGTERM: the kernel does not apply default signal dispositions to PID 1, and sleep has no SIGTERM handler, so every `podman stop` silently ignored the signal, waited out the full 10-second grace period, and fell back to SIGKILL. PID 1 now traps TERM and INT itself and exits on request, so one-off manual stops of a still-running agent container end immediately instead of after the kill timeout. The PID 1 command is baked in at create time, so containers predating this change are detected and recreated automatically on the next run.
2.7 KiB
Release notes
1.0.1 — 2026-10-29
podman stop now stops a running agent container immediately instead of
after a 10-second SIGTERM timeout followed by SIGKILL.
Why
Containers used sleep infinity as PID 1. The kernel does not apply
default signal dispositions to PID 1, and sleep has no SIGTERM handler,
so the stop signal was silently ignored and every stop fell through to
SIGKILL. PID 1 now traps TERM (and INT) itself and exits on request:
trap "exit 0" TERM INT; sleep infinity & wait
Upgrading
The PID 1 command is baked in when a container is created, so existing containers are detected on the next run and recreated automatically. Nothing in the container home is touched.
1.0.0 — 2026-10-29
Containers now run with rootless Podman instead of Docker.
Why
Whoever can talk to /var/run/docker.sock is root on the host. A single
docker run --privileged -v /:/host edits any file, including
/etc/shadow and your SSH keys. Being in the docker group is therefore
the same as having root, and an agent with that access leaves the project
directory whenever it likes — the confinement this tool exists for holds
only against accidents, not against a malicious tool call.
Rootless Podman removes the shortcut: containers run inside a user
namespace owned by you, and container root maps to a subordinate UID from
/etc/subuid instead of to host root. Nothing outside your own file
permissions is reachable, and the docker group is not needed at all.
Upgrading
Rootless Podman has to work on the host first:
sudo pacman -S podman passt # or slirp4netns
grep "^$USER:" /etc/subuid /etc/subgid # expect an entry like 100000:65536
podman info >/dev/null && echo ok
If the subuid/subgid entries are missing, add them with
usermod --add-subuids 100000-165535 --add-subgids 100000-165535 <user>.
Existing Docker containers and images are not reused. They are left
untouched, and the first Podman run builds a fresh image
(localhost/agent-container:latest).
-
Rebuild the image with Podman:
git pull agent-container update -
Remove the old Docker containers and image:
docker ps -a --filter 'name=^ac-' --format '{{.Names}}' | xargs -r docker rm -f docker rmi agent-container:latest -
Use
pi,claude, andopencodeas before. The first run creates a Podman container per project. -
Leave the
dockergroup once nothing else on the machine needs the socket as your user, then log out and in again:sudo gpasswd -d "$USER" docker
Your container home ($XDG_DATA_HOME/agent-container/container-home) is
untouched: logins, settings, and history carry over.