В чем разница между grunt и grunt-cli?
grunt-cli (grunt-command-line-interface) - это всего лишь способ запустить grunt-task из консоли
grunt - основной пакет с базовыми тасками
Для корректной работы нужно ставить и то и другое, но если grunt-cli должен быть установлен глобально в системе (npm install -g grunt-cli), то grunt лучше ставить локально относительно проекта для привязки к определенной версии grunt.
Например - в корне проекта создайте фаил package.json (echo '{}' > package.json),  далее устанавливаем grunt (npm install grunt --save), --save указывает что пакет нужно сохранить в файле package.json и прописать версию установленного пакета.
В package.json будут такие строки:{
  "dependencies": {
    "grunt": "~0.4.2"
  }
}
Теперь grunt-cli будет искать в текущей директории node_modules/grunt и работать с той версией, которая установлена локально для проекта.
grunt-cli - это command line interface, который позволяет работать с grunt в консоли (терминале).