This page answers the permission and privacy questions Chrome Web Store reviewers and users ask about BrowserShell. It maps every declared permission in manifest.json to concrete user actions.

Summary: BrowserShell is a local-first terminal overlay for Chrome. It does not run remote code, does not send user data to any server, and does not use permissions unless you run a command or press a shortcut that requires them.


Single purpose

What does this extension do?

BrowserShell adds a Quake-style terminal overlay and Vimium-style page hotkeys so you can manage tabs, bookmarks, history, downloads, windows, and page content through shell commands instead of Chrome menus.

Is there one clear purpose?

Yes: browser control through a keyboard-driven shell interface. Every permission supports that purpose — listing tabs, reading bookmarks, clearing site data on request, tiling windows, or inspecting the active page when you run a command.


Data collection & remote code

Does BrowserShell collect or transmit personal data?

No. There are no analytics endpoints, no accounts, no telemetry SDKs, and no background sync to external servers.

Where is data stored?

DataLocation
Settings, aliases, rc file, historychrome.storage.local on your device
Notes and scriptschrome.storage.local (VFS paths /notes/, /scripts/)
Workspaceschrome.storage.local
Session transcript / audit logchrome.storage.local

See the Privacy policy.

Does BrowserShell execute remote code?

No. All JavaScript is bundled in the extension package at build time. The extension does not eval() remote scripts, load code from a CDN at runtime, or fetch executable logic from third-party servers.

Does BrowserShell use third-party AI services?

The optional ai command uses Chrome’s built-in on-device AI APIs when available. No page content is sent to BrowserShell-operated servers.


Host permissions

Why does BrowserShell need <all_urls>?

QuestionAnswer
What is it?Permission to inject the extension’s content script on http(s) pages and extension-accessible URLs.
Why needed?The overlay must open on any page when you press `. Vimium-style hotkeys (f, j, /, o, …) run in the content script on the active page.
When triggered?On every page load the content script registers (declared in manifest.json). Hotkeys and overlay toggle only respond to your key presses.
What data is accessed?The DOM of the page you are viewing — only when you run page commands (links, read, click, …) or page hotkeys.
Is data uploaded?No. DOM access stays in your browser.
Can it be narrower?No — users expect ` and page keys to work on any site they visit. You can disable hotkeys per host in Options → Page keys → Disabled hosts.

Why are web_accessible_resources declared?

The overlay terminal loads overlay/index.html inside an iframe on the current page. These resources are extension-local UI assets, not remote content.


API permissions (Q&A)

Each section follows the same format: what, why, when used, data accessed, uploaded?

tabs

WhatRead and modify tab properties: URL, title, index, pinned state, muted state, active tab.
WhyCore shell commands operate on tabs as first-class objects.
When usedtabs, tab, go, open, close, pin, discard, domain, title, mute, detach, global hotkeys (t, x, J, K, …), omnibar tab search.
DataTab metadata in the current profile.
Uploaded?No.

activeTab

WhatTemporary access to the active tab when the user invokes the extension.
WhyChrome grants scoped access when you click the extension icon or use a shortcut, reducing blanket access when combined with user gesture flows.
When usedExtension icon click (overlay toggle), chrome://extensions/shortcuts commands.
DataActive tab only at invocation time.
Uploaded?No.

storage

WhatRead/write chrome.storage.local.
WhyPersist configuration, command history, notes, workspaces, and transcripts across sessions.
When usedEvery session; config, alias, export, edit, workspace, VFS paths under /config/, /notes/, /scripts/.
DataUser preferences and files you create in the VFS.
Uploaded?No. Stays on device.

bookmarks

WhatRead, create, modify, and remove bookmarks.
WhyExpose the bookmark tree as navigable paths (/bookmarks/) and shell commands.
When usedbookmarks, bookmark, open /bookmarks/..., omnibar bookmark search (b/B).
DataBookmark URLs, titles, and folder structure.
Uploaded?No.

history

WhatSearch and delete browsing history entries.
Whyhistory command and omnibar history source.
When usedhistory, history delete, history clear, omnibar (o/O), optional forget scope.
DataURLs and visit metadata in local history.
Uploaded?No.

sessions

WhatAccess recently closed tabs and windows for restoration.
WhyUndo closed tabs from the shell and Vimium-style X hotkey.
When usedrecent, session, tab-restore hotkey, workspace load (may restore windows).
DataRecently closed session entries managed by Chrome.
Uploaded?No.

downloads

WhatList downloads, open files, show in file manager, remove download entries.
Whydownloads command and clickable download rows.
When useddownloads, downloads open, downloads show, watch downloads.
DataDownload filenames, URLs, paths, and state.
Uploaded?No.

cookies

WhatRead and remove cookies for origins.
WhyInspect site footprint and support privacy workflows.
When usedcookies, siteinfo, forget (cookie scope).
DataCookie names, values, domains for sites you query.
Uploaded?No.

browsingData

WhatClear cache, local storage, IndexedDB, service workers, and related site data.
Whyforget command — user-initiated privacy cleanup.
When usedforget, forget --preset, siteinfo (size estimates).
DataAffected origins are chosen by you in the command.
Uploaded?No. Deletion is local.

contentSettings

WhatRead per-site permission settings (cookies, JavaScript, images, etc.).
Whypermissions command shows effective site settings.
When usedpermissions, siteinfo.
DataContent setting values for the current site or a named origin.
Uploaded?No.

management

WhatList installed extensions and their enabled state.
Whyextensions command for power users managing the browser profile.
When usedextensions, extensions disable.
DataExtension names, IDs, and enabled flags.
Uploaded?No.

scripting

WhatInject JavaScript into tabs to read or manipulate the DOM.
WhyPage commands and dev tools (links, click, fill, read, shot, …) run only when you execute them.
When usedAny page or utility command that touches the DOM; hints; seek/find overlay; not on a timer or in the background.
DataDOM text, links, form fields, and media on the active tab at command time.
Uploaded?No.
User controlCommands are explicit. Page hotkeys are user-triggered key presses.

notifications

WhatShow system notifications.
Whynotify command for async workflow feedback.
When usedOnly when you run notify "message".
DataText you pass to the command.
Uploaded?No.

system.display

WhatRead monitor dimensions and work areas.
WhyAccurate multi-window tiling — layout, split, window position.
When usedlayout side-by-side, split vertical, workspace geometry restore.
DataDisplay size and work area bounds (not screen contents).
Uploaded?No.

Content scripts

Why is a content script injected on all pages?

The manifest declares content/overlay.js at document_idle on <all_urls> so that:

  1. The ` overlay toggle works immediately on any page.
  2. Vimium-style hotkeys are available without a separate extension.
  3. The page receives keyboard focus for hotkeys on load (no extra click).

The content script does not modify page content, read the DOM, or exfiltrate data until you press a bound key or open the overlay.


Permissions BrowserShell does not request

Not requestedWhy users might ask
geolocationLocation is not part of the shell model.
microphone / cameraNo audio/video capture features.
identityNo OAuth or Google account linking.
webRequest / declarativeNetRequestNo network interception or ad blocking.
clipboardRead (permission)Clipboard access uses optional APIs in user gesture contexts (yy, shot).
nativeMessagingNo native app bridge.
sidePanelUses a custom full-page overlay instead.

User controls

  • Disable page hotkeys: Options → Page keys → Global hotkeys off, or add hosts to Disabled hosts.
  • Disable overlay: Options → Overlay → Enabled off.
  • Audit permissions: Build from source and inspect dist/manifest.json.
  • Revoke everything: Remove the extension from chrome://extensions.