code: def run(self, host=None, port=None, debug=None, use_reloader=None,
              open_browser=False):
          
          if host is None:
              host = self.config['HOST']
          if port is None:
              port = self.config['PORT']
          if debug is None:
              debug = self.debug
          if use_reloader is None:
              use_reloader = self.config['DEBUG_GRIP']
  
          # Verify the server is not already running and start
          with self._run_mutex:
              if self._shutdown_event:
                  raise AlreadyRunningError()
              self._shutdown_event = threading.Event()
  
          # Authentication message
          if self.auth and not self.quiet:
              if isinstance(self.auth, tuple):
                  username, password = self.auth
                  auth_method = ('credentials: {0}'.format(username)
                                 if username
                                 else 'personal access token')
              else:
                  auth_method = type(self.auth).__name__
              print(' * Using', auth_method, file=sys.stderr)
  
          # Get random port manually when needed ahead of time
          if port == 0 and open_browser:
              sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
              sock.bind(('localhost', 0))
              port = sock.getsockname()[1]
              sock.close()
  
          # Open browser
          browser_thread = (
              start_browser_when_ready(host, port, self._shutdown_event)
              if open_browser else None)
  
          # Run local server
          super(Grip, self).run(host, port, debug=debug,
                                use_reloader=use_reloader,
                                threaded=True)
  
          # Signal to the polling and browser threads that they should exit
          if not self.quiet:
              print(' * Shutting down...')
          self._shutdown_event.set()
  
          # Wait for browser thread to finish
          if browser_thread:
              browser_thread.join()
  
          # Cleanup
          self._shutdown_event = None
docs: Starts a server to render the README.