weird... why not just pass `app` and handle the args in `Keyboard`? It will refactor to destructuring much easier