One line in the n8n 2.35.5 release notes carries a useful lesson for every workflow and agent runtime: task runners should not be restarted merely because they are slow.

The distinction sounds obvious, but many recovery loops collapse duration and liveness into the same signal. A job crosses a time threshold, the supervisor assumes it is dead, and the worker is restarted. If the original worker was still making progress, that recovery can duplicate a tool call, discard partial state, or create a retry storm.

Duration is one signal, not the verdict

A robust liveness decision should combine several observations:

Is the worker still emitting a heartbeat?