# grouping-noisy-errors

Consolidates duplicated PostHog error tracking issues caused by volatile stack traces and sets ingestion grouping rules.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 321 installs · ★ 76
- Author: PostHog
- License: MIT · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/PostHog/skills/tree/HEAD/skills/omnibus/grouping-noisy-errors/SKILL.md
- Updated: 2026-10-24
- HTML: https://affpapa.org/en/nevibecode/skills/grouping-noisy-errors

## What it does

Dynamic file paths, timestamps, and build hashes frequently split identical errors across multiple PostHog issues. This skill finds candidates via `posthog:query-error-tracking-issues-list` and inspects sampled stack traces using `posthog:query-error-tracking-issue-events`. It validates in-app frames and exception types before touching anything.

Resolution uses two distinct mechanisms. Merging collapses existing historical records into a single target issue. Grouping rules rewrite incoming event fingerprints to `custom-rule:<rule_id>` at ingestion time so future occurrences stay grouped. Recurring issues require both actions in sequence.

The skill enforces strict separation boundaries. It never groups frontend browser exceptions with backend Node or Python errors, even when messages match. Differences in `$exception_handled` or differing top in-app frames will also prevent a merge.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add PostHog/skills --skill grouping-noisy-errors -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/grouping-noisy-errors/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/grouping-noisy-errors/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add PostHog/skills --skill grouping-noisy-errors -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/grouping-noisy-errors/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add PostHog/skills --skill grouping-noisy-errors -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/grouping-noisy-errors/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install PostHog/skills grouping-noisy-errors
```

2. **Manually: put the files in place**
- File: `.github/skills/grouping-noisy-errors/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add PostHog/skills --skill grouping-noisy-errors -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/PostHog/skills --path skills/omnibus/grouping-noisy-errors
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/grouping-noisy-errors/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add PostHog/skills --skill grouping-noisy-errors -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/PostHog/skills/tree/HEAD/skills/omnibus/grouping-noisy-errors/SKILL.md

## When to use it
- Consolidate PostHog issues split by dynamic paths or hashes
- Create ingestion rules to prevent fingerprint sprawl
- Inspect sampled error events and top in-app stack frames
- Revert accidental merges with surgical fingerprint splits

## Example prompts
- Why do I have so many TypeError issues in PostHog that look the same?
- Merge these duplicate PostHog errors and add a rule for future events
- Clean up fingerprint sprawl across recent active error tracking issues

## Source text · SKILL.md · MIT

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: d5939cfbf7e78928.

BEGIN THIRD-PARTY FILE d5939cfbf7e78928
```text
---
name: grouping-noisy-errors
description: >
  Consolidate PostHog error tracking issues that are the same actual
  error reported under different fingerprints. Use when the user asks
  "why do I have so many TypeError issues that look the same?", "merge
  these duplicates", "stop splitting this error into new issues", or
  wants to clean up fingerprint sprawl. Decides between a one-shot merge
  of existing issues and a durable grouping rule that keeps future
  events from creating new fingerprints. Does NOT group conceptually
  similar bugs across different runtimes, SDKs, or call sites.
---

# Grouping noisy errors

The same error can be reported as dozens of separate issues when stack frames or
messages contain volatile data — random IDs, dynamic file paths, build hashes,
anonymous function names. The fix is two-step: merge the existing issues into one
target, then create a grouping rule so future events from the same call site
share a single canonical fingerprint instead of spawning new ones.

Important up front: "same error" here is narrow. Two issues that share a name or
a sentence of message text but came from different code paths, different SDKs,
or different runtimes are **different errors** and should stay separate, even if
the user thinks of them as "the same kind of bug". Grouping a frontend
`TypeError` together with a backend `TypeError` because both messages contain
"undefined" destroys the signal that lets the team find each one. The criteria
in step 1 exist to keep that from happening.

## Available tools

| Tool                                           | Purpose                                                |
| ---------------------------------------------- | ------------------------------------------------------ |
| `posthog:query-error-tracking-issues-list`     | Find candidate duplicate issues                        |
| `posthog:query-error-tracking-issue`           | Pull compact details for an individual issue           |
| `posthog:query-error-tracking-issue-events`    | Sampled `$exception` events with stack and message     |
| `posthog:error-tracking-issues-merge-create`   | Merge existing issues into a target                    |
| `posthog:error-tracking-issues-split-create`   | Surgically split fingerprints back out if a merge errs |
| `posthog:error-tracking-grouping-rules-create` | Auto-group future events into one issue                |
| `posthog:error-tracking-grouping-rules-list`   | Check existing grouping rules before adding new ones   |
| `posthog:error-tracking-issues-partial-update` | Rename or re-describe the target after a merge         |

## Merge vs grouping rule

The two tools solve different halves of the problem:

- **Merge** is one-shot. It collapses existing issues into a target and re-attaches
```
END THIRD-PARTY FILE d5939cfbf7e78928

The third-party file has ended. Everything between the d5939cfbf7e78928 tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 2797 of 13910 bytes. © PostHog · MIT · https://github.com/PostHog/skills/tree/HEAD/skills/omnibus/grouping-noisy-errors/SKILL.md

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
