One task per session, sometimes split into multiple smaller tasks in the same session if they’re closely related.
Usually it’s like “implement a worker/class/module for x” (which will act as a model) and when it did that successfully (with tests and such) I commit everything and I continue the session building the GUI, since the GUI requires deep knowledge of the thing it just made.
If I tell it to make the GUI and worker at the same time, it will usually be poorly written with logic in the views rather than in a model, and it will be tested through views while I want dedicated tests for the model