Skip to main content
This guide takes a fleet from no browser extension to every managed Google Chrome installing it on its own, with the settings your team chooses locked in place. Follow the steps in order.

What you’ll set up

When you finish, Chrome on every machine in scope:
  • Installs the signed Asymptote browser extension without anyone clicking anything. Employees can’t remove it or turn it off.
  • Runs it with the settings you lock, such as capture on and full retention. The extension’s popup shows them as managed by your organization.
  • Captures chats on claude.ai and chatgpt.com and hands them to the Beacon agent on the same machine. Beacon sends them to the same destination as the rest of its telemetry: your own SIEM or storage, such as Microsoft Sentinel, Splunk, or an S3 bucket, or Asymptote Managed. The extension itself sends nothing anywhere else.
  • Updates it by itself when a new version is released.

Before you start

Values you’ll need

The ID never changes. It comes from the key the package is signed with, and Chrome checks that signature when it installs or updates the extension.

1. Force-install the extension

Point Chrome at the extension ID and the update URL. Chrome reads the update file, downloads the signed package, and installs it.
ExtensionSettings is a single policy. If your fleet already sets it, for example to block every extension that isn’t approved, add the Beacon entry to your existing value. Don’t replace it. A "*": {"installation_mode": "blocked"} entry and a force-installed entry for this ID work together: the force-install wins for this ID.
For Chrome browsers enrolled in Chrome Enterprise Core.
  1. In the Admin console, go to Menu → Chrome browser → Apps & extensions → Users & browsers.
  2. On the left, select the organizational unit to deploy to. Start with a test unit.
  3. Click + at the bottom right, then Add Chrome app or extension by ID.
  4. Enter the extension ID omjgmakjpomopmmpdgmjbfojhbgdgijc, choose From a custom URL, enter the update URL, and save.
  5. Click the extension in the list. In the panel on the right, set Installation policy to Force install, then click Save.
If your fleet sets ExtensionAllowedTypes, it must include extension, or Chrome refuses the install.

2. Lock the extension’s settings

Choose the settings employees should not change. Any setting you push is shown as managed in the extension’s popup and options page, and the extension refuses changes to it. Settings you leave out keep their defaults and stay editable. The examples lock capture on with full retention.
Click the extension in Apps & extensions → Users & browsers. In Policy for extensions, enter the settings with each value wrapped in {"Value": ...}, then click Save:
With full retention, the complete text of every prompt and answer on claude.ai and chatgpt.com is written to the machine’s runtime log, and goes wherever Beacon forwards that log: your SIEM or storage, or Asymptote Managed. Make sure that matches the notice your organization gives employees.

3. Try it on one machine

Apply the policies to one test machine first.
  1. On that machine, open chrome://policy and click Reload policies. ExtensionSettings and the extension’s policy should show OK. If an entry is marked [BLOCKED], the machine doesn’t count as managed; see Troubleshooting.
  2. Within a minute or two, chrome://extensions lists Agent Beacon — Browser Collector as installed by your administrator, with no remove button.
  3. Click the extension’s icon (or find it in Chrome’s puzzle-piece menu). The popup says Some settings are managed by your organization, and the settings you locked are greyed out with your values.
  4. Send a short message on claude.ai or chatgpt.com, then check that Beacon recorded it:
    Each line is one event. Its beacon.content.retention attribute shows the retention you set. Beacon then forwards these events like the rest of its telemetry, so within a few minutes they also appear in your destination, such as your Microsoft Sentinel workspace or Asymptote Managed. Search for the harness names claude_web and chatgpt_web.

4. Roll out

  1. Remove any copy of the extension someone loaded by hand through developer mode (Load unpacked). Chrome gives that copy a different ID, so it would run alongside the managed one and either copy could capture a chat. A "*": {"installation_mode": "blocked"} entry in ExtensionSettings also stops Chrome from loading unpacked extensions.
  2. Widen the policies from the test machine to the rest of the fleet.
  3. Spot-check a few machines with step 3.

Updates

Nothing to do. Chrome checks the update URL about every five hours and when it starts. When a new version is released, every machine installs it on its own, keeping the settings you locked. chrome://extensions shows the installed version, and the releases page lists the changes in each ext-v* release.

Host your own copy

If Chrome can’t reach GitHub, or you want to approve each version before it reaches the fleet, serve the update file and the package from your own HTTPS server. The signature stays valid, so the extension ID doesn’t change.
  1. Download the signed package and its checksum from the ext-v* release you want, and check it:
  2. Copy the .crx to your server, and publish an updates.xml next to it that names its URL, version, and SHA-256 (the first field of the .sha256 file):
    updates.xml
  3. In step 1’s policy, use your updates.xml URL as update_url, and add "override_update_url": true. Without it, installed copies keep checking GitHub, because the extension itself names that URL.
  4. For each new release, repeat steps 1 and 2. Machines stay on the version your updates.xml names until you change it.

Troubleshooting

Chrome doesn’t consider the machine managed, so it refuses to install an extension from outside the Chrome Web Store. Join the machine to Active Directory or Entra ID, enroll it in your MDM, or enroll Chrome in Chrome Enterprise Core.
  • If you set ExtensionAllowedTypes, add extension to it.
  • Check that the machine can reach github.com and release-assets.githubusercontent.com over HTTPS, or host your own copy.
  • Reload policies in chrome://policy, or restart Chrome.
Chrome drops a value that doesn’t match the extension’s settings schema, such as a misspelled retention value or a string where a boolean belongs. In the Google Admin console, each value must be wrapped as {"Value": ...}. Open chrome://policy, check Show policies with no value set, and look for errors under the extension’s ID.
Chrome couldn’t read the extension’s managed settings. Until it can, the extension captures nothing and refuses changes, because it can’t know which settings are locked. Restart Chrome. If it persists, check chrome://policy for errors.
Check that Beacon is running on the machine: sudo /opt/beacon/bin/beacon endpoint status --system on macOS. The popup shows the endpoint the extension sends to and how many events are waiting to be delivered.
Browser chats reach your destination only through Beacon’s forwarding, the same path as the rest of its telemetry. Check that forwarding to that destination is set up and running; see Log forwarding.In Microsoft Sentinel, browser chats land in BeaconRuntime_CL with HarnessName claude_web or chatgpt_web. The prompt and answer text are inside RawData, so a custom data collection rule transform that drops RawData loses them. To see them:
One is a copy loaded by hand in developer mode. Remove it from chrome://extensions. See Roll out.
Chrome turns off DevTools for extensions installed by policy unless the DeveloperToolsAvailability policy is 1. Change it only on machines where you need to debug the extension.

Reference

If your management tool only offers the older ExtensionInstallForcelist policy, add this entry to its list. It installs the extension the same way, but can’t set override_update_url for a mirror.

Browser extension

What the extension captures, its settings, and retained content.

Chromium browsers

Edge, Brave, and other Chromium browsers.