This page covers the Russolutions Chrome extension — Reach, Reshape and Rephrase — and nothing else. The web tools at russolutions.sg are a separate architecture with their own data policy. Last updated 22 September 2026. This page describes version 1.9.26 of the extension.
There's no Russolutions server for the extension to talk to, and there never has been. I built it to make no network requests at all — no analytics, no telemetry, no licence check, no sync.
The one exception is a feature you turn on yourself: an API key of your own. Switch it on, and it sends what you asked for to the AI provider you chose, with your key — never to me. See the note below.
No analytics, no telemetry, no identifiers, no accounts, no sign-in. I built the extension to hold no site permissions at all: it can only touch the tab you deliberately opened it on, at the moment you opened it.
What you type is saved in your own browser's local extension storage, on your own machine. I don't sync it between your devices, and I keep no copy of it anywhere else. I can't see it, and neither can anyone but you.
The extension draws one panel over the page you're working in. Reach holds a list, one row per line, and fills a form from it. Reshape turns a pasted table into the shape you need. Rephrase builds a prompt and inserts it into the field you're using. All three run entirely inside your browser.
What is stored: the list you paste in, as you typed it. Any lists you save and name. Your Rephrase drafts. And the panel's own settings — which app you used last, its width, where you left it. Nothing else.
Where it is stored: chrome.storage.local, your browser
profile on this device. Local, not sync: nothing travels to another machine, or through a
Google account, on my behalf.
What it reads from the page: only form fields, and only on the tab you opened it on. To fill a box, it has to find the box. To know whether a paste landed, it compares what arrived against the row you were on. Those comparisons happen in your browser and are discarded at once. It does not read, collect or transmit the content of the pages you visit.
How to delete it: clear the list from the panel, or remove the extension — uninstalling takes its storage with it. There's nothing to ask me to delete, because I never had a copy.
activeTab — draws the panel into the tab you opened it on, for that tab,
at that moment. This is why the extension asks for no site permissions: it can't
touch a page you didn't open it on.
scripting — inserts the panel into that tab, including every frame,
because a form field often sits inside an iframe.
storage — saves your lists and drafts locally, as above.
contextMenus — adds one right-click entry that opens the panel.
clipboardWrite — lets the Copy buttons write to your clipboard without
asking the website you're on for clipboard access. It keeps the clipboard icon
out of your address bar. It grants writing only, never reading.
offscreen — runs Local OCR. Tesseract needs a Web Worker and
WebAssembly, and the panel cannot run them inside the page. So the extension opens one
hidden extension page, and that page reads the picture. It makes no network request and
reads nothing from the page you are on. For the same reason, the extension's security
policy allows 'wasm-unsafe-eval'. This lets the WebAssembly that ships inside
the extension run. It allows no code from the internet.
Copying a row puts it on your clipboard. That's the point of the button. The extension can't read your clipboard on its own — it holds no permission to, so it never sees what's there unless you choose the moment.
What it can see is what you paste into it, the same way any text box on any website does. This happens in two places. Reach listens for a paste landing in a form: it compares what arrived against the row you were on, in your browser, and never stores the comparison. If the text doesn't match, the extension stays where it is. Reshape takes a paste directly — pressing ⌘V over its grid puts what you pasted into the table. Neither reaches the clipboard, and neither leaves your machine.
When Reshape copies a table back out, it puts two versions on your clipboard at once: plain tab-separated text, and the same table as HTML carrying your number and date formats. That's so a spreadsheet keeps your formatting. Both are built in your browser from the table on your screen — nothing is sent anywhere to produce them.
Reshape can read a picture of a table. A switch, Local | API, sets who
reads it. The switch is in Reshape's OCR box and on the options page, under Reading a
picture. The extension saves your choice in chrome.storage.local.
Local is the default. If you never set the switch, the extension uses Local. With Local, Tesseract reads the picture. Tesseract is an OCR engine that is part of the extension, and it reads English only. It runs in a hidden extension page on your computer. It needs no API key. With Local, the picture stays on this computer. The extension sends it to no provider and to no Russolutions server, and it does not store it.
You can give Reshape a picture in two ways. First, drop, paste or upload an image in the OCR box. You can then box the table in that image. Second, press Crop and drag a box around a table on the page. The extension then takes a screenshot of the visible tab, and it crops the screenshot in your browser. It discards the rest of the page there. It takes the screenshot only when you drag a box, never in the background. A taller box can need more than one screenshot, one for each screen of the page.
Nothing is read until you press a button. For a picture that you drop, paste or upload, the buttons are Read as table and Read as text. For a box on the page, the buttons are Read as text and Table: set columns →. The Cancel button stops a selection or a read, and it sends nothing.
You can set column lines on the picture. With Local, Tesseract uses the lines to cut the columns. It then removes the lines from the picture before it reads the text. Nothing is sent.
Rephrase can connect to an AI provider so its Send button answers the prompt for you. It is off until you turn it on, and while it is off, everything above holds exactly as written.
Reshape can use the same connection for two things. It uses it only when you ask.
First: reading a picture of a table, only if you select API. With Local (the default), no picture is sent. With API selected, the OCR box names the provider that will read the picture. When you press a read button, the extension sends the picture to that provider, with your key. It sends an instruction to return the table or the text as plain text. Only the boxed area of a crop is sent, never the rest of the page. The extension does not store the picture, and it does not send it again. If you set column lines, the extension draws the lines into the picture before it sends it. A note in the instruction tells the model what the lines mark. Nothing about your table, your saved lists or the rest of the page is added.
Second: reading a block of text you pasted, for a table that lost its columns when you copied it from a PDF. Press Read as a table under the text box. The extension then sends that text to your provider, with your key, and asks it to restore the columns. Nothing is sent until you press the button. The button's tip says that it sends the text. Every other thing that Reshape does to a table (splitting it, stepping it, totalling it, copying it back out) happens on your machine.
Settings can hold a different model for each of three jobs: reading a picture, Reach's AI Extract, and Rephrase. A cheap model can then do cheap work. This changes which provider gets a job. It does not change what is sent, and it adds no job that sends anything. A job with no model of its own uses the default provider. For a picture with API selected, if that provider cannot read pictures, the extension uses another provider that can read pictures and has your key. Reshape's Read as a table for text has no setting of its own. It follows the default provider. Each job that sends data stays off until you connect a key. Reading a picture with Local needs no key and sends nothing.
Turned on, it sends to the provider you picked — DeepSeek, OpenAI, Anthropic or Google Gemini — using an API key you supply and pay for, and only when you press a button. Send in Rephrase transmits the draft you gave it. Read as a table in Reshape transmits the text you pasted into it. A picture in Reshape is sent only when you select API, and then only the picture you read. AI Extract in Reach transmits the text you pasted plus the field names on your list, so it knows what to fill in — not your saved lists or the values already in them. That text leaves your machine and is handled under that provider's own terms, not mine. Your list, your saved sets and the rest of the panel are never part of it.
One place keeps a conversation: Rephrase's Direct Chat. Every prompt tool hands its answer there — you build a prompt, press Send, and what you asked and what came back become the first two messages of an ordinary chat. Each reply sends the whole thread so far, because that is the only way the model knows what is being changed. In Direct Chat, what is sent is exactly what you typed, with no prompt built around it. The thread stays in memory for that panel only, never written to disk, and pressing New conversation, switching tabs or closing the page discards it. Every other Rephrase tool sends one prompt and keeps no history.
While a request is in flight, the button counts the seconds and offers Cancel. Cancelling stops the panel waiting and discards the answer if it arrives. It cannot recall a request the provider already received, so that one may still complete and be charged for.
It does not pass through Russolutions. The request goes from your browser straight to the provider — I do not proxy it, see it, log it or count it. The extension's permissions name only those four API addresses — DeepSeek, OpenAI, Anthropic and Google — and nothing else. It holds no permission for any website you browse.
Your API key stays on this machine. It is kept in your browser's local extension storage, read only by the extension's background worker. It is never shown back to you, never written into a saved list or an exported spreadsheet, and never handed to the page you are on. The extension's options page → Forget deletes it, and so does removing the extension.
A Reach list is usually a client's details, since that is what it exists to fill a form with. That data stays your responsibility: you, or your firm, remain accountable under the PDPA and your client engagements for being authorised to handle it. The extension holds nothing either way, but it runs on whatever machine you install it on, and that machine's security is yours.
This page describes the extension as it's built. If you find behaviour that contradicts it, that's a bug and I want to hear about it — reach me through the contact form.
If this policy changes, the date at the top changes with it. There's no mailing list to notify, because there's no list — I don't have your email either.
The simplest data security is not holding the data at all. The web tools are built that way, and the extension goes further: it has no server side to hold anything with.