How to create a custom ssh shell in elixir?

My Google-Fu has failed me and i am stuck if any one can help

I am trying to create a custom ssh shell in elixir using the erlang :ssh library so that i can ssh into my application with a restricted set of options/commands available. I can log in successfully (using passwords is fine for this use) but at that point i can not send anything to the client or receive anything from the client (at least i can not work out how).

I have read the erlang ssh library document and looked at an example library (esshd) but the information i need is not clear and the library does not work for me (and no dev help). Please see attached example code.

def init(_opts) do
      Logger.info("--> Starting Communications.SSHD process")

      # start the erlang library
      :ssh.start()
      # config the server
      {ok, sshd2} = :ssh.daemon(10022, 
                              shell: &on_shell/2,
                              system_dir: './priv/daemon', 
                              user_passwords: [{'test', 'testpass'}], 
                              user_dir: './') 

      # link the ssh daemon pid to ourselves
      Process.link sshd2

      {:ok, []}
    end

    def on_shell(username, {ip, port} = peer_address) do
      Logger.info("Onshell Called")
      # spawn a thread to handle the shell
      spawn(__MODULE__, handle_shell, [])
    end

    # handle the shell commands
    def handle_shell() do
      Logger.info("Shell staretd #{inspect Process.group_leader}")
      _ = :io.setopts(Process.group_leader, binary: true, encoding: :unicode)  

      # this never appears on client or server console

      IO.puts "Interactive example SSH shell - type exit ENTER to quit"
    end

Any ideas?

Thanks

Tom