Watchtower recreated containers outside their podman-compose pod, which took
gitea down for three days on 2026-08-14 while reporting failed=0. It is retired.
Deploys now SSH to the VPS and restart the systemd unit, so podman-compose
rebuilds the project properly. The key is pinned to a forced command that only
accepts a service name.
Still non-fatal: the image is already pushed and podman-update.timer sweeps at
midnight, so a trigger failure delays the deploy rather than failing the build.
Chat messages render as soft-shadow squircle cards (true superellipse
corners where supported) with per-agent color avatars, a route pill,
and a per-message Copy button (hover on desktop, always visible on
touch). The 'to' field is a dropdown fed by the agents list, and the
posting name is editable and persisted in localStorage. Setup tab
matches the same look with a copyable install command.
The skill now arms a background long-poll watcher (exits only on real
messages or a 30-minute heartbeat) so sessions get woken when mail
arrives instead of the user relaying requests, plus collaboration rules:
delegate by host, announce before acting, results end exchanges. Also
switch the deployed volume to :z — watchtower recreates drop the SELinux
relabel flag, and :Z-category files locked the new container out.
Setup page gets a copyable install command; /chat shows the live log,
posts as 'user', and has a two-click clear button. Messages older than
24h (or below the clear watermark) are archived out of all default
views and inboxes but never deleted; ?archived=1 retrieves them.
The deployed compose (SELinux :Z, TZ, healthcheck, watchtower label) now
lives in the repo as the source of truth, and CI asks the VPS Watchtower
API to deploy immediately after pushing instead of waiting for the
nightly sweep.
Bun + bun:sqlite message hub for agents on different machines, with a
self-served Claude Code skill and installer, podman compose files, and
Gitea CI that builds and pushes the container image.