def start(options = {})
      setup(options)
      UI.debug "Guard starts all plugins"
      Runner.new.run(:start)
      listener.start

      watched = Guard.state.session.watchdirs.join("', '")
      UI.info "Guard is now watching at '#{ watched }'"

      exitcode = 0
      begin
        while interactor.foreground != :exit
          Guard.queue.process while Guard.queue.pending?
        end
      rescue Interrupt
      rescue SystemExit => e
        exitcode = e.status
      end

      exitcode
    ensure
      stop
    end
def start(options = {})
      setup(options)
      UI.debug "Guard starts all plugins"
      Runner.new.run(:start)
      listener.start

      watched = Guard.state.session.watchdirs.join("', '")
      UI.info "Guard is now watching at '#{ watched }'"

      exitcode = 0
      begin
        while interactor.foreground != :exit
          Guard.queue.process while Guard.queue.pending?
        end
      rescue Interrupt
      rescue SystemExit => e
        exitcode = e.status
      end

      exitcode
    ensure
      stop
    end
Start Guard by evaluating the `Guardfile`, initializing declared Guard
 plugins and starting the available file change listener.
 Main method for Guard that is called from the CLI when Guard starts.

 - Setup Guard internals
 - Evaluate the `Guardfile`
 - Configure Notifiers
 - Initialize the declared Guard plugins
 - Start the available file change listener

 @option options [Boolean] clear if auto clear the UI should be done
 @option options [Boolean] notify if system notifications should be shown
 @option options [Boolean] debug if debug output should be shown
 @option options [Array<String>] group the list of groups to start
 @option options [String] watchdir the director to watch
 @option options [String] guardfile the path to the Guardfile
 @see CLI#start