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
- Read the embedded error.message: it is the real cause from inside the Quick Reply.
- Open the Quick Reply in Extensions > Quick Reply and run its slash-command body directly in the console to reproduce.
- Fix the underlying command/macro/variable reference inside the Quick Reply definition.
- 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
- Test Quick Reply bodies standalone before wiring them into callables.
- Keep QR scripts self-contained (avoid undeclared variables).
- Wrap QR calls in try/catch when their failure is non-fatal.
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
- "${name}" is not callable.
- Quick Reply extension is not loaded
- No quick reply at index "${idx}"
- No quick reply with label "${label}" in set "${setName}" fou
- No quick reply set with name "${name}" found.
AI-assisted analysis of SillyTavern/SillyTavern@8172dcd0ee (2026-08-13).
Data as JSON: /api/errors/d59709282b4b55c4.
Report an issue: GitHub.