Why are we checking for `:take` and `:take?` here? Are they expected from the callback? Why isn't it enough to handle them in `wait_input`?