Privacy Policy for S.AI Toolkit Extension

Effective Date: June 13, 2026 Version: 1.6

Thank you for using the S.AI Toolkit Extension. Your privacy is important to us. This Privacy Policy explains how we collect, use, and protect your data when you use our browser extension.


1. Data Collection

The S.AI Toolkit Extension collects and processes limited metadata necessary to provide its functionality. By default, no personal information or message content is collected. Two opt-in features send or locally persist additional data: Message Recovery (section 1.3) captures the text of a failed outgoing message and stores it locally only; Drive Sync (section 1.5) uploads generation statistics to your own Google Drive account when you initiate a sync.

1.1 Data Observed Automatically

Local API Observation: The extension observes certain API responses within your browser (such as GET /messages, GET /characters, and POST /chat) to extract metadata for visualization, debugging, and export features. This includes:

This observation occurs only within your local browser environment. The extension does not transmit, log, or send any data externally, except as described in section 1.5 (Drive Sync, opt-in).

1.2 Data Stored Locally

The extension stores limited information locally using the browser's storage.local API and a local IndexedDB database:

All stored data remains local to your device, except when Drive Sync is explicitly triggered by the user (section 1.5).

1.3 Message Recovery (Opt-In Feature)

What it is. SpicyChat's chat backend occasionally fails — Cloudflare 502 errors, CORS preflight failures, network drops, request timeouts. When this happens the message the user just typed is silently destroyed: the input box is cleared the instant the request is issued, and the only on-screen affordance is a generic "Oops! Something went wrong" banner. Long, carefully-written messages disappear with no way to recover them.

The optional Message Recovery feature exists solely to address this. When enabled, the extension captures the text of an outgoing chat message at the moment of send, holds it in memory until the request's outcome is known, and persists it locally only if the send fails — so the user can click a "Recover message" button to restore what they typed.

How to enable / disable. The feature is found in the Features tab of the S.AI Settings modal under the label "Message Recovery". The default is OFF. When OFF, message text is never read into the extension's code under any circumstance. When ON, the user is on notice that message text may be captured.

What is captured, and when.

Capture happens only at send time. If the request succeeds, the in-memory snapshot is discarded immediately and nothing is written to storage. If it fails, the snapshot is written to chrome.storage.local under the key failedMessages.

What is not captured.

Storage limits and eviction.

Transmission. Captured messages are stored on the user's device only. The extension does not transmit, sync, log, upload, or otherwise send this data anywhere — including to any of the extension author's services. The browser's storage.local API is the only sink.

Source-level transparency. The interception, capture, persistence, and recovery code is documented inline in xhr-intercept.js (network-level capture and disclosure header) and content.js (storage and UI). Reviewers can verify the behavior end-to-end.

1.4 Custom Background Image (Opt-In)

The Custom Style feature includes an optional background image upload. If the user uploads an image, it is converted to a data URL entirely within the browser and stored in chrome.storage.local under the customStyleValues key. The image data never leaves the device and is not transmitted anywhere. Users can remove it at any time by clicking Clear next to the background image field or by using Reset to Defaults or Clear All Data in the settings modal.

1.5 Drive Sync (Opt-In Feature)

What it is. The optional Drive Sync feature allows generation statistics (messageGenerationStats) to be synchronised across multiple devices via a file stored in the user's own Google Drive. Sync is user-initiated by clicking Sync Now in the popup or the Settings modal. An optional Auto-sync setting (off by default) can additionally run the same sync on a user-chosen interval; it syncs the same data to the same place and can be turned off at any time.

How to enable / disable. Manual sync requires no separate toggle — it runs only when the user clicks Sync Now. Automatic sync is controlled by the Auto-sync checkbox (off by default) and an interval selector in the Settings modal's Data tab. The user can disconnect at any time using the Disconnect button there, which clears all locally cached Drive credentials (including the refresh token) and stops any future syncs — manual and automatic — until the user re-authenticates.

What is sent, and when.

OAuth and authentication.

What is not transmitted.

Merge behaviour. When syncing, the extension performs a deep merge of local and remote stats, retaining the richer data set from each source. No data is overwritten without comparison; entries present only on one side are preserved.

Revocation. Users can revoke the extension's Drive access at any time from their Google Account security settings or by clicking Disconnect in the extension, which removes the locally cached token and file reference.


2. Data Usage

Collected data is used solely for the following purposes:


