Most of the automation in my home lab has always been handled by scripts. The problem is that scripts are rigid. If I want an automation to behave differently based on available storage, the state of a service, or the output of another command, I have to account for every condition while writing it.