No, doing it from a UI app, as an agent, which is the containing app in /Applications. So... yes, still having issues. 😄
ETA: I am sure it is my code that's doing something wrong, but I can't figure out what.
Before we had two extensions, the flow was: app startup -> activate system extension -> load preferences -> find manager -> load preferences from manager -> set isEnabled to YES -> save preferences. The new flow is largely the same, except that I'm also using notifications to tell when the configuration changes, because trying to do both extensions at the same time fails with permission denied; this means that when one of the extensions is activated and enabled, it sets a property which then checks the other one's state, and if it hasn't been set to YES then it starts that process.
So, clearly (to me, anyway) that's where it's happening. But what I don't understand is why.