> ## Documentation Index
> Fetch the complete documentation index at: https://docs.outerlayer.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Dashboard analytics and error reports

> The usage events OuterLayer sends to PostHog, what PostHog never receives, the error reports the dashboard sends, and what the browser stores.

OuterLayer measures how people use the dashboard with PostHog, a product analytics service. This page lists every usage event. It also covers the error reports the dashboard sends and what the browser stores.

The CLI sends no usage analytics. Each request the CLI sends to OuterLayer names the CLI and its version in the `User-Agent` header. For the session data that `outerlayer sync` uploads, see [What leaves your machine](https://docs.outerlayer.ai/what-leaves-your-machine.md).

## Where events go

Events go to PostHog, a subprocessor: a vendor that processes data for OuterLayer. OuterLayer uses the PostHog project in the United States. The [subprocessors page](https://outerlayer.ai/subprocessors) on outerlayer.ai lists it.

Events come from two places:

* **The dashboard in your browser.** It starts PostHog only after you sign in.
* **OuterLayer servers.** OuterLayer sends events when something happens in an organization, such as a build, a stage change or a review.

## How PostHog identifies you

PostHog knows a person by user id. It never receives your email or name. PostHog never records dashboard sessions. Session recording is off in code, so a PostHog project setting cannot turn it on.

PostHog also groups events by organization. The browser sends the organization id and the organization name. A server event names the organization by its id, and the factory by its id when the event belongs to one.

## What PostHog never receives

* Your email address or name.
* Session content, such as prompts, transcripts, tool output, code and file paths.
* API keys and other secrets.
* Text you type, and the text of anything you copy.
* Organization or factory names in page views.

## Events from the dashboard

| Event | When it is sent | Properties |
| - | - | - |
| `$pageview` | You open a page. Platform admin pages are not recorded. | `page_path`, `tenant_id` |
| `$pageleave` | You leave a page. PostHog sends it. | PostHog's standard page properties |
| `onboarding_banner_viewed` | The banner that asks you to connect a repository is shown. | None |
| `onboarding_checklist_step_clicked` | You select a step of the getting-started checklist. | `step` |
| `onboarding_checklist_dismissed` | You dismiss the checklist. | `done`, `total` |
| `onboarding_checklist_expanded` | You expand the checklist. | `done`, `total` |
| `onboarding_repo_provider_selected` | You start the GitHub connect flow. | `surface`, `provider` |
| `onboarding_repo_connect_opened` | You open the connect-repository step. | `surface` |
| `onboarding_repo_link_opened` | You open the link-repository dialog. | `surface` |
| `onboarding_panel_copied` | You copy a command, a key or a prompt from the setup panel. | `what` |
| `onboarding_panel_key_minted` | You create an API key in the setup panel. | `surface` |
| `onboarding_panel_runner_key_minted` | You create a runner key in the setup panel. | `surface` |
| `onboarding_panel_repo_linked` | You link a repository in the setup panel. | `surface` |

The properties have these values:

* `page_path` is the path with each dynamic segment replaced by its name, such as `/orgs/[orgName]/factories/[appName]/work`. The organization and factory names are not sent.
* `tenant_id` is the organization id.
* `step` is one of `app`, `repo`, `runner`, `trace` or `teammate`.
* `done` and `total` are the number of finished steps and the number of steps.
* `surface` is `setup-panel` or `banner`.
* `provider` is `github`.
* `what` is `setup`, `agent-prompt`, `runner-key` or `runner-prompt`. The copied text is not sent.

PostHog adds its own standard properties to each event, such as the browser, the operating system and the screen size. The dashboard removes every property that holds a page address, a path or a referrer, such as `$current_url`, `$pathname` and `$referrer`. Those values contain organization and factory names. The only page location an event carries is `page_path` on `$pageview`.

The [Privacy Policy](https://outerlayer.ai/privacy) lists your IP address, browser and device type among the usage data OuterLayer collects.

## Events from OuterLayer servers

| Event | When it is sent | Properties |
| - | - | - |
| `user_signed_up` | A person accepts the terms for the first time. | `sign_in_method`, `invited` |
| `org_provisioned` | An organization is created. | None |
| `member_invited` | An admin invites a member. | `role` |
| `member_joined` | A person accepts an invite. | `role`, `days_since_invite` |
| `cli_login_completed` | A person approves a CLI sign-in. | `first_for_person` |
| `org_repo_connected` | A GitHub repository is connected. | `provider` |
| `org_api_key_created` | An API key is created. | None |
| `org_first_trace` | The first session of an organization arrives. | `agent_type` |
| `work_item_created` | A work item is created. | `source`, `tracker` |
| `build_finished` | The claim on a build is released. | `outcome`, `held_by`, `minutes` |
| `work_item_stage_changed` | A work item moves to another stage. | `from_stage`, `to_stage`, `hours_in_from_stage`, `first_for_organization` |
| `review_submitted` | A person submits a review, approves or merges a work item in the dashboard. | `action` |
| `evidence_emitted` | An agent attaches evidence to a work item. | `kind`, `for_criterion` |
| `billing_limit_hit` | A read-only organization is refused a new work item, a build or a claim. An organization sends it at most once for each UTC day. | `action` |

Every property is a true or false value, a number, or one value from a fixed list. No property holds free text. For example, `role` is `owner`, `admin`, `write`, `read`, `disabled` or `custom`, and `tracker` is `github`, `linear`, `jira` or `other`.

Every server event that names an organization carries `tenant_id`, the organization id. An event that belongs to a factory also carries `app_id`, the factory id.

### Which person an event names

Most server events name the person who acted, by user id. These cases differ:

* A build that a runner runs names the member who asked for the build. The runner's key names no one.
* `user_signed_up` names no organization. `cli_login_completed` names one only when the person belongs to exactly one.
* An event with no known person names no person. PostHog then makes no person profile for it.

## Error reports

OuterLayer collects error reports apart from usage events. They go to an error-reporting service that the [subprocessors page](https://outerlayer.ai/subprocessors) lists.

* **What a report holds.** The error, your user id and your email. A report from the browser also holds your organization's id and name.
* **Replay.** When a dashboard page hits an error, the report includes a replay of the preceding moments. The replay masks all text and form inputs and blocks images. It shows page layout, not your content.
* **No other recording.** A session that hits no error is never recorded.

## Browser storage

PostHog keeps its state in memory for the page you are on. It writes no cookie and no local storage, so the dashboard shows no consent banner for analytics.

The dashboard stores these items in your browser:

* Sign-in cookies, which you need to stay signed in.
* Your color theme and layout choice, in local storage.
* One local storage key for each factory whose getting-started checklist you dismiss: `agentmark:onboarding-checklist-dismissed:<factory id>`.
* Short-lived session storage entries that stop the dashboard from reloading in a loop after a new version ships.
* The signing secret of a webhook automation you create, in session storage. The dashboard removes it when the page shows it to you, once.

## Turn analytics off

The hosted dashboard has no setting that turns analytics off.

To ask OuterLayer to stop using your data, or to delete it, email [hello@outerlayer.ai](mailto:hello@outerlayer.ai). The [Privacy Policy](https://outerlayer.ai/privacy) describes your rights.

## See also

* [What leaves your machine](https://docs.outerlayer.ai/what-leaves-your-machine.md) covers the data the CLI sends.
* [Platform admin access](https://docs.outerlayer.ai/platform-admin-access.md) covers what OuterLayer staff can do in your organization.
* [Security and privacy](https://docs.outerlayer.ai/security-and-privacy.md) says where each privacy fact lives.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.