Help us improve
Share bugs, ideas, or general feedback.
From mthines-agent-skills
Guides product analytics and RUM event tracking for React/Next.js web and React Native/Expo mobile apps, including PII identification, GDPR compliance, and platform integrations (PostHog, Segment, Datadog RUM, Sentry, OpenTelemetry).
npx claudepluginhub mthines/agent-skillsHow this skill is triggered — by the user, by Claude, or both
Slash command
/mthines-agent-skills:rum-trackingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Guides product-analytics and RUM event tracking for web (React/Next.js)
references/event-catalog.mdreferences/platforms.mdrules/audit-checklist.mdrules/event-design.mdrules/implementation-mobile.mdrules/implementation-web.mdrules/otel-conventions.mdrules/pii-and-compliance.mdrules/tracking-plan.mdrules/update-and-remove.mdrules/what-not-to-track.mdrules/what-to-track.mdtemplates/analytics-wrapper.template.tstemplates/tracking-plan.template.yamlGuides technical evaluation of code review feedback: read fully, restate for understanding, verify against codebase, respond with reasoning or pushback before implementing.
Share bugs, ideas, or general feedback.
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 skips silently otherwise) — 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.