adding-warehouse-perso…
Sync columns from a synced data warehouse table onto PostHog person or group properties, so warehouse data becomes usable anywhere person and group properties…
Create PostHog error tracking suppression rules to drop high-volume, low-value errors at ingestion. Use when the user asks "stop capturing this error", "drop browser extension errors", "ignore ResizeObserver loops", "suppress bot-driven errors", or wants to reduce ingestion cost
$ npx -y skills add PostHog/ai-plugin --skill suppressing-noisy-errors --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/suppressing-noisy-errorsContext preview
The summary Claude sees to decide when to auto-load this skill.
Create PostHog error tracking suppression rules to drop high-volume, low-value errors at ingestion. Use when the user asks "stop capturing this error", "drop browser extension errors", "ignore ResizeObserver loops", "suppress bot-driven errors", or wants to reduce ingestion cost
name: suppressing-noisy-errors description: > Create PostHog error tracking suppression rules to drop high-volume, low-value errors at ingestion. Use when the user asks "stop capturing this error", "drop browser extension errors", "ignore ResizeObserver loops", "suppress bot-driven errors", or wants to reduce ingestion cost from noisy unactionable errors. Identifies suppression candidates, scopes the filter tightly, decides between full suppression and sampling, and confirms the rule before creating it. Suppressed errors are dropped permanently — this skill defaults to caution.
Suppression is destructive in spirit: matching events are dropped at ingestion and never become issues. The wrong rule silently throws away real bugs. This skill exists to make sure suppression is applied only to patterns that are genuinely unactionable, with filters narrow enough to avoid swallowing unrelated errors.
Suppression is the right tool when an error is:
blockers, network beacons firing after navigation. You can't fix it because you didn't write it.
`Script error.`, `Non-Error promise rejection captured` with empty payloads.
crawler user agents.
`sampling_rate` instead of full suppression so you keep visibility without paying full cost.
Suppression is **not** the right tool when:
use issue status `archived` or `resolved` instead so it surfaces if it returns.
status, or use notification rules.
(`grouping-noisy-errors`).
| Tool | Purpose | | ------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | | `posthog:query-error-tracking-issues-list` | Find suppression candidates by volume and impact; dry-run a candidate filter via `filterGroup` | | `posthog:query-error-tracking-issue-events` | Inspect sampled `$exception` events to confirm the pattern | | `posthog:execute-sql` | Fallback dry-run for filters that need OR groups or operators outside the `filterGroup` allowed list | | `posthog:error-tracking-suppression-rules-list` | Check existing suppression rules | | `posthog:error-tracking-suppression-rules-create` | Create the suppression rule | | `posthog:error-tracking-issues-partial-update` | Hide past data via issue status without dropping events at ingestion |
High occurrences with low distinct users is the strongest noise signal — one user (or one bot) producing many events.
posthog:query-error-tracking-issues-list
{
"status": "active",
"orderBy": "occurrences",
"orderDirection": "DESC",
"dateRange": { "date_from": "-7d" },
"limit": 30,
"volumeResolution": 0
}Look for:
bot or extension loop)
`Script error.`, extension namespaces (`chrome-extension://`, `moz-extension://`, `safari-extension://`)
For each candidate, pull a sample of `$exception` events and check that the pattern matches what you intend to suppress:
posthog:query-error-tracking-issue-events
{
"issueId": "<candidate_issue_id>",
"limit": 10,
"include": ["exception", "stacktrace", "environment", "navigation"]
}`onlyAppFrames` defaults to `true`, but for noise investigation you usually want the third-party frames visible — pass `onlyAppFrames: false` so extension URLs and vendor domains show up in the stack.
Confirm:
the noise
the type
If any sample doesn't match, narrow the filter or skip the candidate.
Suppression rules are configured with the same filter shape as grouping rules. The `error-tracking-suppression-rules-create` tool description warns explicitly: do **not** create match-all rules and do **not** create overly broad rules. Match on the most specific property combination you can:
| Noise pattern | Recommended filter | | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | | Chrome extension errors | `$exception_sources icontains "chrome-extension://"` | | Firefox extension errors | `$exception_sources icontains "moz-extension://"`
Official PostHog plugin for AI clients. Access PostHog products directly from your AI coding tool.
Repo: PostHog/ai-plugin
Sync columns from a synced data warehouse table onto PostHog person or group properties, so warehouse data becomes usable anywhere person and group properties…
Analyze the most expensive users in AI observability and explain why they cost so much. Use when the user asks about top spenders, expensive users, per-user…
Analyze session replay patterns across experiment variants to understand user behavior differences. Use when the user wants to see how users interact with…
Split a completed PostHog task run into activity records — what the agent tried, whether it worked, what blocked it — and record each one through the…
Assesses what a page's heatmap is telling you and recommends concrete changes. Pulls click / rageclick / scroll-depth data for a URL, names the hot elements by…
Audit every endpoint in a PostHog project for staleness, failed materialisations, and unused materialised versions. Use when the user asks "what endpoints can…