function onCommand( name, options ) {
		var opts;
		var err;
		if ( arguments.length === 0 ) {
			repl._ostream.write( help() );
			return;
		}
		if ( !isString( name ) ) {
			err = new TypeError( format( 'invalid argument. First argument must be a string. Value: `%s`.', name ) );
			debug( 'Error: %s', err.message );
			repl._ostream.write( 'Error: '+err.message+'\n' );
			return;
		}
		if ( !hasOwnProp( TUTORIALS, name ) ) {
			err = new Error( format( 'invalid argument. Unrecognized tutorial name. Value: `%s`.', name ) );
			debug( 'Error: %s', err.message );
			repl._ostream.write( 'Error: '+err.message+'\n' );
			return;
		}
		debug( 'Tutorial: %s', name );

		// Define default options:
		opts = {
			'borderTop': '*',
			'borderBottom': '*',
			'borderLeft': '* ',
			'borderRight': ' *',
			'autoClear': true,
			'counter': 'progress',
			'workspace': 'tutorial-'+name+'-'+(repl._internal.presentation.counter+1 )
		};

		// Handle user-provided options...
		if ( arguments.length > 1 ) {
			if ( !isPlainObject( options ) ) {
				err = new TypeError( format( 'invalid argument. Options argument must be an object. Value: `%s`.', options ) );
				debug( 'Error: %s', err.message );
				repl._ostream.write( 'Error: '+err.message+'\n' );
				return;
			}
			// Punt option validation to the presentation API...
			if ( hasOwnProp( options, 'borderTop' ) ) {
				opts.borderTop = options.borderTop;
			}
			if ( hasOwnProp( options, 'borderBottom' ) ) {
				opts.borderBottom = options.borderBottom;
			}
			if ( hasOwnProp( options, 'borderLeft' ) ) {
				opts.borderLeft = options.borderLeft;
			}
			if ( hasOwnProp( options, 'borderRight' ) ) {
				opts.borderRight = options.borderRight;
			}
			if ( hasOwnProp( options, 'counter' ) ) {
				opts.counter = options.counter;
			}
			if ( hasOwnProp( options, 'autoClear' ) ) {
				opts.autoClear = options.autoClear;
			}
			if ( hasOwnProp( options, 'workspace' ) ) {
				opts.workspace = options.workspace;
			}
		}
		debug( 'Options: %s', JSON.stringify( opts ) );

		debug( 'Starting tutorial...' );
		return repl._context.presentationStart( TUTORIALS[ name ].text, opts );
	}
Starts a tutorial if provided a recognized tutorial name; otherwise, returns the list of available tutorials.

@private
@param {string} [name] - tutorial name
@param {Options} [options] - tutorial options
@param {string} [options.borderTop='*'] - top border character sequence
@param {string} [options.borderBottom='*'] - bottom border character sequence
@param {string} [options.borderLeft='* '] - left border character sequence
@param {string} [options.borderRight=' *'] - right border character sequence
@param {(boolean|string)} [options.counter='progress'] - slide counter
@param {string} [options.workspace] - REPL workspace name
@param {boolean} [options.autoClear=true] - boolean indicating whether to automatically clear the screen before writing a rendered slide to the REPL
@returns {(NonNegativeInteger|void)} tutorial presentation identifier