Well, that was an interesting two hours…

After updating my Mac mini M1 to macOS 26, some of my LaunchAgents suddenly couldn’t connect to services on my local network (UDP and TCP).

In System Settings, the binaries had Local Network Privacy (LNP) explicitly allowed — yet the connections still failed.

Running the exact same commands manually in Terminal worked.

Turns out that LNP doesn't work if the Mach-O binary has no UUID – even if it’s explicitly allowed in Settings.

Apple documents this here:
https://developer.apple.com/documentation/technotes/tn3179-understanding-local-network-privacy#Build-time-considerations

Since Go 1.24, the Go compiler embeds a UUID in the binary automatically. Updating to the latest Go version fixed the issue immediately.

The reason it worked in Terminal? The process inherited the LNP permission of the Terminal.

Bonus lesson: AI had no idea what was wrong. Reading Apple’s technical notes still pays off.

TN3179: Understanding local network privacy | Apple Developer Documentation

Learn how local network privacy affects your software.

Apple Developer Documentation