for progress, you can bind the task to the progressbar and a label. for example, if your ssh connection was a few things things like "open" and "cd" and "ls", these three commands would be wrapped in one task interspersed with updateProgress() and updateMessage()
at the end, you either ui{} or fail{} and report back to the user
if you opt to post an event in ui{}, then you'll have subscribed to it in one or more places