Privacy Policy for the Chrome extension · Version 9 · Last updated: 2026-10-17
The extension does the web work you assigned in systems you are already signed in to and brings the result back into your own Cenaly account — in a visible tab, under your control. In worker mode only the results of your skill's steps are sent (never passwords read from pages, hidden fields, cookies or whole pages; account passwords you choose to save for sign-in leave only encrypted so that only your device can open them); it can also record a routine you demonstrate yourself — including your spoken explanations, if you ask for it — only while the recording indicator is lit. In the collection modes you start yourself, it sends the pages you chose for your knowledge base, review pages about your business, and the storefront of your own shop when you move it to Cenaly.
The extension has one purpose: to be the browser helper of your Cenaly account — it performs and collects what you, the account owner, assigned to it in your account, inside web systems you are already logged into, on your own device and under your control, and returns the result into that same account. Its modes are functions of that one purpose, not separate products:
There is no other functionality — no browsing analytics, no background collection without a task you set, no code execution received from a server.
chrome.storage.local of this browser. The token is not linked to your identity
in any target system.| Sent to your Cenaly account | Example |
|---|---|
The values explicitly listed in the skill's read / extractList steps | “order number”, “confirmation text” |
| Technical fields of the run: run id, step number, lease (fence) number, outcome code | wait_timeout, identity_mismatch |
| The page host (not the full URL) for the audit log | cabinet.example.com |
| Version 0.6.0 does not capture or send screenshots; a screenshot step requests human help | screenshot_unavailable |
Worker status (idle / working / need-you / paused, a pause may say “panel closed”) and last-seen time | heartbeat |
| Wake-up channel (0.17.0): the browser’s push subscription address and its public keys (issued by the browser’s push service — Google FCM in Chrome) or a one-time WebSocket connection ticket; which channel works and how often the heartbeat is sent. This lets the cloud tell the panel “ask for jobs now” instead of polling every few seconds. A wake-up carries no commands and none of your data, and shows no notification | https://fcm.googleapis.com/fcm/send/…, kind: "push" |
| Extension version and skill-interpreter version — so that a skill this version cannot run is not handed to it | 0.6.0, 1.1.0 |
| Device and network information for the device registry: device name, environment, installation ID, public device key, browser session ID, coarse network, signed-in marks — see “Device and network information” below | “Reception laptop · K7Q2”, Chrome 129 · Windows 11, subnet 203.0.113.0/24 |
| Only when you press “Report a problem”: the last 20 lines of the panel log (step numbers, error codes, run id — no field values), posted to the worker's channel in your team chat | “Step #2 failed: element_not_found” |
| In training mode: the actions you perform, with the candidate selectors of the element and the shape of the field values | click on “Confirm”; text input of length 12 |
| In training mode with voice: ~20-second audio chunks of your spoken explanations — for transcription only, deleted once transcribed | “if the status is pending, I confirm it” |
| Knowledge base & reviews mode, during a session you started: the rendered markup of each page of the session, its title, links, image addresses and image files, and the page's path (breadcrumbs) | a policy page from your supplier portal |
| Knowledge-base collector status (0.20.0), while you have collection switched on: a heartbeat about every 30 seconds while it works and every 3 minutes while it is idle or paused — whether the collector is running, paused or waiting and the reason code, the stage of the current page (opening, capturing, sending) with the address of that page of the session, page counters, the last error code (without page content), the site addresses it is waiting for your permission to, the extension version loaded in memory and on disk and how it was installed, and acknowledgements of Pause/Resume you sent from the admin panel. This is what lets the admin panel show who is collecting what and lets you pause or resume a browser remotely | stage: "capture", reasonCode: "permission-needed" |
| Same mode, for a review-monitoring task you set up: the rendered markup of a review page about your business | your venue's page on a maps service |
| Only if you turn on “Account passwords”: the encrypted record with the account login and password — only this device's key can open it (in the Russian contour the record does not leave the device at all); salted hashes of the allowed site addresses; signatures; a grant request for each sign-in and a report of the entry — without any values | “record cred_… · generation 1 · filled” |
| Move a shop mode, after you press Start: the pages of your own storefront (markup, layout measurements, newsletter pop-ups, product cards and their platform product JSON, text pages and legal documents) | home page, products, “Refund policy” |
All of the above goes to your own Cenaly account — a private storage bucket of your brand, not a shared pool and not a third party.
input[type=password] and fields with
autocomplete=current-password/new-password are neither read nor filled: read
steps return null for them and a fill attempt returns
protected_field.input[type=hidden], including CSRF tokens) —
likewise null.These are not declarations: the dangerous primitives are absent from the interpreter by construction, and a guard test scans its source and fails if any of them appear.
This feature is switched off and is currently enabled only on test accounts. It will be opened to customers after a legal review of its texts; until then this section describes how it works.
Why. So that the worker can sign in to an account itself when the session has expired, without calling you to type the password. Without the feature the worker stops at that point and asks you to sign in yourself (your own password manager is fine), then continues.
https://…, no wildcards), the skill and the sign-in flow are chosen
there too.What we cannot promise. The site you allowed does receive the password — that is what signing in means — and its own scripts can see it. An infected device or its administrator can intercept the password at the moment of entry. Revoking a record stops new sign-ins but does not end sessions already open on the site and does not invalidate a password already copied — change the password on the site itself. We cannot recover the password or access to the record: if the device is lost or the extension removed, the password is entered again or reset on the site.
Deletion. A deleted or revoked record stops being issued immediately. Its encrypted copies in the cloud are deleted within 24 hours; there are no backups of encrypted records. The copy on the device stays encrypted to its key and cannot be used without the cloud's permission; it is erased together with the extension (automatic erasure on the cloud's command comes in the next extension version). A report of your records — without the passwords themselves — is available on request to privacy@cenaly.com.
Who and where. Only the account owner (staff with manager or
admin roles get no rights to passwords), only when all locations of the account are in
countries where the feature is open, and not for government bodies or critical infrastructure.
Since 0.8.0 each connected browser profile is a device in your Cenaly account: you see the list in the Digital Worker section (Devices tab), name devices, find them, pause, move or revoke them. So that you can tell two identical laptops apart and so that a copied connection can be spotted, the extension reports the following when you connect it and while it works:
| What | Why | How long |
|---|---|---|
| The device name you type when connecting (suggested: “Chrome · Windows 11”) and a 4-character device code derived from the device ID | to recognise the device in the list and on its own screen | while the device is in your account |
Environment: operating system and version, browser brand and version (from
navigator.userAgentData, including the User-Agent string), CPU architecture, device
model if the browser reports it, time zone, language, screen size, extension and interpreter versions,
capabilities, and where the extension was installed from (Chrome Web Store, an
archive loaded unpacked, your organisation’s policy, or the Cenaly bridge — reported by the browser
itself, no extra permission) | a label that tells devices apart; “please update” hints, and a hint to move a copy that does not update itself to the Web Store version. It is never used to authorise anything | latest value, while the device is in your account |
| A random installation ID (stored in the extension’s local storage) and a device key: a non-extractable ECDSA P-256 key pair created in the browser; only the public key is sent, and every request of the extension is signed with the private key | a reconnect of the same installation stays the same device (no duplicates); a leaked token is useless without the key | while the device is in your account; the private key never leaves the browser and is removed with the extension |
| A random browser session ID (changes when the browser restarts) | if one connection is proven to run in two places at once (a copied browser profile or token), the connection is revoked as a copy and you are asked to connect the device again | the last few session IDs |
Coarse network: subnet (/24 for IPv4, /48 for IPv6),
country and city. Country is derived from the request IP using a built-in offline database
(IP geolocation by DB-IP, CC BY 4.0) — no external lookup; city only
when our CDN provides it. The full IP address is cut to the subnet in memory and is
never stored, including in logs | “where is the device now”; an anomaly such as a token suddenly used from another country | current value plus history of network changes for 30 days (at most 20 entries) |
| Signed-in marks per site of your installed skills: “signed in / not signed in / unknown”, judged by the skill’s own sign-in checks. Reported from version 0.11.0 as a by-product of the worker’s own steps on the skill’s site (reached a sign-in form — “not signed in”, a step passed — “signed in”, not checked for a while — “unknown”); no cookies are read and no extra visits are made | send a task to a device that is signed in to the site | latest value |
We do not collect the browser profile’s e-mail address (the extension has no
identity permission), canvas / WebGL / audio fingerprints, IMEI, serial numbers or MAC
addresses. Cookies are not read for the signed-in marks. These data stay in your account’s private
bucket and are visible to you in the Devices tab; a revoked device stays in the list (you can hide
it) until the account is deleted, or earlier on request to
privacy@cenaly.com. This disclosure is shown as an
addendum to your consent in the window where you connect a device.
The extension is also built for Firefox (and prepared for Safari). The data and the purpose are the same; the differences:
about:debugging that lasts until the browser restarts.Some skills contain a decision step — for example, “which of the rows found is the request we need”. That step is executed by the cloud, not by the browser:
openai/gpt-4o-mini), acting on our instruction;cenaly.ru) the decision step
is disabled, because the aggregator's catalogue currently offers no model
with confirmed Russian data-residency compliance. Skills that need it are unavailable there.Collected data is not used to train our models and is not sold.
A separate feature of the “Digital worker” section: you perform the routine with your own hands while the worker does nothing on the page — it only watches and listens, so that a draft skill can be assembled from the recording afterwards. It is gated by a separate consent accepted in your Cenaly account: allowing the worker to act is not the same as allowing it to record you.
autocomplete=cc-*), and the values of any field without that toggle. There is
no keystroke logging at all — only the field's final value after it loses focus. This is a
property of how the recorder is built, and a guard test scans its source on every build.The microphone is not an extension permission. It is not in the manifest:
the panel page asks for it with an ordinary getUserMedia call, so the browser
shows its own prompt and its own recording indicator, and access can be revoked in the site
settings — exactly like for any web page.
Every skill carries a risk class, and the class is a set of enforced technical limits rather than a label:
| Class | What it means | Mode |
|---|---|---|
| green | our own surfaces, or platforms where automation is allowed | scheduling allowed; at least 0.4 s between actions |
| amber | the platform's rules neither allow nor forbid automation explicitly | separate consent; at least 1.5 s between actions; confirmation before anything irreversible |
| red | the platform explicitly forbids automation | separate consent that names the risk of your account being blocked; attended runs only; no background scheduling; at least 3 s between actions |
We say this plainly. If a platform's terms forbid automated access, using a worker there breaches your agreement with that platform, and the platform may block your account. We cannot dispute or reverse that. This is why such skills require a separate, explicit consent, run only while you are present, and are never put on a schedule.
Consents are accepted in your Cenaly account and recorded with their version, timestamp and user agent. They can be withdrawn by revoking the paired browser.
| Permission | Why |
|---|---|
storage | Store the worker pairing token, skill cache, checkpoint, result awaiting acknowledgement, next step and panel settings; separately, the knowledge-base pairing token and the address of the last shop-migration connection. |
tabs | Create and navigate the dedicated work tab (worker) or capture window (collection modes) and detect when a page has finished loading. |
scripting | Inject bundled files into that tab: the worker's interpreter and adapter, or the page-capture scripts of a collection mode. Files-based injection only — never code strings, never remote code. |
sidePanel | Show the worker panel as a browser side panel. |
alarms | Drive the polling loop. MV3 service workers are short-lived and we deliberately do not hold a permanent keep-alive. |
notifications | One OS notification when the worker is blocked and needs you (CAPTCHA, logged out, a host permission to grant, a confirmation question). No business data in it — only the reason and an “Open panel” button; repeated at most once every five minutes. Can be switched off in the panel. |
| host access | Not granted at install time. Requested at runtime, per origin, only for the hosts declared by the skill you installed (in training mode, for the site you are demonstrating on; in collection modes, for the site of the session, a review platform, an image host or the shop being moved), and only after you click the grant button. |
| microphone | Not a manifest permission at all. The panel page requests it with getUserMedia, and only when you tick “Spoken explanations” before a training recording. |
The extension's use of information received from users complies with the Chrome Web Store Limited Use policy. Data the extension accesses is used solely to provide the stated feature — performing the task the user defined, recording the routine the user demonstrates, or collecting the pages the user chose for their knowledge base, review monitoring or shop migration, and reporting the result back into the user's own Cenaly account. The data is transferred only to the user's own Cenaly account and, strictly to deliver the decision step of a skill, the transcription of a training recording and the knowledge-base search and answers, to the model-access, speech-to-text and AI providers named on this page, acting on our instruction. We do not use or transfer it for advertising, creditworthiness, or any purpose unrelated to the feature, and do not use it to train our own artificial intelligence models.
Payment fields (cc-*), one-time codes and hidden ancestors are protected
by the same filter during extraction, filling, recording and co-drive. Hidden descendants
are excluded from extracted text.
Your skill can collect bounded lists, move through pages and open detail cards in one work tab. Permitted fields are sent with collection time, skill version and completeness metadata: rows found and returned, truncation and the reason collection stopped. Source page URLs omit query strings and fragments; card links are restricted to the skill's hosts and safe query parameters. Conversion errors contain field names and reason codes.
Session expiry or MFA requires your manual sign-in, followed by another account check. A shared action budget may pause collection for your decision. No new permissions for cookies, file downloads or interception of third-party request headers are introduced.
These modes used to live in a separate knowledge-base collector extension; since 0.7.0 they are part of Cenaly Digital Worker. They have their own pairing, their own pages and their own rules; they do not share the worker's loop, and worker skills cannot invoke them.
<meta> tags.These recipients only, and only to make the feature work: your own Cenaly account (including its knowledge base, review monitoring and shop import); the model-access provider for the decision step and for turning a training recording into a draft skill, in the volume of a structured extract; the speech-to-text service of our cloud provider (Amazon Transcribe, inside the same AWS account that already stores your data) for the voice explanations of a training session; and the knowledge-base AI providers (OpenAI and Google internationally, Yandex Cloud in Russia) for the text of knowledge-base pages and your questions about them. All act on our instruction. No one else; nothing is sold. Account passwords are given to no one except the site you allowed, at the moment of sign-in.
We may update this policy. Material changes to what the consent covers increment the consent version in the product, and you will be asked to accept the terms again in your Cenaly account. Disclosures that concern only connecting a device (such as the device and network information above) are shown as an addendum in the window where you connect a device. “Account passwords” has its own separate consent, accepted in your Cenaly account before the first record is saved.
Privacy questions: privacy@cenaly.com.