The extension asks SillyTavern itself for the user's own lorebook content so it can be included in the writing prompt, exactly as advertised. Nothing downloaded is ever run as code, and no data is sent anywhere outside the user's own SillyTavern setup.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.download-to-execution. The match applies to this repository.
Contextual assessment: Detailed technical wording was omitted by the public report safety filter.
This is straightforward interface code for the extension's popup window. Nothing is hidden or encoded, and it doesn't do anything the documentation doesn't describe.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.obfuscated-code. The match applies to this repository.
Contextual assessment: The scanner raised a low-confidence obfuscation signal, but the supplied source is a plainly written modal UI class. It builds form controls with a jQuery template, caches element references, populates dropdowns from the SillyTavern context, and escapes character display names before inserting them into option markup. There is no obfuscation, encoded content, hidden execution, or data flow beyond the documented UI and generation features.
The extension asks SillyTavern for the lorebook entries the user already has on their own machine and shows them in a picker dialog so the user can choose which ones to include in a generated scenario. It only talks to the local SillyTavern server, does not run or evaluate anything it receives, and properly sanitizes the displayed text. This matches the feature the extension advertises, and the automated scanner's warning is a false alarm from seeing both a download and interface-building code in the same file.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.download-to-execution. The match applies to this repository.
Contextual assessment: The flagged region contains a fetch to a same-origin SillyTavern endpoint that loads the user's own world info book entries, first attempting the host context's loadWorldInfo method and falling back to a POST to the local world info API with host-supplied request headers. The retrieved data is parsed as JSON and used only to build the world info selection modal; text fields are passed through an HTML escaping helper before insertion, and no dynamic evaluation, script injection, external destination, or persistence occurs. This is a direct, proportionate implementation of the project's documented World Info entry-picker feature, and the correlation between a network primitive and a DOM-building sink does not constitute a download-to-execution path. The unescaped entry identifier interpolation is a minor hygiene note at most, since the values originate from the user's own locally stored world books rather than an attacker-controlled source.
The file looks like ordinary, human-readable code for a roleplay scenario extension. Despite the scanner's automated suspicion, nothing here is hidden or disguised, and every action it takes is described in the project's documentation.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.obfuscated-code. The match applies to this repository.
Contextual assessment: The scanner flagged an obfuscation signal at low confidence, but the supplied source is plain, readable JavaScript. It imports SillyTavern core modules, registers slash commands, adds a UI button, lazily imports local project modules, and exposes a small public API on the window object. There is no encoded payload, eval, minified blob, string deobfuscation, or concealed behavior; all capabilities are disclosed in the README and match the extension's stated purpose.
This file handles the extension's preferences screen and saves your choices on your own device. The code is completely open and readable, and it does only what the project's documentation says it does.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.obfuscated-code. The match applies to this repository.
Contextual assessment: The scanner flagged an obfuscation signal at low confidence, but the supplied source is readable settings-management code: default configuration values, a settings panel injected into the SillyTavern extensions drawer, event listeners that update and persist settings to localStorage via the host's debounced save function, and a slash-command-driven profile listing. No obfuscation, encoded payloads, hidden network calls, or concealed execution exist. Persisted data is user-authored configuration stored locally, matching the documented Settings feature.
World book entry identifier interpolated into HTML without escaping
low risk · medium confidence
Most of the text shown in the picker is cleaned before being added to the page, but the small identifier number for each entry is not. In practice these identifiers come from the user's own data and are safe, but cleaning them too would be a simple consistency improvement.
Technical assessment
When rendering each entry row, most text fields are passed through the HTML escaping helper, but the entry identifier is interpolated directly into a template string that is then appended to the document. World book entry identifiers are normally server-generated and not attacker-controlled, so this is not a demonstrated exposure; however, applying the same escaping to every interpolated value would make the rendering uniformly defensive against malformed or unexpected identifier values.
Impact: low · Exploitability: unlikely
Developer action: Apply the same HTML escaping helper to the entry identifier when building the entry row template.