This page covers the Russolutions Chrome extension — R:each and the CRAFTED Prompt Tool — and nothing else. The web tools at russolutions.sg are a separate architecture with their own data policy. Last updated 29 August 2026.
There is no Russolutions server for the extension to talk to, and there never has been. Out of the box it makes no network requests at all — no analytics, no telemetry, no licence check, no sync.
One optional feature is the single exception, and only once you switch it on: CRAFTED's Direct API. It sends your prompt 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. The extension holds 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. It is not synced between your devices, and there is no copy of it anywhere else. I cannot see it, and neither can anyone but you.
The extension is one panel drawn over the page you are working in. R:each holds a list — one row per line — and fills a form from it. CRAFTED composes a prompt and inserts it into whatever field you are standing in. Both run entirely inside your browser.
What is stored: the list you paste in, kept as the text you typed; any lists you save and name; your CRAFTED drafts; and the panel's own settings — which app you were last in, its width, where you dragged it. That is the whole of it.
Where it is stored: chrome.storage.local — your browser
profile on this device. Deliberately local and 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 thrown away immediately. 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 is nothing to ask me to delete, because I never had a copy.
activeTab — lets the panel be drawn into the tab you opened it on, for
that tab, at that moment. This is what allows the extension to request no site
permissions: it cannot touch a page you did not invoke it on.
scripting — injects the panel into that tab. It goes into every frame,
because a form field very often sits in an iframe and a panel in the top document alone
could not fill one.
storage — saves your lists and drafts locally, as above.
contextMenus — adds one right-click entry to open the panel.
clipboardWrite — lets the Copy buttons put text on your clipboard without
Chrome having to ask the website you are on for clipboard access. It is the
permission that keeps the clipboard icon out of your address bar; it grants writing only,
never reading.
Copying a row puts it on your clipboard, which is the point of the button. The extension never reads your clipboard — it holds no permission to, and there is no code in it that could.
It does listen for a paste landing in a form, so it can tell whether what went in was the row you were on and move the list along. That is the paste event the page itself receives, not the clipboard: the comparison is made in your browser against the row already on screen, is never stored, and never leaves the machine — and if the text does not match, the extension simply stays where it is.
CRAFTED can be connected to an AI provider so its Send button answers the prompt instead of you carrying it somewhere else. It is off until you turn it on, and while it is off everything above holds exactly as written.
Turned on, it sends to the provider you picked (DeepSeek, OpenAI or Anthropic), authenticated with an API key you supply and pay for, and only when you press a button: Send in CRAFTED transmits the prompt you built; Fill from notes in R:each transmits the text you pasted into that box together with the field names on your list — the labels, so it knows what to fill in. Your saved lists and the values already in them are not sent. 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.
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 those three API addresses 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, and 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. Settings → Direct API → Forget the key deletes it, and so does removing the extension.
A R:each list is usually a client's details, because that is what it exists to fill a form with. That data stays your responsibility: you — or your firm — remain the party 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 is built. If you find behaviour that contradicts it, that is 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 is no mailing list to notify, because there is no list — I do not 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.