command line interface separated from logic