This simply is an artifact of the original design of CLI. You start by writing the command or function, and then you provide parameters or arguments. The order in which these things are provided leads to poor discoverability.<p>Instead of starting with the command, we should start with an argument. Given a &quot;thing&quot; (that likely exists in your UI), such as a file, a song, a person, a chunk of text, show me the list of commands that accept it as a parameter. You&#x27;ll quickly discover that a chunk of text can be passed to functions such as &quot;tweet&quot;, &quot;copy to clipboard&quot;, &quot;create memo&quot;, &quot;search on Google&quot;, &quot;translate&quot;. Congratulations, you just invented the contextual menu, which people have been using for decades.<p>&quot;Things&quot; are easy to discover; you can see them. Commands that interact with them, are not as easy to discover; you can&#x27;t see them. Let people touch or name things (with or without a query language), and once they grabbed the instance they care about, show them what can be done with it. It&#x27;s that simple.<p>Before:<p>&gt; &#x2F;tweet &quot;some random thoughts&quot; &#x2F;&#x2F; where you had to know &#x27;tweet&#x27; existed as a command<p>After:<p>&gt; &quot;some random thoughts&quot; -&gt; tweet &#x2F;&#x2F; where &#x27;tweet&#x27; was auto-suggested, along with &#x27;search&#x27;, &#x27;translate&#x27;, &#x27;copy&#x27;, etc.