Good questions:
The whole idea behind the UI api is that the plugin developer should not know if they are in a GUI or Shell, so if we are going to support explicitly shell-specific features, then it is probably necessary to ensure that those commands are distinguishable (made explicitly incompatible with the IDE / generic UI API)
To be clear, I envision things like: "ls, grep, dir, find, less, more" to be shell specific and likely not avaiable in the IDE.
e.g, this would allow you to specialize the command for the Shell, but would still create a problem because the UICommand would be picked up by the IDE: