Hi @Christoph Neumaier and welcome to the Flyte community.
Well, I've had a similar question, so let me try to answer from what I know (others can jump and correct/expand).
Every interaction that Flyte performs with any outside system (by outside I mean even Kubernetes) uses a plugin.
Let's say you have a workflow and one of the tasks uses MMCloud, for example. With a regular plugin, a K8s Pod would be created for each task, so you'd have a Pod whose sole purpose is to execute the request to the MMCloud. Doesn't sound much efficient in terms of resource consumption and overall latency right? Also, the person/team who wrote that plugin has to be not only proficient in Go (not typical in MLOps/Data teams) but to know intimately how to integrate that plugin into Propeller, Flyte's execution engine.
In the other hand, if you use, say, the MMCloud Agent, your Task will contact a "Connection pool" on a long-running service (one that could even run multiple different Agents concurrently) so your resource consumption footprint is significantly reduced and the overall performance could be better; so much so you can even have Synchronous Agents. And, finally, Agents are written in Python (potentially it could be other languages too as it uses protobuf for serialization).
Does that help?