I don't know about all your other ideas, but <https://github.com/c-blake/cligen> is pretty automatic as CLIs go. The `shoe` approach of just populating variables still leaves a need for users to specify activity. `cligen` just takes that one step further to have the user specify the proc instead - then the activity is whatever the proc does.
In taking that one step, it makes it easy for application logic to be agnostic with regard to if it is even inside a CLI at all (or if `cligen` is even installed at all!). Indeed, one could wrap the very same proc(s) in a CLI or a web form or GUI form (for simple procs) discussed briefly in [one of many closed issues](https://github.com/c-blake/cligen/issues/25#issuecomment-381324475). This kind of design could blur the lines between "library", "cli", "web form", "GUI" which seems to be the kind of overall vibe I am getting from your post. Just one possible direction, of course.
