From ad568043af43edc926c6b897fae369cd2c5fecd5 Mon Sep 17 00:00:00 2001
From: Sayan- <1415138+Sayan-@users.noreply.github.com>
Date: Wed, 14 Oct 2026 00:28:12 +0000
Subject: [PATCH] Document BAA page and interaction telemetry policy
---
browsers/telemetry/categories.mdx | 46 +++++++++++++++++++++++++++++--
1 file changed, 44 insertions(+), 2 deletions(-)
diff --git a/browsers/telemetry/categories.mdx b/browsers/telemetry/categories.mdx
index 0a20b1cf..360e87d7 100644
--- a/browsers/telemetry/categories.mdx
+++ b/browsers/telemetry/categories.mdx
@@ -173,14 +173,56 @@ Telemetry is off by default. The default set isn't limited to session metadata:
| `captcha` | Captcha type, task and challenge outcomes and durations, and opaque `task_id` and `challenge_id` values. It can include the host and path of the page where a task ran or a challenge appeared; the query string is excluded. Failed tasks can include a solver-specific error code. |
| `platform`, `connection`, `system`, `monitor` | Session and VM metadata only (VM-management calls, connection and health events). No page content. |
-Captured events are persisted and can be replayed by [resuming the stream](/browsers/telemetry/streaming#resuming-after-a-disconnect), so this sensitivity applies to the data at rest, not just the live stream. Events are retained for 30 days, then expired (see [Retention](/browsers/telemetry/overview#retention)). Treat captured telemetry - and anywhere you forward or store it - with the same care as the underlying content. For how Kernel encrypts, retains, and processes data overall, see [Security](/security) and the [Data Processing Addendum](/dpa).
+When storage is enabled, captured events are persisted and can be replayed by [resuming the stream](/browsers/telemetry/streaming#resuming-after-a-disconnect). Stored events are retained for 30 days, then expired (see [Retention](/browsers/telemetry/overview#retention)). Treat captured telemetry - and anywhere you forward or store it - with the same care as the underlying content. For how Kernel encrypts, retains, and processes data overall, see [Security](/security) and the [Data Processing Addendum](/dpa).
Some exposure is reduced for you automatically: input into sensitive fields such as passwords is suppressed (`interaction_key` isn't emitted for them, and `interaction_click` omits the element text), and `cdp_command` reports text lengths rather than the text itself. Beyond that, because selection is opt-in, the most effective control is to capture only the categories you need - enable `network`, `console`, `page`, `interaction`, or `screenshot` deliberately, and prefer the operational categories when you only need session health.
If you capture `control` and run Playwright code, pass credentials in through variables your snippet reads rather than as literals in the submitted source, so the captured `code` doesn't carry them.
-If you operate under HIPAA, GDPR, or similar obligations, be deliberate about the browser-activity categories: pointing them at a site that handles regulated data captures that data into storage. If your organization has a BAA with Kernel, the `network`, `console`, and `screenshot` categories are disabled and can't be captured. `control` and `captcha` stay available; keep regulated values out of the Playwright source you submit, and disable `captcha` if the page host or path identifies regulated data.
+If you operate under HIPAA, GDPR, or similar obligations, be deliberate about the browser-activity categories: pointing them at a site that handles regulated data can capture it. If your organization has a BAA with Kernel, `network`, `console`, `page`, and `interaction` return `400 telemetry_category_restricted` unless Kernel has enabled export-only telemetry for your organization and you create the browser with storage disabled and an enabled OTLP destination bound. `screenshot` remains restricted even in export-only mode because it isn't exported. `control` and `captcha` stay available; keep regulated values out of the Playwright source you submit, and disable `captcha` if the page host or path identifies regulated data.
If you have compliance requirements around what Kernel may process, [contact us](mailto:security@kernel.sh) before enabling them.
+
+### Export restricted categories for a BAA organization
+
+Once Kernel enables export-only telemetry for your organization and you've [created an OTLP destination](/browsers/telemetry/export#create-a-destination), disable storage in the same browser create request. For example, to export `page` and `interaction` to a destination named `honeycomb-prod`:
+
+
+```typescript Typescript/Javascript
+import Kernel from '@onkernel/sdk';
+
+const kernel = new Kernel();
+
+const browser = await kernel.browsers.create({
+ telemetry: {
+ browser: {
+ page: { enabled: true },
+ interaction: { enabled: true },
+ },
+ storage: { enabled: false },
+ export: { otlp: { destination: { name: 'honeycomb-prod' } } },
+ },
+});
+```
+
+```python Python
+from kernel import Kernel
+
+kernel = Kernel()
+
+browser = kernel.browsers.create(
+ telemetry={
+ "browser": {
+ "page": {"enabled": True},
+ "interaction": {"enabled": True},
+ },
+ "storage": {"enabled": False},
+ "export": {"otlp": {"destination": {"name": "honeycomb-prod"}}},
+ },
+)
+```
+
+
+With storage disabled, you can stream events live, but can't retrieve or replay them later from Kernel storage. `screenshot` isn't sent to your OTLP destination and remains restricted.