Consult the documentation for API details and framework-specific patterns.
Key principles
Environment variables: Always use environment variables for PostHog keys and host URLs. Never hardcode them.
Minimal changes: Add error tracking alongside existing error handling. Don't replace or restructure existing error handling code.
Autocapture first: Enable exception autocapture in the SDK initialization before adding manual captures.
Source maps: Upload source maps so stack traces resolve to original source code, not minified bundles.
Manual capture for boundaries: Use captureException() at error boundaries and catch blocks for errors that don't propagate to the global handler.
Framework guidelines
Remember that source code is available in the node_modules directory
Check package.json for type checking or build scripts to validate changes
posthog-js is the JavaScript SDK package name
posthog.init() MUST be called before any other PostHog methods (capture, identify, etc.)
posthog-js is browser-only — do NOT import it in Node.js or server-side contexts (use posthog-node instead)
Autocapture is ON by default with posthog-js (tracks clicks, form submissions, pageviews). Do NOT disable autocapture unless the user explicitly requests it.
NEVER send PII in posthog.capture() event properties — no emails, full names, phone numbers, physical addresses, IP addresses, or user-generated content
PII belongs in posthog.identify() person properties (email, name, role), NOT in capture() event properties
Call posthog.identify(userId, { email, name, role }) on login AND on page refresh if the user is already logged in
Call posthog.reset() on logout to unlink future events from the current user
For SPAs without a framework router, capture pageviews with posthog.capture($pageview) or use the capture_pageview history_change option in init for History API routing
How to use it
Copy the folder
Take posthog/error-tracking-web from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
Check the name does not clash
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.