package My::App;
    use Moose;
    use Foo;
    
    sub run {
        my ($self, $cmd) = @_;
        if (Foo->meta->has_command($cmd)) {
            Foo->new->$cmd;
        }
        elsif ($cmd eq 'cmdlist') {
            print join ', ', map { $_->name } Foo->meta->get_all_commands;
        }
    }