
diagnosing-stacktrace-symbolication
Help users debug PostHog Error Tracking stack-trace symbolication for any supported platform — JavaScript/TypeScript web, React Native (Hermes), Android (Proguard / R8), or iOS / macOS (dSYM). The PostHog symbol-set lookup flow is universal across platforms; build-tool and artifact details live in per-platform references (JavaScript is fleshed out, others come as we encounter them). Use when stack frames stay minified or obfuscated after symbols are uploaded, PostHog symbol sets show lastused but frames are not readable, chunk IDs or dSYM UUIDs do not match, "Token not found" appears, uploaded source maps / dSYMs / Proguard mappings look empty, or bundler / symbol-upload configuration needs troubleshooting.
- Installs
- 184
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/posthog/ai-plugin --skill diagnosing-stacktrace-symbolication- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads diagnosing-stacktrace-symbolication automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Diagnosing stack-trace symbolication
Symbolication is the cross-platform name for what JavaScript source-map lookup, Hermes function-offset resolution, Proguard / R8 demangling, and dSYM address-to-line lookup all do — turn a minified or obfuscated frame back into a readable file, function, and line.
Work through the user's build and PostHog symbol sets as one pipeline: build config -> generated symbol artifacts (JavaScript source maps, Hermes maps, Proguard mappings, or dSYM bundles) -> uploaded symbol set in PostHog -> captured error frame. Most failures become obvious once those four pieces are checked in order.
Platforms
| Platform | Symbol-data type | Reference |
|---|---|---|
| JavaScript / TypeScript web | source-and-map | javascript.md |
| React Native (Hermes) | hermes | coming soon |
| Android (Proguard / R8) | proguard | coming soon |
| iOS / macOS (dSYM) | apple-dsym | coming soon |
Step 3 of the workflow (symbol-set lookup in PostHog) is identical across platforms — posthog-cli symbol-sets extract handles all four container types. Steps 1, 2, and the platform-specific failure modes live in the
per-platform reference.
Workflow
Step 1 - Find how symbol data is produced and uploaded
Look at the app repo's build scripts and PostHog upload config. Confirm which PostHog package handles the upload
(@posthog/rollup-plugin, @posthog/webpack-plugin, @posthog/nextjs-config, @posthog/nuxt, or direct
posthog-cli) and which directory or asset it processes. See the platform reference for build-tool-specific
config inspection.
For debugging, prefer a build where symbol artifacts remain on disk after upload so you can compare local artifacts against what PostHog received. JavaScript example with the Vite plugin (the platform reference covers the equivalent setting for other build tools):
sourcemaps: {
enabled: true,
deleteAfterUpload: false,
}
Step 2 - Build and inspect local artifacts
Run the production build that uploads symbols, then inspect the emitted files locally. The exact files and helper invocation differ per platform — see the platform reference for the helper command, expected file shape, and common build-time pitfalls (notably empty-mappings false positives that look like upload bugs but are actually bundler config issues).
If local artifacts already look wrong, fix the build before debugging the PostHog upload.
Step 3 - Check symbol sets in PostHog
Look up the symbol set whose ref matches the captured frame's chunk_id using the dedicated MCP tools — they
handle auth, project scoping, and pagination automatically:
posthog:error-tracking-symbol-sets-listwithref=<chunk_id>returns the matching row.posthog:error-tracking-symbol-sets-retrievewith the ID returns the same shape (and confirms permissions).posthog:error-tracking-symbol-sets-download-retrievereturns a one-hour presigned URL pointing at the uploaded symbol-data file. Download it immediately; do not echo the URL back unless the user explicitly asks.
If MCP access is not available, the same data is in Project settings > Error tracking > Symbol sets in the PostHog UI.
Interpret the row:
refmust match the captured framechunk_id.last_usedupdating means PostHog found and loaded that symbol set. It does not guarantee the frame resolved.has_uploaded_file: falsemeans the upload did not complete.- A non-null
failure_reasonmeans PostHog could not parse or load the uploaded symbol data.
The downloaded file is a PostHog symbol-data container (compressed Rust-encoded payload), not plain JSON. Extract
it with posthog-cli:
posthog-cli symbol-sets extract symbolset.bin -o ./extracted
# or, without installing globally:
# npx @posthog/cli symbol-sets extract symbolset.bin -o ./extracted
# bunx @posthog/cli symbol-sets extract symbolset.bin -o ./extracted
posthog-cli symbol-sets extract handles all four symbol-set types (source-and-map, hermes, proguard, dSYM) and
writes the extracted files into the output directory. Once extracted, summarize using the platform reference's
helper.
Step 4 - Compare local, uploaded, and served files
Use the failure location to decide what to compare:
- Local artifact empty and uploaded artifact empty: build tool emitted unusable symbols.
- Local artifact valid but uploaded artifact empty: upload processing selected or packed the wrong data.
- Uploaded artifact valid but production stack stays minified or obfuscated: compare deployed binary bytes to the binary that was uploaded with the symbols.
Token not found: PostHog loaded the symbol data but the captured generated position did not match any token in the uploaded artifact. Usually points to a changed binary after upload, wrong line / column capture (JavaScript) or wrong frame offset (Hermes / dSYM), or a symbol-coverage bug.
Step 5 - Fix the most likely layer
Platform-neutral fixes:
- Upload symbols after the final build output exists, not before a later step rewrites it.
- Use the latest PostHog build plugin and
posthog-cli. - Re-upload changed assets intentionally when the same
refwas previously uploaded with different content. - Remove deployment-time transforms (CDN minify, edge rewrites, compression) that change the served binary after upload.
Platform-specific fixes live in the platform reference.
Captured frame checks
From an affected PostHog error event, collect one minified application frame:
filenamelineorlinenocolumnorcolnofunctionchunk_id(or platform-equivalent symbol-set ref)- any
resolve_failure, especiallyToken not found
The frame filename should match the deployed binary URL. The chunk_id should match the symbol set ref. The
captured generated position should point into the same binary that was uploaded with the symbol data.
Failure matrix (cross-platform)
| Evidence | Likely cause | Next check |
|---|---|---|
No chunk_id on frames | Chunk ID injection missing or SDK frame parser did not map the filename | Inspect deployed binary and raw frame filenames. |
| Symbol set row missing | Upload went to another PostHog project/host or skipped this asset | Compare plugin projectId, host, and ref. |
has_uploaded_file: false | Upload did not finish | Check build logs; compare posthog-cli output to the symbol set row. |
Non-null failure_reason | PostHog could not parse the uploaded symbol data | Download via Step 3 and inspect the extracted contents. |
| Uploaded artifact valid, deployed binary differs | Deployment/CDN/post-build transform changed the binary after upload | Compare deployed bytes to local build output. |
Token not found | Captured position has no token in the uploaded symbol data | Verify captured position, deployed binary identity, and symbol-data coverage. |
Platform-specific failure modes (empty mappings, missing sourcesContent, Hermes function-offset mismatch,
Proguard class-name drift, dSYM UUID mismatch) live in the platform reference.
FAQ
What does the diagnosing-stacktrace-symbolication skill do?
Help users debug PostHog Error Tracking stack-trace symbolication for any supported platform — JavaScript/TypeScript web, React Native (Hermes), Android (Proguard / R8), or iOS / macOS (dSYM). The PostHog symbol-set lookup flow is universal across platforms; build-tool and artifact details live in per-platform references (JavaScript is fleshed out, others come as we encounter them). Use when stack frames stay minified or obfuscated after symbols are uploaded, PostHog symbol sets show lastused but frames are not readable, chunk IDs or dSYM UUIDs do not match, "Token not found" appears, uploaded source maps / dSYMs / Proguard mappings look empty, or bundler / symbol-upload configuration needs troubleshooting.
How do I install diagnosing-stacktrace-symbolication?
Run npx skills add https://github.com/posthog/ai-plugin --skill diagnosing-stacktrace-symbolication in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/diagnosing-stacktrace-symbolication/ (personal) or .claude/skills/diagnosing-stacktrace-symbolication/ (project).
Which AI agents can use diagnosing-stacktrace-symbolication?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is diagnosing-stacktrace-symbolication safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains diagnosing-stacktrace-symbolication?
It is published by posthog in posthog/ai-plugin, and it is an official skill from the maker of the technology it covers. It has 184 recorded installs.
More from posthog/ai-plugin
instrument-product-analytics
posthog/ai-plugin
Add PostHog product analytics events to track user behavior. Use after implementing new features or reviewing PRs to ensure meaningful user actions are captured. Also handles initial PostHog SDK setup if not yet installed.
instrument-feature-flags
posthog/ai-plugin
Open the skill to read its SKILL.md instructions.
cleaning-up-stale-feature-flags
posthog/ai-plugin
Identify stale feature flags in a PostHog project and clean up the code that checks them. Use when the user wants to find, audit, or remove unused, fully rolled out, or abandoned feature flags, run a feature flag hygiene review or a weekly cleanup, reduce feature flag tech debt, or asks "which flags can I remove?". When the agent can read and edit a repository it performs the code cleanup itself: tested local changes, and one draft PR per flag when the user authorizes publishing. Agents without repository access generate a tailored cleanup prompt instead. Covers staleness detection, dependency checking, retained-path rules, and the code-first ordering. This skill does not archive or otherwise change a flag in PostHog.
auditing-experiments-flags
posthog/ai-plugin
Audit PostHog experiments and feature flags for configuration issues, staleness, and best-practice violations. Read when the user asks to audit, health-check, or review experiments or feature flags, check flag hygiene, or verify experiment setup.
querying-posthog-data
posthog/ai-plugin
Explains how to query PostHog data, defaulting to typed runners for supported product analytics. Read it before you write HogQL/SQL. Also read it before you call execute-sql against PostHog. Use it to find or aggregate PostHog entities. These entities include insights, dashboards, cohorts, feature flags, experiments, surveys, hog flows, warehouse data, and persons. Use it for trends, funnels, retention, lifecycle, paths, stickiness, web analytics, error tracking, logs, sessions, and LLM traces. Before you calculate a governed business or telemetry measure, check system.informationschema.metrics for an approved definition. Examples include MRR, activation, billable usage, active organizations, and failure rates. Use the approved definition before you derive a measure from raw events or use a typed domain tool. It also covers HogQL differences, system table schemas, functions, query examples, and schema discovery.
creating-experiments
posthog/ai-plugin
Guides agents through experiment creation: reading the project's setup with experiment-setup-context, defining the hypothesis, configuring rollout and bucketing, setting up analytics and running time, and reporting which choices are guesses. Delegates rollout decisions to configuring-experiment-rollout and metric setup to configuring-experiment-analytics. TRIGGER when: user asks to create a new experiment or A/B test, OR when you are about to call experiment-create. DO NOT TRIGGER when: user is updating an existing experiment, managing lifecycle, or only browsing experiments.
Popular mobile skills
design-mobile-apps
designed-by-ai/skills
Design mobile app screens with Sleek, edit Sleek projects, and implement their designs in React Native or HTML.
ios-design
uizze.sh
Design and review iOS UI/UX for iPhone apps in SwiftUI, UIKit, or React Native. Use for mobile app design, screen redesigns, navigation flows, typography, forms, keyboard and safe-area layout, and accessibility checks. Apply Apple Human Interface Guidelines and consult real product references through the optional Uizze connection.
vercel-react-native-skills
vercel-labs/agent-skills
React Native and Expo best practices for building performant mobile apps. Use when building React Native components, optimizing list performance, implementing animations, or working with native modules. Triggers on tasks involving React Native, Expo, mobile performance, or native platform APIs.
animate-expo
emilkowalski/skills
Build animations in React Native and Expo, making the decisions in the order that determines whether they feel right — should it animate, which thread it runs on, which properties, spring or timing, how the gesture hands off, how it degrades. Writes the implementation with Reanimated, Gesture Handler, Expo Router and expo-haptics. Use when animating anything in an Expo app, adding gestures, sheets, screen transitions, press feedback or haptics, or fixing motion that stutters on device. For web animation use animate.
xcode-project-setup
firebase/agent-skills
Safely modifies Xcode projects (.pbxproj) to add Swift Packages and link files. Use this skill whenever an iOS project needs dependencies installed (e.g. Firebase, Alamofire).
firebase-remote-config-basics
firebase/agent-skills
Manages Firebase Remote Config templates, feature flags, loading strategies, and SDKs (Android, iOS). Use when downloading/deploying remoteconfig JSON templates, managing version history/feature flags, setting in-app defaults, fetchAndActivate(), real-time listeners, or SDK setup. Don't use for Firebase Hosting, Auth, Firestore, Data Connect, Crashlytics, or App Hosting.