Clean Desk
Before you let an AI assistant read your open tabs, put the bank statement away. One click takes them out of reach, and one click brings them back.
Clean Desk
Before you let an AI assistant read your open tabs, put the bank statement away. One click takes them out of reach, and one click brings them back.
Date: 2026-11-02
Form factor: Browser extension (Manifest V3)
Browser surface: toolbar popup, toolbar badge (service worker), chrome.tabs, on-demand content script via chrome.scripting, chrome.storage
Status: Prototype
What it is
Clean Desk looks across every open tab and picks out the ones you probably don't want an AI assistant reading: your bank, your patient portal, payroll, your inbox, your password manager. You get a checklist. Hit "Put away" and those tabs close and go into a drawer inside the extension. When you're done with the assistant, "Bring them all back" reopens them where you can find them.
Why it has to be an extension
The job starts with your open tabs, and only the browser can list them. A website can't see what else you have open, can't close those tabs, and can't reopen them later. Clean Desk reads tab URLs and titles through chrome.tabs, keeps a live count of sensitive tabs on its toolbar badge, and closes and reopens tabs on request. For the tab you're looking at, it also reads the page. A small credit union or a clinic's own portal won't be on any domain list, but a page full of masked account numbers and balances gives itself away.
Who it serves
Someone who just started using an AI assistant that can see their tabs, and who works in one browser profile with everything signed in. The usual picture: they're planning a trip, they have flights and hotels open, and they want the assistant to compare them. They also have Chase, MyChart, Workday, and Gmail open in the same window, because that's how people browse. The standard advice is "close the sensitive tabs first" or "make a separate profile." Most people won't make a separate profile. Closing tabs by hand works, but then they're gone, and nobody remembers to do it every time.
Why it could be profitable
The trigger is recent. On October 15, 2026, OpenAI updated its ChatGPT Chrome extension so that once you tag Chrome, ChatGPT can read your open tabs, and in Work mode it can fill forms, send messages, and download files in them. The coverage came with the same advice almost every time. Tbreak (October 16) told readers to "keep banking, health, and work-admin tabs closed before tagging Chrome." A guide from October 25 went further and recommended a separate Chrome profile with no email, bank, or work tools signed in, then added that a separate profile "is a precaution, not a guarantee." Google's Gemini in Chrome works across tabs too, and its auto browse agent has been in preview for paid subscribers since March 2026. Clean Desk is that advice turned into a button.
The plan is freemium:
- Free: the built-in list of bank, health, HR, email, and password-manager sites, the active-page check, the drawer, and up to five sites of your own.
- Pro (around $3/month or $20/year): unlimited custom sites, keyword rules, and putting tabs away automatically when you open an assistant's site or side panel.
- Teams (per-seat): IT pushes a company list of sensitive domains (HR, payroll, admin consoles, the internal wiki) through Chrome's managed storage policy. This is the tier I'd bet on. A company letting staff use browser assistants has a real reason to keep the Workday tab out of the context window, and an existing way to buy and deploy extensions.
The demand case is thin in places, and I'd rather say so here. Everything above is advice in articles, not evidence that people will pay. The assistants are adding their own controls: ChatGPT asks before it acts on each new site and has per-site allow and block lists. If those controls get good, Clean Desk is left as a convenience for people who use more than one assistant. And a separate browser profile is free. The consumer tier will probably be a small business. Teams is where it could pay.
How to load it in Chrome
- Open
chrome://extensionsand turn on Developer mode. - Click Load unpacked and select this folder's
extension/directory. - Open a few tabs, including at least one from the built-in list (Gmail, your bank, a MyChart portal) and one ordinary site. The toolbar badge shows how many look sensitive. Click the Clean Desk button to see the list and put them away.
How to try the demo
- Open
index.htmlin any modern browser. - Click the Clean Desk button at the right of the toolbar. Seven of the twelve tabs are flagged. The credit union tab you're looking at gets flagged by reading its page, because its domain isn't on any list.
- Untick the Slack tab (your family's trip channel is something you might want the assistant to see), then click Put away 6 tabs. Watch the tab strip and the "AI assistant can read" chip change. Then try Always put away this site and Bring them all back.
The tab strip, the stand-in pages, and the "AI assistant can read N tabs" chip are simulated. The popup, the domain classifier (extension/rules.js), and the page scan (extension/content.js) are the extension's real code, running against mock tabs. The sample data is also inlined in index.html, so the demo works from file:// without a local server.
Permissions, and why each one
| Permission | Why it's needed |
|---|---|
tabs |
Read the URL and title of every open tab to classify them, keep the badge count current, and close and reopen tabs. Without it, chrome.tabs.query returns tabs with no URLs. |
storage |
Holds the drawer (the tabs you put away, so they survive the popup closing) and your own list of sites. Stored locally, never synced or uploaded. |
activeTab |
Lets the popup look at the page you're on, and only that page, at the moment you click the toolbar button. |
scripting |
Injects content.js into that one tab to check for masked account numbers, balances, lab results, and similar signals. |
There are no host_permissions and no content_scripts entry. The page check runs only on the active tab, and only when you open the popup. That is narrower than any match pattern, and it avoids <all_urls>.
What's in this prototype
- A real MV3 extension: popup, service worker for the badge count, on-demand content script, and a shared classifier (
rules.js) loaded by all three. - Built-in host rules in five groups (money, health, work admin, messages, passwords) plus title keywords as a fallback.
- An active-page scan for password fields, masked account numbers, balance and routing-number language, lab and prescription terms, SSN-shaped numbers, and pay-stub language. It needs two signals before it flags a page, since a login form alone shows up everywhere.
- A per-tab checklist so you can keep a flagged tab open on purpose.
- A drawer that saves tabs before closing them, reopens them one at a time or all together, and keeps pinned state.
- An "Always put away this site" control capped at five sites on the free tier.
- If putting tabs away would empty a window, it leaves a blank tab so the window doesn't close.
- Stubbed: payments, Pro rules, and the Teams policy feed.
Roadmap
- Auto put-away: when a ChatGPT, Gemini, Claude, or Copilot tab or side panel opens, offer to clear the desk first, and offer to bring tabs back when it closes.
- Teams: read a sensitive-domain list from
chrome.storage.managed, so IT can set it by policy and users can't remove entries. - An optional "move safe tabs to a clean window" mode, for assistants that can be limited to one window.
- Keyword and regex rules (Pro), such as "any tab whose title contains a client's name."
- Firefox and Edge builds. The APIs used here all have equivalents.
Sources
- https://tbreak.com/chatgpt-chrome-extension-open-tabs/ — October 16, 2026 coverage of OpenAI's October 15 update: ChatGPT can view open tabs once Chrome is tagged, Work mode fills forms and sends messages, and the advice to keep banking, health, and work-admin tabs closed first. Also lists the existing per-site controls.
- https://kami-labs.fr/en/ia/chatgpt-agit-dans-onglets-chrome/ — October 25, 2026 guide recommending a separate Chrome profile with no email, bank, or work tools signed in, and noting that the extension can act on sites where you're already signed in.
- https://www.androidenterprise.community/product-updates/the-new-era-of-browsing-putting-gemini-3-to-work-in-chrome-2367 — March 6, 2026 Chrome Enterprise post on Gemini in Chrome working across tabs, and on auto browse being in preview for Google AI Pro and Ultra subscribers.
- https://developer.chrome.com/docs/extensions/reference/api/tabs —
chrome.tabsreference. Thetabspermission is what exposesurlandtitle. - https://developer.chrome.com/docs/extensions/develop/concepts/activeTab —
activeTabgrants temporary access to the current tab when the user invokes the extension.
Requirements
Clean Desk — Requirements
Goals
- Before handing their tabs to an AI assistant, a user can see which open tabs hold sensitive data, and remove them in one action.
- Nothing put away is lost: every closed tab can be reopened from the extension, one at a time or all at once.
- The extension needs no host permissions and sends nothing off the device.
- A first-time user understands the list and the button within a few seconds of opening the popup.
Primary user
An everyday browser user who has started using an assistant that can read or act on their tabs (ChatGPT's Chrome extension, Gemini in Chrome, and similar). They browse in a single profile with banking, health, work, and email signed in. They want to ask the assistant about a few tabs without exposing the rest, and they won't keep a second browser profile for it. The job: clear the sensitive tabs, use the assistant, and put things back afterward.
Functional requirements
- FR1: On popup open, list every open tab in every window and classify it against the built-in host rules (money, health, work admin, messages, passwords) and the user's own site list.
- FR2: When no host rule matches, fall back to title keywords (e.g. "lab results", "pay stub", "inbox").
- FR3: If the active tab matches no rule, inject
content.jsinto it viaactiveTab+scriptingand flag it when at least two page signals are present (password field, masked account number, balance/routing language, health terms, SSN-shaped number, pay language). - FR4: Show flagged tabs as a checklist, all ticked by default, each with title, host, reason, and category chip.
- FR5: "Put away N tabs" saves the selected tabs (URL, title, pinned state, category) to
chrome.storage.localbefore closing them. - FR6: If closing the selected tabs would empty a window, open a blank tab in that window first so the window stays open.
- FR7: Show the drawer (count and time of first put-away) whenever it holds tabs; allow reopening a single tab or all of them.
- FR8: Reopened tabs open in the background with their pinned state restored, and are removed from the drawer.
- FR9: "Always put away this site" adds the active tab's host to the user's list; the free tier caps the list at five hosts.
- FR10: The service worker keeps the toolbar badge equal to the number of open tabs matching the host and title rules, updating on tab create, remove, URL/title change, and custom-list change.
- FR11: Restricted pages (
chrome://, the Web Store,file://without access) are never classified or injected into, and must not throw. - FR12: The popup runs unchanged inside the demo harness, where
window.__cleanDeskDemostands in forchrome.tabs,chrome.storage, andchrome.scripting.
User stories
- As a user about to tag Chrome in ChatGPT, I want to see which of my tabs are sensitive, so that I know what the assistant could read.
- As a user, I want to put those tabs away in one click, so that I don't have to hunt through the tab strip.
- As a user, I want to keep one flagged tab open (say, a family chat about the trip), so that the assistant can still use it.
- As a user, I want my closed tabs back when I'm done, so that clearing my desk doesn't cost me my place.
- As a member of a small credit union, I want my bank flagged even though nobody's list includes it, so that I'm not relying on the extension knowing every bank.
- As a user, I want to add my employer's intranet to the list, so that it's caught every time.
- As an IT admin, I want to push a company list of sensitive domains, so that staff using browser assistants keep payroll and admin tabs out of them. (Teams tier, not in prototype.)
Extension surfaces
- Toolbar popup — the checklist, the put-away button, the drawer, and the add-site control.
- Toolbar badge — count of sensitive tabs open right now, maintained by the service worker.
chrome.tabs— list, close, and reopen tabs; read URL and title.- On-demand content script (
chrome.scripting.executeScript, active tab only) — read the current page for sensitive-data signals and report back throughchrome.runtime.sendMessage. chrome.storage.local— the drawer and the custom site list.
Non-functional requirements
- Permissions limited to
tabs,storage,activeTab,scripting; nohost_permissions, no staticcontent_scripts, no<all_urls>. - No network requests from any extension file. No analytics.
- The content script reads text and never modifies the page; it reads at most the first 60,000 characters of
innerText. - The popup renders its first result within 500 ms with 50 open tabs (the page scan may add up to its 1.5 s timeout).
- The drawer is written before any tab closes, so a popup that closes mid-action loses nothing.
- Keyboard reachable: every control is a native button or checkbox with an accessible name.
- No
eval, no remotely hosted code, no CSP changes.
Out of scope (for the prototype)
- Detecting which AI assistant is active, or triggering automatically when one opens.
- Hiding browser history, bookmarks, or closed-tab history, which an assistant with history access could still read.
- Tab groups, multiple drawers, and restoring tabs to their original window and position.
- Payments, licensing, and the managed-storage Teams policy.
- Firefox and Safari builds.
Open questions
- Does closing tabs ask too much? Discarding keeps the tab in the strip, where an agent could reload it, so it doesn't actually remove anything. Moving safe tabs to a new window might be the better default for assistants that can be limited to one window.
- Closing a tab loses unsaved form input. Should the page scan warn when the active tab has typed-but-unsent text?
- How should the built-in list handle regional banks and health systems outside the US?
- Will assistants ship their own "sensitive tab" exclusions, and how quickly? That decides whether the consumer tier has a future.
- Should the badge count include pages flagged only by the content scan? That needs persistent host access, which this design avoids.