   #
   # Returns an Array of help commands for running scripts.
   helpCommands: ->
-    @commands.sort()
+    unless @commands
+      @logger.debug "helpCommands: haven't populated yet"
+      @commands = []
+
+      for script, scriptDocumentation of @documentation
+        @logger.debug "helpCommands: checking #{script} for commands"
+        if scriptDocumentation.commands
+          for command in scriptDocumentation.commands
+            @logger.debug "helpCommands: adding '#{command}' from #{script}"
+            @commands.push(command)
+    @commands
+
 
   # Private: load help info from a loaded script.
   #

  #
  # Returns nothing.
  parseHelp: (path) ->
    Fs.readFile path, 'utf-8', (err, body) =>
      throw err if err?

      for i, line of body.split "\n"
        break unless line[0] is '#' or line.substr(0, 2) is '//'

        cleaned_line = line[2..line.length].replace("\n", "")

        if cleaned_line.length isnt 0 and cleaned_line.trim().toLowerCase() isnt 'none'
          if cleaned_line[0..1] isnt '  '
            current_section = cleaned_line.replace(':', '').toLowerCase()
          else
            if current_section is 'commands'
              @commands.push cleaned_line.trim()

  # Public: A helper send function which delegates to the adapter's send
  # function.

  # httpd       - A Boolean whether to enable the HTTP daemon.
  # name        - A String of the robot name, defaults to Hubot.
  constructor: (adapterPath, adapter, httpd, name = 'Hubot') ->
    @name         = name
    @brain        = new Brain
    @alias        = false
    @adapter      = null
    @Response     = Response
    @listeners    = []
    @loadPaths    = []
    @enableSlash  = false
    @logger       = new Log process.env.HUBOT_LOG_LEVEL or 'info'

    @parseVersion()
    @setupConnect() if httpd
