One obvious thing that Intern does not handle out of the box is starting and stopping the WebDriver server automatically before running tests. Fortunately, you can automate this task with Grunt.

As a matter of fact, by reading the Intern documentation you feel that getting Intern to work is quite complicated. You need several shells open and few running processes.

Hopefully, there is a nice Grunt plugin called grunt-run that takes care of starting/stopping services automatically, so it can automate that process for you. First thing, install it as usual:

npm install grunt-run --save-dev

Then, configure it to start the WebDriver process before running Intern and to stop the process once Intern tests are done:

Gruntfile.js
module.exports = function (grunt) {

  // Load the Intern task
  grunt.loadNpmTasks('intern');

  grunt.initConfig({
    // ...

    intern: {
      options: {
        runType: 'runner', // defaults to 'client'
        config: 'tests/intern', // your intern.js file
      },
      functional: {
        // my functional task, default options
      },
    },

    run: {
      options: {
        wait: false
      },
      webdriver: {
        cmd: 'chromedriver', // make sure is in your PATH
        args: [
          '--port=4444',
          '--url-base=wd/hub'
        ]
      }
    },

    // ...
  });

  grunt.registerTask('test', ['run:webdriver','intern:functional','stop:webdriver']);

That’s it.
If you want to run your tests on Firefox and other browsers, you can automate the Selenium server process. Just change the webdriver task to:

webdriver: {
  cmd: 'java',
  args: [
    '-jar', // use your path and version
    'tests/lib/selenium-server-standalone-2.45.0.jar'
  ]
}

There is no need to keep the chromedriver command because Selenium server will use it automatically to test on Chrome.