and the beauty of CLI is that, unlike with a GUI, a CLI can serve as both a human UI, and a machine UI or API. and it does the latter for free. give me a binary-only program with a CLI interface and I can build other things on top of it, put it into a pipeline, turn it into a cronjob, etc. give me a binary-only GUI? often nothing you can build on it
You can automate GUIs using accessibility controls and/or desktop message bus. If an app is modular, as it should be, it does not matter one bit how many UIs it exposes.
Also all CLIs are not the same — try automating ncurses application.