SillyTavern/SillyTavern · error · Error

Error running Quick Reply "${name}": ${error.message}

Error message

Error running Quick Reply "${name}": ${error.message}

What it means

A wrapper error thrown after globalThis.executeQuickReplyByName rejects. The original error from the Quick Reply execution is captured in a try/catch and re-thrown with the Quick Reply's name and the underlying message. It surfaces any failure inside the matched Quick Reply's own slash-command script.

Source

Thrown at public/scripts/slash-commands.js:4262

        });
        const result = await closure.execute();
        return result.pipe;
    }

    if (typeof globalThis.executeQuickReplyByName !== 'function') {
        throw new Error(t`Quick Reply extension is not loaded`);
    }

    try {
        name = name.trim();
        /**@type {ExecuteSlashCommandsOptions} */
        const options = {
            abortController: args._abortController,
            debugController: args._debugController,
        };
        return await globalThis.executeQuickReplyByName(name, args, options);
    } catch (error) {
        throw new Error(t`Error running Quick Reply "${name}": ${error.message}`);
    }
}

/**
 *
 * @param {import('./slash-commands/SlashCommand.js').NamedArguments} param0
 * @param {string} [reason]
 */
function abortCallback({ _abortController, quiet }, reason) {
    if (quiet instanceof SlashCommandClosure) throw new Error(t`argument 'quiet' cannot be a closure for command /abort`);
    _abortController.abort((reason ?? '').toString().length == 0 ? t`/abort command executed` : reason, !isFalseBoolean(quiet?.toString() ?? 'true'));
    return '';
}

async function delayCallback(_, amount) {
    if (!amount) {
        console.warn('WARN: No amount provided for /delay command');
        return '';

View on GitHub (pinned to 8172dcd0ee)

Solutions

  1. Read the embedded error.message: it is the real cause from inside the Quick Reply.
  2. Open the Quick Reply in Extensions > Quick Reply and run its slash-command body directly in the console to reproduce.
  3. Fix the underlying command/macro/variable reference inside the Quick Reply definition.
  4. Wrap the call in a try/catch to degrade gracefully if the Quick Reply is best-effort.

Example fix

// before
return await globalThis.executeQuickReplyByName('MyQR', args, options);

// after
try {
    return await globalThis.executeQuickReplyByName('MyQR', args, options);
} catch (e) {
    console.error(`MyQR failed: ${e.message}`);
    return '';
}
Defensive patterns

Strategy: try-catch

Try / catch

try {
    return await globalThis.executeQuickReplyByName(name, args, options);
} catch (e) {
    console.error(`Quick Reply '${name}' failed: ${e.message}`);
    return '';
}

Prevention

When it happens

Trigger: A Quick Reply whose slash-command body throws (bad macro, undefined command, syntax error in a closure), or whose referenced script/preset is missing. The name passed must be an existing Quick Reply label; the inner error is whatever that Quick Reply produced.

Common situations: Editing a Quick Reply and introducing a typo in a /command; a Quick Reply that references a variable not defined in the current chat; a Quick Reply whose underlying script relies on another extension that is now disabled.

Related errors


AI-assisted analysis of SillyTavern/SillyTavern@8172dcd0ee (2026-08-13). Data as JSON: /api/errors/d59709282b4b55c4. Report an issue: GitHub.