A plan is a generator that yields messages:
def plan(): yield Msg('open_run') yield Msg('close_run')