Guides product analytics and RUM (Real User Monitoring) event tracking in web (React/Next.js) and mobile (React Native/Expo) apps. Decides what user interactions are valuable to capture, what's noise, what's PII to avoid, and how to implement, audit, update, and remove tracking code cleanly. Covers event naming, property schemas, tracking plans, GDPR/CCPA/DPDPA compliance, OpenTelemetry semantic conventions for browser and mobile RUM, and platforms (PostHog, Segment, Mixpanel, Amplitude, Datadog RUM, Sentry, OTel, Dash0). Modes: guide (default), implement, audit, remove, plan. Triggers on "track this event", "add analytics", "what should I track", "is this PII", "tracking plan", "remove tracking", "audit analytics", "/rum-tracking".
67
84%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Guides product-analytics and RUM event tracking for web (React/Next.js) and mobile (React Native/Expo) apps. Decides what to capture, what to drop, what's PII, and how to add, audit, update, and remove tracking code without breaking downstream dashboards.
External dependency. The OTel guidance in
rules/otel-conventions.mdbuilds on theotel-instrumentationandotel-semantic-conventionsskills, which live in the dash0 agent-skills repo, not this one. That rule invokes them at runtime viaSkill()when they're installed (and otherwise skips them with a one-line report, never silently) — install them alongside this skill to get their authoritative span/metric/attribute guidance.
This
SKILL.mdis a thin index. Detailed rules live inrules/*.mdand load on demand. Worked examples live inreferences/*.md. Literal scaffolding lives intemplates/*.md.
Parse $1 as the mode.
State the detected mode in one line before continuing.
| Mode | Default | Trigger |
|---|---|---|
guide | yes | "what should I track", "is this worth tracking", default if no mode |
implement | "add tracking", "instrument this", "track this event" | |
audit | "audit tracking", "review analytics", "find tracking issues" | |
remove | "remove tracking", "delete this event", "deprecate", "/rm-tracking" | |
plan | "tracking plan", "design event schema", "what events do we need" |
If $1 is a target file or directory, treat it as the scope for audit,
implement, or remove.
The user is deciding whether and what to track at a specific point.
rules/what-to-track.md and
rules/what-not-to-track.md.rules/pii-and-compliance.md.rules/event-design.md.rules/otel-conventions.md.references/event-catalog.md instead
of inventing new ones when one fits.The user wants tracking code written.
rules/tracking-plan.md).
If not, propose adding it to the plan first and gate the user
before writing instrumentation.rules/implementation-web.md.rules/implementation-mobile.md.rules/otel-conventions.md.templates/analytics-wrapper.template.ts).
Never call the vendor SDK directly from a component.rules/pii-and-compliance.md on every
property before the diff is final.The user wants existing tracking reviewed.
rules/audit-checklist.md.The user wants tracking deprecated or deleted.
rules/update-and-remove.md.deprecated first, set a sunset date, then remove.The user wants to design, update, or codegen a tracking plan.
rules/tracking-plan.md.templates/tracking-plan.template.yaml.rules/event-design.md)
and freeze it for the project.json-schema-to-typescript) so the wrapper is type-checked.Load on demand — do not preload.
references/platforms.md is optional — load
when the user asks "which platform should we use" or names a specific
vendor.
track() callsite; swapping vendors must be a
single-file change.user.id, hash for correlation, strip URLs and free-text.user.id, session.id, browser.*, app.*, error.type come from
the registry — do not invent custom names that overlap.posthog.capture() / mixpanel.track() calls across
components instead of one wrapper.req.body, or stack traces
with user input into event properties.distinct_id / user.id — always opaque.signup and user_registered for the
same concept).implement or remove: tracking plan updated in the same diff.39b3f44
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.