uncloseai.
Browser Toys - Machine Learning on Every Page
Browser Toys
Browser extensions that add the uncloseai. floating button to every web page you visit. Lightweight wrappers around uncloseai.js — no server, no backend, no accounts. The extension injects the script tag, and everything else runs client-side in your browser.
Current release: v1.0.0
Available Extensions
Chrome / Edge / Brave / Vivaldi / Arc
Manifest V3 extension for all Chromium-based browsers.
- Download and unzip
uncloseai-browser-toy-chrome.zip - Verify the download (see checksums below)
- Open
chrome://extensionsand enable Developer mode (toggle in top right) - Click Load unpacked and select the unzipped folder
- The uncloseai. button appears on every page you visit
Firefox
Manifest V2 extension for Firefox 109+ and Firefox-based browsers (LibreWolf, Waterfox).
- Download
uncloseai-browser-toy-firefox.zip - Verify the download (see checksums below)
- Open
about:debugging#/runtime/this-firefox - Click Load Temporary Add-on and select the downloaded zip file
- The uncloseai. button appears on every page you visit
Safari
Safari Web Extension for macOS and iOS. Requires Xcode conversion.
Download Safari source (~10 KB)
- Download and unzip
uncloseai-browser-toy-safari.zip - Verify the download (see checksums below)
- Convert to Xcode project:
xcrun safari-web-extension-converter /path/to/unzipped-folder \ --project-location ./safari-xcode \ --app-name "uncloseai" \ --bundle-identifier com.uncloseai.browser-toy \ --no-open - Open
safari-xcode/uncloseai.xcodeproj, set your signing team, build (Cmd+R) - Enable in Safari Settings > Extensions
Verify your download
Always verify downloads before installing. Checksum files are generated by the build and published alongside the zips.
v1.0.0 SHA-256
2550bbdd34941b95e7d8944bbf5140b6ef16848c77ce4862f8e52aa9c2091087 uncloseai-browser-toy-chrome.zip
9b931277112df639fdec830bc43ea86f23b650980dec4c3c012bdec3735f3abc uncloseai-browser-toy-firefox.zip
02546524bc9bdab7337274749f4a59caeb1e8b310514ec41d8a7cb54b5661a8e uncloseai-browser-toy-safari.zip
# Download checksums and verify all zips at once
curl -sO https://uncloseai.com/downloads/SHA256SUMS
sha256sum -c SHA256SUMS
# Or verify a single file
curl -s https://uncloseai.com/downloads/SHA256SUMS | grep chrome | sha256sum -c
How it works
- The content script injects
<script src="https://uncloseai.com/uncloseai.js" type="module">into every page - If uncloseai.js is already on the page, it skips injection (no duplicates)
- The floating uncloseai. button appears in the bottom-right corner
- Click it to chat with Hermes about the current page
- Toggle the extension on or off from the toolbar popup
Storage and privacy
These extensions have no backend. Everything runs client-side in your browser.
- Chat history stays in your browser's localStorage, scoped per domain and encrypted by UncloseVault. Conversations on
example.comare separate from conversations ongithub.com. Each site has its own vault with its own password. - Settings (model selection, language preference, voice) are encrypted in the vault.
- Secrets (custom API keys, unsandbox keys) are encrypted in the vault.
- The extension itself stores one boolean value: enabled on/off. That is the only data the extension touches.
No data is written to localStorage unless encrypted with your password. No data leaves your browser except the messages you choose to send to the public machine learning endpoints at hermes.ai.unturf.com, qwen.ai.unturf.com, and speech.ai.unturf.com.
Mandatory Vault Encryption
UncloseVault is mandatory. When you first open the chat, you are prompted to create a vault password before anything else. No conversations, settings, or keys are stored without encryption.
First launch
- Click the uncloseai. button on any page
- The vault gate appears: choose a password (minimum 8 characters)
- Chat loads after the vault is created
- All data is encrypted with AES-256 before writing to localStorage
Returning
- Click the uncloseai. button on any page
- Enter your password to unlock the vault
- Your encrypted conversations and settings are restored
What gets encrypted
- Conversation history — all chat messages, per domain, encrypted before writing to localStorage
- Settings — model, voice, language preferences
- API keys — custom endpoint credentials
- Unsandbox keys — code execution credentials
How it works
- AES-256 encryption via CryptoJS
- Password-derived key with device-specific salt (SHA-256)
- Each website has its own vault; you can use a different password per site
- Session persistence across page navigations (encrypted session key in localStorage)
- Lock the vault at any time from Settings to end your session
Without the vault password, conversation history and settings are unreadable. If you forget your password, the encrypted data cannot be recovered.
Security
The extension code has been audited across 6 security categories with 49 automated tests. Findings: 0 critical, 0 high, 0 medium, 0 low, 3 informational.
- No
innerHTML,eval(),document.write, ornew Function() - No network requests from extension code (all networking is in the injected uncloseai.js)
- Minimal permissions:
storageonly (plus host access for injection) - Content Security Policy restricts extension pages to
script-src 'self' - Extension stores exactly one value:
{enabled: true|false}
Source Code
📦 git.unturf.com/engineering/unturf/uncloseai-browser-toys
Releases: all releases
Build from source:
git clone https://git.unturf.com/engineering/unturf/uncloseai-browser-toys.git
cd uncloseai-browser-toys
node scripts/build.js # outputs zips to dist/
Licensed under AGPL-3.0-only.