Trust
Deploy BugMojo to your organization
Last updated: October 19, 2026
Install the extension for everyone, pin it to the toolbar, keep it away from sensitive sites, and lock its privacy settings, all from the policy tools you already use. Your users see which settings are managed and why.
Before you start
- You need the extension ID: the 32 letter ID at the end of the Chrome Web Store listing URL. The examples below use
<extension-id>in its place. - Browsers must be managed: Google Admin (Chrome Enterprise Core), a Windows domain or Intune, or a macOS configuration profile. Check what reached a browser at
chrome://policy. - Microsoft Edge reads the same policies under its own names and paths (
Microsoft\Edgein place ofGoogle\Chrome).
Install it for everyone
The simplest route is Chrome’s ExtensionInstallForcelist policy. Each entry is the extension ID and the Chrome Web Store update URL, separated by a semicolon:
ExtensionInstallForcelist:
<extension-id>;https://clients2.google.com/service/update2/crxForce installed extensions cannot be removed or turned off by the user, and they update automatically from the Chrome Web Store.
Pin it and fence it off with ExtensionSettings
ExtensionSettings does the same install and more, in one JSON value keyed by the extension ID:
{
"<extension-id>": {
"installation_mode": "force_installed",
"update_url": "https://clients2.google.com/service/update2/crx",
"toolbar_pin": "force_pinned",
"runtime_blocked_hosts": [
"*://*.hr.acme.com",
"*://*.payroll.example.com"
],
"runtime_allowed_hosts": [
"*://status.hr.acme.com"
]
}
}installation_mode: force_installedinstalls it and stops users from removing it. Usenormal_installedto install it but let users turn it off.toolbar_pin: force_pinnedkeeps the BugMojo icon on the toolbar, where people look for it when they hit a bug.runtime_blocked_hostsstops the extension from reading or changing pages on those hosts, whatever the user allows. Patterns have no path:*://*.example.com.runtime_allowed_hostscarves exceptions out of the blocked list. Chrome reads at most 100 entries in each list and ignores the rest, so use broad patterns, or BugMojo’s ownblockedDomainsbelow, which has no such limit.
BugMojo asks for no access to other websites at install. It works on a page once the user clicks its icon there, and keeps its short instant replay buffer only on sites each user turns on. Chrome’s host blocking sits underneath all of that, as a hard floor.
BugMojo’s own policy
For controls Chrome cannot express, BugMojo reads a managed policy that your device management tool pushes to the extension. Chrome checks it against the schema the extension ships and stores it where only the extension can read it; neither the extension nor the user can change it. Every key is optional, and each one can only make BugMojo record less or redact more.
| Key | Type | What it does |
|---|---|---|
| allowedDomains | list of domains | Instant replay (the short rolling buffer) runs only on these domains and their subdomains, and only where the user also turned it on. Users cannot turn it on anywhere else. Leave it out for no limit. An empty list turns instant replay off everywhere. Captures the user starts on other sites still work. |
| blockedDomains | list of domains | BugMojo never records or captures here: no replay, no screenshot, no console or network logs, no video. The capture scripts are not even registered for these sites. Wins over every other setting. |
| lockRedaction | object | A redaction floor. Each true value locks that protection on: email, creditCard, ssn, phone, authHeader, jwt, secrets and maskAllInputs. maskSelector and blockSelector add CSS selectors to mask or leave out of the replay; customPatterns adds regular expressions to scrub. Users can add more, never less. |
| disableVideo | boolean | Users cannot attach a screen video to a capture. |
| disableAudio | boolean | Users cannot record voice notes or dictate into fields. |
| pauseByDefault | boolean | Background recording is paused when the policy first arrives. Each user can resume it; the extension does not pause them again unless you remove the key and add it back. |
| workspaceSlug | string | The workspace selected when someone signs in, if they belong to it: the slug in bugmojo.com/<slug>/dashboard. |
A full example:
{
"allowedDomains": ["app.acme.com", "staging.acme.com", "localhost"],
"blockedDomains": ["hr.acme.com", "mail.google.com"],
"lockRedaction": {
"email": true,
"creditCard": true,
"authHeader": true,
"jwt": true,
"secrets": true,
"maskAllInputs": true,
"blockSelector": ".patient-record, [data-pii]",
"customPatterns": ["ACME-\\d{6}"]
},
"disableVideo": false,
"disableAudio": true,
"pauseByDefault": false,
"workspaceSlug": "acme"
}- Domains match the domain and every subdomain. A leading
*., a scheme, a port or a path is ignored, sohttps://www.acme.com/appmeansacme.com. - Local development hosts are not exempt. If you set
allowedDomainsand your developers record on their own machines, addlocalhostand127.0.0.1. - Test selectors before you push them, for example with
document.querySelectorAllin DevTools. A selector the browser cannot parse is dropped, so it never stops the recording, but it also protects nothing. - Changes apply without a restart: open pages pick up a new policy within seconds of Chrome receiving it.
- BugMojo also ships a built in list of sites it never keeps a replay on (webmail, password managers, banks, payment pages, patient portals). Your
blockedDomainsadds to it and also stops captures there.
What your users see
A control your policy locks still looks and works like a control. It shows a Managed by your organization note, and a click explains the rule instead of silently doing nothing. On a blocked site the side panel says your organization does not allow recording there, and a capture explains why it stopped. Nothing is hidden from the person using it.
Google Admin console
- Go to Devices, Chrome, Apps & extensions, Users & browsers, and pick the organizational unit.
- Add the extension from the Chrome Web Store by its ID. Set Installation policy to Force install, or Force install + pin to browser toolbar.
- Paste BugMojo’s policy into Policy for extensions. The Admin console wants each key wrapped in a
Valueobject:
{
"allowedDomains": { "Value": ["app.acme.com", "staging.acme.com"] },
"blockedDomains": { "Value": ["hr.acme.com"] },
"lockRedaction": { "Value": { "maskAllInputs": true, "secrets": true } },
"workspaceSlug": { "Value": "acme" }
}Site blocking lives on the same page, under the extension’s permissions and URL access settings, and maps to runtime_blocked_hosts.
Microsoft Intune and Windows
- Create a configuration profile for Windows 10 and later with the Settings catalog. Under Google Chrome, Extensions, set the force installed list and Extension management settings (paste the
ExtensionSettingsJSON above). The same settings exist under Microsoft Edge. - BugMojo’s own policy lives in the registry. Push it with a PowerShell script or a remediation, or import Chrome’s ADMX templates. Lists and objects can be written as JSON strings:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\3rdparty\extensions\<extension-id>\policy]
"allowedDomains"="[\"app.acme.com\", \"localhost\"]"
"blockedDomains"="[\"hr.acme.com\"]"
"lockRedaction"="{\"maskAllInputs\": true, \"secrets\": true}"
"disableAudio"=dword:00000001
"workspaceSlug"="acme"For Edge, use HKLM\SOFTWARE\Policies\Microsoft\Edge\3rdparty\extensions\<extension-id>\policy. Group Policy works the same way on domain joined machines.
Jamf Pro and macOS
- Create a configuration profile with an Application & Custom Settings payload for the preference domain
com.google.Chrome, holdingExtensionInstallForcelistandExtensionSettings. - Add a second payload for the domain
com.google.Chrome.extensions.<extension-id>with BugMojo’s keys (arrays and dictionaries as plist types, booleans as booleans). - For Edge, the domains are
com.microsoft.Edgeandcom.microsoft.Edge.extensions.<extension-id>.
Linux
Chrome reads JSON policy files from /etc/opt/chrome/policies/managed/. Extension policy goes under 3rdparty:
/etc/opt/chrome/policies/managed/bugmojo.json
{
"3rdparty": {
"extensions": {
"<extension-id>": {
"blockedDomains": ["hr.acme.com"],
"lockRedaction": { "maskAllInputs": true }
}
}
}
}Firefox takes the same keys in policies.json under 3rdparty.Extensions, keyed by the add on ID.
Check it worked
- Open
chrome://policy, press Reload policies, and find the BugMojo extension ID. Every key you set should be listed with status OK. A key in error did not match the schema and is ignored. - Open BugMojo’s Settings in the side panel. Locked controls show Managed by your organization, and the instant replay section lists your allowed and blocked domains.
- Visit a blocked domain: the side panel says recording is not allowed there.

