code: def run!
      # load agent from config or cli opts
      agent = load_agent()
  
      fix_ownership()
  
      # debug mode, stay in front
      if @config[:debug] then
        Logging::Logger.root.add_appenders("stdout")
        return start_websocket_client()
      end
  
      # start daemon
      validate_argv()
      daemon_dir = Bixby.path("var")
      ensure_state_dir(daemon_dir)
      close_fds()
  
      daemon_opts = {
        :dir        => daemon_dir,
        :dir_mode   => :normal,
        :log_output => true,
        :stop_proc  => lambda { logger.info "Agent shutdown on service stop command" }
      }
  
      Daemons.run_proc("bixby-agent", daemon_opts) do
        Logging.logger.root.clear_appenders
        start_websocket_client()
      end
    end
docs: Run the agent app!
  
   This is the main method. Will boot and configure the agent, connect to the
   server and start the daemon.