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

AudienceAction
Control-plane / management operatorsUpgrade 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 operatorsAfter 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 consumersRepull agent images so `agent-client` carries the SIGHUP reconnect handler and `agent-reconnect` ships on `PATH`.
CI / release maintainersRelease-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).