   testProc.on 'error', (err) -> grunt.log.error("Process error: #{err}")
 
   testProc.on 'exit', (exitCode, signal) ->
-    if exitCode is 0 then done()
-    else notifyOfTestError(testOutput, grunt).then -> done(false)
+    if exitCode is 0
+      done()
+    else
+      notifyOfTestError testOutput, grunt, ->
+        done(false)
 
-notifyOfTestError = (testOutput, grunt) -> new Promise (resolve, reject) ->
-  if (process.env("TEST_ERROR_HOOK_URL") ? "").length > 0
+notifyOfTestError = (testOutput, grunt, callback) ->
+  if (process.env["TEST_ERROR_HOOK_URL"] ? "").length > 0
     testOutput = grunt.log.uncolor(testOutput)
     request.post
-      url: process.env("TEST_ERROR_HOOK_URL")
+      url: process.env["TEST_ERROR_HOOK_URL"]
       json:
         username: "Edgehill Builds"
         text: "Aghhh somebody broke the build. ```#{testOutput}```"
-    , resolve
-  else resolve()
+    , callback
+  else
+    callback()
+
 
 module.exports = (grunt) ->
+
+  grunt.registerTask 'run-edgehill-specs', 'Run the specs', ->
+    done = @async()
+    executeTests({cmd: './N1.sh', args: ['--test']}, grunt, done)
 
   grunt.registerTask 'run-spectron-specs', 'Run spectron specs', ->
     shellAppDir = grunt.config.get('nylasGruntConfig.shellAppDir')

fs = require 'fs'
path = require 'path'
request = require 'request'
Promise = require 'bluebird'
childProcess = require 'child_process'

executeTests = ({cmd, args}, grunt, done) ->

          "APP_PATH=#{executablePath}"
          "APP_ARGS="
        ]
        executeTests {cmd: npmPath, args: appArgs}, grunt, (succeeded) ->
          process.chdir('..')
          done(succeeded)
