We shouldn't assume tools are locally installed as that introduces friction, but more importantly, makes the dev env non hermetic. In general we use go tools (with a dedicated Go module under hack/tools for isolation) for tools that can be distributed with go modules, and for those that can't (like clang-format), we have as script that fetches a pinned version (see protoc as an example1).
We shouldn't assume tools are locally installed as that introduces friction, but more importantly, makes the dev env non hermetic. In general we use
go tools(with a dedicated Go module underhack/toolsfor isolation) for tools that can be distributed with go modules, and for those that can't (like clang-format), we have as script that fetches a pinned version (see protoc as an example1).