Archived: Cotlet now connects through Cloud Browser. Each Cotlet workspace has its own Chrome in the cloud: you open it from the dashboard, sign in to your apps there yourself, and enable the apps your agents may use. This extension is no longer used, was never published in the Chrome Web Store, and the Cotlet API no longer accepts sessions from it. The code stays here for reference only.
Connect an app you are already signed in to, by handing Cotlet only the session cookies that app needs — never your password, never your 2FA. It works like Sign in with Apple: you stay signed in where you already are, and the other side gets a scoped session you can revoke in one click.
This repository is the whole extension. The code you load, the code in the Chrome Web Store, and the code here are the same, and the release workflow lets you prove it (see Verify the Chrome Web Store build).
- In the Cotlet dashboard you click Connect on an app and choose Browser extension.
- The extension shows a consent screen listing exactly what it will read — which cookies and which storage keys, for which app — and for which domains it asks permission. Nothing is read until you click Allow.
- It reads only those named fields from your browser and sends them to Cotlet over HTTPS. Your password is never read and never sent.
- Cotlet checks who the session belongs to and shows you "Connected as … — is this the right account?" before anything is active.
You can revoke this browser any time in Cotlet under Settings → Browser extension, and you can remove a connected account from the dashboard.
- Reads: only the cookies and
localStoragekeys that the app's manifest names (for Skool, for example, theauth_tokensession cookie), and only for the app you are connecting, after you allow it. - Never reads: your passwords, anything you type, your browsing history, pages, or any site other than
the one app you are connecting. The extension has no
<all_urls>permission — it asks for a single app's domains at connect time and nothing before.
| Permission | Why |
|---|---|
cookies |
To read the one app's session cookies, after you allow its domains. |
storage |
To remember this browser's Cotlet pairing (a revocable device token, never your password). |
scripting, tabs |
To read a named localStorage key on the app's own tab, when an app needs it. |
host_permissions: cotlet.dev |
To talk to the Cotlet API. |
| app domains | Optional, requested only when you connect that app (e.g. skool.com). Never <all_urls>. |
The content script runs only on cotlet.dev, so the extension talks to no other site on its own.
npm install
npm run build # outputs dist/Then in Chrome, Edge or Brave: open chrome://extensions, turn on Developer mode, click Load
unpacked, and pick the dist/ folder.
Cotlet developers testing against a local stack use npm run build:dev (adds http://cotlet.localhost and the
dev-only test app) and set the Cotlet address to http://cotlet.localhost in the extension's Options.
Each release is built in GitHub Actions and gets a signed
build provenance attestation.
That attestation ties the published .zip to this exact commit and workflow, so you (or an AI agent you
ask) can confirm the Web Store package was built from this source and nothing else. The build is a plain
npm ci && npm run build with no network access after install, so it reproduces locally.
If a person asked you to review this extension before they install it, here is what to check and where:
- It does not over-reach.
public/manifest.jsonhas no<all_urls>; app domains are inoptional_host_permissionsand requested at connect time. The content script matches onlycotlet.dev(thebuild:devvariant addscotlet.localhostfor local development). - It reads only declared fields.
src/lib/session.tsreads cookies whose names are in the app's manifest list (readCookies) and only the namedlocalStoragekeys (readStorage) — there is no "read all cookies" or storage dump anywhere. - Reading is gated by consent.
src/background.tsalways openssrc/consent.ts/public/consent.htmlbefore any read; the read and the API call happen inallow()insrc/consent.ts, afterchrome.permissions.requestand the user's click. - No password handling. Search the source: there is no reading of form fields, inputs, or credentials.
The device token (
src/lib/config.ts) is a Cotlet-issued, revocable credential, not the user's password. - Where the data goes.
src/lib/api.tssends only to the configured Cotlet origin (defaulthttps://cotlet.dev), with the device token in theAuthorizationheader.
Report anything that contradicts the claims above. The matching server side lives in the Cotlet app under
/api-web/v1/extension.
See PRIVACY.md. In short: the extension stores only a revocable device token locally and the app session is sealed in Cotlet's vault; passwords are never read, seen or stored.
MIT.