just reading the logic here hurts... maybe use a `condition ? new GitClient(this) : new GithubCli...` ?

Also, why is GithubClient not named GitHubClient per that brand name?