Check the manual for
nil, this variable is a string that specifies a file or directory for Emacs to display after starting up, instead of the startup screen. If its value is a function, Emacs calls that function which must return a buffer which is then displayed. If its value is
t, Emacs displays the *scratch* buffer.
The web manual may not say it, but
C-h v for me clarifies that this also affects emacsclient use with no target file.
So you can just set this to a function that returns the org agenda buffer.
(setq initial-buffer-choice '(lambda () (get-buffer org-agenda-buffer-name)))
Notice that, with this solution, you don't need the after-init-hook. Just call
org-agenda-list sometime in your init file to ensure the buffer is available for the initial choice.