A common failure mode in long-running coding agents: the work is done, but the agent forgets the workflow's last steps. The commit never happens. The task is never marked complete. From the outside it looks like the agent stalled. From the agent's side, it's just sitting there with all the context still in memory, ready to be reminded.
Build Station 1.2.7 ships a smarter recovery for this case. When the 5-minute idle heuristic fires, we don't reap the agent immediately. We try to wake it up first.
Two steps instead of one
First idle window (5 minutes of silence). Build Station types a nudge directly into the same Claude session. A short note pointing out the silence and asking whether the work is done. Because the session is still alive — idle was log silence, not a crash — the agent receives the message with its full conversation context intact. Most of the time it picks up where it left off, runs the missing git commit, and calls complete_task properly.
Second idle window (still silent another 5 minutes after the nudge). Now we give up. Build Station POSTs to the server to release the task back to the queue, then runs local cleanup as before. The agent's slot opens up for someone else.
Why it matters
The previous behaviour killed the agent on first silence. That meant any task where the agent technically finished but forgot the workflow scaffolding ended up half-done in version control. A commit-less mess that someone had to clean up manually.
The nudge step is cheap. One tmux keystroke. It preserves expensive in-context memory and recovers the most common real-world failure without touching the trust model. Agents only run in projects you explicitly enabled.
Edge handling
All server calls in this path are best-effort. Any failure (missing API client, no agent key, 4xx, 5xx) is logged via tracing::warn! with the exact failure mode and ignored. Local cleanup runs unchanged. The reliability of the recovery loop never blocks the reliability of the cleanup loop.
Boring. Useful. The kind of fix you only notice when it stops happening.