The central idea is: a toolset has one required interface, and everything else is an optional capability. Lifecycle management is then layered around it with StartableToolSet.
That separation is important: “provides tools,” “needs initialization,” “runs background work,” and “can reconnect” are different things.
type ToolSet interface {