Agentic Sandbox v2026.7.5
Agentic Sandbox v2026.7.5
Released: 2026-07-10 Tag: `v2026.7.5` Previous: `v2026.7.4` Compare: `v2026.7.4...v2026.7.5`
What this release is
v2026.7.5 is a control-plane reliability hotfix for the agent heartbeat/reaping and reconnection path. It closes an incident where a wedged libvirtd (VM subsystem) reaped a healthy, still-connected Docker agent and stranded its running sessions from the control plane (a Cockpit "soft-lock"). It builds on the v2026.7.4 libvirt-call isolation + circuit breaker, adds the missing liveness guard, makes reaped-but-alive agents recover, and gives operators a way to reconnect a live container without losing running work.
Highlights
- A libvirt stall can no longer reap healthy agents (#623, critical): the
stale reaper now treats the open gRPC control stream as ground-truth liveness (`is_stream_connected`). When a wedged-libvirt `admin_v2.instances.list` stall starves heartbeat ingestion, a live, still-connected Docker/host agent is kept registered (marked stale for visibility) instead of being disconnected and unregistered. A VM/libvirt-path fault can no longer take out live sessions on another runtime.
- Reaped-but-alive agents recover (#624): re-registration of a
previously-removed agent-id is accepted and reconciles reported sessions — a fresh registration re-drives `SessionQuery` and the #613 tmux adoption path, so a returning agent is reinstated without a new instance.
- Operator-initiated reconnect without killing the container (#625):
`agent-client` handles `SIGHUP` to re-dial and re-register in place (re-adopting existing tmux sessions), and every agent image now ships `agent-reconnect`. Recover a soft-locked agent with `docker exec <ctr> agent-reconnect` (or `docker kill --signal=HUP <ctr>`) — no restart, no lost work, no competing client.
- Release CI hardened against runner-saturation kills: the heavy x86_64
release-artifact builds on the shared `titan` runner are now serialized (`release-linux-packages` runs after `release-binaries`, plus a top-level `concurrency` group), preventing the intermittent "killed without logs" build failures.
Install / upgrade
curl -fsSL https://github.com/jmagly/agentic-sandbox/releases/download/v2026.7.5/agentic-sandbox-install.sh \
| bash -s -- --version v2026.7.5
Direct package installs:
sudo apt-get install ./agentic-sandbox_2026.7.5-1_amd64.deb
sudo dnf install ./agentic-sandbox-2026.7.5-1.x86_64.rpm
Agent-image consumers: pull the refreshed images so the SIGHUP reconnect handler and the `agent-reconnect` helper are present in-container.
Upgrade matrix
| Audience | Action |
|---|---|
| Control-plane / management operators | Upgrade to stop wedged-libvirt stalls from reaping healthy Docker/host agents. No config change required; the reaper now defers to control-stream liveness automatically. |
| Cockpit / fleet operators | After upgrade, a soft-locked instance (Inventory shows it, Sessions can't attach) can be recovered with `docker exec <ctr> agent-reconnect` without destroying the container. |
| Agent-image consumers | Repull agent images so `agent-client` carries the SIGHUP reconnect handler and `agent-reconnect` ships on `PATH`. |
| CI / release maintainers | Release-artifact builds are serialized on `titan`; for the definitive cross-workflow fix, set act_runner `capacity: 1` on the titan host. |
Verification
After upgrading the management server:
# A stale agent whose control stream is still open must NOT be unregistered.
# Watch the reaper defer instead of reaping (log line, not removal):
journalctl -u agentic-mgmt -f | grep -i "control stream is live"
Operator reconnect (soft-lock recovery), for a container whose agent was unregistered while the client + tmux stayed alive:
docker exec <container> agent-reconnect
# -> "agent-reconnect: sending SIGHUP to agent-client (pid N)"
# The agent re-registers and its sessions reappear:
curl -s http://127.0.0.1:8123/api/v1/agents/<agent-id>/sessions | jq
Full changelog: `CHANGELOG.md` under `[2026.7.5]`. Related issues: #623, #624, #625 (companion #613, #614, #597).