3. Data Sharing

The S.AI Toolkit Extension does not share any data with third parties under normal operation. All data remains on your device and is processed entirely within your browser.

Exception — Drive Sync (opt-in): When a sync runs — either when the user clicks Sync Now or, if Auto-sync is enabled, on the user's chosen interval — messageGenerationStats is uploaded to the user's own Google Drive account via Google's Drive API. This data is stored in a file visible only to this extension (drive.file scope). It is not shared with the extension author or any other party. The user can revoke this access at any time (see section 1.5).

There is no background data collection and no analytics pipeline. The only extension-author-operated endpoint the extension contacts is a stateless OAuth token broker used solely to complete Google sign-in and token refresh for Drive Sync (see section 1.5); it processes only OAuth tokens — never generation statistics, message text, or other user content — and retains nothing. No generation statistics or user content are ever sent to the extension author.


4. Data Security

We take reasonable measures to protect your local data:


5. Data Storage and Unlimited Storage Permission

The S.AI Toolkit Extension stores user preferences, configuration profiles, and generation statistics locally on your device, using the browser's storage.local API and a local IndexedDB database (the latter holds the generation-statistics records). Over time, this data (such as message metadata, model settings, generation records, and any uploaded background image) may grow beyond Chrome's default 5 MB limit.

To prevent data loss and ensure smooth functionality, the extension requests the unlimitedStorage permission. This permission allows the extension to store more than 5 MB of data locally only (across storage.local and IndexedDB) — it does not enable access to additional system resources or external data, nor does it transmit any information outside your browser.

Key points:

This permission is requested solely to ensure the extension continues to operate reliably as your locally stored statistics and preferences grow over time.


6. User Control

You have full control over your data at all times:


7. Permissions

The S.AI Toolkit Extension requires the following browser permissions:

These permissions are used only within your browser and do not enable any external data collection. The extension does not use the webRequest or scripting permissions; API observation is performed by a script the extension injects into the page that wraps the page's own fetch/XHR calls locally.


8. Changes to This Privacy Policy

We may update this Privacy Policy periodically. Updates will be posted on this page with a revised effective date. Continued use of the extension after updates indicates acceptance of the revised terms.

VersionDateSummary of changes
1.62026-06-13Drive Sync OAuth moved to Authorization Code + PKCE with a refresh token and a stateless author-operated token broker (§1.5, §3, §4); generation statistics now stored in a local IndexedDB database (§1.2, §5); disclosed the opt-in Auto-sync (§1.5); corrected the Permissions list — added alarms/tabs and host access, removed scripting/webRequest (§7); conversation IDs are no longer part of the stored or synced statistics (§1.5).
1.52026-06-08Added Drive Sync (§1.5); updated data sharing, security, permissions, and user control sections.
1.42026-06-03Added Custom Background Image (§1.4); updated storage, customization, and user control sections.
1.32026-05-05Added Message Recovery (§1.3) with capture scope, storage limits, eviction, and transmission policy.

9. Contact Us

If you have any questions about this Privacy Policy or your data, please contact us through: GitHub: https://github.com/OnyxMizuna/SAI-Toolkit/issues


10. Compliance and Data Protection

The S.AI Toolkit Extension complies with applicable privacy and data protection laws, including:

Because no personal or identifiable data is collected, no data subject access, correction, or deletion requests are required. Drive Sync transmits only non-personal generation metadata to the user's own Google account; the only extension-author-operated component is a stateless OAuth token broker that handles Google token exchange/refresh and retains nothing. No user data is held by the extension author.


11. Additional Notes


Summary: This policy clearly communicates that all processing is local by default, no data is shared or transmitted externally without user action, and users have complete control. Message Recovery is opt-in, off by default, never transmits, and exists to prevent loss of user-typed text when SpicyChat's chat API fails. Drive Sync is opt-in (manual, or an optional Auto-sync that is off by default), transmitting only generation metadata (no message text) to the user's own Google Drive account using a non-sensitive OAuth scope (drive.file); sign-in uses Authorization Code + PKCE, with token exchange relayed through a stateless author-operated broker that sees only OAuth tokens and stores nothing. Custom Style values (including any uploaded background image) are stored locally as user preferences and are never transmitted. All other features operate entirely on locally available page data and store only preference flags. It meets Chrome Web Store User Data Privacy Policy and Manifest V3 standards for transparency and limited data use.