docs: function (src, target) {
    /*
     * Copy a file from one path relative to the src, to another relative to the
     * target.
     * @param {String} from - the path to copy from, relative to the src.
     * @param {String} to - the path to copy to.
     * @return {Promise} - promise to copy
     */
    this.copy = function (from, to) {
      return copy(path.resolve(src, from), path.resolve(target, to))
    }
  
    this.src = {
      /*
       * The source path.
       */
      path: _.clone(src),
  
      /*
       * Read a file, relative to the source.
       * @param {String} from - the path to read from, relative to the source.
       * @return {Promise} - a promise to return the file's content.
       */
      read: function (from) {
        return read(path.resolve(src, from))
      }
  
    }
  
    this.target = {
      /*
       * The target path.
       */
      path: _.clone(target),
  
      /*
       * Copy a file from one path to another, relative to the target.
       * @param {String} from - the path to copy from, relative to the target.
       * @param {String} to - the path to copy to relative to the target.
       * @return {Promise} - promise to copy
       */
      copy: function (from, to) {
        return copy(path.resolve(target, from), path.resolve(target, to))
      },
  
      /*
       * Read a file, relative to the target.
       * @param {String} from - the path to read from, relative to the target.
       * @return {Promise} - a promise to return the file's content.
       */
      read: function (from) {
        return read(path.resolve(target, from))
      },
  
      /*
       * Write a file to a path, optionally with ejs locals, relative to the
       * target.
       * @param {String} to - the path to write to, relative to the target.
       * @param {String} what - the content to write, relative to the target.
       * @param {Object} locals - object to pass as locals to ejs.
       * @return {String} - the contents of the file.
       */
  
      write: function (to, what, locals) {
        return write(path.resolve(target, to), what, locals)
      },
  
      /*
       * Rename a file, relative to the target.
       * @param {String} from - the path to the file, relative to the target.
       * @param {String} to - the new path to the file, relative to the target.
       * @return {Promise} - a promise to rename the file.
       */
  
      rename: function (from, to) {
        return rename(path.resolve(target, from), path.resolve(target, to))
      },
  
      /*
       * Remove files, relative to the target.
       * @param {String[]} what - the path(s) to read from, relative to the target.
       * @return {Promise} -  a promise to remove the file
       */
      remove: function (what) {
        return remove(target, what)
      },
  
      /*
       * Execute a child process at the specified working directory, relative to
       * the target.
       * @param {String} cmd - the command to run.
       * @param {string} cwd - the working directory, relative to the target
       * @return {Promise} - a promise for the standard out.
       */
      exec: function (cmd, cwd) {
        return execute(cmd, cwd ? path.resolve(target, cwd) : target)
      }
    }
  }