It is not possible for a shell to know how to perform completions for every binary on a users machine. Shell completion scripts define the auto-completion for each specific binary, so for autocomplete to work (well) it needs to be supported both by the shell and by the application. This post is about writing shell completion scripts (the application side, not the shell side).