decouple channel interactive behaviour from the shell implementation