According to Prefect's Hybrid Execution model, Agents "watch for any scheduled flow runs and execute them accordingly on your infrastructure," while Executors "are responsible for actually running tasks [...] users can submit functions and wait for their results."
While this makes some sense from a high-level design perspective, in practice how are these parts actually composed? For instance, if I specify that a Flow Run should make use of Docker Agent and a Dask Executor, what interactions are concretely happening between the Agent and the Executor? What if I use a Docker Agent and a Local Executor? Or a Local Agent and a Dask Executor?
In short, what exactly is happening at each step of the process within each component — that is, on the Server, the Agent, and the Executor?