From 8a69e402dfb862384e7434981ded3325aac40b71 Mon Sep 17 00:00:00 2001
From: "Vincent (Wen Yu) Ge" <29069505+gewenyu99@users.noreply.github.com>
Date: Wed, 26 Aug 2026 13:30:11 -0400
Subject: [PATCH 01/13] Update generated plugins from context-mill (mirror
test)
---
.../basic-integration-1.3-conclude.md | 38 --------------
.../basic-integration-1.3-conclude.md | 38 --------------
.../basic-integration-1.3-conclude.md | 38 --------------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../all/skills/integration-nuxt-3.6/SKILL.md | 50 -------------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../logs-datadog/references/debug-logs-mcp.md | 50 -------------------
.../logs-go/references/debug-logs-mcp.md | 50 -------------------
.../logs-java/references/debug-logs-mcp.md | 50 -------------------
.../logs-nextjs/references/debug-logs-mcp.md | 50 -------------------
.../logs-nodejs/references/debug-logs-mcp.md | 50 -------------------
.../logs-other/references/debug-logs-mcp.md | 50 -------------------
.../logs-python/references/debug-logs-mcp.md | 50 -------------------
.../references/debug-logs-mcp.md | 50 -------------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../integration/skills/nuxt-3.6/SKILL.md | 50 -------------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../references/basic-integration-1.0-begin.md | 43 ----------------
.../references/basic-integration-1.1-edit.md | 37 --------------
.../basic-integration-1.2-revise.md | 22 --------
.../basic-integration-1.3-conclude.md | 38 --------------
.../skills/all/references/debug-logs-mcp.md | 50 -------------------
.../datadog/references/debug-logs-mcp.md | 50 -------------------
.../skills/go/references/debug-logs-mcp.md | 50 -------------------
.../skills/java/references/debug-logs-mcp.md | 50 -------------------
.../nextjs/references/debug-logs-mcp.md | 50 -------------------
.../nodejs/references/debug-logs-mcp.md | 50 -------------------
.../skills/other/references/debug-logs-mcp.md | 50 -------------------
.../python/references/debug-logs-mcp.md | 50 -------------------
262 files changed, 9452 deletions(-)
delete mode 100644 skills/posthog/all/skills/integration-android/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-angular/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-astro-hybrid/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-astro-ssr/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-astro-static/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-astro-static/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-astro-static/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-astro-static/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-astro-view-transitions/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-astro-view-transitions/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-astro-view-transitions/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-astro-view-transitions/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-django/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-django/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-django/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-django/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-expo/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-expo/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-expo/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-expo/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-fastapi/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-fastapi/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-fastapi/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-fastapi/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-flask/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-flask/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-flask/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-flask/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-javascript_node/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-javascript_node/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-javascript_node/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-javascript_node/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-javascript_web/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-javascript_web/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-javascript_web/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-javascript_web/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-laravel/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-laravel/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-laravel/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-laravel/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-nextjs-app-router/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-nextjs-app-router/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-nextjs-app-router/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-nextjs-app-router/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-nextjs-pages-router/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-nextjs-pages-router/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-nextjs-pages-router/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-nextjs-pages-router/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-nuxt-3.6/SKILL.md
delete mode 100644 skills/posthog/all/skills/integration-nuxt-3.6/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-nuxt-3.6/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-nuxt-3.6/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-nuxt-3.6/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-nuxt-4/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-nuxt-4/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-nuxt-4/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-nuxt-4/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-python/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-python/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-python/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-python/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-react-native/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-react-native/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-react-native/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-react-native/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-react-react-router-6/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-react-react-router-6/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-react-react-router-6/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-react-react-router-6/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-react-react-router-7-data/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-react-react-router-7-data/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-react-react-router-7-data/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-react-react-router-7-data/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-react-react-router-7-declarative/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-react-react-router-7-declarative/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-react-react-router-7-declarative/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-react-react-router-7-declarative/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-react-react-router-7-framework/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-react-react-router-7-framework/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-react-react-router-7-framework/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-react-react-router-7-framework/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-react-tanstack-router-code-based/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-react-tanstack-router-code-based/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-react-tanstack-router-code-based/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-react-tanstack-router-code-based/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-react-tanstack-router-file-based/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-react-tanstack-router-file-based/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-react-tanstack-router-file-based/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-react-tanstack-router-file-based/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-react-vite/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-react-vite/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-react-vite/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-react-vite/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-ruby-on-rails/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-ruby-on-rails/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-ruby-on-rails/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-ruby-on-rails/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-ruby/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-ruby/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-ruby/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-ruby/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-sveltekit/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-sveltekit/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-sveltekit/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-sveltekit/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-swift/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-swift/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-swift/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-swift/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-tanstack-start/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-tanstack-start/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-tanstack-start/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-tanstack-start/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/integration-vue-3/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/all/skills/integration-vue-3/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/all/skills/integration-vue-3/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/all/skills/integration-vue-3/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/all/skills/logs-datadog/references/debug-logs-mcp.md
delete mode 100644 skills/posthog/all/skills/logs-go/references/debug-logs-mcp.md
delete mode 100644 skills/posthog/all/skills/logs-java/references/debug-logs-mcp.md
delete mode 100644 skills/posthog/all/skills/logs-nextjs/references/debug-logs-mcp.md
delete mode 100644 skills/posthog/all/skills/logs-nodejs/references/debug-logs-mcp.md
delete mode 100644 skills/posthog/all/skills/logs-other/references/debug-logs-mcp.md
delete mode 100644 skills/posthog/all/skills/logs-python/references/debug-logs-mcp.md
delete mode 100644 skills/posthog/all/skills/omnibus-instrument-logs/references/debug-logs-mcp.md
delete mode 100644 skills/posthog/integration/skills/android/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/android/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/android/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/android/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/angular/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/angular/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/angular/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/angular/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/astro-hybrid/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/astro-hybrid/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/astro-hybrid/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/astro-hybrid/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/astro-ssr/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/astro-ssr/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/astro-ssr/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/astro-ssr/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/astro-static/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/astro-static/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/astro-static/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/astro-static/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/astro-view-transitions/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/astro-view-transitions/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/astro-view-transitions/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/astro-view-transitions/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/django/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/django/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/django/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/django/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/expo/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/expo/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/expo/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/expo/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/fastapi/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/fastapi/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/fastapi/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/fastapi/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/flask/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/flask/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/flask/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/flask/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/javascript_node/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/javascript_node/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/javascript_node/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/javascript_node/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/javascript_web/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/javascript_web/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/javascript_web/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/javascript_web/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/laravel/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/laravel/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/laravel/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/laravel/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/nextjs-app-router/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/nextjs-app-router/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/nextjs-app-router/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/nextjs-app-router/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/nextjs-pages-router/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/nextjs-pages-router/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/nextjs-pages-router/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/nextjs-pages-router/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/nuxt-3.6/SKILL.md
delete mode 100644 skills/posthog/integration/skills/nuxt-3.6/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/nuxt-3.6/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/nuxt-3.6/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/nuxt-3.6/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/nuxt-4/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/nuxt-4/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/nuxt-4/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/nuxt-4/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/python/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/python/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/python/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/python/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/react-native/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/react-native/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/react-native/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/react-native/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/react-react-router-6/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/react-react-router-6/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/react-react-router-6/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/react-react-router-6/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/react-react-router-7-data/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/react-react-router-7-data/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/react-react-router-7-data/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/react-react-router-7-data/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/react-react-router-7-declarative/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/react-react-router-7-declarative/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/react-react-router-7-declarative/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/react-react-router-7-declarative/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/react-react-router-7-framework/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/react-react-router-7-framework/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/react-react-router-7-framework/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/react-react-router-7-framework/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/react-tanstack-router-code-based/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/react-tanstack-router-code-based/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/react-tanstack-router-code-based/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/react-tanstack-router-code-based/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/react-tanstack-router-file-based/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/react-tanstack-router-file-based/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/react-tanstack-router-file-based/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/react-tanstack-router-file-based/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/react-vite/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/react-vite/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/react-vite/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/react-vite/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/ruby-on-rails/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/ruby-on-rails/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/ruby-on-rails/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/ruby-on-rails/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/ruby/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/ruby/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/ruby/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/ruby/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/sveltekit/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/sveltekit/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/sveltekit/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/sveltekit/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/swift/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/swift/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/swift/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/swift/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/tanstack-start/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/tanstack-start/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/tanstack-start/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/tanstack-start/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/integration/skills/vue-3/references/basic-integration-1.0-begin.md
delete mode 100644 skills/posthog/integration/skills/vue-3/references/basic-integration-1.1-edit.md
delete mode 100644 skills/posthog/integration/skills/vue-3/references/basic-integration-1.2-revise.md
delete mode 100644 skills/posthog/integration/skills/vue-3/references/basic-integration-1.3-conclude.md
delete mode 100644 skills/posthog/logs/skills/all/references/debug-logs-mcp.md
delete mode 100644 skills/posthog/logs/skills/datadog/references/debug-logs-mcp.md
delete mode 100644 skills/posthog/logs/skills/go/references/debug-logs-mcp.md
delete mode 100644 skills/posthog/logs/skills/java/references/debug-logs-mcp.md
delete mode 100644 skills/posthog/logs/skills/nextjs/references/debug-logs-mcp.md
delete mode 100644 skills/posthog/logs/skills/nodejs/references/debug-logs-mcp.md
delete mode 100644 skills/posthog/logs/skills/other/references/debug-logs-mcp.md
delete mode 100644 skills/posthog/logs/skills/python/references/debug-logs-mcp.md
diff --git a/skills/posthog/all/skills/integration-android/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-android/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-android/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-angular/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-angular/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-angular/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-astro-hybrid/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-astro-hybrid/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-astro-hybrid/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-astro-ssr/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-astro-ssr/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-astro-ssr/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-astro-static/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-astro-static/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-astro-static/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-astro-static/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-astro-static/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-astro-static/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-astro-static/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-astro-static/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-astro-static/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-astro-static/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-astro-static/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-astro-static/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-astro-view-transitions/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-astro-view-transitions/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-astro-view-transitions/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-astro-view-transitions/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-astro-view-transitions/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-astro-view-transitions/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-astro-view-transitions/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-astro-view-transitions/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-astro-view-transitions/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-astro-view-transitions/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-astro-view-transitions/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-astro-view-transitions/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-django/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-django/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-django/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-django/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-django/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-django/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-django/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-django/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-django/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-django/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-django/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-django/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-expo/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-expo/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-expo/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-expo/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-expo/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-expo/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-expo/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-expo/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-expo/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-expo/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-expo/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-expo/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-fastapi/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-fastapi/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-fastapi/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-fastapi/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-fastapi/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-fastapi/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-fastapi/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-fastapi/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-fastapi/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-fastapi/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-fastapi/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-fastapi/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-flask/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-flask/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-flask/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-flask/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-flask/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-flask/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-flask/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-flask/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-flask/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-flask/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-flask/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-flask/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-javascript_node/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-javascript_node/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-javascript_node/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-javascript_node/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-javascript_node/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-javascript_node/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-javascript_node/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-javascript_node/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-javascript_node/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-javascript_node/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-javascript_node/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-javascript_node/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-javascript_web/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-javascript_web/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-javascript_web/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-javascript_web/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-javascript_web/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-javascript_web/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-javascript_web/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-javascript_web/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-javascript_web/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-javascript_web/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-javascript_web/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-javascript_web/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-laravel/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-laravel/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-laravel/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-laravel/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-laravel/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-laravel/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-laravel/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-laravel/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-laravel/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-laravel/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-laravel/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-laravel/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-nextjs-app-router/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-nextjs-app-router/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-nextjs-app-router/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-nextjs-app-router/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-nextjs-app-router/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-nextjs-app-router/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-nextjs-app-router/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-nextjs-app-router/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-nextjs-app-router/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-nextjs-app-router/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-nextjs-app-router/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-nextjs-app-router/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-nextjs-pages-router/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-nextjs-pages-router/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-nextjs-pages-router/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-nextjs-pages-router/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-nextjs-pages-router/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-nextjs-pages-router/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-nextjs-pages-router/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-nextjs-pages-router/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-nextjs-pages-router/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-nextjs-pages-router/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-nextjs-pages-router/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-nextjs-pages-router/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-nuxt-3.6/SKILL.md b/skills/posthog/all/skills/integration-nuxt-3.6/SKILL.md
deleted file mode 100644
index f5127b63..00000000
--- a/skills/posthog/all/skills/integration-nuxt-3.6/SKILL.md
+++ /dev/null
@@ -1,50 +0,0 @@
----
-name: integration-nuxt-3.6
-description: PostHog integration for Nuxt versions 3.0 to 3.6
-metadata:
- author: PostHog
- version: 1.9.4
----
-
-# PostHog integration for Nuxt 3.6
-
-This skill helps you add PostHog analytics to Nuxt 3.6 applications.
-
-## Workflow
-
-Follow these steps in order to complete the integration:
-
-1. `basic-integration-1.0-begin.md` - PostHog Setup - Begin ← **Start here**
-2. `basic-integration-1.1-edit.md` - PostHog Setup - Edit
-3. `basic-integration-1.2-revise.md` - PostHog Setup - Revise
-4. `basic-integration-1.3-conclude.md` - PostHog Setup - Conclusion
-
-## Reference files
-
-- `references/EXAMPLE.md` - Nuxt 3.6 example project code
-- `references/nuxt-js-3-6.md` - Nuxt.js (v3.0 to v3.6) - docs
-- `references/identify-users.md` - Identify users - docs
-- `references/basic-integration-1.0-begin.md` - PostHog setup - begin
-- `references/basic-integration-1.1-edit.md` - PostHog setup - edit
-- `references/basic-integration-1.2-revise.md` - PostHog setup - revise
-- `references/basic-integration-1.3-conclude.md` - PostHog setup - conclusion
-
-The example project shows the target implementation pattern. Consult the documentation for API details.
-
-## Key principles
-
-- **Environment variables**: Always use environment variables for PostHog keys. Never hardcode them.
-- **Minimal changes**: Add PostHog code alongside existing integrations. Don't replace or restructure existing code.
-- **Match the example**: Your implementation should follow the example project's patterns as closely as possible.
-
-## Framework guidelines
-
-_No specific framework guidelines._
-
-## Identifying users
-
-Identify users during login and signup events. Refer to the example code and documentation for the correct identify pattern for this framework. If both frontend and backend code exist, pass the client-side session and distinct ID using `X-POSTHOG-DISTINCT-ID` and `X-POSTHOG-SESSION-ID` headers to maintain correlation.
-
-## Error tracking
-
-Add PostHog error tracking to relevant files, particularly around critical user flows and API boundaries.
diff --git a/skills/posthog/all/skills/integration-nuxt-3.6/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-nuxt-3.6/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-nuxt-3.6/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-nuxt-3.6/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-nuxt-3.6/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-nuxt-3.6/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-nuxt-3.6/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-nuxt-3.6/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-nuxt-3.6/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-nuxt-3.6/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-nuxt-3.6/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-nuxt-3.6/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-nuxt-4/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-nuxt-4/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-nuxt-4/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-nuxt-4/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-nuxt-4/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-nuxt-4/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-nuxt-4/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-nuxt-4/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-nuxt-4/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-nuxt-4/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-nuxt-4/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-nuxt-4/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-python/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-python/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-python/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-python/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-python/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-python/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-python/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-python/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-python/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-python/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-python/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-python/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-native/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-react-native/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-react-native/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-native/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-react-native/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-react-native/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-native/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-react-native/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-react-native/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-native/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-react-native/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-react-native/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-react-router-6/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-react-react-router-6/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-react-react-router-6/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-react-router-6/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-react-react-router-6/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-react-react-router-6/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-react-router-6/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-react-react-router-6/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-react-react-router-6/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-react-router-6/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-react-react-router-6/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-react-react-router-6/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-react-router-7-data/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-react-react-router-7-data/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-react-react-router-7-data/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-react-router-7-data/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-react-react-router-7-data/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-react-react-router-7-data/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-react-router-7-data/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-react-react-router-7-data/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-react-react-router-7-data/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-react-router-7-data/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-react-react-router-7-data/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-react-react-router-7-data/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-react-router-7-declarative/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-react-react-router-7-declarative/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-react-react-router-7-declarative/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-react-router-7-declarative/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-react-react-router-7-declarative/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-react-react-router-7-declarative/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-react-router-7-declarative/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-react-react-router-7-declarative/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-react-react-router-7-declarative/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-react-router-7-declarative/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-react-react-router-7-declarative/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-react-react-router-7-declarative/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-react-router-7-framework/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-react-react-router-7-framework/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-react-react-router-7-framework/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-react-router-7-framework/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-react-react-router-7-framework/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-react-react-router-7-framework/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-react-router-7-framework/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-react-react-router-7-framework/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-react-react-router-7-framework/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-react-router-7-framework/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-react-react-router-7-framework/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-react-react-router-7-framework/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-tanstack-router-code-based/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-react-tanstack-router-code-based/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-react-tanstack-router-code-based/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-tanstack-router-code-based/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-react-tanstack-router-code-based/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-react-tanstack-router-code-based/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-tanstack-router-code-based/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-react-tanstack-router-code-based/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-react-tanstack-router-code-based/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-tanstack-router-code-based/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-react-tanstack-router-code-based/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-react-tanstack-router-code-based/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-tanstack-router-file-based/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-react-tanstack-router-file-based/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-react-tanstack-router-file-based/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-tanstack-router-file-based/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-react-tanstack-router-file-based/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-react-tanstack-router-file-based/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-tanstack-router-file-based/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-react-tanstack-router-file-based/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-react-tanstack-router-file-based/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-tanstack-router-file-based/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-react-tanstack-router-file-based/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-react-tanstack-router-file-based/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-vite/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-react-vite/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-react-vite/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-vite/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-react-vite/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-react-vite/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-vite/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-react-vite/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-react-vite/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-react-vite/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-react-vite/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-react-vite/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-ruby-on-rails/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-ruby-on-rails/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-ruby-on-rails/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-ruby-on-rails/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-ruby-on-rails/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-ruby-on-rails/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-ruby-on-rails/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-ruby-on-rails/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-ruby-on-rails/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-ruby-on-rails/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-ruby-on-rails/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-ruby-on-rails/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-ruby/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-ruby/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-ruby/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-ruby/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-ruby/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-ruby/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-ruby/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-ruby/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-ruby/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-ruby/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-ruby/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-ruby/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-sveltekit/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-sveltekit/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-sveltekit/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-sveltekit/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-sveltekit/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-sveltekit/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-sveltekit/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-sveltekit/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-sveltekit/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-sveltekit/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-sveltekit/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-sveltekit/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-swift/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-swift/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-swift/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-swift/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-swift/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-swift/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-swift/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-swift/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-swift/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-swift/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-swift/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-swift/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-tanstack-start/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-tanstack-start/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-tanstack-start/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-tanstack-start/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-tanstack-start/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-tanstack-start/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-tanstack-start/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-tanstack-start/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-tanstack-start/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-tanstack-start/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-tanstack-start/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-tanstack-start/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-vue-3/references/basic-integration-1.0-begin.md b/skills/posthog/all/skills/integration-vue-3/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/all/skills/integration-vue-3/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-vue-3/references/basic-integration-1.1-edit.md b/skills/posthog/all/skills/integration-vue-3/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/all/skills/integration-vue-3/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-vue-3/references/basic-integration-1.2-revise.md b/skills/posthog/all/skills/integration-vue-3/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/all/skills/integration-vue-3/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/all/skills/integration-vue-3/references/basic-integration-1.3-conclude.md b/skills/posthog/all/skills/integration-vue-3/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/all/skills/integration-vue-3/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/all/skills/logs-datadog/references/debug-logs-mcp.md b/skills/posthog/all/skills/logs-datadog/references/debug-logs-mcp.md
deleted file mode 100644
index f57bb977..00000000
--- a/skills/posthog/all/skills/logs-datadog/references/debug-logs-mcp.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Debug Logs with MCP - Docs
-
-The [PostHog MCP server](/docs/model-context-protocol.md) gives AI agents direct access to your Logs. Ask your agent to search, filter, and analyze log data without leaving your code editor.
-
-With MCP, your agents can:
-
-- **Search and filter logs** – Query by severity level, service name, date range, and free text.
-- **Discover log attributes** – List available attributes and their values to build targeted queries.
-- **Debug in context** – Investigate production issues without switching tools.
-- **Correlate with traces** – Use trace IDs and span IDs from log entries to follow request flows across services.
-
-This works in any MCP client – Cursor, Windsurf, Claude Code, and others.
-
-## Example prompts
-
-Try these prompts with your MCP-enabled agent:
-
-- `Show me all error logs from the last hour.`
-- `What services are logging errors? Search for error logs from the payments service.`
-- `Find logs related to trace ID abc123.`
-- `What log attributes are available? Show me the values for the service.name attribute.`
-- `Show me warning and error logs from the last 24 hours, excluding debug noise.`
-
-## Logs tools
-
-The MCP server provides three tools for working with logs:
-
-| Tool | Description |
-| --- | --- |
-| logs-query | Search and query logs with filters for severity levels (trace, debug, info, warn, error, fatal), service names, date ranges, and free text. Supports pagination for large result sets. |
-| logs-list-attributes | List available log attributes in your project to discover what you can filter on. Supports filtering by attribute type (log or resource). |
-| logs-list-attribute-values | Get possible values for a specific log attribute. Find service names, log levels, or other attribute values before querying. |
-
-A typical workflow:
-
-1. Call `logs-list-attributes` to discover available filter attributes.
-2. Call `logs-list-attribute-values` to find specific values (e.g., which service names exist).
-3. Call `logs-query` to search logs with the right filters.
-
-## Get started
-
-See the [MCP server documentation](/docs/model-context-protocol.md) for setup instructions.
-
-### Community questions
-
-Ask a question
-
-### Was this page useful?
-
-HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/logs-go/references/debug-logs-mcp.md b/skills/posthog/all/skills/logs-go/references/debug-logs-mcp.md
deleted file mode 100644
index f57bb977..00000000
--- a/skills/posthog/all/skills/logs-go/references/debug-logs-mcp.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Debug Logs with MCP - Docs
-
-The [PostHog MCP server](/docs/model-context-protocol.md) gives AI agents direct access to your Logs. Ask your agent to search, filter, and analyze log data without leaving your code editor.
-
-With MCP, your agents can:
-
-- **Search and filter logs** – Query by severity level, service name, date range, and free text.
-- **Discover log attributes** – List available attributes and their values to build targeted queries.
-- **Debug in context** – Investigate production issues without switching tools.
-- **Correlate with traces** – Use trace IDs and span IDs from log entries to follow request flows across services.
-
-This works in any MCP client – Cursor, Windsurf, Claude Code, and others.
-
-## Example prompts
-
-Try these prompts with your MCP-enabled agent:
-
-- `Show me all error logs from the last hour.`
-- `What services are logging errors? Search for error logs from the payments service.`
-- `Find logs related to trace ID abc123.`
-- `What log attributes are available? Show me the values for the service.name attribute.`
-- `Show me warning and error logs from the last 24 hours, excluding debug noise.`
-
-## Logs tools
-
-The MCP server provides three tools for working with logs:
-
-| Tool | Description |
-| --- | --- |
-| logs-query | Search and query logs with filters for severity levels (trace, debug, info, warn, error, fatal), service names, date ranges, and free text. Supports pagination for large result sets. |
-| logs-list-attributes | List available log attributes in your project to discover what you can filter on. Supports filtering by attribute type (log or resource). |
-| logs-list-attribute-values | Get possible values for a specific log attribute. Find service names, log levels, or other attribute values before querying. |
-
-A typical workflow:
-
-1. Call `logs-list-attributes` to discover available filter attributes.
-2. Call `logs-list-attribute-values` to find specific values (e.g., which service names exist).
-3. Call `logs-query` to search logs with the right filters.
-
-## Get started
-
-See the [MCP server documentation](/docs/model-context-protocol.md) for setup instructions.
-
-### Community questions
-
-Ask a question
-
-### Was this page useful?
-
-HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/logs-java/references/debug-logs-mcp.md b/skills/posthog/all/skills/logs-java/references/debug-logs-mcp.md
deleted file mode 100644
index f57bb977..00000000
--- a/skills/posthog/all/skills/logs-java/references/debug-logs-mcp.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Debug Logs with MCP - Docs
-
-The [PostHog MCP server](/docs/model-context-protocol.md) gives AI agents direct access to your Logs. Ask your agent to search, filter, and analyze log data without leaving your code editor.
-
-With MCP, your agents can:
-
-- **Search and filter logs** – Query by severity level, service name, date range, and free text.
-- **Discover log attributes** – List available attributes and their values to build targeted queries.
-- **Debug in context** – Investigate production issues without switching tools.
-- **Correlate with traces** – Use trace IDs and span IDs from log entries to follow request flows across services.
-
-This works in any MCP client – Cursor, Windsurf, Claude Code, and others.
-
-## Example prompts
-
-Try these prompts with your MCP-enabled agent:
-
-- `Show me all error logs from the last hour.`
-- `What services are logging errors? Search for error logs from the payments service.`
-- `Find logs related to trace ID abc123.`
-- `What log attributes are available? Show me the values for the service.name attribute.`
-- `Show me warning and error logs from the last 24 hours, excluding debug noise.`
-
-## Logs tools
-
-The MCP server provides three tools for working with logs:
-
-| Tool | Description |
-| --- | --- |
-| logs-query | Search and query logs with filters for severity levels (trace, debug, info, warn, error, fatal), service names, date ranges, and free text. Supports pagination for large result sets. |
-| logs-list-attributes | List available log attributes in your project to discover what you can filter on. Supports filtering by attribute type (log or resource). |
-| logs-list-attribute-values | Get possible values for a specific log attribute. Find service names, log levels, or other attribute values before querying. |
-
-A typical workflow:
-
-1. Call `logs-list-attributes` to discover available filter attributes.
-2. Call `logs-list-attribute-values` to find specific values (e.g., which service names exist).
-3. Call `logs-query` to search logs with the right filters.
-
-## Get started
-
-See the [MCP server documentation](/docs/model-context-protocol.md) for setup instructions.
-
-### Community questions
-
-Ask a question
-
-### Was this page useful?
-
-HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/logs-nextjs/references/debug-logs-mcp.md b/skills/posthog/all/skills/logs-nextjs/references/debug-logs-mcp.md
deleted file mode 100644
index f57bb977..00000000
--- a/skills/posthog/all/skills/logs-nextjs/references/debug-logs-mcp.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Debug Logs with MCP - Docs
-
-The [PostHog MCP server](/docs/model-context-protocol.md) gives AI agents direct access to your Logs. Ask your agent to search, filter, and analyze log data without leaving your code editor.
-
-With MCP, your agents can:
-
-- **Search and filter logs** – Query by severity level, service name, date range, and free text.
-- **Discover log attributes** – List available attributes and their values to build targeted queries.
-- **Debug in context** – Investigate production issues without switching tools.
-- **Correlate with traces** – Use trace IDs and span IDs from log entries to follow request flows across services.
-
-This works in any MCP client – Cursor, Windsurf, Claude Code, and others.
-
-## Example prompts
-
-Try these prompts with your MCP-enabled agent:
-
-- `Show me all error logs from the last hour.`
-- `What services are logging errors? Search for error logs from the payments service.`
-- `Find logs related to trace ID abc123.`
-- `What log attributes are available? Show me the values for the service.name attribute.`
-- `Show me warning and error logs from the last 24 hours, excluding debug noise.`
-
-## Logs tools
-
-The MCP server provides three tools for working with logs:
-
-| Tool | Description |
-| --- | --- |
-| logs-query | Search and query logs with filters for severity levels (trace, debug, info, warn, error, fatal), service names, date ranges, and free text. Supports pagination for large result sets. |
-| logs-list-attributes | List available log attributes in your project to discover what you can filter on. Supports filtering by attribute type (log or resource). |
-| logs-list-attribute-values | Get possible values for a specific log attribute. Find service names, log levels, or other attribute values before querying. |
-
-A typical workflow:
-
-1. Call `logs-list-attributes` to discover available filter attributes.
-2. Call `logs-list-attribute-values` to find specific values (e.g., which service names exist).
-3. Call `logs-query` to search logs with the right filters.
-
-## Get started
-
-See the [MCP server documentation](/docs/model-context-protocol.md) for setup instructions.
-
-### Community questions
-
-Ask a question
-
-### Was this page useful?
-
-HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/logs-nodejs/references/debug-logs-mcp.md b/skills/posthog/all/skills/logs-nodejs/references/debug-logs-mcp.md
deleted file mode 100644
index f57bb977..00000000
--- a/skills/posthog/all/skills/logs-nodejs/references/debug-logs-mcp.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Debug Logs with MCP - Docs
-
-The [PostHog MCP server](/docs/model-context-protocol.md) gives AI agents direct access to your Logs. Ask your agent to search, filter, and analyze log data without leaving your code editor.
-
-With MCP, your agents can:
-
-- **Search and filter logs** – Query by severity level, service name, date range, and free text.
-- **Discover log attributes** – List available attributes and their values to build targeted queries.
-- **Debug in context** – Investigate production issues without switching tools.
-- **Correlate with traces** – Use trace IDs and span IDs from log entries to follow request flows across services.
-
-This works in any MCP client – Cursor, Windsurf, Claude Code, and others.
-
-## Example prompts
-
-Try these prompts with your MCP-enabled agent:
-
-- `Show me all error logs from the last hour.`
-- `What services are logging errors? Search for error logs from the payments service.`
-- `Find logs related to trace ID abc123.`
-- `What log attributes are available? Show me the values for the service.name attribute.`
-- `Show me warning and error logs from the last 24 hours, excluding debug noise.`
-
-## Logs tools
-
-The MCP server provides three tools for working with logs:
-
-| Tool | Description |
-| --- | --- |
-| logs-query | Search and query logs with filters for severity levels (trace, debug, info, warn, error, fatal), service names, date ranges, and free text. Supports pagination for large result sets. |
-| logs-list-attributes | List available log attributes in your project to discover what you can filter on. Supports filtering by attribute type (log or resource). |
-| logs-list-attribute-values | Get possible values for a specific log attribute. Find service names, log levels, or other attribute values before querying. |
-
-A typical workflow:
-
-1. Call `logs-list-attributes` to discover available filter attributes.
-2. Call `logs-list-attribute-values` to find specific values (e.g., which service names exist).
-3. Call `logs-query` to search logs with the right filters.
-
-## Get started
-
-See the [MCP server documentation](/docs/model-context-protocol.md) for setup instructions.
-
-### Community questions
-
-Ask a question
-
-### Was this page useful?
-
-HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/logs-other/references/debug-logs-mcp.md b/skills/posthog/all/skills/logs-other/references/debug-logs-mcp.md
deleted file mode 100644
index f57bb977..00000000
--- a/skills/posthog/all/skills/logs-other/references/debug-logs-mcp.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Debug Logs with MCP - Docs
-
-The [PostHog MCP server](/docs/model-context-protocol.md) gives AI agents direct access to your Logs. Ask your agent to search, filter, and analyze log data without leaving your code editor.
-
-With MCP, your agents can:
-
-- **Search and filter logs** – Query by severity level, service name, date range, and free text.
-- **Discover log attributes** – List available attributes and their values to build targeted queries.
-- **Debug in context** – Investigate production issues without switching tools.
-- **Correlate with traces** – Use trace IDs and span IDs from log entries to follow request flows across services.
-
-This works in any MCP client – Cursor, Windsurf, Claude Code, and others.
-
-## Example prompts
-
-Try these prompts with your MCP-enabled agent:
-
-- `Show me all error logs from the last hour.`
-- `What services are logging errors? Search for error logs from the payments service.`
-- `Find logs related to trace ID abc123.`
-- `What log attributes are available? Show me the values for the service.name attribute.`
-- `Show me warning and error logs from the last 24 hours, excluding debug noise.`
-
-## Logs tools
-
-The MCP server provides three tools for working with logs:
-
-| Tool | Description |
-| --- | --- |
-| logs-query | Search and query logs with filters for severity levels (trace, debug, info, warn, error, fatal), service names, date ranges, and free text. Supports pagination for large result sets. |
-| logs-list-attributes | List available log attributes in your project to discover what you can filter on. Supports filtering by attribute type (log or resource). |
-| logs-list-attribute-values | Get possible values for a specific log attribute. Find service names, log levels, or other attribute values before querying. |
-
-A typical workflow:
-
-1. Call `logs-list-attributes` to discover available filter attributes.
-2. Call `logs-list-attribute-values` to find specific values (e.g., which service names exist).
-3. Call `logs-query` to search logs with the right filters.
-
-## Get started
-
-See the [MCP server documentation](/docs/model-context-protocol.md) for setup instructions.
-
-### Community questions
-
-Ask a question
-
-### Was this page useful?
-
-HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/logs-python/references/debug-logs-mcp.md b/skills/posthog/all/skills/logs-python/references/debug-logs-mcp.md
deleted file mode 100644
index f57bb977..00000000
--- a/skills/posthog/all/skills/logs-python/references/debug-logs-mcp.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Debug Logs with MCP - Docs
-
-The [PostHog MCP server](/docs/model-context-protocol.md) gives AI agents direct access to your Logs. Ask your agent to search, filter, and analyze log data without leaving your code editor.
-
-With MCP, your agents can:
-
-- **Search and filter logs** – Query by severity level, service name, date range, and free text.
-- **Discover log attributes** – List available attributes and their values to build targeted queries.
-- **Debug in context** – Investigate production issues without switching tools.
-- **Correlate with traces** – Use trace IDs and span IDs from log entries to follow request flows across services.
-
-This works in any MCP client – Cursor, Windsurf, Claude Code, and others.
-
-## Example prompts
-
-Try these prompts with your MCP-enabled agent:
-
-- `Show me all error logs from the last hour.`
-- `What services are logging errors? Search for error logs from the payments service.`
-- `Find logs related to trace ID abc123.`
-- `What log attributes are available? Show me the values for the service.name attribute.`
-- `Show me warning and error logs from the last 24 hours, excluding debug noise.`
-
-## Logs tools
-
-The MCP server provides three tools for working with logs:
-
-| Tool | Description |
-| --- | --- |
-| logs-query | Search and query logs with filters for severity levels (trace, debug, info, warn, error, fatal), service names, date ranges, and free text. Supports pagination for large result sets. |
-| logs-list-attributes | List available log attributes in your project to discover what you can filter on. Supports filtering by attribute type (log or resource). |
-| logs-list-attribute-values | Get possible values for a specific log attribute. Find service names, log levels, or other attribute values before querying. |
-
-A typical workflow:
-
-1. Call `logs-list-attributes` to discover available filter attributes.
-2. Call `logs-list-attribute-values` to find specific values (e.g., which service names exist).
-3. Call `logs-query` to search logs with the right filters.
-
-## Get started
-
-See the [MCP server documentation](/docs/model-context-protocol.md) for setup instructions.
-
-### Community questions
-
-Ask a question
-
-### Was this page useful?
-
-HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/omnibus-instrument-logs/references/debug-logs-mcp.md b/skills/posthog/all/skills/omnibus-instrument-logs/references/debug-logs-mcp.md
deleted file mode 100644
index f57bb977..00000000
--- a/skills/posthog/all/skills/omnibus-instrument-logs/references/debug-logs-mcp.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Debug Logs with MCP - Docs
-
-The [PostHog MCP server](/docs/model-context-protocol.md) gives AI agents direct access to your Logs. Ask your agent to search, filter, and analyze log data without leaving your code editor.
-
-With MCP, your agents can:
-
-- **Search and filter logs** – Query by severity level, service name, date range, and free text.
-- **Discover log attributes** – List available attributes and their values to build targeted queries.
-- **Debug in context** – Investigate production issues without switching tools.
-- **Correlate with traces** – Use trace IDs and span IDs from log entries to follow request flows across services.
-
-This works in any MCP client – Cursor, Windsurf, Claude Code, and others.
-
-## Example prompts
-
-Try these prompts with your MCP-enabled agent:
-
-- `Show me all error logs from the last hour.`
-- `What services are logging errors? Search for error logs from the payments service.`
-- `Find logs related to trace ID abc123.`
-- `What log attributes are available? Show me the values for the service.name attribute.`
-- `Show me warning and error logs from the last 24 hours, excluding debug noise.`
-
-## Logs tools
-
-The MCP server provides three tools for working with logs:
-
-| Tool | Description |
-| --- | --- |
-| logs-query | Search and query logs with filters for severity levels (trace, debug, info, warn, error, fatal), service names, date ranges, and free text. Supports pagination for large result sets. |
-| logs-list-attributes | List available log attributes in your project to discover what you can filter on. Supports filtering by attribute type (log or resource). |
-| logs-list-attribute-values | Get possible values for a specific log attribute. Find service names, log levels, or other attribute values before querying. |
-
-A typical workflow:
-
-1. Call `logs-list-attributes` to discover available filter attributes.
-2. Call `logs-list-attribute-values` to find specific values (e.g., which service names exist).
-3. Call `logs-query` to search logs with the right filters.
-
-## Get started
-
-See the [MCP server documentation](/docs/model-context-protocol.md) for setup instructions.
-
-### Community questions
-
-Ask a question
-
-### Was this page useful?
-
-HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/android/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/android/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/android/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/android/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/android/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/android/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/android/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/android/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/android/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/android/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/android/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/android/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/angular/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/angular/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/angular/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/angular/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/angular/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/angular/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/angular/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/angular/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/angular/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/angular/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/angular/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/angular/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/astro-hybrid/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/astro-hybrid/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/astro-hybrid/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/astro-hybrid/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/astro-hybrid/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/astro-hybrid/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/astro-hybrid/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/astro-hybrid/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/astro-hybrid/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/astro-hybrid/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/astro-hybrid/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/astro-hybrid/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/astro-ssr/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/astro-ssr/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/astro-ssr/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/astro-ssr/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/astro-ssr/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/astro-ssr/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/astro-ssr/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/astro-ssr/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/astro-ssr/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/astro-ssr/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/astro-ssr/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/astro-ssr/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/astro-static/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/astro-static/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/astro-static/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/astro-static/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/astro-static/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/astro-static/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/astro-static/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/astro-static/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/astro-static/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/astro-static/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/astro-static/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/astro-static/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/astro-view-transitions/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/astro-view-transitions/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/astro-view-transitions/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/astro-view-transitions/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/astro-view-transitions/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/astro-view-transitions/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/astro-view-transitions/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/astro-view-transitions/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/astro-view-transitions/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/astro-view-transitions/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/astro-view-transitions/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/astro-view-transitions/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/django/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/django/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/django/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/django/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/django/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/django/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/django/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/django/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/django/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/django/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/django/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/django/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/expo/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/expo/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/expo/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/expo/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/expo/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/expo/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/expo/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/expo/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/expo/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/expo/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/expo/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/expo/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/fastapi/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/fastapi/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/fastapi/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/fastapi/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/fastapi/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/fastapi/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/fastapi/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/fastapi/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/fastapi/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/fastapi/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/fastapi/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/fastapi/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/flask/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/flask/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/flask/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/flask/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/flask/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/flask/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/flask/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/flask/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/flask/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/flask/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/flask/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/flask/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/javascript_node/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/javascript_node/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/javascript_node/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/javascript_node/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/javascript_node/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/javascript_node/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/javascript_node/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/javascript_node/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/javascript_node/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/javascript_node/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/javascript_node/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/javascript_node/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/javascript_web/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/javascript_web/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/javascript_web/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/javascript_web/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/javascript_web/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/javascript_web/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/javascript_web/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/javascript_web/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/javascript_web/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/javascript_web/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/javascript_web/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/javascript_web/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/laravel/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/laravel/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/laravel/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/laravel/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/laravel/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/laravel/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/laravel/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/laravel/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/laravel/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/laravel/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/laravel/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/laravel/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/nextjs-app-router/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/nextjs-app-router/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/nextjs-app-router/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/nextjs-app-router/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/nextjs-app-router/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/nextjs-app-router/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/nextjs-app-router/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/nextjs-app-router/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/nextjs-app-router/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/nextjs-app-router/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/nextjs-app-router/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/nextjs-app-router/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/nextjs-pages-router/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/nextjs-pages-router/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/nextjs-pages-router/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/nextjs-pages-router/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/nextjs-pages-router/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/nextjs-pages-router/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/nextjs-pages-router/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/nextjs-pages-router/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/nextjs-pages-router/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/nextjs-pages-router/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/nextjs-pages-router/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/nextjs-pages-router/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/nuxt-3.6/SKILL.md b/skills/posthog/integration/skills/nuxt-3.6/SKILL.md
deleted file mode 100644
index f5127b63..00000000
--- a/skills/posthog/integration/skills/nuxt-3.6/SKILL.md
+++ /dev/null
@@ -1,50 +0,0 @@
----
-name: integration-nuxt-3.6
-description: PostHog integration for Nuxt versions 3.0 to 3.6
-metadata:
- author: PostHog
- version: 1.9.4
----
-
-# PostHog integration for Nuxt 3.6
-
-This skill helps you add PostHog analytics to Nuxt 3.6 applications.
-
-## Workflow
-
-Follow these steps in order to complete the integration:
-
-1. `basic-integration-1.0-begin.md` - PostHog Setup - Begin ← **Start here**
-2. `basic-integration-1.1-edit.md` - PostHog Setup - Edit
-3. `basic-integration-1.2-revise.md` - PostHog Setup - Revise
-4. `basic-integration-1.3-conclude.md` - PostHog Setup - Conclusion
-
-## Reference files
-
-- `references/EXAMPLE.md` - Nuxt 3.6 example project code
-- `references/nuxt-js-3-6.md` - Nuxt.js (v3.0 to v3.6) - docs
-- `references/identify-users.md` - Identify users - docs
-- `references/basic-integration-1.0-begin.md` - PostHog setup - begin
-- `references/basic-integration-1.1-edit.md` - PostHog setup - edit
-- `references/basic-integration-1.2-revise.md` - PostHog setup - revise
-- `references/basic-integration-1.3-conclude.md` - PostHog setup - conclusion
-
-The example project shows the target implementation pattern. Consult the documentation for API details.
-
-## Key principles
-
-- **Environment variables**: Always use environment variables for PostHog keys. Never hardcode them.
-- **Minimal changes**: Add PostHog code alongside existing integrations. Don't replace or restructure existing code.
-- **Match the example**: Your implementation should follow the example project's patterns as closely as possible.
-
-## Framework guidelines
-
-_No specific framework guidelines._
-
-## Identifying users
-
-Identify users during login and signup events. Refer to the example code and documentation for the correct identify pattern for this framework. If both frontend and backend code exist, pass the client-side session and distinct ID using `X-POSTHOG-DISTINCT-ID` and `X-POSTHOG-SESSION-ID` headers to maintain correlation.
-
-## Error tracking
-
-Add PostHog error tracking to relevant files, particularly around critical user flows and API boundaries.
diff --git a/skills/posthog/integration/skills/nuxt-3.6/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/nuxt-3.6/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/nuxt-3.6/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/nuxt-3.6/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/nuxt-3.6/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/nuxt-3.6/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/nuxt-3.6/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/nuxt-3.6/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/nuxt-3.6/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/nuxt-3.6/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/nuxt-3.6/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/nuxt-3.6/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/nuxt-4/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/nuxt-4/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/nuxt-4/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/nuxt-4/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/nuxt-4/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/nuxt-4/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/nuxt-4/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/nuxt-4/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/nuxt-4/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/nuxt-4/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/nuxt-4/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/nuxt-4/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/python/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/python/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/python/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/python/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/python/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/python/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/python/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/python/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/python/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/python/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/python/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/python/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-native/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/react-native/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/react-native/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-native/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/react-native/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/react-native/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-native/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/react-native/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/react-native/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-native/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/react-native/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/react-native/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-react-router-6/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/react-react-router-6/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/react-react-router-6/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-react-router-6/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/react-react-router-6/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/react-react-router-6/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-react-router-6/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/react-react-router-6/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/react-react-router-6/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-react-router-6/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/react-react-router-6/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/react-react-router-6/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-react-router-7-data/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/react-react-router-7-data/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/react-react-router-7-data/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-react-router-7-data/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/react-react-router-7-data/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/react-react-router-7-data/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-react-router-7-data/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/react-react-router-7-data/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/react-react-router-7-data/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-react-router-7-data/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/react-react-router-7-data/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/react-react-router-7-data/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-react-router-7-declarative/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/react-react-router-7-declarative/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/react-react-router-7-declarative/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-react-router-7-declarative/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/react-react-router-7-declarative/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/react-react-router-7-declarative/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-react-router-7-declarative/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/react-react-router-7-declarative/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/react-react-router-7-declarative/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-react-router-7-declarative/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/react-react-router-7-declarative/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/react-react-router-7-declarative/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-react-router-7-framework/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/react-react-router-7-framework/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/react-react-router-7-framework/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-react-router-7-framework/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/react-react-router-7-framework/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/react-react-router-7-framework/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-react-router-7-framework/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/react-react-router-7-framework/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/react-react-router-7-framework/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-react-router-7-framework/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/react-react-router-7-framework/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/react-react-router-7-framework/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-tanstack-router-code-based/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/react-tanstack-router-code-based/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/react-tanstack-router-code-based/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-tanstack-router-code-based/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/react-tanstack-router-code-based/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/react-tanstack-router-code-based/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-tanstack-router-code-based/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/react-tanstack-router-code-based/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/react-tanstack-router-code-based/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-tanstack-router-code-based/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/react-tanstack-router-code-based/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/react-tanstack-router-code-based/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-tanstack-router-file-based/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/react-tanstack-router-file-based/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/react-tanstack-router-file-based/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-tanstack-router-file-based/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/react-tanstack-router-file-based/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/react-tanstack-router-file-based/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-tanstack-router-file-based/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/react-tanstack-router-file-based/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/react-tanstack-router-file-based/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-tanstack-router-file-based/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/react-tanstack-router-file-based/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/react-tanstack-router-file-based/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-vite/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/react-vite/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/react-vite/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-vite/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/react-vite/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/react-vite/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-vite/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/react-vite/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/react-vite/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/react-vite/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/react-vite/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/react-vite/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/ruby-on-rails/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/ruby-on-rails/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/ruby-on-rails/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/ruby-on-rails/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/ruby-on-rails/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/ruby-on-rails/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/ruby-on-rails/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/ruby-on-rails/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/ruby-on-rails/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/ruby-on-rails/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/ruby-on-rails/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/ruby-on-rails/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/ruby/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/ruby/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/ruby/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/ruby/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/ruby/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/ruby/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/ruby/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/ruby/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/ruby/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/ruby/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/ruby/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/ruby/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/sveltekit/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/sveltekit/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/sveltekit/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/sveltekit/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/sveltekit/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/sveltekit/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/sveltekit/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/sveltekit/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/sveltekit/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/sveltekit/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/sveltekit/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/sveltekit/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/swift/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/swift/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/swift/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/swift/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/swift/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/swift/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/swift/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/swift/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/swift/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/swift/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/swift/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/swift/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/tanstack-start/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/tanstack-start/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/tanstack-start/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/tanstack-start/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/tanstack-start/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/tanstack-start/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/tanstack-start/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/tanstack-start/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/tanstack-start/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/tanstack-start/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/tanstack-start/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/tanstack-start/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/vue-3/references/basic-integration-1.0-begin.md b/skills/posthog/integration/skills/vue-3/references/basic-integration-1.0-begin.md
deleted file mode 100644
index a97bbe7e..00000000
--- a/skills/posthog/integration/skills/vue-3/references/basic-integration-1.0-begin.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: PostHog Setup - Begin
-description: Start the event tracking setup process by analyzing the project and creating an event tracking plan
----
-
-We're making an event tracking plan for this project.
-
-Before proceeding, find any existing `posthog.capture()` code. Make note of event name formatting.
-
-From the project's file list, select between 10 and 15 files that might have interesting business value for event tracking, especially conversion and churn events. Also look for additional files related to login that could be used for identifying users, along with error handling. Read the files. If a file is already well-covered by PostHog events, replace it with another option. Do not spawn subagents.
-
-Look for opportunities to track client-side events.
-
-**IMPORTANT: Server-side events are REQUIRED** if the project includes any instrumentable server-side code. If the project has API routes (e.g., `app/api/**/route.ts`) or Server Actions, you MUST include server-side events for critical business operations like:
-
- - Payment/checkout completion
- - Webhook handlers
- - Authentication endpoints
-
-Do not skip server-side events - they capture actions that cannot be tracked client-side.
-
-Create a new file with a JSON array at the root of the project: .posthog-events.json. It should include one object for each event we want to add: event name, event description, and the file path we want to place the event in. If events already exist, don't duplicate them; supplement them.
-
-Track actions only, not pageviews. These can be captured automatically. Exceptions can be made for "viewed"-type events that correspond to the top of a conversion funnel.
-
-As you review files, make an internal note of opportunities to identify users and catch errors. We'll need them for the next step.
-
-## Status
-
-Before beginning a phase of the setup, you will send a status message with the exact prefix '[STATUS]', as in:
-
-[STATUS] Checking project structure.
-
-Status to report in this phase:
-
-- Checking project structure
-- Verifying PostHog dependencies
-- Generating events based on project
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.1-edit.md](basic-integration-1.1-edit.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/vue-3/references/basic-integration-1.1-edit.md b/skills/posthog/integration/skills/vue-3/references/basic-integration-1.1-edit.md
deleted file mode 100644
index ca9d70e6..00000000
--- a/skills/posthog/integration/skills/vue-3/references/basic-integration-1.1-edit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: PostHog Setup - Edit
-description: Implement PostHog event tracking in the identified files, following best practices and the example project
----
-
-For each of the files and events noted in .posthog-events.json, make edits to capture events using PostHog. Make sure to set up any helper files needed. Carefully examine the included example project code: your implementation should match it as closely as possible. Do not spawn subagents.
-
-Use environment variables for PostHog keys. Do not hardcode PostHog keys.
-
-If a file already has existing integration code for other tools or services, don't overwrite or remove that code. Place PostHog code below it.
-
-For each event, add useful properties, and use your access to the PostHog source code to ensure correctness. You also have access to documentation about creating new events with PostHog. Consider this documentation carefully and follow it closely before adding events. Your integration should be based on documented best practices. Carefully consider how the user project's framework version may impact the correct PostHog integration approach.
-
-Remember that you can find the source code for any dependency in the node_modules directory. This may be necessary to properly populate property names. There are also example project code files available via the PostHog MCP; use these for reference.
-
-Where possible, add calls for PostHog's identify() function on the client side upon events like logins and signups. Use the contents of login and signup forms to identify users on submit. If there is server-side code, pass the client-side session and distinct ID to the server-side code to identify the user. On the server side, make sure events have a matching distinct ID where relevant.
-
-It's essential to do this in both client code and server code, so that user behavior from both domains is easy to correlate.
-
-You should also add PostHog exception capture error tracking to these files where relevant.
-
-Remember: Do not alter the fundamental architecture of existing files. Make your additions minimal and targeted.
-
-Remember the documentation and example project resources you were provided at the beginning. Read them now.
-
-## Status
-
-Status to report in this phase:
-
-- Inserting PostHog capture code
-- A status message for each file whose edits you are planning, including a high level summary of changes
-- A status message for each file you have edited
-
-
----
-
-**Upon completion, continue with:** [basic-integration-1.2-revise.md](basic-integration-1.2-revise.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/vue-3/references/basic-integration-1.2-revise.md b/skills/posthog/integration/skills/vue-3/references/basic-integration-1.2-revise.md
deleted file mode 100644
index 5ac72f06..00000000
--- a/skills/posthog/integration/skills/vue-3/references/basic-integration-1.2-revise.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: PostHog Setup - Revise
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Check the project for errors. Read the package.json file for any type checking or build scripts that may provide input about what to fix. Remember that you can find the source code for any dependency in the node_modules directory. Do not spawn subagents.
-
-Ensure that any components created were actually used.
-
-Once all other tasks are complete, run any linter or prettier-like scripts found in the package.json, but ONLY on the files you have edited or created during this session. Do not run formatting or linting across the entire project's codebase.
-
-## Status
-
-Status to report in this phase:
-
-- Finding and correcting errors
-- Report details of any errors you fix
-- Linting, building and prettying
-
----
-
-**Upon completion, continue with:** [basic-integration-1.3-conclude.md](basic-integration-1.3-conclude.md)
\ No newline at end of file
diff --git a/skills/posthog/integration/skills/vue-3/references/basic-integration-1.3-conclude.md b/skills/posthog/integration/skills/vue-3/references/basic-integration-1.3-conclude.md
deleted file mode 100644
index b48af6a8..00000000
--- a/skills/posthog/integration/skills/vue-3/references/basic-integration-1.3-conclude.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: PostHog Setup - Conclusion
-description: Review and fix any errors in the PostHog integration implementation
----
-
-Use the PostHog MCP to create a new dashboard named "Analytics basics" based on the events created here. Make sure to use the exact same event names as implemented in the code. Populate it with up to five insights, with special emphasis on things like conversion funnels, churn events, and other business critical insights.
-
-Search for a file called `.posthog-events.json` and read it for available events. Do not spawn subagents.
-
-Create the file posthog-setup-report.md. It should include a summary of the integration edits, a table with the event names, event descriptions, and files where events were added, along with a list of links for the dashboard and insights created. Follow this format:
-
-
-# PostHog post-wizard report
-
-The wizard has completed a deep integration of your project. [Detailed summary of changes]
-
-[table of events/descriptions/files]
-
-## Next steps
-
-We've built some insights and a dashboard for you to keep an eye on user behavior, based on the events we just instrumented:
-
-[links]
-
-### Agent skill
-
-We've left an agent skill folder in your project. You can use this context for further agent development when using Claude Code. This will help ensure the model provides the most up-to-date approaches for integrating PostHog.
-
-
-
-Upon completion, remove .posthog-events.json.
-
-## Status
-
-Status to report in this phase:
-
-- Configured dashboard: [insert PostHog dashboard URL]
-- Created setup report: [insert full local file path]
\ No newline at end of file
diff --git a/skills/posthog/logs/skills/all/references/debug-logs-mcp.md b/skills/posthog/logs/skills/all/references/debug-logs-mcp.md
deleted file mode 100644
index f57bb977..00000000
--- a/skills/posthog/logs/skills/all/references/debug-logs-mcp.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Debug Logs with MCP - Docs
-
-The [PostHog MCP server](/docs/model-context-protocol.md) gives AI agents direct access to your Logs. Ask your agent to search, filter, and analyze log data without leaving your code editor.
-
-With MCP, your agents can:
-
-- **Search and filter logs** – Query by severity level, service name, date range, and free text.
-- **Discover log attributes** – List available attributes and their values to build targeted queries.
-- **Debug in context** – Investigate production issues without switching tools.
-- **Correlate with traces** – Use trace IDs and span IDs from log entries to follow request flows across services.
-
-This works in any MCP client – Cursor, Windsurf, Claude Code, and others.
-
-## Example prompts
-
-Try these prompts with your MCP-enabled agent:
-
-- `Show me all error logs from the last hour.`
-- `What services are logging errors? Search for error logs from the payments service.`
-- `Find logs related to trace ID abc123.`
-- `What log attributes are available? Show me the values for the service.name attribute.`
-- `Show me warning and error logs from the last 24 hours, excluding debug noise.`
-
-## Logs tools
-
-The MCP server provides three tools for working with logs:
-
-| Tool | Description |
-| --- | --- |
-| logs-query | Search and query logs with filters for severity levels (trace, debug, info, warn, error, fatal), service names, date ranges, and free text. Supports pagination for large result sets. |
-| logs-list-attributes | List available log attributes in your project to discover what you can filter on. Supports filtering by attribute type (log or resource). |
-| logs-list-attribute-values | Get possible values for a specific log attribute. Find service names, log levels, or other attribute values before querying. |
-
-A typical workflow:
-
-1. Call `logs-list-attributes` to discover available filter attributes.
-2. Call `logs-list-attribute-values` to find specific values (e.g., which service names exist).
-3. Call `logs-query` to search logs with the right filters.
-
-## Get started
-
-See the [MCP server documentation](/docs/model-context-protocol.md) for setup instructions.
-
-### Community questions
-
-Ask a question
-
-### Was this page useful?
-
-HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/logs/skills/datadog/references/debug-logs-mcp.md b/skills/posthog/logs/skills/datadog/references/debug-logs-mcp.md
deleted file mode 100644
index f57bb977..00000000
--- a/skills/posthog/logs/skills/datadog/references/debug-logs-mcp.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Debug Logs with MCP - Docs
-
-The [PostHog MCP server](/docs/model-context-protocol.md) gives AI agents direct access to your Logs. Ask your agent to search, filter, and analyze log data without leaving your code editor.
-
-With MCP, your agents can:
-
-- **Search and filter logs** – Query by severity level, service name, date range, and free text.
-- **Discover log attributes** – List available attributes and their values to build targeted queries.
-- **Debug in context** – Investigate production issues without switching tools.
-- **Correlate with traces** – Use trace IDs and span IDs from log entries to follow request flows across services.
-
-This works in any MCP client – Cursor, Windsurf, Claude Code, and others.
-
-## Example prompts
-
-Try these prompts with your MCP-enabled agent:
-
-- `Show me all error logs from the last hour.`
-- `What services are logging errors? Search for error logs from the payments service.`
-- `Find logs related to trace ID abc123.`
-- `What log attributes are available? Show me the values for the service.name attribute.`
-- `Show me warning and error logs from the last 24 hours, excluding debug noise.`
-
-## Logs tools
-
-The MCP server provides three tools for working with logs:
-
-| Tool | Description |
-| --- | --- |
-| logs-query | Search and query logs with filters for severity levels (trace, debug, info, warn, error, fatal), service names, date ranges, and free text. Supports pagination for large result sets. |
-| logs-list-attributes | List available log attributes in your project to discover what you can filter on. Supports filtering by attribute type (log or resource). |
-| logs-list-attribute-values | Get possible values for a specific log attribute. Find service names, log levels, or other attribute values before querying. |
-
-A typical workflow:
-
-1. Call `logs-list-attributes` to discover available filter attributes.
-2. Call `logs-list-attribute-values` to find specific values (e.g., which service names exist).
-3. Call `logs-query` to search logs with the right filters.
-
-## Get started
-
-See the [MCP server documentation](/docs/model-context-protocol.md) for setup instructions.
-
-### Community questions
-
-Ask a question
-
-### Was this page useful?
-
-HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/logs/skills/go/references/debug-logs-mcp.md b/skills/posthog/logs/skills/go/references/debug-logs-mcp.md
deleted file mode 100644
index f57bb977..00000000
--- a/skills/posthog/logs/skills/go/references/debug-logs-mcp.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Debug Logs with MCP - Docs
-
-The [PostHog MCP server](/docs/model-context-protocol.md) gives AI agents direct access to your Logs. Ask your agent to search, filter, and analyze log data without leaving your code editor.
-
-With MCP, your agents can:
-
-- **Search and filter logs** – Query by severity level, service name, date range, and free text.
-- **Discover log attributes** – List available attributes and their values to build targeted queries.
-- **Debug in context** – Investigate production issues without switching tools.
-- **Correlate with traces** – Use trace IDs and span IDs from log entries to follow request flows across services.
-
-This works in any MCP client – Cursor, Windsurf, Claude Code, and others.
-
-## Example prompts
-
-Try these prompts with your MCP-enabled agent:
-
-- `Show me all error logs from the last hour.`
-- `What services are logging errors? Search for error logs from the payments service.`
-- `Find logs related to trace ID abc123.`
-- `What log attributes are available? Show me the values for the service.name attribute.`
-- `Show me warning and error logs from the last 24 hours, excluding debug noise.`
-
-## Logs tools
-
-The MCP server provides three tools for working with logs:
-
-| Tool | Description |
-| --- | --- |
-| logs-query | Search and query logs with filters for severity levels (trace, debug, info, warn, error, fatal), service names, date ranges, and free text. Supports pagination for large result sets. |
-| logs-list-attributes | List available log attributes in your project to discover what you can filter on. Supports filtering by attribute type (log or resource). |
-| logs-list-attribute-values | Get possible values for a specific log attribute. Find service names, log levels, or other attribute values before querying. |
-
-A typical workflow:
-
-1. Call `logs-list-attributes` to discover available filter attributes.
-2. Call `logs-list-attribute-values` to find specific values (e.g., which service names exist).
-3. Call `logs-query` to search logs with the right filters.
-
-## Get started
-
-See the [MCP server documentation](/docs/model-context-protocol.md) for setup instructions.
-
-### Community questions
-
-Ask a question
-
-### Was this page useful?
-
-HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/logs/skills/java/references/debug-logs-mcp.md b/skills/posthog/logs/skills/java/references/debug-logs-mcp.md
deleted file mode 100644
index f57bb977..00000000
--- a/skills/posthog/logs/skills/java/references/debug-logs-mcp.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Debug Logs with MCP - Docs
-
-The [PostHog MCP server](/docs/model-context-protocol.md) gives AI agents direct access to your Logs. Ask your agent to search, filter, and analyze log data without leaving your code editor.
-
-With MCP, your agents can:
-
-- **Search and filter logs** – Query by severity level, service name, date range, and free text.
-- **Discover log attributes** – List available attributes and their values to build targeted queries.
-- **Debug in context** – Investigate production issues without switching tools.
-- **Correlate with traces** – Use trace IDs and span IDs from log entries to follow request flows across services.
-
-This works in any MCP client – Cursor, Windsurf, Claude Code, and others.
-
-## Example prompts
-
-Try these prompts with your MCP-enabled agent:
-
-- `Show me all error logs from the last hour.`
-- `What services are logging errors? Search for error logs from the payments service.`
-- `Find logs related to trace ID abc123.`
-- `What log attributes are available? Show me the values for the service.name attribute.`
-- `Show me warning and error logs from the last 24 hours, excluding debug noise.`
-
-## Logs tools
-
-The MCP server provides three tools for working with logs:
-
-| Tool | Description |
-| --- | --- |
-| logs-query | Search and query logs with filters for severity levels (trace, debug, info, warn, error, fatal), service names, date ranges, and free text. Supports pagination for large result sets. |
-| logs-list-attributes | List available log attributes in your project to discover what you can filter on. Supports filtering by attribute type (log or resource). |
-| logs-list-attribute-values | Get possible values for a specific log attribute. Find service names, log levels, or other attribute values before querying. |
-
-A typical workflow:
-
-1. Call `logs-list-attributes` to discover available filter attributes.
-2. Call `logs-list-attribute-values` to find specific values (e.g., which service names exist).
-3. Call `logs-query` to search logs with the right filters.
-
-## Get started
-
-See the [MCP server documentation](/docs/model-context-protocol.md) for setup instructions.
-
-### Community questions
-
-Ask a question
-
-### Was this page useful?
-
-HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/logs/skills/nextjs/references/debug-logs-mcp.md b/skills/posthog/logs/skills/nextjs/references/debug-logs-mcp.md
deleted file mode 100644
index f57bb977..00000000
--- a/skills/posthog/logs/skills/nextjs/references/debug-logs-mcp.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Debug Logs with MCP - Docs
-
-The [PostHog MCP server](/docs/model-context-protocol.md) gives AI agents direct access to your Logs. Ask your agent to search, filter, and analyze log data without leaving your code editor.
-
-With MCP, your agents can:
-
-- **Search and filter logs** – Query by severity level, service name, date range, and free text.
-- **Discover log attributes** – List available attributes and their values to build targeted queries.
-- **Debug in context** – Investigate production issues without switching tools.
-- **Correlate with traces** – Use trace IDs and span IDs from log entries to follow request flows across services.
-
-This works in any MCP client – Cursor, Windsurf, Claude Code, and others.
-
-## Example prompts
-
-Try these prompts with your MCP-enabled agent:
-
-- `Show me all error logs from the last hour.`
-- `What services are logging errors? Search for error logs from the payments service.`
-- `Find logs related to trace ID abc123.`
-- `What log attributes are available? Show me the values for the service.name attribute.`
-- `Show me warning and error logs from the last 24 hours, excluding debug noise.`
-
-## Logs tools
-
-The MCP server provides three tools for working with logs:
-
-| Tool | Description |
-| --- | --- |
-| logs-query | Search and query logs with filters for severity levels (trace, debug, info, warn, error, fatal), service names, date ranges, and free text. Supports pagination for large result sets. |
-| logs-list-attributes | List available log attributes in your project to discover what you can filter on. Supports filtering by attribute type (log or resource). |
-| logs-list-attribute-values | Get possible values for a specific log attribute. Find service names, log levels, or other attribute values before querying. |
-
-A typical workflow:
-
-1. Call `logs-list-attributes` to discover available filter attributes.
-2. Call `logs-list-attribute-values` to find specific values (e.g., which service names exist).
-3. Call `logs-query` to search logs with the right filters.
-
-## Get started
-
-See the [MCP server documentation](/docs/model-context-protocol.md) for setup instructions.
-
-### Community questions
-
-Ask a question
-
-### Was this page useful?
-
-HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/logs/skills/nodejs/references/debug-logs-mcp.md b/skills/posthog/logs/skills/nodejs/references/debug-logs-mcp.md
deleted file mode 100644
index f57bb977..00000000
--- a/skills/posthog/logs/skills/nodejs/references/debug-logs-mcp.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Debug Logs with MCP - Docs
-
-The [PostHog MCP server](/docs/model-context-protocol.md) gives AI agents direct access to your Logs. Ask your agent to search, filter, and analyze log data without leaving your code editor.
-
-With MCP, your agents can:
-
-- **Search and filter logs** – Query by severity level, service name, date range, and free text.
-- **Discover log attributes** – List available attributes and their values to build targeted queries.
-- **Debug in context** – Investigate production issues without switching tools.
-- **Correlate with traces** – Use trace IDs and span IDs from log entries to follow request flows across services.
-
-This works in any MCP client – Cursor, Windsurf, Claude Code, and others.
-
-## Example prompts
-
-Try these prompts with your MCP-enabled agent:
-
-- `Show me all error logs from the last hour.`
-- `What services are logging errors? Search for error logs from the payments service.`
-- `Find logs related to trace ID abc123.`
-- `What log attributes are available? Show me the values for the service.name attribute.`
-- `Show me warning and error logs from the last 24 hours, excluding debug noise.`
-
-## Logs tools
-
-The MCP server provides three tools for working with logs:
-
-| Tool | Description |
-| --- | --- |
-| logs-query | Search and query logs with filters for severity levels (trace, debug, info, warn, error, fatal), service names, date ranges, and free text. Supports pagination for large result sets. |
-| logs-list-attributes | List available log attributes in your project to discover what you can filter on. Supports filtering by attribute type (log or resource). |
-| logs-list-attribute-values | Get possible values for a specific log attribute. Find service names, log levels, or other attribute values before querying. |
-
-A typical workflow:
-
-1. Call `logs-list-attributes` to discover available filter attributes.
-2. Call `logs-list-attribute-values` to find specific values (e.g., which service names exist).
-3. Call `logs-query` to search logs with the right filters.
-
-## Get started
-
-See the [MCP server documentation](/docs/model-context-protocol.md) for setup instructions.
-
-### Community questions
-
-Ask a question
-
-### Was this page useful?
-
-HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/logs/skills/other/references/debug-logs-mcp.md b/skills/posthog/logs/skills/other/references/debug-logs-mcp.md
deleted file mode 100644
index f57bb977..00000000
--- a/skills/posthog/logs/skills/other/references/debug-logs-mcp.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Debug Logs with MCP - Docs
-
-The [PostHog MCP server](/docs/model-context-protocol.md) gives AI agents direct access to your Logs. Ask your agent to search, filter, and analyze log data without leaving your code editor.
-
-With MCP, your agents can:
-
-- **Search and filter logs** – Query by severity level, service name, date range, and free text.
-- **Discover log attributes** – List available attributes and their values to build targeted queries.
-- **Debug in context** – Investigate production issues without switching tools.
-- **Correlate with traces** – Use trace IDs and span IDs from log entries to follow request flows across services.
-
-This works in any MCP client – Cursor, Windsurf, Claude Code, and others.
-
-## Example prompts
-
-Try these prompts with your MCP-enabled agent:
-
-- `Show me all error logs from the last hour.`
-- `What services are logging errors? Search for error logs from the payments service.`
-- `Find logs related to trace ID abc123.`
-- `What log attributes are available? Show me the values for the service.name attribute.`
-- `Show me warning and error logs from the last 24 hours, excluding debug noise.`
-
-## Logs tools
-
-The MCP server provides three tools for working with logs:
-
-| Tool | Description |
-| --- | --- |
-| logs-query | Search and query logs with filters for severity levels (trace, debug, info, warn, error, fatal), service names, date ranges, and free text. Supports pagination for large result sets. |
-| logs-list-attributes | List available log attributes in your project to discover what you can filter on. Supports filtering by attribute type (log or resource). |
-| logs-list-attribute-values | Get possible values for a specific log attribute. Find service names, log levels, or other attribute values before querying. |
-
-A typical workflow:
-
-1. Call `logs-list-attributes` to discover available filter attributes.
-2. Call `logs-list-attribute-values` to find specific values (e.g., which service names exist).
-3. Call `logs-query` to search logs with the right filters.
-
-## Get started
-
-See the [MCP server documentation](/docs/model-context-protocol.md) for setup instructions.
-
-### Community questions
-
-Ask a question
-
-### Was this page useful?
-
-HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/logs/skills/python/references/debug-logs-mcp.md b/skills/posthog/logs/skills/python/references/debug-logs-mcp.md
deleted file mode 100644
index f57bb977..00000000
--- a/skills/posthog/logs/skills/python/references/debug-logs-mcp.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Debug Logs with MCP - Docs
-
-The [PostHog MCP server](/docs/model-context-protocol.md) gives AI agents direct access to your Logs. Ask your agent to search, filter, and analyze log data without leaving your code editor.
-
-With MCP, your agents can:
-
-- **Search and filter logs** – Query by severity level, service name, date range, and free text.
-- **Discover log attributes** – List available attributes and their values to build targeted queries.
-- **Debug in context** – Investigate production issues without switching tools.
-- **Correlate with traces** – Use trace IDs and span IDs from log entries to follow request flows across services.
-
-This works in any MCP client – Cursor, Windsurf, Claude Code, and others.
-
-## Example prompts
-
-Try these prompts with your MCP-enabled agent:
-
-- `Show me all error logs from the last hour.`
-- `What services are logging errors? Search for error logs from the payments service.`
-- `Find logs related to trace ID abc123.`
-- `What log attributes are available? Show me the values for the service.name attribute.`
-- `Show me warning and error logs from the last 24 hours, excluding debug noise.`
-
-## Logs tools
-
-The MCP server provides three tools for working with logs:
-
-| Tool | Description |
-| --- | --- |
-| logs-query | Search and query logs with filters for severity levels (trace, debug, info, warn, error, fatal), service names, date ranges, and free text. Supports pagination for large result sets. |
-| logs-list-attributes | List available log attributes in your project to discover what you can filter on. Supports filtering by attribute type (log or resource). |
-| logs-list-attribute-values | Get possible values for a specific log attribute. Find service names, log levels, or other attribute values before querying. |
-
-A typical workflow:
-
-1. Call `logs-list-attributes` to discover available filter attributes.
-2. Call `logs-list-attribute-values` to find specific values (e.g., which service names exist).
-3. Call `logs-query` to search logs with the right filters.
-
-## Get started
-
-See the [MCP server documentation](/docs/model-context-protocol.md) for setup instructions.
-
-### Community questions
-
-Ask a question
-
-### Was this page useful?
-
-HelpfulCould be better
\ No newline at end of file
From 98e588b8016555796b3355b3cf0cd749a1b06a58 Mon Sep 17 00:00:00 2001
From: "Vincent (Wen Yu) Ge" <29069505+gewenyu99@users.noreply.github.com>
Date: Wed, 26 Aug 2026 13:30:14 -0400
Subject: [PATCH 02/13] Update generated plugins from context-mill (mirror
test)
---
skills/posthog/all/.claude-plugin/plugin.json | 2 +-
.../skills/creating-product-tours/SKILL.md | 410 ++++++++++
.../references/COMMANDMENTS.md | 5 +
.../skills/error-tracking-android/SKILL.md | 4 +-
.../references/COMMANDMENTS.md | 9 +
.../references/alerts.md | 16 +-
.../references/android.md | 14 +-
.../references/assigning-issues.md | 50 +-
.../references/fingerprints.md | 10 +-
.../references/monitoring.md | 18 +-
.../references/upload-source-maps.md | 28 +-
.../skills/error-tracking-angular/SKILL.md | 7 +-
.../references/COMMANDMENTS.md | 12 +
.../references/alerts.md | 16 +-
.../references/angular.md | 16 +-
.../references/assigning-issues.md | 50 +-
.../references/fingerprints.md | 10 +-
.../references/monitoring.md | 18 +-
.../references/upload-source-maps.md | 28 +-
.../all/skills/error-tracking-django/SKILL.md | 51 ++
.../references/COMMANDMENTS.md | 20 +
.../references/alerts.md | 69 ++
.../references/assigning-issues.md | 103 +++
.../references/django.md | 300 +++++++
.../references/fingerprints.md | 63 ++
.../references/monitoring.md | 146 ++++
.../references/python.md | 191 +++++
.../references/upload-source-maps.md | 67 ++
.../all/skills/error-tracking-dotnet/SKILL.md | 46 ++
.../references/COMMANDMENTS.md | 15 +
.../references/alerts.md | 69 ++
.../references/assigning-issues.md | 103 +++
.../references/dotnet.md | 773 ++++++++++++++++++
.../references/fingerprints.md | 63 ++
.../references/monitoring.md | 146 ++++
.../references/upload-source-maps.md | 67 ++
.../all/skills/error-tracking-elixir/SKILL.md | 46 ++
.../references/COMMANDMENTS.md | 16 +
.../references/alerts.md | 69 ++
.../references/assigning-issues.md | 103 +++
.../references/elixir.md | 316 +++++++
.../references/fingerprints.md | 63 ++
.../references/monitoring.md | 146 ++++
.../references/upload-source-maps.md | 67 ++
.../all/skills/error-tracking-flask/SKILL.md | 49 ++
.../references/COMMANDMENTS.md | 18 +
.../error-tracking-flask/references/alerts.md | 69 ++
.../references/assigning-issues.md | 103 +++
.../references/fingerprints.md | 63 ++
.../error-tracking-flask/references/flask.md | 147 ++++
.../references/monitoring.md | 146 ++++
.../error-tracking-flask/references/python.md | 191 +++++
.../references/upload-source-maps.md | 67 ++
.../skills/error-tracking-flutter/SKILL.md | 14 +-
.../references/COMMANDMENTS.md | 14 +
.../references/alerts.md | 16 +-
.../references/assigning-issues.md | 50 +-
.../references/fingerprints.md | 10 +-
.../references/flutter.md | 33 +-
.../references/monitoring.md | 18 +-
.../references/upload-source-maps.md | 28 +-
.../all/skills/error-tracking-go/SKILL.md | 15 +-
.../references/COMMANDMENTS.md | 15 +
.../error-tracking-go/references/alerts.md | 16 +-
.../references/assigning-issues.md | 50 +-
.../references/fingerprints.md | 10 +-
.../skills/error-tracking-go/references/go.md | 18 +-
.../references/monitoring.md | 18 +-
.../references/upload-source-maps.md | 28 +-
.../all/skills/error-tracking-hono/SKILL.md | 8 +-
.../references/COMMANDMENTS.md | 8 +
.../error-tracking-hono/references/alerts.md | 16 +-
.../references/assigning-issues.md | 50 +-
.../references/fingerprints.md | 10 +-
.../error-tracking-hono/references/hono.md | 12 +-
.../references/monitoring.md | 18 +-
.../references/upload-source-maps.md | 28 +-
.../all/skills/error-tracking-ios/SKILL.md | 50 ++
.../references/COMMANDMENTS.md | 20 +
.../error-tracking-ios/references/alerts.md | 69 ++
.../references/assigning-issues.md | 103 +++
.../references/fingerprints.md | 63 ++
.../error-tracking-ios/references/ios.md | 264 ++++++
.../references/monitoring.md | 146 ++++
.../references/upload-source-maps.md | 67 ++
.../skills/error-tracking-laravel/SKILL.md | 46 ++
.../references/COMMANDMENTS.md | 15 +
.../references/alerts.md | 69 ++
.../references/assigning-issues.md | 103 +++
.../references/fingerprints.md | 63 ++
.../references/laravel.md | 176 ++++
.../references/monitoring.md | 146 ++++
.../error-tracking-laravel/references/php.md | 228 ++++++
.../references/upload-source-maps.md | 67 ++
.../all/skills/error-tracking-nextjs/SKILL.md | 7 +-
.../references/COMMANDMENTS.md | 17 +
.../references/alerts.md | 16 +-
.../references/assigning-issues.md | 50 +-
.../references/fingerprints.md | 10 +-
.../references/monitoring.md | 18 +-
.../references/nextjs.md | 26 +-
.../references/upload-source-maps.md | 28 +-
.../all/skills/error-tracking-node/SKILL.md | 11 +-
.../references/COMMANDMENTS.md | 15 +
.../error-tracking-node/references/alerts.md | 16 +-
.../references/assigning-issues.md | 50 +-
.../references/fingerprints.md | 10 +-
.../references/monitoring.md | 18 +-
.../error-tracking-node/references/node.md | 12 +-
.../references/upload-source-maps.md | 28 +-
.../all/skills/error-tracking-nuxt/SKILL.md | 11 +-
.../references/COMMANDMENTS.md | 8 +
.../error-tracking-nuxt/references/alerts.md | 16 +-
.../references/assigning-issues.md | 50 +-
.../references/fingerprints.md | 10 +-
.../references/monitoring.md | 18 +-
.../references/nuxt-3-6.md | 257 ++++++
.../references/nuxt-3-7.md | 187 +++++
.../references/upload-source-maps.md | 28 +-
.../all/skills/error-tracking-php/SKILL.md | 41 +
.../references/COMMANDMENTS.md | 11 +
.../error-tracking-php/references/alerts.md | 69 ++
.../references/assigning-issues.md | 103 +++
.../references/fingerprints.md | 63 ++
.../references/monitoring.md | 146 ++++
.../error-tracking-php/references/php.md | 228 ++++++
.../references/upload-source-maps.md | 67 ++
.../all/skills/error-tracking-python/SKILL.md | 4 +-
.../references/COMMANDMENTS.md | 15 +
.../references/alerts.md | 16 +-
.../references/assigning-issues.md | 50 +-
.../references/fingerprints.md | 10 +-
.../references/monitoring.md | 18 +-
.../references/python.md | 14 +-
.../references/upload-source-maps.md | 28 +-
.../error-tracking-react-native/SKILL.md | 7 +-
.../references/COMMANDMENTS.md | 12 +
.../references/alerts.md | 16 +-
.../references/assigning-issues.md | 50 +-
.../references/fingerprints.md | 10 +-
.../references/monitoring.md | 18 +-
.../references/react-native.md | 31 +-
.../references/upload-source-maps.md | 28 +-
.../all/skills/error-tracking-react/SKILL.md | 7 +-
.../references/COMMANDMENTS.md | 16 +
.../error-tracking-react/references/alerts.md | 16 +-
.../references/assigning-issues.md | 50 +-
.../references/fingerprints.md | 10 +-
.../references/monitoring.md | 18 +-
.../error-tracking-react/references/react.md | 24 +-
.../references/upload-source-maps.md | 28 +-
.../error-tracking-ruby-on-rails/SKILL.md | 7 +-
.../references/COMMANDMENTS.md | 23 +
.../references/alerts.md | 16 +-
.../references/assigning-issues.md | 50 +-
.../references/fingerprints.md | 10 +-
.../references/monitoring.md | 18 +-
.../references/ruby-on-rails.md | 644 ++++++++++++---
.../references/upload-source-maps.md | 28 +-
.../all/skills/error-tracking-ruby/SKILL.md | 4 +-
.../references/COMMANDMENTS.md | 11 +
.../error-tracking-ruby/references/alerts.md | 16 +-
.../references/assigning-issues.md | 50 +-
.../references/fingerprints.md | 10 +-
.../references/monitoring.md | 18 +-
.../error-tracking-ruby/references/ruby.md | 18 +-
.../references/upload-source-maps.md | 28 +-
.../all/skills/error-tracking-rust/SKILL.md | 44 +
.../references/COMMANDMENTS.md | 14 +
.../error-tracking-rust/references/alerts.md | 69 ++
.../references/assigning-issues.md | 103 +++
.../references/fingerprints.md | 63 ++
.../references/monitoring.md | 146 ++++
.../error-tracking-rust/references/rust.md | 199 +++++
.../references/upload-source-maps.md | 67 ++
.../all/skills/error-tracking-svelte/SKILL.md | 8 +-
.../references/COMMANDMENTS.md | 11 +
.../references/alerts.md | 16 +-
.../references/assigning-issues.md | 50 +-
.../references/fingerprints.md | 10 +-
.../references/monitoring.md | 18 +-
.../references/svelte.md | 14 +-
.../references/upload-source-maps.md | 28 +-
.../SKILL.md | 409 +++++++++
.../references/COMMANDMENTS.md | 9 +
.../references/android.md | 183 +++++
.../references/cli.md | 150 ++++
.../references/upload-source-maps.md | 67 ++
.../SKILL.md | 412 ++++++++++
.../references/COMMANDMENTS.md | 12 +
.../references/angular.md | 204 +++++
.../references/cli.md | 150 ++++
.../references/upload-source-maps.md | 67 ++
.../SKILL.md | 417 ++++++++++
.../references/COMMANDMENTS.md | 14 +
.../references/android.md | 183 +++++
.../references/cli.md | 150 ++++
.../references/flutter.md | 48 ++
.../references/ios.md | 286 +++++++
.../references/upload-source-maps.md | 67 ++
200 files changed, 13069 insertions(+), 603 deletions(-)
create mode 100644 skills/posthog/all/skills/creating-product-tours/SKILL.md
create mode 100644 skills/posthog/all/skills/creating-product-tours/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-android/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-angular/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-django/SKILL.md
create mode 100644 skills/posthog/all/skills/error-tracking-django/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-django/references/alerts.md
create mode 100644 skills/posthog/all/skills/error-tracking-django/references/assigning-issues.md
create mode 100644 skills/posthog/all/skills/error-tracking-django/references/django.md
create mode 100644 skills/posthog/all/skills/error-tracking-django/references/fingerprints.md
create mode 100644 skills/posthog/all/skills/error-tracking-django/references/monitoring.md
create mode 100644 skills/posthog/all/skills/error-tracking-django/references/python.md
create mode 100644 skills/posthog/all/skills/error-tracking-django/references/upload-source-maps.md
create mode 100644 skills/posthog/all/skills/error-tracking-dotnet/SKILL.md
create mode 100644 skills/posthog/all/skills/error-tracking-dotnet/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-dotnet/references/alerts.md
create mode 100644 skills/posthog/all/skills/error-tracking-dotnet/references/assigning-issues.md
create mode 100644 skills/posthog/all/skills/error-tracking-dotnet/references/dotnet.md
create mode 100644 skills/posthog/all/skills/error-tracking-dotnet/references/fingerprints.md
create mode 100644 skills/posthog/all/skills/error-tracking-dotnet/references/monitoring.md
create mode 100644 skills/posthog/all/skills/error-tracking-dotnet/references/upload-source-maps.md
create mode 100644 skills/posthog/all/skills/error-tracking-elixir/SKILL.md
create mode 100644 skills/posthog/all/skills/error-tracking-elixir/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-elixir/references/alerts.md
create mode 100644 skills/posthog/all/skills/error-tracking-elixir/references/assigning-issues.md
create mode 100644 skills/posthog/all/skills/error-tracking-elixir/references/elixir.md
create mode 100644 skills/posthog/all/skills/error-tracking-elixir/references/fingerprints.md
create mode 100644 skills/posthog/all/skills/error-tracking-elixir/references/monitoring.md
create mode 100644 skills/posthog/all/skills/error-tracking-elixir/references/upload-source-maps.md
create mode 100644 skills/posthog/all/skills/error-tracking-flask/SKILL.md
create mode 100644 skills/posthog/all/skills/error-tracking-flask/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-flask/references/alerts.md
create mode 100644 skills/posthog/all/skills/error-tracking-flask/references/assigning-issues.md
create mode 100644 skills/posthog/all/skills/error-tracking-flask/references/fingerprints.md
create mode 100644 skills/posthog/all/skills/error-tracking-flask/references/flask.md
create mode 100644 skills/posthog/all/skills/error-tracking-flask/references/monitoring.md
create mode 100644 skills/posthog/all/skills/error-tracking-flask/references/python.md
create mode 100644 skills/posthog/all/skills/error-tracking-flask/references/upload-source-maps.md
create mode 100644 skills/posthog/all/skills/error-tracking-flutter/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-go/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-hono/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-ios/SKILL.md
create mode 100644 skills/posthog/all/skills/error-tracking-ios/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-ios/references/alerts.md
create mode 100644 skills/posthog/all/skills/error-tracking-ios/references/assigning-issues.md
create mode 100644 skills/posthog/all/skills/error-tracking-ios/references/fingerprints.md
create mode 100644 skills/posthog/all/skills/error-tracking-ios/references/ios.md
create mode 100644 skills/posthog/all/skills/error-tracking-ios/references/monitoring.md
create mode 100644 skills/posthog/all/skills/error-tracking-ios/references/upload-source-maps.md
create mode 100644 skills/posthog/all/skills/error-tracking-laravel/SKILL.md
create mode 100644 skills/posthog/all/skills/error-tracking-laravel/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-laravel/references/alerts.md
create mode 100644 skills/posthog/all/skills/error-tracking-laravel/references/assigning-issues.md
create mode 100644 skills/posthog/all/skills/error-tracking-laravel/references/fingerprints.md
create mode 100644 skills/posthog/all/skills/error-tracking-laravel/references/laravel.md
create mode 100644 skills/posthog/all/skills/error-tracking-laravel/references/monitoring.md
create mode 100644 skills/posthog/all/skills/error-tracking-laravel/references/php.md
create mode 100644 skills/posthog/all/skills/error-tracking-laravel/references/upload-source-maps.md
create mode 100644 skills/posthog/all/skills/error-tracking-nextjs/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-node/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-nuxt/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-nuxt/references/nuxt-3-6.md
create mode 100644 skills/posthog/all/skills/error-tracking-nuxt/references/nuxt-3-7.md
create mode 100644 skills/posthog/all/skills/error-tracking-php/SKILL.md
create mode 100644 skills/posthog/all/skills/error-tracking-php/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-php/references/alerts.md
create mode 100644 skills/posthog/all/skills/error-tracking-php/references/assigning-issues.md
create mode 100644 skills/posthog/all/skills/error-tracking-php/references/fingerprints.md
create mode 100644 skills/posthog/all/skills/error-tracking-php/references/monitoring.md
create mode 100644 skills/posthog/all/skills/error-tracking-php/references/php.md
create mode 100644 skills/posthog/all/skills/error-tracking-php/references/upload-source-maps.md
create mode 100644 skills/posthog/all/skills/error-tracking-python/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-react-native/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-react/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-ruby-on-rails/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-ruby/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-rust/SKILL.md
create mode 100644 skills/posthog/all/skills/error-tracking-rust/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-rust/references/alerts.md
create mode 100644 skills/posthog/all/skills/error-tracking-rust/references/assigning-issues.md
create mode 100644 skills/posthog/all/skills/error-tracking-rust/references/fingerprints.md
create mode 100644 skills/posthog/all/skills/error-tracking-rust/references/monitoring.md
create mode 100644 skills/posthog/all/skills/error-tracking-rust/references/rust.md
create mode 100644 skills/posthog/all/skills/error-tracking-rust/references/upload-source-maps.md
create mode 100644 skills/posthog/all/skills/error-tracking-svelte/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-upload-source-maps-android/SKILL.md
create mode 100644 skills/posthog/all/skills/error-tracking-upload-source-maps-android/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-upload-source-maps-android/references/android.md
create mode 100644 skills/posthog/all/skills/error-tracking-upload-source-maps-android/references/cli.md
create mode 100644 skills/posthog/all/skills/error-tracking-upload-source-maps-android/references/upload-source-maps.md
create mode 100644 skills/posthog/all/skills/error-tracking-upload-source-maps-angular/SKILL.md
create mode 100644 skills/posthog/all/skills/error-tracking-upload-source-maps-angular/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-upload-source-maps-angular/references/angular.md
create mode 100644 skills/posthog/all/skills/error-tracking-upload-source-maps-angular/references/cli.md
create mode 100644 skills/posthog/all/skills/error-tracking-upload-source-maps-angular/references/upload-source-maps.md
create mode 100644 skills/posthog/all/skills/error-tracking-upload-source-maps-flutter/SKILL.md
create mode 100644 skills/posthog/all/skills/error-tracking-upload-source-maps-flutter/references/COMMANDMENTS.md
create mode 100644 skills/posthog/all/skills/error-tracking-upload-source-maps-flutter/references/android.md
create mode 100644 skills/posthog/all/skills/error-tracking-upload-source-maps-flutter/references/cli.md
create mode 100644 skills/posthog/all/skills/error-tracking-upload-source-maps-flutter/references/flutter.md
create mode 100644 skills/posthog/all/skills/error-tracking-upload-source-maps-flutter/references/ios.md
create mode 100644 skills/posthog/all/skills/error-tracking-upload-source-maps-flutter/references/upload-source-maps.md
diff --git a/skills/posthog/all/.claude-plugin/plugin.json b/skills/posthog/all/.claude-plugin/plugin.json
index 9d3da86b..005b79d2 100644
--- a/skills/posthog/all/.claude-plugin/plugin.json
+++ b/skills/posthog/all/.claude-plugin/plugin.json
@@ -1,7 +1,7 @@
{
"name": "posthog-all",
"description": "Complete set of all PostHog skills for agents and power users",
- "version": "1.9.4",
+ "version": "dev",
"author": {
"name": "PostHog"
},
diff --git a/skills/posthog/all/skills/creating-product-tours/SKILL.md b/skills/posthog/all/skills/creating-product-tours/SKILL.md
new file mode 100644
index 00000000..98514746
--- /dev/null
+++ b/skills/posthog/all/skills/creating-product-tours/SKILL.md
@@ -0,0 +1,410 @@
+---
+name: creating-product-tours
+description: >-
+ Build an in-app product tour that guides users through a feature inside the
+ user's own application. Targeting via PostHog feature flags, tracking via
+ PostHog events, custom reusable UI components. Use when a user asks to create
+ a product tour, onboarding walkthrough, feature spotlight, or step-by-step
+ guide in their app.
+metadata:
+ author: PostHog
+ version: dev
+---
+
+# Building an in-app product tour with PostHog
+
+Product tours use PostHog feature flags for targeting (who sees the tour and when) and PostHog events for tracking (completion, drop-off, step funnel). UI components should be custom-built but reusable across multiple tours.
+
+**Local-dev behavior**: the tour renders locally even when PostHog isn't initialized (no project token, provider not mounted, ad blocker active). The feature flag infrastructure is still scaffolded for production rollout — it just isn't a hard gate in dev. This lets engineers iterate on the tour without needing a PostHog project wired up. See "Local development" below for how the fail-open works and how to opt out.
+
+## Step 1: gather requirements
+
+Ask the user these questions before writing any code:
+
+1. **Goal** — What should the user be able to do after completing this tour? (e.g., "create their first dashboard", "connect a data source")
+2. **Steps** — List all steps: what element should it point to, what does it say, how does the user advance? (e.g, "Step 1: Highlight the Create project button and ask the user to click it. Step 2: Highlight the SDK install command and explain how to copy it. Step 3: Highlight the dashboard page and prompt the user to create their first insight.")
+3. **Audience** — Who sees it? All users, new users only, users on a specific plan, users who haven't done something yet?
+4. **Trigger** — Auto-show on page load, trigger from a button, or chain from another tour?
+5. **Show frequency** — Once ever, once per session, or every time the user visits?
+6. **Tech stack** — React, Vue, vanilla JS? This determines component shape.
+
+Do not proceed until you have goal, at least one step, and the tech stack.
+
+## Step 2: create the feature flag
+
+Create one feature flag per tour in PostHog. This controls targeting independently of the code.
+
+Naming convention: `tour--` — e.g. `tour-dashboards-first-chart`, `tour-onboarding-data-source`.
+
+Use the PostHog MCP tool or the PostHog UI (Flags → New feature flag):
+
+- **Key**: `tour-` (lowercase, hyphens)
+- **Rollout**: set to the target audience using person/group properties or a percentage rollout
+- **Enabled state**: Leave the feature flag disabled – the user enables it when ready.
+- **Payload** (optional): store the step config as JSON so tours can be updated without deploys:
+
+```json
+{
+ "steps": [
+ {
+ "target": "#new-dashboard-btn",
+ "title": "Create a dashboard",
+ "body": "Click here to start.",
+ "placement": "bottom"
+ },
+ {
+ "target": ".dashboard-name-input",
+ "title": "Name your dashboard",
+ "body": "Give it a memorable name.",
+ "placement": "right"
+ }
+ ]
+}
+```
+
+## Step 3: build reusable tour components
+
+Build these once and reuse them for every tour. Do not create one-off components per tour. If not using react, adapt the strategy to what makes most sense for the platform.
+
+### Core hook: `useTour`
+
+```tsx
+// hooks/useTour.ts
+import { useEffect, useState, useCallback } from "react";
+import posthog from "posthog-js";
+
+export interface TourStep {
+ target: string; // CSS selector for the anchor element
+ title: string;
+ body: string;
+ placement?: "top" | "bottom" | "left" | "right";
+}
+
+interface UseTourOptions {
+ flagKey: string;
+ steps: TourStep[]; // inline step definitions — required so the tour renders without a PostHog payload
+ storageKey?: string; // localStorage key to remember completion; defaults to `tour-${flagKey}`
+ // When true, the flag check is enforced even if PostHog isn't initialized
+ // (the tour won't render locally without PostHog wired up). Default false:
+ // fail-open in dev so engineers can iterate without a project token.
+ requireFlag?: boolean;
+}
+
+// posthog-js sets __loaded = true once init() succeeds. We use it to detect
+// whether PostHog is actually wired up before treating its flag answer as truth.
+function isPosthogReady(): boolean {
+ return Boolean((posthog as unknown as { __loaded?: boolean }).__loaded);
+}
+
+export function useTour({
+ flagKey,
+ steps: staticSteps,
+ storageKey,
+ requireFlag = false,
+}: UseTourOptions) {
+ const key = storageKey ?? `tour-${flagKey}`;
+ const [active, setActive] = useState(false);
+ const [stepIndex, setStepIndex] = useState(0);
+ const [steps, setSteps] = useState(staticSteps);
+
+ useEffect(() => {
+ if (localStorage.getItem(key) === "done") return;
+
+ const ready = isPosthogReady();
+ if (ready) {
+ // Production path: PostHog is wired, the flag decides.
+ const result = posthog.getFeatureFlagResult(flagKey);
+ if (!result?.enabled) return;
+ const payload = result.payload as {
+ steps?: TourStep[];
+ } | null;
+ if (payload?.steps) setSteps(payload.steps);
+ } else if (requireFlag) {
+ // Strict mode: no PostHog, no tour.
+ return;
+ }
+ // else: fail-open — render with the inline staticSteps so local dev works.
+
+ setActive(true);
+ posthog.capture("tour started", { tour_id: flagKey });
+ }, [flagKey, key, requireFlag]);
+
+ const advance = useCallback(() => {
+ const next = stepIndex + 1;
+ posthog.capture("tour step completed", {
+ tour_id: flagKey,
+ step: stepIndex,
+ });
+ if (next >= steps.length) {
+ localStorage.setItem(key, "done");
+ setActive(false);
+ posthog.capture("tour completed", { tour_id: flagKey });
+ } else {
+ setStepIndex(next);
+ posthog.capture("tour step viewed", { tour_id: flagKey, step: next });
+ }
+ }, [flagKey, key, stepIndex, steps.length]);
+
+ const dismiss = useCallback(() => {
+ localStorage.setItem(key, "done");
+ setActive(false);
+ posthog.capture("tour dismissed", { tour_id: flagKey, at_step: stepIndex });
+ }, [flagKey, key, stepIndex]);
+
+ return {
+ active,
+ step: steps[stepIndex] ?? null,
+ stepIndex,
+ totalSteps: steps.length,
+ advance,
+ dismiss,
+ };
+}
+```
+
+### Display component: `TourTooltip`
+
+```tsx
+// components/TourTooltip.tsx
+import { useEffect, useRef, useState } from "react";
+import type { TourStep } from "../hooks/useTour";
+
+interface TourTooltipProps {
+ step: TourStep;
+ stepIndex: number;
+ totalSteps: number;
+ onNext: () => void;
+ onDismiss: () => void;
+}
+
+export function TourTooltip({
+ step,
+ stepIndex,
+ totalSteps,
+ onNext,
+ onDismiss,
+}: TourTooltipProps) {
+ const [position, setPosition] = useState({ top: 0, left: 0 });
+ const tooltipRef = useRef(null);
+
+ useEffect(() => {
+ const target = document.querySelector(step.target);
+ if (!target || !tooltipRef.current) return;
+
+ const rect = target.getBoundingClientRect();
+ const tip = tooltipRef.current.getBoundingClientRect();
+ const placement = step.placement ?? "bottom";
+
+ const GAP = 12;
+ const pos = {
+ top:
+ placement === "bottom"
+ ? rect.bottom + GAP + window.scrollY
+ : placement === "top"
+ ? rect.top - tip.height - GAP + window.scrollY
+ : rect.top + rect.height / 2 - tip.height / 2 + window.scrollY,
+ left:
+ placement === "left"
+ ? rect.left - tip.width - GAP + window.scrollX
+ : placement === "right"
+ ? rect.right + GAP + window.scrollX
+ : rect.left + rect.width / 2 - tip.width / 2 + window.scrollX,
+ };
+ setPosition(pos);
+
+ // Highlight the target element
+ target.setAttribute("data-tour-active", "true");
+ return () => target.removeAttribute("data-tour-active");
+ }, [step]);
+
+ return (
+
+
+
{step.title}
+
{step.body}
+
+
+ {stepIndex + 1} / {totalSteps}
+
+
+
+
+ );
+}
+```
+
+### Minimal CSS (adapt to match the app's design system)
+
+```css
+/* tour.css */
+.tour-tooltip {
+ background: #fff;
+ border: 1px solid #e5e7eb;
+ border-radius: 8px;
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
+ padding: 16px;
+ min-width: 240px;
+ max-width: 340px;
+}
+.tour-tooltip__close {
+ position: absolute;
+ top: 8px;
+ right: 8px;
+ background: none;
+ border: none;
+ cursor: pointer;
+ color: #6b7280;
+}
+.tour-tooltip__title {
+ margin: 0 0 8px;
+ font-weight: 600;
+ font-size: 14px;
+}
+.tour-tooltip__body {
+ margin: 0 0 12px;
+ font-size: 13px;
+ color: #374151;
+}
+.tour-tooltip__footer {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+.tour-tooltip__progress {
+ font-size: 12px;
+ color: #9ca3af;
+}
+.tour-tooltip__next {
+ background: #f54e00;
+ color: #fff;
+ border: none;
+ border-radius: 6px;
+ padding: 6px 14px;
+ cursor: pointer;
+ font-size: 13px;
+}
+/* Highlight ring on the targeted element */
+[data-tour-active="true"] {
+ outline: 2px solid #f54e00;
+ outline-offset: 3px;
+ border-radius: 4px;
+}
+```
+
+### Wiring it together
+
+```tsx
+// In the page or app root where the tour should run:
+import { useTour, TourStep } from "../hooks/useTour";
+import { TourTooltip } from "../components/TourTooltip";
+
+// Inline steps are the source of truth in code so the tour renders even when
+// PostHog isn't wired (local dev). In production, a flag payload can override these.
+const DASHBOARDS_FIRST_CHART_STEPS: TourStep[] = [
+ { target: "#new-dashboard-btn", title: "Create a dashboard", body: "Click here to start.", placement: "bottom" },
+ { target: ".dashboard-name-input", title: "Name your dashboard", body: "Give it a memorable name.", placement: "right" },
+];
+
+export function DashboardPage() {
+ const tour = useTour({
+ flagKey: "tour-dashboards-first-chart",
+ steps: DASHBOARDS_FIRST_CHART_STEPS,
+ });
+
+ return (
+ <>
+ {/* ... page content ... */}
+ {tour.active && tour.step && (
+
+ )}
+ >
+ );
+}
+```
+
+## Local development
+
+The `useTour` hook is designed to **fail-open when PostHog isn't initialized**. The decision tree on mount:
+
+| PostHog state | Flag result | Behavior |
+| -------------------------------------- | ------------- | ------------------------------------- |
+| Initialized (`posthog.__loaded`) | `true` | Show tour. Apply payload steps if present. |
+| Initialized | `false` | Hide tour. |
+| Not initialized (no key, blocked, etc) | n/a | **Show tour** using inline `staticSteps`. |
+| Not initialized + `requireFlag: true` | n/a | Hide tour (strict mode). |
+
+Why: engineers should be able to build and demo a tour without wiring PostHog. The flag, payload, events, and targeting code are all in place — they just don't *gate* rendering during local dev. In production, where PostHog is initialized, the flag is fully respected.
+
+To preview the disabled state locally:
+
+- Set `requireFlag: true` on the hook call, **or**
+- Wire PostHog locally and toggle the flag off in the PostHog UI
+
+Note: `posthog.capture(...)` calls inside the hook are no-ops when PostHog isn't initialized, so they're safe to leave in.
+
+## Adding a second tour
+
+Reuse the same hook and component — only the flag key and steps change:
+
+```tsx
+const tour = useTour({
+ flagKey: "tour-settings-integrations",
+ steps: SETTINGS_INTEGRATIONS_STEPS,
+});
+```
+
+No new components needed. If steps differ enough to need a different layout (e.g., a modal instead of a tooltip), create a second display component (`TourModal`) that accepts the same props shape as `TourTooltip`.
+
+## Targeting patterns
+
+| Goal | Flag setup |
+| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
+| All new users | Roll out 100%, set a person property `onboarding_tour_shown` via `posthog.people.set` after completion to suppress on re-identification |
+| Paid plan only | Filter by `plan = 'paid'` person property |
+| After a specific action | Trigger `useTour` only after the user completes the prerequisite; the flag controls the audience, the trigger controls timing |
+| A/B test the tour | Use a multivariate flag with variants `control` / `tour` and check `posthog.getFeatureFlag(key) === 'tour'` |
+
+## Events to analyse
+
+All events emitted by `useTour` above. Query in PostHog:
+
+- Funnel: `tour started` → `tour step viewed (step 0..N)` → `tour completed` — shows drop-off per step
+- `tour dismissed` with `at_step` property — shows where users give up
+- Filter all by `tour_id` property to keep tours separate
+
+## Checklist before shipping
+
+- [ ] Feature flag created with correct rollout, but not enabled
+- [ ] Inline `steps` array passed to `useTour` (so it renders without a PostHog payload)
+- [ ] Tour renders locally without PostHog wired up (fail-open verified)
+- [ ] Tour renders in production when flag is enabled; hidden when flag is disabled
+- [ ] `target` selectors verified in the browser against real DOM nodes
+- [ ] `localStorage` key chosen so it doesn't collide with other tours
+- [ ] All four events captured in PostHog once wired: `started`, `step viewed`, `completed`, `dismissed`
+- [ ] `TourTooltip` / `useTour` live in a shared location, not duplicated per feature
+- [ ] User alerted that they should check rollout conditions and enable the flag when they want to see the tour in production
diff --git a/skills/posthog/all/skills/creating-product-tours/references/COMMANDMENTS.md b/skills/posthog/all/skills/creating-product-tours/references/COMMANDMENTS.md
new file mode 100644
index 00000000..08d1eb78
--- /dev/null
+++ b/skills/posthog/all/skills/creating-product-tours/references/COMMANDMENTS.md
@@ -0,0 +1,5 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
diff --git a/skills/posthog/all/skills/error-tracking-android/SKILL.md b/skills/posthog/all/skills/error-tracking-android/SKILL.md
index 610fc101..8e323a37 100644
--- a/skills/posthog/all/skills/error-tracking-android/SKILL.md
+++ b/skills/posthog/all/skills/error-tracking-android/SKILL.md
@@ -3,7 +3,7 @@ name: error-tracking-android
description: PostHog error tracking for Android
metadata:
author: PostHog
- version: 1.9.4
+ version: dev
---
# PostHog error tracking for Android
@@ -18,6 +18,7 @@ This skill helps you add PostHog error tracking to Android applications.
- `references/monitoring.md` - Monitor and search issues - docs
- `references/assigning-issues.md` - Assign issues to teammates - docs
- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
Consult the documentation for API details and framework-specific patterns.
@@ -31,6 +32,7 @@ Consult the documentation for API details and framework-specific patterns.
## Framework guidelines
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
- Adapt dependency configuration to the appropriate build.gradle(.kts) file according to the project gradle version
- Call `PostHogAndroid.setup()` only once in the Application class's `onCreate()` method, so it's initialized as early as possible and only once.
- Initialize PostHog in the Application class's `onCreate()` method
diff --git a/skills/posthog/all/skills/error-tracking-android/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-android/references/COMMANDMENTS.md
new file mode 100644
index 00000000..c18de5d4
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-android/references/COMMANDMENTS.md
@@ -0,0 +1,9 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- Adapt dependency configuration to the appropriate build.gradle(.kts) file according to the project gradle version
+- Call `PostHogAndroid.setup()` only once in the Application class's `onCreate()` method, so it's initialized as early as possible and only once.
+- Initialize PostHog in the Application class's `onCreate()` method
+- Ensure every activity has a `android:label` to accurately track screen views.
diff --git a/skills/posthog/all/skills/error-tracking-android/references/alerts.md b/skills/posthog/all/skills/error-tracking-android/references/alerts.md
index 94653a53..a760ac4e 100644
--- a/skills/posthog/all/skills/error-tracking-android/references/alerts.md
+++ b/skills/posthog/all/skills/error-tracking-android/references/alerts.md
@@ -1,12 +1,18 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
# Send error tracking alerts - Docs
To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
## Issue created or reopened
-To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
-
+
Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
@@ -52,11 +58,11 @@ This sends an email notification to the user you choose. Check out our [alerts d
**Can't find your alert?**
-If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/project/2#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-android/references/android.md b/skills/posthog/all/skills/error-tracking-android/references/android.md
index 2bb50985..e566f708 100644
--- a/skills/posthog/all/skills/error-tracking-android/references/android.md
+++ b/skills/posthog/all/skills/error-tracking-android/references/android.md
@@ -1,4 +1,10 @@
-# Android error tracking installation - Docs
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Android Error Tracking installation - Docs
+
+Copy page
+
+# Android Error Tracking installation - Docs
1. 1
@@ -146,15 +152,15 @@
Required
- Great, you're capturing exceptions! If you serve minified bundles, the next step is to upload source maps to generate accurate stack traces.
+ Great, you're capturing exceptions! The next step is to upload ProGuard/R8 mapping files so PostHog can deobfuscate your stack traces.
Let's continue to the next section.
[Upload mapping files](/docs/error-tracking/upload-mappings/android.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-android/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-android/references/assigning-issues.md
index 77bb0f72..fe4ddaaa 100644
--- a/skills/posthog/all/skills/error-tracking-android/references/assigning-issues.md
+++ b/skills/posthog/all/skills/error-tracking-android/references/assigning-issues.md
@@ -1,26 +1,40 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
# Assign issues to teammates - Docs
Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
## Assign issues
-You can manually assign issues as you triage them in the UI. This can be done both in the issue list and issue detail pages.
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
-
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
-1. In your error tracking [issue list](https://app.posthog.com/error_tracking), click the **unassigned** selector under each issue to assign it to a role or user.
+
-2. On the detail page of each issue, click the **Assignee** selector to assign it to a role or user.
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
-
+
## Automatic issue assignment
-You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**.
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
-
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
@@ -58,19 +72,31 @@ A common use case for automatic issue assignment is to alert assignees of new is
## Create external issues
-You can also create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira.
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
-First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system. Then, from an issue's details page, under **External references**, click **Create issue**.
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.

-The new issue will have a partial stack trace and a link to the issue in PostHog.
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-android/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-android/references/fingerprints.md
index 324758ce..d58a6781 100644
--- a/skills/posthog/all/skills/error-tracking-android/references/fingerprints.md
+++ b/skills/posthog/all/skills/error-tracking-android/references/fingerprints.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
# Fingerprints - Docs
Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
@@ -48,9 +54,9 @@ Fingerprints can be manually set during exception capture. This is a very useful
You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-android/references/monitoring.md b/skills/posthog/all/skills/error-tracking-android/references/monitoring.md
index d7383fdd..6590cab2 100644
--- a/skills/posthog/all/skills/error-tracking-android/references/monitoring.md
+++ b/skills/posthog/all/skills/error-tracking-android/references/monitoring.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
# Monitor and search issues - Docs
This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
@@ -45,11 +51,11 @@ The search bar provides two modes of filtering:
This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
-
+
Added property filters look like this:
-
+
The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
@@ -103,7 +109,7 @@ This page shows you the following:
- Name, description, status, assignee, and external tracking links for the issue.
- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
-
+
### Filtering exception occurrences within an issue
@@ -111,7 +117,7 @@ Once you've found and opened the issue you want to investigate, you can use the
For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
-
+
**Alerts**
@@ -131,9 +137,9 @@ If you find your queries timing out or taking more than 30 seconds, please [let
If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-android/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-android/references/upload-source-maps.md
index 178a4ab8..b6ae318f 100644
--- a/skills/posthog/all/skills/error-tracking-android/references/upload-source-maps.md
+++ b/skills/posthog/all/skills/error-tracking-android/references/upload-source-maps.md
@@ -1,10 +1,26 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
# Upload source maps - Docs
If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
-Choose your platform to view specific instructions.
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
- [Web](/docs/error-tracking/upload-source-maps/web.md)
@@ -24,8 +40,14 @@ Choose your platform to view specific instructions.
- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
@@ -36,9 +58,9 @@ Choose your platform to view specific instructions.
- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-angular/SKILL.md b/skills/posthog/all/skills/error-tracking-angular/SKILL.md
index 7f4a359e..c5be0543 100644
--- a/skills/posthog/all/skills/error-tracking-angular/SKILL.md
+++ b/skills/posthog/all/skills/error-tracking-angular/SKILL.md
@@ -3,7 +3,7 @@ name: error-tracking-angular
description: PostHog error tracking for Angular
metadata:
author: PostHog
- version: 1.9.4
+ version: dev
---
# PostHog error tracking for Angular
@@ -18,6 +18,7 @@ This skill helps you add PostHog error tracking to Angular applications.
- `references/monitoring.md` - Monitor and search issues - docs
- `references/assigning-issues.md` - Assign issues to teammates - docs
- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
Consult the documentation for API details and framework-specific patterns.
@@ -31,7 +32,11 @@ Consult the documentation for API details and framework-specific patterns.
## Framework guidelines
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
- Use inject() instead of constructor injection. PostHog service should be injected via inject() in components/services that need it.
- Create a dedicated PosthogService as a singleton root service that wraps the PostHog SDK.
- Always use standalone components over NgModules.
- Configure PostHog credentials in src/environments/environment.ts files, as Angular reads environment variables from these configuration files
+- Remember that source code is available in the node_modules directory
+- Check package.json for type checking or build scripts to validate changes
+- When identity comes from framework-bridged state (Inertia or SSR shared props, a serialized session), confirm the backend actually shares that field — add the share server-side if missing — before identifying from it
diff --git a/skills/posthog/all/skills/error-tracking-angular/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-angular/references/COMMANDMENTS.md
new file mode 100644
index 00000000..3876eeda
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-angular/references/COMMANDMENTS.md
@@ -0,0 +1,12 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- Use inject() instead of constructor injection. PostHog service should be injected via inject() in components/services that need it.
+- Create a dedicated PosthogService as a singleton root service that wraps the PostHog SDK.
+- Always use standalone components over NgModules.
+- Configure PostHog credentials in src/environments/environment.ts files, as Angular reads environment variables from these configuration files
+- Remember that source code is available in the node_modules directory
+- Check package.json for type checking or build scripts to validate changes
+- When identity comes from framework-bridged state (Inertia or SSR shared props, a serialized session), confirm the backend actually shares that field — add the share server-side if missing — before identifying from it
diff --git a/skills/posthog/all/skills/error-tracking-angular/references/alerts.md b/skills/posthog/all/skills/error-tracking-angular/references/alerts.md
index 94653a53..a760ac4e 100644
--- a/skills/posthog/all/skills/error-tracking-angular/references/alerts.md
+++ b/skills/posthog/all/skills/error-tracking-angular/references/alerts.md
@@ -1,12 +1,18 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
# Send error tracking alerts - Docs
To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
## Issue created or reopened
-To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
-
+
Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
@@ -52,11 +58,11 @@ This sends an email notification to the user you choose. Check out our [alerts d
**Can't find your alert?**
-If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/project/2#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-angular/references/angular.md b/skills/posthog/all/skills/error-tracking-angular/references/angular.md
index a858ec0b..a4ae2aed 100644
--- a/skills/posthog/all/skills/error-tracking-angular/references/angular.md
+++ b/skills/posthog/all/skills/error-tracking-angular/references/angular.md
@@ -1,4 +1,10 @@
-# Angular error tracking installation - Docs
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Angular Error Tracking installation - Docs
+
+Copy page
+
+# Angular Error Tracking installation - Docs
1. 1
@@ -65,7 +71,7 @@
this.ngZone.runOutsideAngular(() => {
posthog.init(environment.posthogKey, {
api_host: environment.posthogHost,
- defaults: '2026-01-30',
+ defaults: '2026-05-30',
});
});
}
@@ -113,7 +119,7 @@
import posthog from 'posthog-js'
posthog.init(environment.posthogKey, {
api_host: environment.posthogHost,
- defaults: '2025-11-30'
+ defaults: '2026-05-30'
})
bootstrapApplication(AppComponent, appConfig)
.catch((err) => console.error(err));
@@ -276,9 +282,9 @@
[Upload source maps](/docs/error-tracking/upload-source-maps/angular.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-angular/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-angular/references/assigning-issues.md
index 77bb0f72..fe4ddaaa 100644
--- a/skills/posthog/all/skills/error-tracking-angular/references/assigning-issues.md
+++ b/skills/posthog/all/skills/error-tracking-angular/references/assigning-issues.md
@@ -1,26 +1,40 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
# Assign issues to teammates - Docs
Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
## Assign issues
-You can manually assign issues as you triage them in the UI. This can be done both in the issue list and issue detail pages.
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
-
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
-1. In your error tracking [issue list](https://app.posthog.com/error_tracking), click the **unassigned** selector under each issue to assign it to a role or user.
+
-2. On the detail page of each issue, click the **Assignee** selector to assign it to a role or user.
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
-
+
## Automatic issue assignment
-You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**.
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
-
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
@@ -58,19 +72,31 @@ A common use case for automatic issue assignment is to alert assignees of new is
## Create external issues
-You can also create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira.
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
-First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system. Then, from an issue's details page, under **External references**, click **Create issue**.
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.

-The new issue will have a partial stack trace and a link to the issue in PostHog.
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-angular/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-angular/references/fingerprints.md
index 324758ce..d58a6781 100644
--- a/skills/posthog/all/skills/error-tracking-angular/references/fingerprints.md
+++ b/skills/posthog/all/skills/error-tracking-angular/references/fingerprints.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
# Fingerprints - Docs
Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
@@ -48,9 +54,9 @@ Fingerprints can be manually set during exception capture. This is a very useful
You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-angular/references/monitoring.md b/skills/posthog/all/skills/error-tracking-angular/references/monitoring.md
index d7383fdd..6590cab2 100644
--- a/skills/posthog/all/skills/error-tracking-angular/references/monitoring.md
+++ b/skills/posthog/all/skills/error-tracking-angular/references/monitoring.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
# Monitor and search issues - Docs
This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
@@ -45,11 +51,11 @@ The search bar provides two modes of filtering:
This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
-
+
Added property filters look like this:
-
+
The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
@@ -103,7 +109,7 @@ This page shows you the following:
- Name, description, status, assignee, and external tracking links for the issue.
- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
-
+
### Filtering exception occurrences within an issue
@@ -111,7 +117,7 @@ Once you've found and opened the issue you want to investigate, you can use the
For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
-
+
**Alerts**
@@ -131,9 +137,9 @@ If you find your queries timing out or taking more than 30 seconds, please [let
If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-angular/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-angular/references/upload-source-maps.md
index 178a4ab8..b6ae318f 100644
--- a/skills/posthog/all/skills/error-tracking-angular/references/upload-source-maps.md
+++ b/skills/posthog/all/skills/error-tracking-angular/references/upload-source-maps.md
@@ -1,10 +1,26 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
# Upload source maps - Docs
If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
-Choose your platform to view specific instructions.
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
- [Web](/docs/error-tracking/upload-source-maps/web.md)
@@ -24,8 +40,14 @@ Choose your platform to view specific instructions.
- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
@@ -36,9 +58,9 @@ Choose your platform to view specific instructions.
- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-django/SKILL.md b/skills/posthog/all/skills/error-tracking-django/SKILL.md
new file mode 100644
index 00000000..ce9b4c51
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-django/SKILL.md
@@ -0,0 +1,51 @@
+---
+name: error-tracking-django
+description: PostHog error tracking for Django
+metadata:
+ author: PostHog
+ version: dev
+---
+
+# PostHog error tracking for Django
+
+This skill helps you add PostHog error tracking to Django applications.
+
+## Reference files
+
+- `references/python.md` - Python error tracking installation - docs
+- `references/django.md` - Django - docs
+- `references/fingerprints.md` - Fingerprints - docs
+- `references/alerts.md` - Send error tracking alerts - docs
+- `references/monitoring.md` - Monitor and search issues - docs
+- `references/assigning-issues.md` - Assign issues to teammates - docs
+- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
+
+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
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- Add 'posthog.integrations.django.PosthogContextMiddleware' to MIDDLEWARE, after AuthenticationMiddleware, it auto-extracts tracing headers and captures exceptions
+- Initialize PostHog in AppConfig.ready() with api_key and host from environment variables
+- The middleware identifies the request context from the X-POSTHOG-DISTINCT-ID header or the authenticated user's pk, so in a view where the user is already logged in a plain capture() is already attributed - do not wrap it in a context of its own
+- The middleware reads the user once, before the view runs, so a login request's context is identified as whoever the user was beforehand - nobody - and calling login() does not update it. A bare capture there is personless. Hook Django's user_logged_in signal and call identify_context(str(user.pk)) inside it: the signal runs inside the login request, so it fixes the ambient context and every later capture in that request is attributed. Logout views need no special handling, the user is still authenticated when the middleware runs - capture before calling logout()
+- Do NOT create custom middleware, distinct_id helpers, or conditional checks - the SDK handles these
+- Remember that source code is available in the venv/site-packages directory
+- posthog is the Python SDK package name
+- Install dependencies with `pip install posthog` or `pip install -r requirements.txt` and do NOT use unquoted version specifiers like `>=` directly in shell commands
+- In CLIs and scripts: MUST call posthog.shutdown() before exit or all events are lost
+- Always use the Posthog() class constructor (instance-based API) instead of module-level posthog.api_key config
+- Always include enable_exception_autocapture=True in the Posthog() constructor to automatically track exceptions
+- NEVER send PII in capture() event properties — no emails, full names, phone numbers, physical addresses, IP addresses, or user-generated content
+- PII belongs in identify() person properties, NOT in capture() event properties. Safe event properties are metadata like message_length, form_type, boolean flags.
+- Register posthog_client.shutdown with atexit.register() to ensure all events are flushed on exit
+- The Python SDK has NO identify() method — use posthog_client.set(distinct_id=user_id, properties={...}) to set person properties, or use identify_context(user_id) within a context
diff --git a/skills/posthog/all/skills/error-tracking-django/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-django/references/COMMANDMENTS.md
new file mode 100644
index 00000000..ca143695
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-django/references/COMMANDMENTS.md
@@ -0,0 +1,20 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- Add 'posthog.integrations.django.PosthogContextMiddleware' to MIDDLEWARE, after AuthenticationMiddleware, it auto-extracts tracing headers and captures exceptions
+- Initialize PostHog in AppConfig.ready() with api_key and host from environment variables
+- The middleware identifies the request context from the X-POSTHOG-DISTINCT-ID header or the authenticated user's pk, so in a view where the user is already logged in a plain capture() is already attributed - do not wrap it in a context of its own
+- The middleware reads the user once, before the view runs, so a login request's context is identified as whoever the user was beforehand - nobody - and calling login() does not update it. A bare capture there is personless. Hook Django's user_logged_in signal and call identify_context(str(user.pk)) inside it: the signal runs inside the login request, so it fixes the ambient context and every later capture in that request is attributed. Logout views need no special handling, the user is still authenticated when the middleware runs - capture before calling logout()
+- Do NOT create custom middleware, distinct_id helpers, or conditional checks - the SDK handles these
+- Remember that source code is available in the venv/site-packages directory
+- posthog is the Python SDK package name
+- Install dependencies with `pip install posthog` or `pip install -r requirements.txt` and do NOT use unquoted version specifiers like `>=` directly in shell commands
+- In CLIs and scripts: MUST call posthog.shutdown() before exit or all events are lost
+- Always use the Posthog() class constructor (instance-based API) instead of module-level posthog.api_key config
+- Always include enable_exception_autocapture=True in the Posthog() constructor to automatically track exceptions
+- NEVER send PII in capture() event properties — no emails, full names, phone numbers, physical addresses, IP addresses, or user-generated content
+- PII belongs in identify() person properties, NOT in capture() event properties. Safe event properties are metadata like message_length, form_type, boolean flags.
+- Register posthog_client.shutdown with atexit.register() to ensure all events are flushed on exit
+- The Python SDK has NO identify() method — use posthog_client.set(distinct_id=user_id, properties={...}) to set person properties, or use identify_context(user_id) within a context
diff --git a/skills/posthog/all/skills/error-tracking-django/references/alerts.md b/skills/posthog/all/skills/error-tracking-django/references/alerts.md
new file mode 100644
index 00000000..a760ac4e
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-django/references/alerts.md
@@ -0,0 +1,69 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
+# Send error tracking alerts - Docs
+
+To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
+
+## Issue created or reopened
+
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+
+
+
+Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
+
+This will then send alerts to your chosen destination when an issue is created or reopened like this:
+
+## Issue properties and assignments
+
+You can filter an alert based on the properties of an issue. This is useful for notifying a specific team when they have been auto assigned an issue using [auto assignment rules](/docs/error-tracking/managing-issues.md#auto-assignment-rules).
+
+
+
+## Spike alerts
+
+PostHog can also alert you when an existing issue suddenly spikes in volume - for example, after a bad deploy. This works differently from issue-created alerts. Instead of triggering when a new issue is first seen, spike alerts fire when an issue's error rate significantly exceeds its historical baseline.
+
+See the [spike detection guide](/docs/error-tracking/spikes.md) to learn how it works and how to configure it.
+
+## Other alerting options
+
+Since error tracking works by capturing `$exception` events, PostHog features that trigger by events can play a role in alerts too.
+
+### Real time destinations
+
+The first way is using [real time destinations](/docs/cdp/destinations.md). This enables you to send events (like `$exception`) to other tools as soon as they are ingested.
+
+To create a real time destination, go to the [data pipelines tab](https://app.posthog.com/data-management/destinations) in PostHog, click **\+ New**, and then select **Destination**. Choose your destination and press **\+ Create**.
+
+On the destination creation screen, make sure to add an event matcher for the `$exception` event, filter for the properties you want, and set the trigger options.
+
+
+
+Check out our [real time destinations docs](/docs/cdp/destinations.md) for more information.
+
+### Trend alerts
+
+You can also visualize your `$exception` events using [trends](/docs/product-analytics/trends/overview.md). Once you create a trend insight, click the **Alerts** button at the top of the insight and then **New alert**.
+
+Here you can set alerts for event volume value, increase, or decrease.
+
+
+
+This sends an email notification to the user you choose. Check out our [alerts docs](/docs/alerts.md) for more information.
+
+**Can't find your alert?**
+
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-django/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-django/references/assigning-issues.md
new file mode 100644
index 00000000..fe4ddaaa
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-django/references/assigning-issues.md
@@ -0,0 +1,103 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
+# Assign issues to teammates - Docs
+
+Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
+
+## Assign issues
+
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
+
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
+
+
+
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
+
+Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
+
+
+
+## Automatic issue assignment
+
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
+
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
+
+Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
+
+Issues can be automatically assigned to a **role** or **user** by configuring a set of filters. These filters can be configured to match **any** or **all** of the criteria.
+
+You can configure automatic assignment to filter on any [event property](/docs/data/events.md) in PostHog. When there are multiple values for a property, the filters return true if it matches **any** of the values. For example, if you have multiple `exception_functions` values, the filters returns true if it matches **any** of the functions.
+
+Here are some common properties you can filter on:
+
+| Property | Event property | Description |
+| --- | --- | --- |
+| Exception type | $exception_types | The type of exception(s) that occurred |
+| Exception message | $exception_values | The message(s) detected on the error |
+| Exception function | $exception_functions | The function(s) where the exception occurred |
+| Exception source | $exception_sources | The source file(s) where the exception occurred |
+| Exception was handled | $exception_handled | Whether the exception was handled by the application |
+| Device type | $device_type | The type of device that the error occurred on |
+| Browser | $browser | The browser that the error occurred in |
+| Current URL | $current_url | The URL that the error occurred on |
+| Feature flag | $feature_flag | The feature flag that the error occurred on |
+
+You can also set custom properties on the error tracking event to filter on. For example, setting a custom `params_received` property to provide more context or debug information.
+
+### Order of issue assignment rules
+
+Issue assignment filters are evaluated in the order they are configured. They can also be reordered once created. The first filter that matches is used to assign the issue. This means you should configure the most specific filters first, and then the more general filters later.
+
+### Disabled assignment rules
+
+Assignment rules can become disabled if an error occurs during ingestion. When a rule is disabled, a banner displays the original error message. To re-enable the rule, edit it to fix the problem and save your changes. If the issue persists, reach out to support.
+
+### Alerting based on assignment
+
+A common use case for automatic issue assignment is to alert assignees of new issues. Once the issues are automatically assigned, you can set up alerts to notify the assignee. See the [alerts](/docs/error-tracking/alerts.md) guide for more information.
+
+## Create external issues
+
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
+
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.
+
+
+
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
+
+> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-django/references/django.md b/skills/posthog/all/skills/error-tracking-django/references/django.md
new file mode 100644
index 00000000..e143a17f
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-django/references/django.md
@@ -0,0 +1,300 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Django - Docs
+
+Copy page
+
+# Django - Docs
+
+PostHog makes it easy to get data about traffic and usage of your Django app. Integrating PostHog enables analytics, custom events capture, feature flags, error tracking, and more.
+
+This guide walks you through integrating PostHog into your Django app using the [Python SDK](/docs/libraries/python.md).
+
+## Beta: integration via LLM
+
+Install PostHog for Django in seconds with our wizard by running this prompt with [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt, or by running it in your terminal.
+
+`npx @posthog/wizard`
+
+[Learn more](/wizard.md)
+
+Or, to integrate manually, continue with the rest of this guide.
+
+> These docs cover version `7.x` of the Python SDK, which requires Python 3.10 or higher. On Python 3.9? See [supported versions](#supported-versions).
+
+## Installation
+
+To start, run `pip install posthog` to install PostHog’s Python SDK.
+
+Then, configure PostHog in your app config so it's initialized when Django starts:
+
+your\_app/apps.py
+
+PostHog AI
+
+```python
+from django.apps import AppConfig
+import posthog
+class YourAppConfig(AppConfig):
+ name = 'your_app_name'
+ def ready(self):
+ posthog.api_key = ''
+ posthog.host = 'https://us.i.posthog.com'
+```
+
+Next, if you haven't done so already, add your `AppConfig` to `INSTALLED_APPS` in `settings.py`:
+
+settings.py
+
+PostHog AI
+
+```python
+INSTALLED_APPS = [
+ # ... other apps
+ 'your_app_name.apps.YourAppConfig',
+]
+```
+
+You can find your project token and instance address in [your project settings](https://app.posthog.com/project/settings).
+
+To capture events from any file, import `posthog` and call the method you need. For example:
+
+Python
+
+PostHog AI
+
+```python
+import posthog
+from posthog import identify_context
+def some_request(request):
+ with posthog.new_context():
+ # Django includes request.user for anonymous visitors too. Only identify
+ # the context when the visitor is logged in.
+ if request.user.is_authenticated:
+ identify_context(str(request.user.pk))
+ posthog.capture('event_name')
+```
+
+Events captured without a context or explicit `distinct_id` are sent as [anonymous events](/docs/data/anonymous-vs-identified-events.md) with an auto-generated `distinct_id`. See the [Python SDK docs](/docs/libraries/python.md#person-profiles-and-properties) for more details.
+
+## Identifying users
+
+> **Identifying users is required.** Backend events need a `distinct_id` to associate events with the correct user.
+>
+> In Python, you can do this through a context. All event captures in the same context will be tagged automatically with the correct `distinct_id`. Typically, you would set a fresh context and identify at the top of each route.
+>
+> Python
+>
+> PostHog AI
+>
+> ```python
+> from posthog import new_context, identify_context, capture
+> @app.get("/foo")
+> def foo(current_user: User = Depends(get_current_user)):
+> with new_context(): # Set context at the top of a route
+> identify_context(current_user.id)
+> capture("foo_viewed")
+> return {"status": "ok"}
+> ```
+>
+> When possible, write a small piece of **middleware** that resolves your authenticated user, wrap a context around the request, and identifies it. Every `capture()` downstream is then attributed *automatically*. The SDK's Django middleware does this automatically and you can replicate it when using the plain Python SDK.
+
+## Django contexts middleware
+
+The Python SDK provides a Django middleware that automatically wraps all requests with a [context](/docs/libraries/python.md#contexts). This middleware extracts session and user information from each request and tags all events captured during that request with relevant metadata.
+
+### Basic setup
+
+Add the middleware to your Django settings. If your app uses Django authentication, place it after `django.contrib.auth.middleware.AuthenticationMiddleware` so the middleware can use the authenticated Django user as a distinct ID fallback and capture the user's email.
+
+Python
+
+PostHog AI
+
+```python
+MIDDLEWARE = [
+ # ... other middleware
+ 'posthog.integrations.django.PosthogContextMiddleware',
+ # ... other middleware
+]
+```
+
+The middleware uses the globally configured `posthog` client by default, so you don't need to create or pass it a separate client instance.
+
+The middleware automatically extracts and uses:
+
+- **Session ID** from the `X-POSTHOG-SESSION-ID` header, if present
+- **Distinct ID** from the `X-POSTHOG-DISTINCT-ID` header, if present, falling back to the authenticated Django user's `pk` (Django's primary-key alias, which works with custom user models)
+- **User email** from the authenticated Django user's `email` as `email`
+- **Current URL** as `$current_url`
+- **Request method** as `$request_method`
+- **Request path** as `$request_path`
+- **Forwarded IP address** from `X-Forwarded-For` as `$ip`
+- **User agent** from `User-Agent` as `$user_agent`
+
+The session and distinct ID headers are sanitized before use. Empty values are ignored, control characters are removed, values are trimmed, and values are capped at 1000 characters.
+
+All events captured during the request (including exceptions) include these properties and are associated with the extracted session and distinct ID.
+
+### Login and signup views
+
+The middleware reads `request.user` once, before your view runs. On a login or signup request the visitor is still anonymous at that point, so the request's context has no distinct ID. Calling `login()` inside the view doesn't change that. Everything captured during that request stays anonymous, including the login event itself.
+
+Identify the context from inside the request once you know who the user is. Django's auth signals are the natural place:
+
+Python
+
+PostHog AI
+
+```python
+from django.contrib.auth.signals import user_logged_in
+from django.dispatch import receiver
+from posthog import identify_context
+@receiver(user_logged_in)
+def identify_posthog_user(sender, request, user, **kwargs):
+ identify_context(str(user.pk))
+```
+
+Every capture later in that request is then attributed to the user who just logged in. Requests made after login don't need this. The middleware sees the authenticated user from the start.
+
+If you're using [PostHog JavaScript Web](/docs/libraries/js.md) on the frontend, configure [`tracing_headers`](/docs/libraries/js/config.md#tracing-headers) for your Django backend hostname so browser requests include the session and distinct ID headers.
+
+### Exception capture
+
+By default, the middleware captures exceptions and sends them to PostHog's error tracking using the globally configured `posthog` client. This includes Django view exceptions that Django converts into error responses.
+
+Disable this by setting:
+
+Python
+
+PostHog AI
+
+```python
+# settings.py
+POSTHOG_MW_CAPTURE_EXCEPTIONS = False
+```
+
+### Adding custom tags
+
+Use `POSTHOG_MW_EXTRA_TAGS` to add custom properties to all requests:
+
+Python
+
+PostHog AI
+
+```python
+# settings.py
+def add_user_tags(request):
+ # type: (HttpRequest) -> Dict[str, Any]
+ tags = {}
+ if hasattr(request, 'user') and request.user.is_authenticated:
+ # Use pk instead of id so this works with custom User primary keys.
+ tags['user_id'] = str(request.user.pk)
+ tags['email'] = request.user.email
+ return tags
+POSTHOG_MW_EXTRA_TAGS = add_user_tags
+```
+
+#### Filtering requests
+
+Skip tracking for certain requests using `POSTHOG_MW_REQUEST_FILTER`:
+
+Python
+
+PostHog AI
+
+```python
+# settings.py
+def should_track_request(request):
+ # type: (HttpRequest) -> bool
+ # Don't track health checks or admin requests
+ if request.path.startswith('/health') or request.path.startswith('/admin'):
+ return False
+ return True
+POSTHOG_MW_REQUEST_FILTER = should_track_request
+```
+
+### Modifying default tags
+
+Use `POSTHOG_MW_TAG_MAP` to modify or remove default tags:
+
+Python
+
+PostHog AI
+
+```python
+# settings.py
+def customize_tags(tags):
+ # type: (Dict[str, Any]) -> Dict[str, Any]
+ # Remove URL for privacy
+ tags.pop('$current_url', None)
+ # Add custom prefix to method
+ if '$request_method' in tags:
+ tags['http_method'] = tags.pop('$request_method')
+ return tags
+POSTHOG_MW_TAG_MAP = customize_tags
+```
+
+### Complete configuration example
+
+Python
+
+PostHog AI
+
+```python
+# settings.py
+def add_request_context(request):
+ # type: (HttpRequest) -> Dict[str, Any]
+ tags = {}
+ if hasattr(request, 'user') and request.user.is_authenticated:
+ tags['user_type'] = 'authenticated'
+ # Use pk instead of id so this works with custom User primary keys.
+ tags['user_id'] = str(request.user.pk)
+ else:
+ tags['user_type'] = 'anonymous'
+ # Add request info
+ tags['user_agent'] = request.META.get('HTTP_USER_AGENT', '')
+ return tags
+def filter_tracking(request):
+ # type: (HttpRequest) -> bool
+ # Skip internal endpoints
+ return not request.path.startswith(('/health', '/metrics', '/admin'))
+def clean_tags(tags):
+ # type: (Dict[str, Any]) -> Dict[str, Any]
+ # Remove sensitive data
+ tags.pop('user_agent', None)
+ return tags
+POSTHOG_MW_EXTRA_TAGS = add_request_context
+POSTHOG_MW_REQUEST_FILTER = filter_tracking
+POSTHOG_MW_TAG_MAP = clean_tags
+POSTHOG_MW_CAPTURE_EXCEPTIONS = True
+```
+
+All events captured within the request context automatically include the configured tags and are associated with the session and user identified from the request headers or Django authentication.
+
+The middleware supports both sync (WSGI) and async (ASGI) Django applications. In async mode, it uses Django's `request.auser()` API when available to avoid synchronous user access.
+
+## Next steps
+
+For any technical questions for how to integrate specific PostHog features into Django (such as analytics, feature flags, A/B testing, etc.), have a look at our [Python SDK docs](/docs/libraries/python.md).
+
+Alternatively, the following tutorials can help you get started:
+
+- [Setting up Django analytics, feature flags, and more](/tutorials/django-analytics.md)
+- [How to set up A/B tests in Django](/tutorials/django-ab-tests.md)
+
+## Supported versions
+
+These docs cover version `7.x` of the PostHog Python SDK, which requires Python 3.10 or higher. Python 3.9 is no longer supported on `7.x.x` and higher — pin to the 6.x line with `pip install 'posthog<7'`, where `6.9.3` is the final release.
+
+Everything on this page works the same way on `6.9.3`. Event capture, the context API (`new_context`, `identify_context`, `set_context_session`), and `PosthogContextMiddleware` are identical on `6.9.3` and `7.0.0` — `7.0.0` only dropped Python 3.9 and bumped the optional LLM provider SDKs. That includes the middleware identifying the request context from the `X-POSTHOG-DISTINCT-ID` header and falling back to the authenticated user, which behaves the same across both lines.
+
+Later `7.x` releases add what the 6.x line does not receive, such as the Celery integration, tracing header sanitization, and `set_context_device_id`. They also changed the middleware's own captured properties: `7.x` sends the request IP as `$ip`, where `6.9.3` sends it as `$ip_address`, and `7.x` additionally captures `$request_path`, `$raw_user_agent`, and the authenticated user's `email`.
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-django/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-django/references/fingerprints.md
new file mode 100644
index 00000000..d58a6781
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-django/references/fingerprints.md
@@ -0,0 +1,63 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
+# Fingerprints - Docs
+
+Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
+
+## Fingerprint and issue grouping
+
+Every exception has a fingerprint, whether generated or defined by the user. Each fingerprint links to exactly one issue. Exceptions that share the same fingerprint define an issue.
+
+Multiple different fingerprints can point to the same issue (a many-to-one relationship) if you [merge issues](/docs/error-tracking/managing-issues.md#merging-issues).
+
+## How are fingerprints generated?
+
+Fingerprints are built iteratively using components of the exception event. The flowchart below shows how fingerprints are generated.
+
+flowchart LR A\[Add exception type to fingerprint\] --> B{Stack trace available?} B -->|No| C\[Add error message to fingerprint\] C --> D\[Final fingerprint\] B -->|Yes| E{In-app frames exist?} E -->|No| F\[Add first frame to fingerprint\] E -->|Yes| G\[Add in-app frame to fingerprint Priority: resolved > unresolved\] F --> D G --> D
+
+The flowchart in text
+
+Fingerprints are generated by considering the following in combination:
+
+1. The exception type
+2. If there's no resolved stack trace, add the error message to the fingerprint
+3. If there are stack traces but no in-app frames (frames from your code, not a dependency), use the first frame of the stack trace
+4. If there are stack traces, in-app frames, and source maps available, use the resolved in-app stack frames
+5. If there are stack traces, in-app frames, and source maps *not* available, use the first in-app stack frame
+
+In some languages, like Python, one error can trigger another, creating a chain of linked exceptions. PostHog records the entire chain in the event and generates a single fingerprint for it.
+
+### Ensuring accurate fingerprints
+
+[Resolved stack traces](/docs/error-tracking/stack-traces.md) are critical for accurate fingerprinting. Without accurate stack traces, PostHog cannot group exceptions consistently. If you have not uploaded source maps, follow the [source map guide](/docs/error-tracking/upload-source-maps.md) to do so.
+
+This also means that if the exception **type** or **message** changes from one version to the next, the fingerprint will change.
+
+## When are generated fingerprints used?
+
+Fingerprints are used to group similar exceptions into issues automatically. Automatic issue grouping is only done when:
+
+- No [issue grouping rules](/docs/error-tracking/grouping-issues.md) are applied
+- No [issue merging](/docs/error-tracking/managing-issues.md#merging-issues) has been configured
+- No [custom fingerprint](#customizing-fingerprints) is set during capture
+
+You can find details about how issue grouping works in the [issues and exceptions](/docs/error-tracking/issues-and-exceptions.md) guide.
+
+## Customizing fingerprints
+
+Fingerprints can be manually set during exception capture. This is a very useful way to group exceptions that are not related to each other. You can find examples of how to do this in the [custom issue grouping](/docs/error-tracking/grouping-issues.md#option-2-client-side-fingerprint) section.
+
+You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-django/references/monitoring.md b/skills/posthog/all/skills/error-tracking-django/references/monitoring.md
new file mode 100644
index 00000000..6590cab2
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-django/references/monitoring.md
@@ -0,0 +1,146 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
+# Monitor and search issues - Docs
+
+This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
+
+## Monitoring issues
+
+When you're monitoring issues in your project, there are generally two common workflows:
+
+- You're exploring issues to identify impactful and problematic areas. You should use sorting features.
+- You're looking for issues assigned to you to resolve them. You should filter by the `Assigned to` property.
+
+### Sorting issues
+
+Issues can be sorted by the following properties:
+
+| Property | Description |
+| --- | --- |
+| Last seen | The issue that has the most recent exception |
+| First seen | The issue that has the oldest exception |
+| Occurrences | The number of exceptions in the issue |
+| Users | The number of unique users affected by the issue |
+| Sessions | The number of unique sessions affected by the issue |
+
+Sorting by **last seen** and **occurrences** are great ways to get a general sense of issues in your project. Sorting by **users** and **sessions** is great to find the most impactful issues if you're using other [filters](#finding-specific-issues) to narrow down your results.
+
+### Monitoring issues assigned to you
+
+You can filter issues by the **Assigned to** property to find issues assigned to you. This is especially useful if you configure [automatic issue assignment](/docs/error-tracking/assigning-issues.md) and configure [alerts](/docs/error-tracking/alerts.md) to notify you when new issues are created.
+
+## Finding specific issues
+
+You can use the search bar at the top of the [issue page](https://app.posthog.com/error_tracking) to filter issues based on the properties of the exceptions in that issue.
+
+Search results are matched based on [properties of exception events](/docs/error-tracking/issues-and-exceptions.md) grouped into the issues. For example, if you search for "TypeError", we show you all issues where *any* exception grouped into the issue has a type of "TypeError".
+
+**Unrelated results**
+
+You may see seemingly unrelated issues in your search results because your search term matches an exception in the issue group. For example, you may see an issues named `RefreshError` when searching "schema", because a `get_schema` method appears on the exception stack traces.
+
+### Filtering modes
+
+The search bar provides two modes of filtering:
+
+#### 1\. Exact property filtering
+
+This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
+
+
+
+Added property filters look like this:
+
+
+
+The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
+
+#### 2\. Freeform text search
+
+This does text matching for a subset of the error tracking specific properties of the exception event. It splits the text you give it into tokens. The search matches an exception if *each* of the tokens in your search term appear in one of the following:
+
+- The exception type
+- The exception message
+- The function names in the exception stack trace (if known)
+- The file paths in the exception stack trace (if known)
+
+For example, imagine you have an exception that looks like this:
+
+PostHog AI
+
+```
+TypeError: Cannot read property 'name' of undefined
+ at Object. (/path/to/myfile.js:123:45)
+ at Module._compile (module.js:653:30)
+ at Object.Module._extensions..js (module.js:664:10)
+ at Module.load (module.js:566:32)
+ at tryModuleLoad (module.js:506:12)
+ at Function.Module._load (module.js:498:3)
+ at Function.Module.runMain (module.js:694:10)
+ at startup (bootstrap_node.js:204:16)
+ at bootstrap_node.js:625:3
+```
+
+If you search for the term `TypeError myfile.js`, the exception matches this search, as it contains `TypeError` (as the exception type) and `myfile.js` (as a file path in the stack trace).
+
+If you search for `TypeError myfile.js abc`, the exception would not match, as the token `abc` does not appear anywhere in freeform search properties.
+
+If you want to search for longer exact strings, e.g. a particular exception message, you can group tokens into a single term using quotes, e.g. `"Cannot read property 'name' of undefined" myfile.js` would match, and `"Cannot read property of myfile.js"` would not.
+
+Note, perhaps unintuitively, `Cannot read property of myfile.js` would match, because the tokens are ungrouped, and all of them appear *somewhere* in the exception search properties.
+
+### Searching chained exceptions
+
+Exception events can have more than one exception in them, due to language features like exception chaining. For freeform search, we put the types, messages, functions and file paths of all exceptions into one list, and match if the token appears in any of them.
+
+For example, if you had a chained exception with the messages `MyCustomError: Failed to load user` and `Cannot read property 'age' of undefined`, searching for `cannot read property` would match the exception, because it matches *one* of the exception messages (`property` appears in the "root" one).
+
+## Issue details
+
+When you click on an issue, you'll see the details page of the issue.
+
+This page shows you the following:
+
+- The stack trace, properties, and sessions related to the **currently selected exception**.
+- Name, description, status, assignee, and external tracking links for the issue.
+- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
+
+
+
+### Filtering exception occurrences within an issue
+
+Once you've found and opened the issue you want to investigate, you can use the same search interface to filter the exception list for a particular instance of the issue. This is particularly useful in cases where some exceptions in the issue have information others don't and you want to use that information for debugging.
+
+For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
+
+
+
+**Alerts**
+
+If you have a set of filters that you use often, you can create alerts for them. This way you can be notified when new issues match your filters. Learn more about [alerts](/docs/error-tracking/alerts.md).
+
+## Improving search performance
+
+We try to return results to you within a second, but sometimes if you're querying over large amounts of data, it may take longer. The following can improve the search performance:
+
+- **Limit the time range you're searching over:** 7 days is usually enough to get a sense for the trends of an issue over time.
+
+- **Use freeform search rather than property filters:** Our freeform searches are generally faster than property filters, as the total amount of data processed is smaller.
+
+If you find your queries timing out or taking more than 30 seconds, please [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue)! We're always looking for benchmarks to improve against.
+
+## Suppressing issues
+
+If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-django/references/python.md b/skills/posthog/all/skills/error-tracking-django/references/python.md
new file mode 100644
index 00000000..f442432b
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-django/references/python.md
@@ -0,0 +1,191 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Python Error Tracking installation - Docs
+
+Copy page
+
+# Python Error Tracking installation - Docs
+
+1. 1
+
+ ## Install the package
+
+ Required
+
+ Install the PostHog Python library using pip:
+
+ Terminal
+
+ PostHog AI
+
+ ```bash
+ pip install posthog
+ ```
+
+2. 2
+
+ ## Initialize PostHog
+
+ Required
+
+ Initialize the PostHog client with your project token and host from your project settings:
+
+ Python
+
+ PostHog AI
+
+ ```python
+ from posthog import Posthog
+ posthog = Posthog(
+ project_api_key='',
+ host='https://us.i.posthog.com'
+ )
+ ```
+
+ **Django integration**
+
+ If you're using Django, check out our [Django integration](/docs/libraries/django.md) for automatic request tracking.
+
+3. 3
+
+ ## Send events
+
+ Recommended
+
+ Once installed, PostHog will automatically start capturing events. You can also manually send events to test your integration:
+
+ Capture custom events by calling the `capture` method with an event name and properties:
+
+ Python
+
+ PostHog AI
+
+ ```python
+ import posthog
+ posthog.capture('user_signed_up', distinct_id='user_123', properties={'example_property': 'example_value'})
+ ```
+
+4. ## Verify PostHog is initialized
+
+ Recommended
+
+ Before proceeding, enable debug and call `posthog.capture('test_event')` to make sure you can capture events.
+
+5. 4
+
+ ## Setting up exception autocapture
+
+ Recommended
+
+ Exception autocapture can be enabled during initialization of the PostHog client to automatically capture any unhandled exceptions thrown by your Python application. It works by setting Python's built-in exception hooks, such as `sys.excepthook` and `threading.excepthook`.
+
+ Python
+
+ PostHog AI
+
+ ```python
+ from posthog import Posthog
+ posthog = Posthog("", enable_exception_autocapture=True, ...)
+ ```
+
+ We recommend setting up and using [contexts](/docs/libraries/python.md#contexts) so that exceptions automatically include distinct IDs, session IDs, and other properties you can set up with tags.
+
+ You can also enable [code variables capture](/docs/error-tracking/code-variables/python.md) to automatically capture the state of local variables when exceptions occur, giving you a debugger-like view of your application.
+
+6. 5
+
+ ## Manually capturing exceptions
+
+ Optional
+
+ For exceptions handled by your application that you would still like sent to PostHog, you can manually call the capture method:
+
+ Python
+
+ PostHog AI
+
+ ```python
+ posthog.capture_exception(e, distinct_id="user_distinct_id", properties=additional_properties)
+ ```
+
+ You can find a full example of all of this in our [Python (and Flask) error tracking tutorial](/tutorials/python-error-tracking.md).
+
+7. 6
+
+ ## Framework-specific exception capture
+
+ Optional
+
+ Python frameworks often have built-in error handlers. This means PostHog's default exception autocapture won't work and we need to manually capture errors instead. The exact process depends on the framework:
+
+ ## Django
+
+ The Python SDK provides a Django middleware that automatically wraps all requests with a [context](/docs/libraries/python.md#contexts). Add the middleware to your Django settings:
+
+ Python
+
+ PostHog AI
+
+ ```python
+ MIDDLEWARE = [
+ # ... other middleware
+ 'posthog.integrations.django.PosthogContextMiddleware',
+ # ... other middleware
+ ]
+ ```
+
+ By default, the middleware captures exceptions and sends them to PostHog. Disable with `POSTHOG_MW_CAPTURE_EXCEPTIONS = False`. Use `POSTHOG_MW_EXTRA_TAGS`, `POSTHOG_MW_REQUEST_FILTER`, and `POSTHOG_MW_TAG_MAP` to customize. See the [Django integration docs](/docs/libraries/django.md) for full configuration.
+
+ ## Flask
+
+ Python
+
+ PostHog AI
+
+ ```python
+ from flask import Flask, jsonify
+ from posthog import Posthog
+ posthog = Posthog('', host='https://us.i.posthog.com')
+ @app.errorhandler(Exception)
+ def handle_exception(e):
+ event_id = posthog.capture_exception(e)
+ response = jsonify({'message': str(e), 'error_id': event_id})
+ response.status_code = 500
+ return response
+ ```
+
+ ## FastAPI
+
+ Python
+
+ PostHog AI
+
+ ```python
+ from fastapi.responses import JSONResponse
+ from posthog import Posthog
+ posthog = Posthog('', host='https://us.i.posthog.com')
+ @app.exception_handler(Exception)
+ async def http_exception_handler(request, exc):
+ posthog.capture_exception(exc)
+ return JSONResponse(status_code=500, content={'message': str(exc)})
+ ```
+
+8. ## Verify error tracking
+
+ Recommended
+
+ *Confirm events are being sent to PostHog*
+
+ Before proceeding, let's make sure exception events are being captured and sent to PostHog. You should see events appear in the activity feed.
+
+ 
+
+ [Check for exceptions in PostHog](https://app.posthog.com/activity/explore)
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-django/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-django/references/upload-source-maps.md
new file mode 100644
index 00000000..b6ae318f
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-django/references/upload-source-maps.md
@@ -0,0 +1,67 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
+# Upload source maps - Docs
+
+If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
+
+If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
+
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
+
+- [Web](/docs/error-tracking/upload-source-maps/web.md)
+
+- [Next.js](/docs/error-tracking/upload-source-maps/nextjs.md)
+
+- [Node.js](/docs/error-tracking/upload-source-maps/node.md)
+
+- [React](/docs/error-tracking/upload-source-maps/react.md)
+
+- [Angular](/docs/error-tracking/upload-source-maps/angular.md)
+
+- [Nuxt](/docs/error-tracking/upload-source-maps/nuxt.md)
+
+- [React Native](/docs/error-tracking/upload-source-maps/react-native.md)
+
+- [Android](/docs/error-tracking/upload-mappings/android.md)
+
+- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
+- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
+- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
+
+- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
+
+- [Vite](/docs/error-tracking/upload-source-maps/vite.md)
+
+- [CLI](/docs/error-tracking/upload-source-maps/cli.md)
+
+- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-dotnet/SKILL.md b/skills/posthog/all/skills/error-tracking-dotnet/SKILL.md
new file mode 100644
index 00000000..debadb8b
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-dotnet/SKILL.md
@@ -0,0 +1,46 @@
+---
+name: error-tracking-dotnet
+description: PostHog error tracking for .NET / ASP.NET Core
+metadata:
+ author: PostHog
+ version: dev
+---
+
+# PostHog error tracking for .NET / ASP.NET Core
+
+This skill helps you add PostHog error tracking to .NET / ASP.NET Core applications.
+
+## Reference files
+
+- `references/dotnet.md` - .net error tracking installation - docs
+- `references/dotnet.md` - .net - docs
+- `references/fingerprints.md` - Fingerprints - docs
+- `references/alerts.md` - Send error tracking alerts - docs
+- `references/monitoring.md` - Monitor and search issues - docs
+- `references/assigning-issues.md` - Assign issues to teammates - docs
+- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
+
+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
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- posthog-dotnet package names are `PostHog` for general .NET apps and `PostHog.AspNetCore` for ASP.NET Core apps
+- Use environment variables, user secrets, or configuration providers for `ProjectToken`, `HostUrl`, and `PersonalApiKey`; never hardcode PostHog secrets
+- For CLIs, scripts, workers, and other short-lived processes, create one `PostHogClient` for the process lifetime and call `FlushAsync()` before exit
+- Call `IdentifyAsync` for known users and put PII such as email in person properties, not in event properties
+- Use `CaptureException(exception, distinctId, properties, groups, flags)` for handled exceptions; automatic exception capture is not available in the .NET SDK yet
+- In ASP.NET Core apps, prefer `builder.AddPostHog()` from `PostHog.AspNetCore` and inject `IPostHogClient` from dependency injection instead of manually constructing clients in controllers
+- Configure ASP.NET Core apps with the `PostHog` configuration section or environment variable fallbacks such as `POSTHOG_PROJECT_TOKEN` and `POSTHOG_HOST`
+- Add product analytics captures at route, controller, or handler boundaries where meaningful user actions occur; do not track every low-level method call
+- Capture request exceptions in middleware with `CaptureException` and then rethrow so existing ASP.NET Core error handling still runs
+- For Microsoft.FeatureManagement, call `UseFeatureManagement()` and implement `IPostHogFeatureFlagContextProvider` to provide the current distinct ID, person properties, and groups
diff --git a/skills/posthog/all/skills/error-tracking-dotnet/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-dotnet/references/COMMANDMENTS.md
new file mode 100644
index 00000000..b6f1d737
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-dotnet/references/COMMANDMENTS.md
@@ -0,0 +1,15 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- posthog-dotnet package names are `PostHog` for general .NET apps and `PostHog.AspNetCore` for ASP.NET Core apps
+- Use environment variables, user secrets, or configuration providers for `ProjectToken`, `HostUrl`, and `PersonalApiKey`; never hardcode PostHog secrets
+- For CLIs, scripts, workers, and other short-lived processes, create one `PostHogClient` for the process lifetime and call `FlushAsync()` before exit
+- Call `IdentifyAsync` for known users and put PII such as email in person properties, not in event properties
+- Use `CaptureException(exception, distinctId, properties, groups, flags)` for handled exceptions; automatic exception capture is not available in the .NET SDK yet
+- In ASP.NET Core apps, prefer `builder.AddPostHog()` from `PostHog.AspNetCore` and inject `IPostHogClient` from dependency injection instead of manually constructing clients in controllers
+- Configure ASP.NET Core apps with the `PostHog` configuration section or environment variable fallbacks such as `POSTHOG_PROJECT_TOKEN` and `POSTHOG_HOST`
+- Add product analytics captures at route, controller, or handler boundaries where meaningful user actions occur; do not track every low-level method call
+- Capture request exceptions in middleware with `CaptureException` and then rethrow so existing ASP.NET Core error handling still runs
+- For Microsoft.FeatureManagement, call `UseFeatureManagement()` and implement `IPostHogFeatureFlagContextProvider` to provide the current distinct ID, person properties, and groups
diff --git a/skills/posthog/all/skills/error-tracking-dotnet/references/alerts.md b/skills/posthog/all/skills/error-tracking-dotnet/references/alerts.md
new file mode 100644
index 00000000..a760ac4e
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-dotnet/references/alerts.md
@@ -0,0 +1,69 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
+# Send error tracking alerts - Docs
+
+To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
+
+## Issue created or reopened
+
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+
+
+
+Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
+
+This will then send alerts to your chosen destination when an issue is created or reopened like this:
+
+## Issue properties and assignments
+
+You can filter an alert based on the properties of an issue. This is useful for notifying a specific team when they have been auto assigned an issue using [auto assignment rules](/docs/error-tracking/managing-issues.md#auto-assignment-rules).
+
+
+
+## Spike alerts
+
+PostHog can also alert you when an existing issue suddenly spikes in volume - for example, after a bad deploy. This works differently from issue-created alerts. Instead of triggering when a new issue is first seen, spike alerts fire when an issue's error rate significantly exceeds its historical baseline.
+
+See the [spike detection guide](/docs/error-tracking/spikes.md) to learn how it works and how to configure it.
+
+## Other alerting options
+
+Since error tracking works by capturing `$exception` events, PostHog features that trigger by events can play a role in alerts too.
+
+### Real time destinations
+
+The first way is using [real time destinations](/docs/cdp/destinations.md). This enables you to send events (like `$exception`) to other tools as soon as they are ingested.
+
+To create a real time destination, go to the [data pipelines tab](https://app.posthog.com/data-management/destinations) in PostHog, click **\+ New**, and then select **Destination**. Choose your destination and press **\+ Create**.
+
+On the destination creation screen, make sure to add an event matcher for the `$exception` event, filter for the properties you want, and set the trigger options.
+
+
+
+Check out our [real time destinations docs](/docs/cdp/destinations.md) for more information.
+
+### Trend alerts
+
+You can also visualize your `$exception` events using [trends](/docs/product-analytics/trends/overview.md). Once you create a trend insight, click the **Alerts** button at the top of the insight and then **New alert**.
+
+Here you can set alerts for event volume value, increase, or decrease.
+
+
+
+This sends an email notification to the user you choose. Check out our [alerts docs](/docs/alerts.md) for more information.
+
+**Can't find your alert?**
+
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-dotnet/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-dotnet/references/assigning-issues.md
new file mode 100644
index 00000000..fe4ddaaa
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-dotnet/references/assigning-issues.md
@@ -0,0 +1,103 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
+# Assign issues to teammates - Docs
+
+Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
+
+## Assign issues
+
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
+
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
+
+
+
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
+
+Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
+
+
+
+## Automatic issue assignment
+
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
+
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
+
+Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
+
+Issues can be automatically assigned to a **role** or **user** by configuring a set of filters. These filters can be configured to match **any** or **all** of the criteria.
+
+You can configure automatic assignment to filter on any [event property](/docs/data/events.md) in PostHog. When there are multiple values for a property, the filters return true if it matches **any** of the values. For example, if you have multiple `exception_functions` values, the filters returns true if it matches **any** of the functions.
+
+Here are some common properties you can filter on:
+
+| Property | Event property | Description |
+| --- | --- | --- |
+| Exception type | $exception_types | The type of exception(s) that occurred |
+| Exception message | $exception_values | The message(s) detected on the error |
+| Exception function | $exception_functions | The function(s) where the exception occurred |
+| Exception source | $exception_sources | The source file(s) where the exception occurred |
+| Exception was handled | $exception_handled | Whether the exception was handled by the application |
+| Device type | $device_type | The type of device that the error occurred on |
+| Browser | $browser | The browser that the error occurred in |
+| Current URL | $current_url | The URL that the error occurred on |
+| Feature flag | $feature_flag | The feature flag that the error occurred on |
+
+You can also set custom properties on the error tracking event to filter on. For example, setting a custom `params_received` property to provide more context or debug information.
+
+### Order of issue assignment rules
+
+Issue assignment filters are evaluated in the order they are configured. They can also be reordered once created. The first filter that matches is used to assign the issue. This means you should configure the most specific filters first, and then the more general filters later.
+
+### Disabled assignment rules
+
+Assignment rules can become disabled if an error occurs during ingestion. When a rule is disabled, a banner displays the original error message. To re-enable the rule, edit it to fix the problem and save your changes. If the issue persists, reach out to support.
+
+### Alerting based on assignment
+
+A common use case for automatic issue assignment is to alert assignees of new issues. Once the issues are automatically assigned, you can set up alerts to notify the assignee. See the [alerts](/docs/error-tracking/alerts.md) guide for more information.
+
+## Create external issues
+
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
+
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.
+
+
+
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
+
+> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-dotnet/references/dotnet.md b/skills/posthog/all/skills/error-tracking-dotnet/references/dotnet.md
new file mode 100644
index 00000000..23566f00
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-dotnet/references/dotnet.md
@@ -0,0 +1,773 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# .NET - Docs
+
+Copy page
+
+# .NET - Docs
+
+This is an optional library you can install if you're working with .NET Core. It uses an internal queue to make calls fast and non-blocking. It also batches requests and flushes asynchronously, making it perfect to use in any part of your web app or other server side application that needs performance.
+
+## Installation
+
+The `PostHog` package supports any .NET platform that targets .NET Standard 2.1 or .NET 8+, including MAUI, Blazor, and console applications. The `PostHog.AspNetCore` package provides additional conveniences for ASP.NET Core applications such as streamlined registration, request-scoped caching, and integration with [.NET Feature Management](https://learn.microsoft.com/en-us/azure/azure-app-configuration/feature-management-dotnet-reference).
+
+> **Note:** We actively test with ASP.NET Core. Other platforms should work but haven't been specifically tested. If you encounter issues, please [report them on GitHub](https://github.com/PostHog/posthog-dotnet/issues).
+
+> **Not supported:** Classic UWP (requires .NET Standard 2.0 only). Microsoft has [deprecated UWP](https://learn.microsoft.com/en-us/windows/apps/windows-app-sdk/migrate-to-windows-app-sdk/migrate-to-windows-app-sdk-ovw) in favor of the Windows App SDK. For Unity projects, see our dedicated [Unity SDK](/docs/libraries/unity.md).
+
+Terminal
+
+PostHog AI
+
+```bash
+dotnet add package PostHog.AspNetCore
+```
+
+In your `Program.cs` (or `Startup.cs` for ASP.NET Core 2.x) file, add the following code:
+
+C#
+
+PostHog AI
+
+```csharp
+using PostHog;
+var builder = WebApplication.CreateBuilder(args);
+// Add PostHog to the dependency injection container as a singleton.
+builder.AddPostHog();
+```
+
+Make sure to configure PostHog with your project token, instance address, and optional personal API key. For example, in `appsettings.json`:
+
+JSON
+
+PostHog AI
+
+```json
+{
+ "PostHog": {
+ "ProjectToken": "",
+ "HostUrl": "https://us.i.posthog.com"
+ }
+}
+```
+
+> **Note:** If the host is not specified, the default host `https://us.i.posthog.com` is used.
+
+Use a secrets manager to store your personal API key. For example, when developing locally you can use the `UserSecrets` feature of the `dotnet` CLI:
+
+Terminal
+
+PostHog AI
+
+```bash
+dotnet user-secrets init
+dotnet user-secrets set "PostHog:PersonalApiKey" "phx_..."
+```
+
+You can find your project token and instance address in the [project settings](https://app.posthog.com/project/settings) page in PostHog.
+
+## Working with .NET Feature Management
+
+`PostHog.AspNetCore` supports [.NET Feature Management](https://learn.microsoft.com/en-us/azure/azure-app-configuration/feature-management-dotnet-reference). This enables you to use the tag helper and the `FeatureGateAttribute` in your ASP.NET Core applications to gate access to certain features using PostHog feature flags.
+
+To use feature flags with the .NET Feature Management library, you'll need to implement the `IPostHogFeatureFlagContextProvider` interface. The quickest way to do that is to inherit from the `PostHogFeatureFlagContextProvider` class and override the `GetDistinctId` and `GetFeatureFlagOptionsAsync` methods.
+
+C#
+
+PostHog AI
+
+```csharp
+public class MyFeatureFlagContextProvider(IHttpContextAccessor httpContextAccessor)
+ : PostHogFeatureFlagContextProvider
+{
+ protected override string? GetDistinctId()
+ => httpContextAccessor.HttpContext?.User.Identity?.Name;
+ protected override ValueTask GetFeatureFlagOptionsAsync()
+ {
+ // In a real app, you might get this information from a
+ // database or other source for the current user.
+ return ValueTask.FromResult(
+ new FeatureFlagOptions
+ {
+ PersonProperties = new Dictionary
+ {
+ ["email"] = "some-test@example.com"
+ },
+ OnlyEvaluateLocally = true
+ });
+ }
+}
+```
+
+Then, register your implementation in `Program.cs` (or `Startup.cs`):
+
+C#
+
+PostHog AI
+
+```csharp
+var builder = WebApplication.CreateBuilder(args);
+builder.AddPostHog(options => {
+ options.UseFeatureManagement();
+});
+```
+
+With this in place, you can now use `feature` tag helpers in your Razor views:
+
+HTML
+
+PostHog AI
+
+```html
+
+
This is the new feature!
+
+
+
Sorry, no awesome new feature for you.
+
+```
+
+Multivariate feature flags are also supported:
+
+HTML
+
+PostHog AI
+
+```html
+
+
This is the new feature variant A!
+
+
+
This is the new feature variant B!
+
+```
+
+You can also use the `FeatureGateAttribute` to gate access to controllers or actions:
+
+C#
+
+PostHog AI
+
+```csharp
+[FeatureGate("awesome-new-feature")]
+public class NewFeatureController : Controller
+{
+ public IActionResult Index()
+ {
+ return View();
+ }
+}
+```
+
+## Using the core package without ASP.NET Core
+
+If you're not using ASP.NET Core (for example, in a console application, MAUI app, or Blazor WebAssembly), install the `PostHog` package instead of `PostHog.AspNetCore`. This package has no ASP.NET Core dependencies and can be used in any .NET project targeting .NET Standard 2.1 or .NET 8+.
+
+Terminal
+
+PostHog AI
+
+```bash
+dotnet add package PostHog
+```
+
+The `PostHogClient` class must be implemented as a singleton in your project. For `PostHog.AspNetCore`, this is handled by the `builder.AddPostHog();` method. For the `PostHog` package, you can do the following if you're using dependency injection:
+
+C#
+
+PostHog AI
+
+```csharp
+builder.Services.AddPostHog();
+```
+
+If you're not using a `builder` (such as in a console application), you can do the following:
+
+C#
+
+PostHog AI
+
+```csharp
+using PostHog;
+var services = new ServiceCollection();
+services.AddPostHog();
+var serviceProvider = services.BuildServiceProvider();
+var posthog = serviceProvider.GetRequiredService();
+```
+
+The `AddPostHog` methods accept an optional `Action` parameter that you can use to configure the client.
+
+If you're not using dependency injection, you can create a static instance of the `PostHogClient` class and use that everywhere in your project:
+
+C#
+
+PostHog AI
+
+```csharp
+using PostHog;
+public static readonly PostHogClient PostHog = new(new PostHogOptions {
+ ProjectToken = "",
+ HostUrl = new Uri("https://us.i.posthog.com"),
+ PersonalApiKey = Environment.GetEnvironmentVariable(
+ "PostHog__PersonalApiKey")
+});
+```
+
+## Debug mode
+
+If you're not seeing the expected events being captured, the feature flags being evaluated, or the surveys being shown, you can enable debug mode to see what's happening.
+
+To see detailed logging, set the log level to `Debug` or `Trace` in `appsettings.json`:
+
+JSON
+
+PostHog AI
+
+```json
+{
+ "DetailedErrors": true,
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning",
+ "PostHog": "Trace"
+ }
+ },
+ ...
+}
+```
+
+## Identifying users
+
+> **Identifying users is required.** Backend events need a `distinct_id` that matches the ID your frontend uses when calling `posthog.identify()`. Without this, backend events are orphaned — they can't be linked to frontend event captures, [session replays](/docs/session-replay.md), [LLM traces](/docs/ai-engineering.md), or [error tracking](/docs/error-tracking.md).
+>
+> See our guide on [identifying users](/docs/getting-started/identify-users.md) for how to set this up.
+
+## Capturing events
+
+You can send custom events using `capture`:
+
+C#
+
+PostHog AI
+
+```csharp
+posthog.Capture("distinct_id_of_the_user", "user_signed_up");
+```
+
+> **Tip:** We recommend using a `[object] [verb]` format for your event names, where `[object]` is the entity that the behavior relates to, and `[verb]` is the behavior itself. For example, `project created`, `user signed up`, or `invite sent`.
+
+### Setting event properties
+
+Optionally, you can include additional information with the event by including a [properties](/docs/data/events.md#event-properties) object:
+
+C#
+
+PostHog AI
+
+```csharp
+posthog.Capture(
+ "distinct_id_of_the_user",
+ "user_signed_up",
+ properties: new() {
+ ["login_type"] = "email",
+ ["is_free_trial"] = "true"
+ }
+);
+```
+
+### Sending page views
+
+If you're aiming for a backend-only implementation of PostHog and won't be capturing events from your frontend, you can send `$pageview` events from your backend like so:
+
+C#
+
+PostHog AI
+
+```csharp
+using PostHog;
+using Microsoft.AspNetCore.Http.Extensions;
+posthog.CapturePageView(
+ "distinct_id_of_the_user",
+ HttpContext.Request.GetDisplayUrl());
+```
+
+## Request context
+
+For ASP.NET Core apps using `PostHog.AspNetCore`, add request context middleware before routes that call PostHog. This reads incoming PostHog tracing headers and attaches request metadata to captures, exceptions, and feature flag evaluation inside the request.
+
+Program.cs
+
+PostHog AI
+
+```csharp
+using PostHog;
+using PostHog.AspNetCore;
+var builder = WebApplication.CreateBuilder(args);
+builder.AddPostHog();
+var app = builder.Build();
+app.UsePostHogRequestContext();
+```
+
+If you're using [PostHog JS](/docs/libraries/js.md) on the frontend, configure [`tracing_headers`](/docs/libraries/js/config.md#tracing-headers) for your ASP.NET Core backend hostname so browser requests include the session and distinct ID headers.
+
+The middleware reads `X-PostHog-Distinct-Id` and `X-PostHog-Session-Id` as request-scoped analytics context. It also adds request metadata such as `$current_url`, `$request_method`, `$request_path`, `$user_agent`, and `$ip`. Explicit distinct IDs and event properties always override request context.
+
+Tracing headers are client-controlled analytics context, not authentication or authorization. For security-sensitive server-side decisions, pass an authenticated distinct ID explicitly. You can ignore tracing headers while still collecting request metadata:
+
+C#
+
+PostHog AI
+
+```csharp
+app.UsePostHogRequestContext(options =>
+{
+ options.UseTracingHeaders = false;
+});
+```
+
+Request-context overloads like `posthog.Capture("checkout started")` and `posthog.EvaluateFlagsAsync()` use the current request distinct ID when one is available.
+
+## Error tracking
+
+You can manually capture exceptions using `CaptureException`. This sends a `$exception` event with stack frames, inner exceptions, aggregate exceptions, source context when available, and .NET runtime metadata.
+
+File names, line numbers, and source context depend on debug information already available from the captured .NET stack trace. PostHog doesn't support uploading .NET PDB files yet, so production builds without runtime-accessible debug information may show less detailed stack frames.
+
+C#
+
+PostHog AI
+
+```csharp
+try
+{
+ ProcessOrder(orderId);
+}
+catch (Exception exception)
+{
+ posthog.CaptureException(exception, "user_distinct_id");
+}
+```
+
+Add custom properties to include request, tenant, or domain context:
+
+C#
+
+PostHog AI
+
+```csharp
+posthog.CaptureException(
+ exception,
+ "user_distinct_id",
+ new Dictionary
+ {
+ ["order_id"] = orderId,
+ ["environment"] = "production",
+ }
+);
+```
+
+For the full setup guide, see the [.NET error tracking installation docs](/docs/error-tracking/installation/dotnet.md).
+
+Automatic exception capture is not available in the .NET SDK yet.
+
+## Logs
+
+[PostHog Logs](/docs/logs.md) doesn't use this SDK. Logs are ingested over OpenTelemetry, so you attach an OTLP exporter to the standard `ILogger` pipeline instead — see the [.NET logs installation guide](/docs/logs/installation/dotnet.md).
+
+## Person profiles and properties
+
+The .NET SDK captures identified events by default. These create [person profiles](/docs/data/persons.md). To set [person properties](/docs/data/user-properties.md) in these profiles, include them when capturing an event:
+
+C#
+
+PostHog AI
+
+```csharp
+posthog.Capture(
+ "distinct_id",
+ "event_name",
+ personPropertiesToSet: new() { ["name"] = "Max Hedgehog" },
+ personPropertiesToSetOnce: new() { ["initial_url"] = "/blog" }
+);
+```
+
+For more details on the difference between `$set` and `$set_once`, see our [person properties docs](/docs/data/user-properties.md#what-is-the-difference-between-set-and-set_once).
+
+To capture [anonymous events](/docs/data/anonymous-vs-identified-events.md) without person profiles, set the event's `$process_person_profile` property to `false`:
+
+C#
+
+PostHog AI
+
+```csharp
+posthog.Capture(
+ "distinct_id",
+ "event_name",
+ properties: new() {
+ ["$process_person_profile"] = false
+ }
+)
+```
+
+## Alias
+
+Sometimes, you want to assign multiple distinct IDs to a single user. This is helpful when your primary distinct ID is inaccessible. For example, if a distinct ID used on the frontend is not available in your backend.
+
+In this case, you can use `alias` to assign another distinct ID to the same user.
+
+C#
+
+PostHog AI
+
+```csharp
+await posthog.AliasAsync("current_distinct_id", "new_distinct_id");
+```
+
+We strongly recommend reading our docs on [alias](/docs/product-analytics/identify.md#alias-assigning-multiple-distinct-ids-to-the-same-user) to best understand how to correctly use this method.
+
+## Group analytics
+
+Group analytics allows you to associate an event with a group (e.g. teams, organizations, etc.). Read the [group analytics](/docs/product-analytics/group-analytics.md) guide for more information.
+
+> **Note:** This is a paid feature and is not available on the open-source or free cloud plan. Learn more on our [pricing page](/pricing.md).
+
+To capture an event and associate it with a group, add the `groups` argument to your `Capture` call:
+
+C#
+
+PostHog AI
+
+```csharp
+posthog.Capture(
+ "user_distinct_id",
+ "some_event",
+ groups: [new Group("company", "company_id_in_your_db")]);
+```
+
+Update properties on a group, use the `GroupIdentifyAsync` method:
+
+C#
+
+PostHog AI
+
+```csharp
+await posthog.GroupIdentifyAsync(
+ type: "company",
+ key: "company_id_in_your_db",
+ name: "Awesome Inc.",
+ properties: new()
+ {
+ ["employees"] = 11
+ }
+);
+```
+
+The `name` is a special property which is used in the PostHog UI for the name of the group. If you don't specify a `name` property, the group ID will be used instead.
+
+## Feature flags
+
+PostHog's [feature flags](/docs/feature-flags.md) enable you to safely deploy and roll back new features as well as target specific users and groups with them.
+
+There are two steps to implement feature flags in .NET:
+
+### Step 1: Evaluate flags once
+
+Call `EvaluateFlagsAsync()` once for the user, then read values from the returned snapshot.
+
+#### Boolean feature flags
+
+C#
+
+PostHog AI
+
+```csharp
+var flags = await posthog.EvaluateFlagsAsync("distinct_id_of_your_user");
+if (flags.IsEnabled("flag-key"))
+{
+ // Do something differently for this user
+ // Optional: fetch the payload
+ var matchedPayload = flags.GetFlagPayload("flag-key");
+}
+```
+
+#### Multivariate feature flags
+
+C#
+
+PostHog AI
+
+```csharp
+var flags = await posthog.EvaluateFlagsAsync("distinct_id_of_your_user");
+var enabledVariant = flags.GetFlag("flag-key")?.VariantKey;
+if (enabledVariant == "variant-key") // replace "variant-key" with the key of your variant
+{
+ // Do something differently for this user
+ // Optional: fetch the payload
+ var matchedPayload = flags.GetFlagPayload("flag-key");
+}
+```
+
+`flags.GetFlag()` returns a nullable `FeatureFlag` object. Check `VariantKey` for multivariate flags and `IsEnabled` for boolean flags. It returns `null` when the flag wasn't returned by the evaluation.
+
+> **Note:** `posthog.IsFeatureEnabledAsync()`, `posthog.GetFeatureFlagAsync()`, and `Capture(..., sendFeatureFlags: true, ...)` still work during the migration period, but they're deprecated. Prefer `EvaluateFlagsAsync()` for new code.
+
+### Step 2: Include feature flag information when capturing events
+
+If you want use your feature flag to breakdown or filter events in your [insights](/docs/product-analytics/insights.md), you'll need to include feature flag information in those events. This ensures that the feature flag value is attributed correctly to the event.
+
+> **Note:** This step is only required for events captured using our server-side SDKs or [API](/docs/api.md).
+
+There are two methods you can use to include feature flag information in your events:
+
+#### Method 1: Pass the evaluated flags snapshot to `Capture()`
+
+Pass the same `flags` object that you used for branching. This attaches the exact flag values from that evaluation and doesn't make another `/flags` request.
+
+C#
+
+PostHog AI
+
+```csharp
+var flags = await posthog.EvaluateFlagsAsync("distinct_id_of_your_user");
+if (flags.IsEnabled("flag-key"))
+{
+ // Do something differently for this user
+}
+posthog.Capture(
+ "distinct_id_of_your_user",
+ "event_name",
+ properties: null,
+ groups: null,
+ flags: flags
+);
+```
+
+By default, this attaches every flag in the snapshot using `$feature/` properties and `$active_feature_flags`.
+
+To reduce event property bloat, pass a filtered snapshot:
+
+C#
+
+PostHog AI
+
+```csharp
+// Attach only flags accessed with IsEnabled() or GetFlag() before this call
+posthog.Capture(
+ "distinct_id_of_your_user",
+ "event_name",
+ properties: null,
+ groups: null,
+ flags: flags.OnlyAccessed()
+);
+// Attach only specific flags
+posthog.Capture(
+ "distinct_id_of_your_user",
+ "event_name",
+ properties: null,
+ groups: null,
+ flags: flags.Only("checkout-flow", "new-dashboard")
+);
+```
+
+#### Method 2: Include the `$feature/feature_flag_name` property manually
+
+In the event properties, include `$feature/feature_flag_name: variant_key`:
+
+C#
+
+PostHog AI
+
+```csharp
+posthog.Capture(
+ "distinct_id_of_your_user",
+ "event_name",
+ properties: new()
+ {
+ // Replace feature-flag-key with your flag key and "variant-key" with the key of your variant
+ ["$feature/feature-flag-key"] = "variant-key",
+ }
+);
+```
+
+### Evaluating only specific flags
+
+By default, `EvaluateFlagsAsync()` evaluates every flag for the user. If you only need a few flags, pass `FlagKeysToEvaluate` to request only those flags:
+
+C#
+
+PostHog AI
+
+```csharp
+var flags = await posthog.EvaluateFlagsAsync(
+ "distinct_id_of_your_user",
+ options: new AllFeatureFlagsOptions
+ {
+ FlagKeysToEvaluate = new[] { "checkout-flow", "new-dashboard" },
+ }
+);
+```
+
+### Sending `$feature_flag_called` events
+
+Capturing `$feature_flag_called` events enables PostHog to know when a flag was accessed by a user and provide [analytics and insights](/docs/product-analytics/insights.md) on the flag. With `EvaluateFlagsAsync()`, the SDK sends this event when you call `flags.IsEnabled()` or `flags.GetFlag()` for a flag.
+
+The SDK deduplicates these events per `(distinct_id, flag, value)` in a local cache. If you reinitialize the PostHog client, the cache resets and `$feature_flag_called` events may be sent again. PostHog handles duplicates, so duplicate `$feature_flag_called` events don't affect your analytics.
+
+`flags.GetFlagPayload()` doesn't send `$feature_flag_called` events and doesn't count as an access for `OnlyAccessed()`.
+
+### Advanced: Overriding server properties
+
+Sometimes, you may want to evaluate feature flags using [person properties](/docs/product-analytics/person-properties.md), [groups](/docs/product-analytics/group-analytics.md), or group properties that haven't been ingested yet, or were set incorrectly earlier.
+
+You can provide properties to evaluate the flag with by using the `person properties`, `groups`, and `group properties` arguments. PostHog will then use these values to evaluate the flag, instead of any properties currently stored on your PostHog server.
+
+For example:
+
+C#
+
+PostHog AI
+
+```csharp
+var flags = await posthog.EvaluateFlagsAsync(
+ "distinct_id_of_the_user",
+ options: new AllFeatureFlagsOptions
+ {
+ PersonProperties = new()
+ {
+ ["property_name"] = "value",
+ },
+ Groups = new()
+ {
+ new Group("your_group_type", "your_group_id")
+ {
+ ["group_property_name"] = "value",
+ },
+ new Group("another_group_type", "another_group_id")
+ {
+ ["group_property_name"] = "another value",
+ },
+ },
+ }
+);
+if (flags.IsEnabled("flag-key"))
+{
+ // Do something differently for this user
+}
+```
+
+### Overriding GeoIP properties
+
+By default, a user's GeoIP properties are set using the IP address they use to capture events on the frontend. You may want to override the these properties when evaluating feature flags. A common reason to do this is when you're not using PostHog on your frontend, so the user has no GeoIP properties.
+
+You can override GeoIP properties by including them in the `person_properties` parameter when evaluating feature flags. This is useful when you're evaluating flags on your backend and want to use the client's location instead of your server's location.
+
+The following GeoIP properties can be overridden:
+
+- `$geoip_country_code`
+- `$geoip_country_name`
+- `$geoip_city_name`
+- `$geoip_city_confidence`
+- `$geoip_continent_code`
+- `$geoip_continent_name`
+- `$geoip_latitude`
+- `$geoip_longitude`
+- `$geoip_postal_code`
+- `$geoip_subdivision_1_code`
+- `$geoip_subdivision_1_name`
+- `$geoip_subdivision_2_code`
+- `$geoip_subdivision_2_name`
+- `$geoip_subdivision_3_code`
+- `$geoip_subdivision_3_name`
+- `$geoip_time_zone`
+
+Simply include any of these properties in the `person_properties` parameter alongside your other person properties when calling feature flags.
+
+### Evaluation contexts
+
+Configure evaluation contexts so this SDK only evaluates flags intended for the matching application, platform, or product area. For ASP.NET Core apps using `PostHog.AspNetCore`, add them to the `PostHog` configuration section:
+
+JSON
+
+PostHog AI
+
+```json
+{
+ "PostHog": {
+ "ProjectToken": "",
+ "HostUrl": "https://us.i.posthog.com",
+ "EvaluationContexts": ["main-app", "api", "backend"]
+ }
+}
+```
+
+For code-based configuration, set `EvaluationContexts` on `PostHogOptions`:
+
+C#
+
+PostHog AI
+
+```csharp
+var posthog = new PostHogClient(new PostHogOptions
+{
+ ProjectToken = "",
+ HostUrl = new Uri("https://us.i.posthog.com"),
+ EvaluationContexts = ["main-app", "api", "backend"],
+});
+```
+
+Remote `/flags` requests from `EvaluateFlagsAsync()` include `evaluation_contexts` when configured.
+
+For more details, see the [evaluation contexts guide](/docs/feature-flags/evaluation-contexts.md).
+
+### Local evaluation
+
+Evaluating feature flags requires making a request to PostHog for each flag. However, you can improve performance by evaluating flags locally. Instead of making a request for each flag, PostHog will periodically request and store feature flag definitions locally, enabling you to evaluate flags without making additional requests.
+
+It is best practice to use local evaluation flags when possible, since this enables you to resolve flags faster and with fewer API calls.
+
+For details on how to implement local evaluation, see our [local evaluation guide](/docs/feature-flags/local-evaluation.md).
+
+## Experiments (A/B tests)
+
+Since [experiments](/docs/experiments/start-here.md) use feature flags, the code for running an experiment is very similar to the feature flags code:
+
+C#
+
+PostHog AI
+
+```csharp
+var flags = await posthog.EvaluateFlagsAsync("user_distinct_id");
+var variant = flags.GetFlag("experiment-feature-flag-key")?.VariantKey;
+if (variant == "variant-name")
+{
+ // Do something
+}
+```
+
+It's also possible to [run experiments without using feature flags](/docs/experiments/running-experiments-without-feature-flags.md).
+
+## AI observability
+
+`PostHog.AI` adds [AI observability](/docs/ai-observability.md) for .NET applications using OpenAI or Azure OpenAI. It is currently pre-release, so expect breaking changes before a stable release.
+
+For installation instructions, see the [OpenAI guide for .NET](/docs/ai-observability/installation/openai.md#net-support) or the [Azure OpenAI guide for .NET](/docs/ai-observability/installation/azure-openai.md#net-support).
+
+## GeoIP properties
+
+The `posthog-dotnet` library disregards the server IP, does not add the GeoIP properties, and does not use the values for feature flag evaluations.
+
+## Serverless environments (Azure Functions/Render/Lambda/...)
+
+By default, the library buffers events before sending them to the `/batch` endpoint for better performance. This can lead to lost events in serverless environments if the .NET process is terminated by the platform before the buffer is fully flushed.
+
+To avoid this, call `await posthog.FlushAsync()` after processing every request by adding it as a middleware to your server. This allows `posthog.Capture()` to remain asynchronous for better performance.
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-dotnet/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-dotnet/references/fingerprints.md
new file mode 100644
index 00000000..d58a6781
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-dotnet/references/fingerprints.md
@@ -0,0 +1,63 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
+# Fingerprints - Docs
+
+Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
+
+## Fingerprint and issue grouping
+
+Every exception has a fingerprint, whether generated or defined by the user. Each fingerprint links to exactly one issue. Exceptions that share the same fingerprint define an issue.
+
+Multiple different fingerprints can point to the same issue (a many-to-one relationship) if you [merge issues](/docs/error-tracking/managing-issues.md#merging-issues).
+
+## How are fingerprints generated?
+
+Fingerprints are built iteratively using components of the exception event. The flowchart below shows how fingerprints are generated.
+
+flowchart LR A\[Add exception type to fingerprint\] --> B{Stack trace available?} B -->|No| C\[Add error message to fingerprint\] C --> D\[Final fingerprint\] B -->|Yes| E{In-app frames exist?} E -->|No| F\[Add first frame to fingerprint\] E -->|Yes| G\[Add in-app frame to fingerprint Priority: resolved > unresolved\] F --> D G --> D
+
+The flowchart in text
+
+Fingerprints are generated by considering the following in combination:
+
+1. The exception type
+2. If there's no resolved stack trace, add the error message to the fingerprint
+3. If there are stack traces but no in-app frames (frames from your code, not a dependency), use the first frame of the stack trace
+4. If there are stack traces, in-app frames, and source maps available, use the resolved in-app stack frames
+5. If there are stack traces, in-app frames, and source maps *not* available, use the first in-app stack frame
+
+In some languages, like Python, one error can trigger another, creating a chain of linked exceptions. PostHog records the entire chain in the event and generates a single fingerprint for it.
+
+### Ensuring accurate fingerprints
+
+[Resolved stack traces](/docs/error-tracking/stack-traces.md) are critical for accurate fingerprinting. Without accurate stack traces, PostHog cannot group exceptions consistently. If you have not uploaded source maps, follow the [source map guide](/docs/error-tracking/upload-source-maps.md) to do so.
+
+This also means that if the exception **type** or **message** changes from one version to the next, the fingerprint will change.
+
+## When are generated fingerprints used?
+
+Fingerprints are used to group similar exceptions into issues automatically. Automatic issue grouping is only done when:
+
+- No [issue grouping rules](/docs/error-tracking/grouping-issues.md) are applied
+- No [issue merging](/docs/error-tracking/managing-issues.md#merging-issues) has been configured
+- No [custom fingerprint](#customizing-fingerprints) is set during capture
+
+You can find details about how issue grouping works in the [issues and exceptions](/docs/error-tracking/issues-and-exceptions.md) guide.
+
+## Customizing fingerprints
+
+Fingerprints can be manually set during exception capture. This is a very useful way to group exceptions that are not related to each other. You can find examples of how to do this in the [custom issue grouping](/docs/error-tracking/grouping-issues.md#option-2-client-side-fingerprint) section.
+
+You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-dotnet/references/monitoring.md b/skills/posthog/all/skills/error-tracking-dotnet/references/monitoring.md
new file mode 100644
index 00000000..6590cab2
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-dotnet/references/monitoring.md
@@ -0,0 +1,146 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
+# Monitor and search issues - Docs
+
+This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
+
+## Monitoring issues
+
+When you're monitoring issues in your project, there are generally two common workflows:
+
+- You're exploring issues to identify impactful and problematic areas. You should use sorting features.
+- You're looking for issues assigned to you to resolve them. You should filter by the `Assigned to` property.
+
+### Sorting issues
+
+Issues can be sorted by the following properties:
+
+| Property | Description |
+| --- | --- |
+| Last seen | The issue that has the most recent exception |
+| First seen | The issue that has the oldest exception |
+| Occurrences | The number of exceptions in the issue |
+| Users | The number of unique users affected by the issue |
+| Sessions | The number of unique sessions affected by the issue |
+
+Sorting by **last seen** and **occurrences** are great ways to get a general sense of issues in your project. Sorting by **users** and **sessions** is great to find the most impactful issues if you're using other [filters](#finding-specific-issues) to narrow down your results.
+
+### Monitoring issues assigned to you
+
+You can filter issues by the **Assigned to** property to find issues assigned to you. This is especially useful if you configure [automatic issue assignment](/docs/error-tracking/assigning-issues.md) and configure [alerts](/docs/error-tracking/alerts.md) to notify you when new issues are created.
+
+## Finding specific issues
+
+You can use the search bar at the top of the [issue page](https://app.posthog.com/error_tracking) to filter issues based on the properties of the exceptions in that issue.
+
+Search results are matched based on [properties of exception events](/docs/error-tracking/issues-and-exceptions.md) grouped into the issues. For example, if you search for "TypeError", we show you all issues where *any* exception grouped into the issue has a type of "TypeError".
+
+**Unrelated results**
+
+You may see seemingly unrelated issues in your search results because your search term matches an exception in the issue group. For example, you may see an issues named `RefreshError` when searching "schema", because a `get_schema` method appears on the exception stack traces.
+
+### Filtering modes
+
+The search bar provides two modes of filtering:
+
+#### 1\. Exact property filtering
+
+This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
+
+
+
+Added property filters look like this:
+
+
+
+The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
+
+#### 2\. Freeform text search
+
+This does text matching for a subset of the error tracking specific properties of the exception event. It splits the text you give it into tokens. The search matches an exception if *each* of the tokens in your search term appear in one of the following:
+
+- The exception type
+- The exception message
+- The function names in the exception stack trace (if known)
+- The file paths in the exception stack trace (if known)
+
+For example, imagine you have an exception that looks like this:
+
+PostHog AI
+
+```
+TypeError: Cannot read property 'name' of undefined
+ at Object. (/path/to/myfile.js:123:45)
+ at Module._compile (module.js:653:30)
+ at Object.Module._extensions..js (module.js:664:10)
+ at Module.load (module.js:566:32)
+ at tryModuleLoad (module.js:506:12)
+ at Function.Module._load (module.js:498:3)
+ at Function.Module.runMain (module.js:694:10)
+ at startup (bootstrap_node.js:204:16)
+ at bootstrap_node.js:625:3
+```
+
+If you search for the term `TypeError myfile.js`, the exception matches this search, as it contains `TypeError` (as the exception type) and `myfile.js` (as a file path in the stack trace).
+
+If you search for `TypeError myfile.js abc`, the exception would not match, as the token `abc` does not appear anywhere in freeform search properties.
+
+If you want to search for longer exact strings, e.g. a particular exception message, you can group tokens into a single term using quotes, e.g. `"Cannot read property 'name' of undefined" myfile.js` would match, and `"Cannot read property of myfile.js"` would not.
+
+Note, perhaps unintuitively, `Cannot read property of myfile.js` would match, because the tokens are ungrouped, and all of them appear *somewhere* in the exception search properties.
+
+### Searching chained exceptions
+
+Exception events can have more than one exception in them, due to language features like exception chaining. For freeform search, we put the types, messages, functions and file paths of all exceptions into one list, and match if the token appears in any of them.
+
+For example, if you had a chained exception with the messages `MyCustomError: Failed to load user` and `Cannot read property 'age' of undefined`, searching for `cannot read property` would match the exception, because it matches *one* of the exception messages (`property` appears in the "root" one).
+
+## Issue details
+
+When you click on an issue, you'll see the details page of the issue.
+
+This page shows you the following:
+
+- The stack trace, properties, and sessions related to the **currently selected exception**.
+- Name, description, status, assignee, and external tracking links for the issue.
+- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
+
+
+
+### Filtering exception occurrences within an issue
+
+Once you've found and opened the issue you want to investigate, you can use the same search interface to filter the exception list for a particular instance of the issue. This is particularly useful in cases where some exceptions in the issue have information others don't and you want to use that information for debugging.
+
+For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
+
+
+
+**Alerts**
+
+If you have a set of filters that you use often, you can create alerts for them. This way you can be notified when new issues match your filters. Learn more about [alerts](/docs/error-tracking/alerts.md).
+
+## Improving search performance
+
+We try to return results to you within a second, but sometimes if you're querying over large amounts of data, it may take longer. The following can improve the search performance:
+
+- **Limit the time range you're searching over:** 7 days is usually enough to get a sense for the trends of an issue over time.
+
+- **Use freeform search rather than property filters:** Our freeform searches are generally faster than property filters, as the total amount of data processed is smaller.
+
+If you find your queries timing out or taking more than 30 seconds, please [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue)! We're always looking for benchmarks to improve against.
+
+## Suppressing issues
+
+If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-dotnet/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-dotnet/references/upload-source-maps.md
new file mode 100644
index 00000000..b6ae318f
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-dotnet/references/upload-source-maps.md
@@ -0,0 +1,67 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
+# Upload source maps - Docs
+
+If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
+
+If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
+
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
+
+- [Web](/docs/error-tracking/upload-source-maps/web.md)
+
+- [Next.js](/docs/error-tracking/upload-source-maps/nextjs.md)
+
+- [Node.js](/docs/error-tracking/upload-source-maps/node.md)
+
+- [React](/docs/error-tracking/upload-source-maps/react.md)
+
+- [Angular](/docs/error-tracking/upload-source-maps/angular.md)
+
+- [Nuxt](/docs/error-tracking/upload-source-maps/nuxt.md)
+
+- [React Native](/docs/error-tracking/upload-source-maps/react-native.md)
+
+- [Android](/docs/error-tracking/upload-mappings/android.md)
+
+- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
+- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
+- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
+
+- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
+
+- [Vite](/docs/error-tracking/upload-source-maps/vite.md)
+
+- [CLI](/docs/error-tracking/upload-source-maps/cli.md)
+
+- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-elixir/SKILL.md b/skills/posthog/all/skills/error-tracking-elixir/SKILL.md
new file mode 100644
index 00000000..93ab117b
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-elixir/SKILL.md
@@ -0,0 +1,46 @@
+---
+name: error-tracking-elixir
+description: PostHog error tracking for Elixir
+metadata:
+ author: PostHog
+ version: dev
+---
+
+# PostHog error tracking for Elixir
+
+This skill helps you add PostHog error tracking to Elixir applications.
+
+## Reference files
+
+- `references/elixir.md` - Elixir error tracking installation - docs
+- `references/fingerprints.md` - Fingerprints - docs
+- `references/alerts.md` - Send error tracking alerts - docs
+- `references/monitoring.md` - Monitor and search issues - docs
+- `references/assigning-issues.md` - Assign issues to teammates - docs
+- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
+
+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
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- posthog-elixir is installed as the `posthog` Hex package; add `{:posthog, "~> 2.0"}` to `mix.exs` and run `mix deps.get`
+- Configure PostHog in application config using `api_host`, `api_key`, and `in_app_otp_apps`; read secrets from environment or runtime config, never hardcode them
+- In tests, set `test_mode` to true so events are dropped instead of sent to PostHog
+- For Phoenix or Plug apps, add `PostHog.Integrations.Plug` before the router so request context is attached to captured events and errors
+- Server-side captures must include a stable `distinct_id` matching frontend identify calls, or set it once per process/request with `PostHog.set_context/1`
+- Remember `PostHog.set_context/1` uses Logger metadata and is process-scoped; set context in the request, job, or Task process that captures the event
+- For new feature flag code, prefer `PostHog.FeatureFlags.evaluate_flags/1` once per user/request, then read values from `PostHog.FeatureFlags.Evaluations`
+- To attribute captures to feature flags, call `PostHog.FeatureFlags.set_in_context/1` with the evaluated snapshot, optionally filtered with `only_accessed/1` or `only/2`
+- Avoid deprecated feature flag helpers such as `check/2`, `check!/2`, `get_feature_flag_result/2`, and `get_feature_flag_result!/2` in new code
+- Error tracking is enabled by default through Logger; set `in_app_otp_apps`, `capture_level`, and `metadata` to improve error grouping and context
+- For source context in releases, enable source code context and run `mix posthog.package_source_code` before `mix release`
diff --git a/skills/posthog/all/skills/error-tracking-elixir/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-elixir/references/COMMANDMENTS.md
new file mode 100644
index 00000000..69522fb4
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-elixir/references/COMMANDMENTS.md
@@ -0,0 +1,16 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- posthog-elixir is installed as the `posthog` Hex package; add `{:posthog, "~> 2.0"}` to `mix.exs` and run `mix deps.get`
+- Configure PostHog in application config using `api_host`, `api_key`, and `in_app_otp_apps`; read secrets from environment or runtime config, never hardcode them
+- In tests, set `test_mode` to true so events are dropped instead of sent to PostHog
+- For Phoenix or Plug apps, add `PostHog.Integrations.Plug` before the router so request context is attached to captured events and errors
+- Server-side captures must include a stable `distinct_id` matching frontend identify calls, or set it once per process/request with `PostHog.set_context/1`
+- Remember `PostHog.set_context/1` uses Logger metadata and is process-scoped; set context in the request, job, or Task process that captures the event
+- For new feature flag code, prefer `PostHog.FeatureFlags.evaluate_flags/1` once per user/request, then read values from `PostHog.FeatureFlags.Evaluations`
+- To attribute captures to feature flags, call `PostHog.FeatureFlags.set_in_context/1` with the evaluated snapshot, optionally filtered with `only_accessed/1` or `only/2`
+- Avoid deprecated feature flag helpers such as `check/2`, `check!/2`, `get_feature_flag_result/2`, and `get_feature_flag_result!/2` in new code
+- Error tracking is enabled by default through Logger; set `in_app_otp_apps`, `capture_level`, and `metadata` to improve error grouping and context
+- For source context in releases, enable source code context and run `mix posthog.package_source_code` before `mix release`
diff --git a/skills/posthog/all/skills/error-tracking-elixir/references/alerts.md b/skills/posthog/all/skills/error-tracking-elixir/references/alerts.md
new file mode 100644
index 00000000..a760ac4e
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-elixir/references/alerts.md
@@ -0,0 +1,69 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
+# Send error tracking alerts - Docs
+
+To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
+
+## Issue created or reopened
+
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+
+
+
+Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
+
+This will then send alerts to your chosen destination when an issue is created or reopened like this:
+
+## Issue properties and assignments
+
+You can filter an alert based on the properties of an issue. This is useful for notifying a specific team when they have been auto assigned an issue using [auto assignment rules](/docs/error-tracking/managing-issues.md#auto-assignment-rules).
+
+
+
+## Spike alerts
+
+PostHog can also alert you when an existing issue suddenly spikes in volume - for example, after a bad deploy. This works differently from issue-created alerts. Instead of triggering when a new issue is first seen, spike alerts fire when an issue's error rate significantly exceeds its historical baseline.
+
+See the [spike detection guide](/docs/error-tracking/spikes.md) to learn how it works and how to configure it.
+
+## Other alerting options
+
+Since error tracking works by capturing `$exception` events, PostHog features that trigger by events can play a role in alerts too.
+
+### Real time destinations
+
+The first way is using [real time destinations](/docs/cdp/destinations.md). This enables you to send events (like `$exception`) to other tools as soon as they are ingested.
+
+To create a real time destination, go to the [data pipelines tab](https://app.posthog.com/data-management/destinations) in PostHog, click **\+ New**, and then select **Destination**. Choose your destination and press **\+ Create**.
+
+On the destination creation screen, make sure to add an event matcher for the `$exception` event, filter for the properties you want, and set the trigger options.
+
+
+
+Check out our [real time destinations docs](/docs/cdp/destinations.md) for more information.
+
+### Trend alerts
+
+You can also visualize your `$exception` events using [trends](/docs/product-analytics/trends/overview.md). Once you create a trend insight, click the **Alerts** button at the top of the insight and then **New alert**.
+
+Here you can set alerts for event volume value, increase, or decrease.
+
+
+
+This sends an email notification to the user you choose. Check out our [alerts docs](/docs/alerts.md) for more information.
+
+**Can't find your alert?**
+
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-elixir/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-elixir/references/assigning-issues.md
new file mode 100644
index 00000000..fe4ddaaa
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-elixir/references/assigning-issues.md
@@ -0,0 +1,103 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
+# Assign issues to teammates - Docs
+
+Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
+
+## Assign issues
+
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
+
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
+
+
+
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
+
+Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
+
+
+
+## Automatic issue assignment
+
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
+
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
+
+Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
+
+Issues can be automatically assigned to a **role** or **user** by configuring a set of filters. These filters can be configured to match **any** or **all** of the criteria.
+
+You can configure automatic assignment to filter on any [event property](/docs/data/events.md) in PostHog. When there are multiple values for a property, the filters return true if it matches **any** of the values. For example, if you have multiple `exception_functions` values, the filters returns true if it matches **any** of the functions.
+
+Here are some common properties you can filter on:
+
+| Property | Event property | Description |
+| --- | --- | --- |
+| Exception type | $exception_types | The type of exception(s) that occurred |
+| Exception message | $exception_values | The message(s) detected on the error |
+| Exception function | $exception_functions | The function(s) where the exception occurred |
+| Exception source | $exception_sources | The source file(s) where the exception occurred |
+| Exception was handled | $exception_handled | Whether the exception was handled by the application |
+| Device type | $device_type | The type of device that the error occurred on |
+| Browser | $browser | The browser that the error occurred in |
+| Current URL | $current_url | The URL that the error occurred on |
+| Feature flag | $feature_flag | The feature flag that the error occurred on |
+
+You can also set custom properties on the error tracking event to filter on. For example, setting a custom `params_received` property to provide more context or debug information.
+
+### Order of issue assignment rules
+
+Issue assignment filters are evaluated in the order they are configured. They can also be reordered once created. The first filter that matches is used to assign the issue. This means you should configure the most specific filters first, and then the more general filters later.
+
+### Disabled assignment rules
+
+Assignment rules can become disabled if an error occurs during ingestion. When a rule is disabled, a banner displays the original error message. To re-enable the rule, edit it to fix the problem and save your changes. If the issue persists, reach out to support.
+
+### Alerting based on assignment
+
+A common use case for automatic issue assignment is to alert assignees of new issues. Once the issues are automatically assigned, you can set up alerts to notify the assignee. See the [alerts](/docs/error-tracking/alerts.md) guide for more information.
+
+## Create external issues
+
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
+
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.
+
+
+
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
+
+> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-elixir/references/elixir.md b/skills/posthog/all/skills/error-tracking-elixir/references/elixir.md
new file mode 100644
index 00000000..94f948e0
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-elixir/references/elixir.md
@@ -0,0 +1,316 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Elixir Error Tracking installation - Docs
+
+Copy page
+
+# Elixir Error Tracking installation - Docs
+
+1. 1
+
+ ## Install the Elixir SDK
+
+ Required
+
+ Add the [PostHog Elixir SDK](/docs/libraries/elixir.md) to your list of dependencies in `mix.exs`:
+
+ Elixir
+
+ PostHog AI
+
+ ```elixir
+ def deps do
+ [
+ {:posthog, "~> 2.5"}
+ ]
+ end
+ ```
+
+ Then run:
+
+ Terminal
+
+ PostHog AI
+
+ ```bash
+ mix deps.get
+ ```
+
+ **Source code context**
+
+ The Elixir SDK supports displaying the surrounding lines of source code in the Error Tracking UI. Since Elixir is a compiled language, source files must be packaged at build time. See the [source context step](#enable-source-code-context-optional) below for setup instructions.
+
+2. 2
+
+ ## Configure PostHog
+
+ Required
+
+ Add your project token and host to your config:
+
+ config/config.exs
+
+ PostHog AI
+
+ ```elixir
+ config :posthog,
+ api_host: "https://us.i.posthog.com",
+ api_key: ""
+ ```
+
+ To get the most out of Error Tracking, set `in_app_otp_apps` to your application name. This marks stack trace frames from your code as "in-app", making it easier to identify relevant frames in the PostHog UI:
+
+ config/config.exs
+
+ PostHog AI
+
+ ```elixir
+ config :posthog,
+ api_host: "https://us.i.posthog.com",
+ api_key: "",
+ in_app_otp_apps: [:my_app]
+ ```
+
+3. 3
+
+ ## Errors are captured automatically
+
+ Required
+
+ Error Tracking is **enabled by default**. The SDK hooks into Elixir's built-in [`Logger`](https://hexdocs.pm/logger/Logger.html) handler system, so it automatically captures:
+
+ - **Unhandled exceptions** – crashes in GenServers, Tasks, and other OTP processes
+ - **Logger.error calls** – any `Logger.error/1` message at or above the configured level
+
+ No additional code is needed. Any crash or error log in your application is sent to PostHog as a `$exception` event with full stack traces.
+
+ **What gets captured**
+
+ The handler captures log messages based on two rules:
+
+ 1. **Crash reasons are always captured** – any log with a `crash_reason` metadata (e.g., GenServer/Task crashes) is captured regardless of log level.
+ 2. **Log level filtering** – other messages at or above the configured `capture_level` (default: `:error`) are captured.
+
+4. 4
+
+ ## Add Phoenix/Plug integration (recommended)
+
+ Recommended
+
+ If you're using Phoenix or Plug, add the `PostHog.Integrations.Plug` middleware to automatically attach HTTP context (URL, host, path, IP) to error events.
+
+ **For Phoenix**, add it to your `endpoint.ex` before the router:
+
+ lib/my\_app\_web/endpoint.ex
+
+ PostHog AI
+
+ ```elixir
+ plug PostHog.Integrations.Plug
+ plug MyAppWeb.Router
+ ```
+
+ **For Plug apps**, add it to your router:
+
+ Elixir
+
+ PostHog AI
+
+ ```elixir
+ defmodule MyRouter do
+ use Plug.Router
+ plug PostHog.Integrations.Plug
+ plug :match
+ plug :dispatch
+ # ... routes
+ end
+ ```
+
+ This automatically includes `$current_url`, `$host`, `$pathname`, and `$ip` on every error event that occurs during request processing. It also reads `X-PostHog-Distinct-Id` and `X-PostHog-Session-Id` tracing headers, so errors can link back to frontend users and sessions when your client SDK sends those headers.
+
+ If you're using [PostHog JS](/docs/libraries/js.md) on the frontend, configure [`tracing_headers`](/docs/libraries/js/config.md#tracing-headers) for your Phoenix or Plug backend hostname. For more details, see the [Elixir request context docs](/docs/libraries/elixir.md#request-context).
+
+5. 5
+
+ ## Identify users on errors (recommended)
+
+ Recommended
+
+ By default, errors are attributed to `"unknown"`. To associate errors with specific users, set a context with a `distinct_id` early in your request lifecycle – for example, in a Plug pipeline after authentication:
+
+ Elixir
+
+ PostHog AI
+
+ ```elixir
+ PostHog.set_context(%{distinct_id: current_user.id})
+ ```
+
+ This is process-scoped, so any error that occurs in the same process (i.e., the same request) will include the user's distinct ID.
+
+ For Phoenix apps, a common pattern is to add this in a plug or controller action:
+
+ lib/my\_app\_web/plugs/set\_posthog\_context.ex
+
+ PostHog AI
+
+ ```elixir
+ defmodule MyAppWeb.Plugs.SetPostHogContext do
+ import Plug.Conn
+ def init(opts), do: opts
+ def call(conn, _opts) do
+ if user = conn.assigns[:current_user] do
+ PostHog.set_context(%{distinct_id: user.id})
+ end
+ conn
+ end
+ end
+ ```
+
+ Then add it to your router pipeline:
+
+ Elixir
+
+ PostHog AI
+
+ ```elixir
+ pipeline :browser do
+ # ... other plugs
+ plug MyAppWeb.Plugs.SetPostHogContext
+ end
+ ```
+
+6. 6
+
+ ## Configure error tracking options (optional)
+
+ Optional
+
+ The SDK supports several configuration options for Error Tracking:
+
+ config/config.exs
+
+ PostHog AI
+
+ ```elixir
+ config :posthog,
+ api_host: "https://us.i.posthog.com",
+ api_key: "",
+ # Mark your app's stacktrace frames as "in_app"
+ in_app_otp_apps: [:my_app],
+ # Minimum log level to capture (default: :error)
+ # Set to :warning to also capture warnings, or nil to only capture crashes
+ capture_level: :error,
+ # Logger metadata keys to include in error events (default: [])
+ # Set to :all to include all metadata
+ metadata: [:request_id, :user_id]
+ ```
+
+ | Option | Type | Default | Description |
+ | --- | --- | --- | --- |
+ | in_app_otp_apps | list of atoms | [] | OTP app names whose stacktrace frames are marked as "in_app" in the UI. |
+ | capture_level | log level or nil | :error | Minimum log level to capture. Crashes with crash_reason are always captured. Set to nil to only capture crashes. |
+ | metadata | list of atoms or :all | [] | Logger metadata keys to include as event properties. |
+ | enable_error_tracking | boolean | true | Set to false to disable automatic Error Tracking entirely. |
+ | global_properties | map | %{} | Properties added to all captured events (not just errors). |
+
+7. 7
+
+ ## Enable source code context (optional)
+
+ Optional
+
+ Since Elixir is a compiled language, source files aren't available at runtime by default. To display the surrounding lines of code in PostHog's Error Tracking UI, you need to package your source code at build time.
+
+ **Step 1:** Enable source context in your config:
+
+ config/config.exs
+
+ PostHog AI
+
+ ```elixir
+ config :posthog,
+ api_host: "https://us.i.posthog.com",
+ api_key: "",
+ enable_source_code_context: true,
+ root_source_code_paths: [File.cwd!()],
+ context_lines: 5
+ ```
+
+ **Step 2:** Package source code before building your release:
+
+ Terminal
+
+ PostHog AI
+
+ ```bash
+ mix posthog.package_source_code
+ mix release
+ ```
+
+ This reads all `.ex` files from your project, compresses them into `priv/posthog_source.map`, and bundles them with your release. When an error occurs, the SDK matches stack trace frames to the packaged source and includes `pre_context`, `context_line`, and `post_context` in each frame.
+
+ **Development mode**
+
+ In development, if `root_source_code_paths` is set and source files are accessible on disk, the SDK reads them directly at startup – no packaging step needed.
+
+ ### Configuration options
+
+ | Option | Type | Default | Description |
+ | --- | --- | --- | --- |
+ | enable_source_code_context | boolean | false | Enable source code context in stack frames. |
+ | root_source_code_paths | list of strings | [] | Root paths to scan for source files. |
+ | source_code_path_pattern | string | "**/*.ex" | Glob pattern for files to include. |
+ | source_code_exclude_patterns | list of regexes | [~r"^_build/", ~r"^priv/", ~r"^test/"] | Patterns to exclude. |
+ | context_lines | integer | 5 | Number of lines to include before and after the error line. |
+ | source_code_map_path | string | nil | Custom path to a packaged source map file. |
+
+ ### Mix task options
+
+ Terminal
+
+ PostHog AI
+
+ ```bash
+ # Custom output path
+ mix posthog.package_source_code --output path/to/output.map
+ # Custom root paths (overrides config)
+ mix posthog.package_source_code --root-path /app/lib --root-path /app/src
+ ```
+
+8. ## Verify error tracking
+
+ Recommended
+
+ Trigger a test exception to confirm errors are being sent to PostHog. You should see them appear in the [Error Tracking](https://app.posthog.com/error_tracking) tab.
+
+ Elixir
+
+ PostHog AI
+
+ ```elixir
+ # In an IEx session or a test route
+ require Logger
+ Logger.error("Test error from Elixir")
+ ```
+
+ Or raise an exception in a controller or GenServer to test crash capture:
+
+ Elixir
+
+ PostHog AI
+
+ ```elixir
+ # In a Phoenix controller
+ def test_error(conn, _params) do
+ raise "Test exception from Phoenix"
+ end
+ ```
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-elixir/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-elixir/references/fingerprints.md
new file mode 100644
index 00000000..d58a6781
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-elixir/references/fingerprints.md
@@ -0,0 +1,63 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
+# Fingerprints - Docs
+
+Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
+
+## Fingerprint and issue grouping
+
+Every exception has a fingerprint, whether generated or defined by the user. Each fingerprint links to exactly one issue. Exceptions that share the same fingerprint define an issue.
+
+Multiple different fingerprints can point to the same issue (a many-to-one relationship) if you [merge issues](/docs/error-tracking/managing-issues.md#merging-issues).
+
+## How are fingerprints generated?
+
+Fingerprints are built iteratively using components of the exception event. The flowchart below shows how fingerprints are generated.
+
+flowchart LR A\[Add exception type to fingerprint\] --> B{Stack trace available?} B -->|No| C\[Add error message to fingerprint\] C --> D\[Final fingerprint\] B -->|Yes| E{In-app frames exist?} E -->|No| F\[Add first frame to fingerprint\] E -->|Yes| G\[Add in-app frame to fingerprint Priority: resolved > unresolved\] F --> D G --> D
+
+The flowchart in text
+
+Fingerprints are generated by considering the following in combination:
+
+1. The exception type
+2. If there's no resolved stack trace, add the error message to the fingerprint
+3. If there are stack traces but no in-app frames (frames from your code, not a dependency), use the first frame of the stack trace
+4. If there are stack traces, in-app frames, and source maps available, use the resolved in-app stack frames
+5. If there are stack traces, in-app frames, and source maps *not* available, use the first in-app stack frame
+
+In some languages, like Python, one error can trigger another, creating a chain of linked exceptions. PostHog records the entire chain in the event and generates a single fingerprint for it.
+
+### Ensuring accurate fingerprints
+
+[Resolved stack traces](/docs/error-tracking/stack-traces.md) are critical for accurate fingerprinting. Without accurate stack traces, PostHog cannot group exceptions consistently. If you have not uploaded source maps, follow the [source map guide](/docs/error-tracking/upload-source-maps.md) to do so.
+
+This also means that if the exception **type** or **message** changes from one version to the next, the fingerprint will change.
+
+## When are generated fingerprints used?
+
+Fingerprints are used to group similar exceptions into issues automatically. Automatic issue grouping is only done when:
+
+- No [issue grouping rules](/docs/error-tracking/grouping-issues.md) are applied
+- No [issue merging](/docs/error-tracking/managing-issues.md#merging-issues) has been configured
+- No [custom fingerprint](#customizing-fingerprints) is set during capture
+
+You can find details about how issue grouping works in the [issues and exceptions](/docs/error-tracking/issues-and-exceptions.md) guide.
+
+## Customizing fingerprints
+
+Fingerprints can be manually set during exception capture. This is a very useful way to group exceptions that are not related to each other. You can find examples of how to do this in the [custom issue grouping](/docs/error-tracking/grouping-issues.md#option-2-client-side-fingerprint) section.
+
+You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-elixir/references/monitoring.md b/skills/posthog/all/skills/error-tracking-elixir/references/monitoring.md
new file mode 100644
index 00000000..6590cab2
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-elixir/references/monitoring.md
@@ -0,0 +1,146 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
+# Monitor and search issues - Docs
+
+This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
+
+## Monitoring issues
+
+When you're monitoring issues in your project, there are generally two common workflows:
+
+- You're exploring issues to identify impactful and problematic areas. You should use sorting features.
+- You're looking for issues assigned to you to resolve them. You should filter by the `Assigned to` property.
+
+### Sorting issues
+
+Issues can be sorted by the following properties:
+
+| Property | Description |
+| --- | --- |
+| Last seen | The issue that has the most recent exception |
+| First seen | The issue that has the oldest exception |
+| Occurrences | The number of exceptions in the issue |
+| Users | The number of unique users affected by the issue |
+| Sessions | The number of unique sessions affected by the issue |
+
+Sorting by **last seen** and **occurrences** are great ways to get a general sense of issues in your project. Sorting by **users** and **sessions** is great to find the most impactful issues if you're using other [filters](#finding-specific-issues) to narrow down your results.
+
+### Monitoring issues assigned to you
+
+You can filter issues by the **Assigned to** property to find issues assigned to you. This is especially useful if you configure [automatic issue assignment](/docs/error-tracking/assigning-issues.md) and configure [alerts](/docs/error-tracking/alerts.md) to notify you when new issues are created.
+
+## Finding specific issues
+
+You can use the search bar at the top of the [issue page](https://app.posthog.com/error_tracking) to filter issues based on the properties of the exceptions in that issue.
+
+Search results are matched based on [properties of exception events](/docs/error-tracking/issues-and-exceptions.md) grouped into the issues. For example, if you search for "TypeError", we show you all issues where *any* exception grouped into the issue has a type of "TypeError".
+
+**Unrelated results**
+
+You may see seemingly unrelated issues in your search results because your search term matches an exception in the issue group. For example, you may see an issues named `RefreshError` when searching "schema", because a `get_schema` method appears on the exception stack traces.
+
+### Filtering modes
+
+The search bar provides two modes of filtering:
+
+#### 1\. Exact property filtering
+
+This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
+
+
+
+Added property filters look like this:
+
+
+
+The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
+
+#### 2\. Freeform text search
+
+This does text matching for a subset of the error tracking specific properties of the exception event. It splits the text you give it into tokens. The search matches an exception if *each* of the tokens in your search term appear in one of the following:
+
+- The exception type
+- The exception message
+- The function names in the exception stack trace (if known)
+- The file paths in the exception stack trace (if known)
+
+For example, imagine you have an exception that looks like this:
+
+PostHog AI
+
+```
+TypeError: Cannot read property 'name' of undefined
+ at Object. (/path/to/myfile.js:123:45)
+ at Module._compile (module.js:653:30)
+ at Object.Module._extensions..js (module.js:664:10)
+ at Module.load (module.js:566:32)
+ at tryModuleLoad (module.js:506:12)
+ at Function.Module._load (module.js:498:3)
+ at Function.Module.runMain (module.js:694:10)
+ at startup (bootstrap_node.js:204:16)
+ at bootstrap_node.js:625:3
+```
+
+If you search for the term `TypeError myfile.js`, the exception matches this search, as it contains `TypeError` (as the exception type) and `myfile.js` (as a file path in the stack trace).
+
+If you search for `TypeError myfile.js abc`, the exception would not match, as the token `abc` does not appear anywhere in freeform search properties.
+
+If you want to search for longer exact strings, e.g. a particular exception message, you can group tokens into a single term using quotes, e.g. `"Cannot read property 'name' of undefined" myfile.js` would match, and `"Cannot read property of myfile.js"` would not.
+
+Note, perhaps unintuitively, `Cannot read property of myfile.js` would match, because the tokens are ungrouped, and all of them appear *somewhere* in the exception search properties.
+
+### Searching chained exceptions
+
+Exception events can have more than one exception in them, due to language features like exception chaining. For freeform search, we put the types, messages, functions and file paths of all exceptions into one list, and match if the token appears in any of them.
+
+For example, if you had a chained exception with the messages `MyCustomError: Failed to load user` and `Cannot read property 'age' of undefined`, searching for `cannot read property` would match the exception, because it matches *one* of the exception messages (`property` appears in the "root" one).
+
+## Issue details
+
+When you click on an issue, you'll see the details page of the issue.
+
+This page shows you the following:
+
+- The stack trace, properties, and sessions related to the **currently selected exception**.
+- Name, description, status, assignee, and external tracking links for the issue.
+- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
+
+
+
+### Filtering exception occurrences within an issue
+
+Once you've found and opened the issue you want to investigate, you can use the same search interface to filter the exception list for a particular instance of the issue. This is particularly useful in cases where some exceptions in the issue have information others don't and you want to use that information for debugging.
+
+For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
+
+
+
+**Alerts**
+
+If you have a set of filters that you use often, you can create alerts for them. This way you can be notified when new issues match your filters. Learn more about [alerts](/docs/error-tracking/alerts.md).
+
+## Improving search performance
+
+We try to return results to you within a second, but sometimes if you're querying over large amounts of data, it may take longer. The following can improve the search performance:
+
+- **Limit the time range you're searching over:** 7 days is usually enough to get a sense for the trends of an issue over time.
+
+- **Use freeform search rather than property filters:** Our freeform searches are generally faster than property filters, as the total amount of data processed is smaller.
+
+If you find your queries timing out or taking more than 30 seconds, please [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue)! We're always looking for benchmarks to improve against.
+
+## Suppressing issues
+
+If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-elixir/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-elixir/references/upload-source-maps.md
new file mode 100644
index 00000000..b6ae318f
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-elixir/references/upload-source-maps.md
@@ -0,0 +1,67 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
+# Upload source maps - Docs
+
+If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
+
+If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
+
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
+
+- [Web](/docs/error-tracking/upload-source-maps/web.md)
+
+- [Next.js](/docs/error-tracking/upload-source-maps/nextjs.md)
+
+- [Node.js](/docs/error-tracking/upload-source-maps/node.md)
+
+- [React](/docs/error-tracking/upload-source-maps/react.md)
+
+- [Angular](/docs/error-tracking/upload-source-maps/angular.md)
+
+- [Nuxt](/docs/error-tracking/upload-source-maps/nuxt.md)
+
+- [React Native](/docs/error-tracking/upload-source-maps/react-native.md)
+
+- [Android](/docs/error-tracking/upload-mappings/android.md)
+
+- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
+- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
+- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
+
+- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
+
+- [Vite](/docs/error-tracking/upload-source-maps/vite.md)
+
+- [CLI](/docs/error-tracking/upload-source-maps/cli.md)
+
+- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-flask/SKILL.md b/skills/posthog/all/skills/error-tracking-flask/SKILL.md
new file mode 100644
index 00000000..fd91cdaf
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-flask/SKILL.md
@@ -0,0 +1,49 @@
+---
+name: error-tracking-flask
+description: PostHog error tracking for Flask
+metadata:
+ author: PostHog
+ version: dev
+---
+
+# PostHog error tracking for Flask
+
+This skill helps you add PostHog error tracking to Flask applications.
+
+## Reference files
+
+- `references/python.md` - Python error tracking installation - docs
+- `references/flask.md` - Flask - docs
+- `references/fingerprints.md` - Fingerprints - docs
+- `references/alerts.md` - Send error tracking alerts - docs
+- `references/monitoring.md` - Monitor and search issues - docs
+- `references/assigning-issues.md` - Assign issues to teammates - docs
+- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
+
+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
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- Initialize PostHog globally in create_app() using posthog.api_key and posthog.host (NOT per-request)
+- Manually capture exceptions with `posthog.capture_exception(e)` for error tracking since Flask has built-in error handlers
+- Blueprint registration happens AFTER PostHog initialization in create_app()
+- Remember that source code is available in the venv/site-packages directory
+- posthog is the Python SDK package name
+- Install dependencies with `pip install posthog` or `pip install -r requirements.txt` and do NOT use unquoted version specifiers like `>=` directly in shell commands
+- In CLIs and scripts: MUST call posthog.shutdown() before exit or all events are lost
+- Always use the Posthog() class constructor (instance-based API) instead of module-level posthog.api_key config
+- Always include enable_exception_autocapture=True in the Posthog() constructor to automatically track exceptions
+- NEVER send PII in capture() event properties — no emails, full names, phone numbers, physical addresses, IP addresses, or user-generated content
+- PII belongs in identify() person properties, NOT in capture() event properties. Safe event properties are metadata like message_length, form_type, boolean flags.
+- Register posthog_client.shutdown with atexit.register() to ensure all events are flushed on exit
+- The Python SDK has NO identify() method — use posthog_client.set(distinct_id=user_id, properties={...}) to set person properties, or use identify_context(user_id) within a context
diff --git a/skills/posthog/all/skills/error-tracking-flask/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-flask/references/COMMANDMENTS.md
new file mode 100644
index 00000000..0beac1a3
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-flask/references/COMMANDMENTS.md
@@ -0,0 +1,18 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- Initialize PostHog globally in create_app() using posthog.api_key and posthog.host (NOT per-request)
+- Manually capture exceptions with `posthog.capture_exception(e)` for error tracking since Flask has built-in error handlers
+- Blueprint registration happens AFTER PostHog initialization in create_app()
+- Remember that source code is available in the venv/site-packages directory
+- posthog is the Python SDK package name
+- Install dependencies with `pip install posthog` or `pip install -r requirements.txt` and do NOT use unquoted version specifiers like `>=` directly in shell commands
+- In CLIs and scripts: MUST call posthog.shutdown() before exit or all events are lost
+- Always use the Posthog() class constructor (instance-based API) instead of module-level posthog.api_key config
+- Always include enable_exception_autocapture=True in the Posthog() constructor to automatically track exceptions
+- NEVER send PII in capture() event properties — no emails, full names, phone numbers, physical addresses, IP addresses, or user-generated content
+- PII belongs in identify() person properties, NOT in capture() event properties. Safe event properties are metadata like message_length, form_type, boolean flags.
+- Register posthog_client.shutdown with atexit.register() to ensure all events are flushed on exit
+- The Python SDK has NO identify() method — use posthog_client.set(distinct_id=user_id, properties={...}) to set person properties, or use identify_context(user_id) within a context
diff --git a/skills/posthog/all/skills/error-tracking-flask/references/alerts.md b/skills/posthog/all/skills/error-tracking-flask/references/alerts.md
new file mode 100644
index 00000000..a760ac4e
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-flask/references/alerts.md
@@ -0,0 +1,69 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
+# Send error tracking alerts - Docs
+
+To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
+
+## Issue created or reopened
+
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+
+
+
+Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
+
+This will then send alerts to your chosen destination when an issue is created or reopened like this:
+
+## Issue properties and assignments
+
+You can filter an alert based on the properties of an issue. This is useful for notifying a specific team when they have been auto assigned an issue using [auto assignment rules](/docs/error-tracking/managing-issues.md#auto-assignment-rules).
+
+
+
+## Spike alerts
+
+PostHog can also alert you when an existing issue suddenly spikes in volume - for example, after a bad deploy. This works differently from issue-created alerts. Instead of triggering when a new issue is first seen, spike alerts fire when an issue's error rate significantly exceeds its historical baseline.
+
+See the [spike detection guide](/docs/error-tracking/spikes.md) to learn how it works and how to configure it.
+
+## Other alerting options
+
+Since error tracking works by capturing `$exception` events, PostHog features that trigger by events can play a role in alerts too.
+
+### Real time destinations
+
+The first way is using [real time destinations](/docs/cdp/destinations.md). This enables you to send events (like `$exception`) to other tools as soon as they are ingested.
+
+To create a real time destination, go to the [data pipelines tab](https://app.posthog.com/data-management/destinations) in PostHog, click **\+ New**, and then select **Destination**. Choose your destination and press **\+ Create**.
+
+On the destination creation screen, make sure to add an event matcher for the `$exception` event, filter for the properties you want, and set the trigger options.
+
+
+
+Check out our [real time destinations docs](/docs/cdp/destinations.md) for more information.
+
+### Trend alerts
+
+You can also visualize your `$exception` events using [trends](/docs/product-analytics/trends/overview.md). Once you create a trend insight, click the **Alerts** button at the top of the insight and then **New alert**.
+
+Here you can set alerts for event volume value, increase, or decrease.
+
+
+
+This sends an email notification to the user you choose. Check out our [alerts docs](/docs/alerts.md) for more information.
+
+**Can't find your alert?**
+
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-flask/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-flask/references/assigning-issues.md
new file mode 100644
index 00000000..fe4ddaaa
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-flask/references/assigning-issues.md
@@ -0,0 +1,103 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
+# Assign issues to teammates - Docs
+
+Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
+
+## Assign issues
+
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
+
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
+
+
+
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
+
+Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
+
+
+
+## Automatic issue assignment
+
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
+
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
+
+Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
+
+Issues can be automatically assigned to a **role** or **user** by configuring a set of filters. These filters can be configured to match **any** or **all** of the criteria.
+
+You can configure automatic assignment to filter on any [event property](/docs/data/events.md) in PostHog. When there are multiple values for a property, the filters return true if it matches **any** of the values. For example, if you have multiple `exception_functions` values, the filters returns true if it matches **any** of the functions.
+
+Here are some common properties you can filter on:
+
+| Property | Event property | Description |
+| --- | --- | --- |
+| Exception type | $exception_types | The type of exception(s) that occurred |
+| Exception message | $exception_values | The message(s) detected on the error |
+| Exception function | $exception_functions | The function(s) where the exception occurred |
+| Exception source | $exception_sources | The source file(s) where the exception occurred |
+| Exception was handled | $exception_handled | Whether the exception was handled by the application |
+| Device type | $device_type | The type of device that the error occurred on |
+| Browser | $browser | The browser that the error occurred in |
+| Current URL | $current_url | The URL that the error occurred on |
+| Feature flag | $feature_flag | The feature flag that the error occurred on |
+
+You can also set custom properties on the error tracking event to filter on. For example, setting a custom `params_received` property to provide more context or debug information.
+
+### Order of issue assignment rules
+
+Issue assignment filters are evaluated in the order they are configured. They can also be reordered once created. The first filter that matches is used to assign the issue. This means you should configure the most specific filters first, and then the more general filters later.
+
+### Disabled assignment rules
+
+Assignment rules can become disabled if an error occurs during ingestion. When a rule is disabled, a banner displays the original error message. To re-enable the rule, edit it to fix the problem and save your changes. If the issue persists, reach out to support.
+
+### Alerting based on assignment
+
+A common use case for automatic issue assignment is to alert assignees of new issues. Once the issues are automatically assigned, you can set up alerts to notify the assignee. See the [alerts](/docs/error-tracking/alerts.md) guide for more information.
+
+## Create external issues
+
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
+
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.
+
+
+
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
+
+> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-flask/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-flask/references/fingerprints.md
new file mode 100644
index 00000000..d58a6781
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-flask/references/fingerprints.md
@@ -0,0 +1,63 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
+# Fingerprints - Docs
+
+Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
+
+## Fingerprint and issue grouping
+
+Every exception has a fingerprint, whether generated or defined by the user. Each fingerprint links to exactly one issue. Exceptions that share the same fingerprint define an issue.
+
+Multiple different fingerprints can point to the same issue (a many-to-one relationship) if you [merge issues](/docs/error-tracking/managing-issues.md#merging-issues).
+
+## How are fingerprints generated?
+
+Fingerprints are built iteratively using components of the exception event. The flowchart below shows how fingerprints are generated.
+
+flowchart LR A\[Add exception type to fingerprint\] --> B{Stack trace available?} B -->|No| C\[Add error message to fingerprint\] C --> D\[Final fingerprint\] B -->|Yes| E{In-app frames exist?} E -->|No| F\[Add first frame to fingerprint\] E -->|Yes| G\[Add in-app frame to fingerprint Priority: resolved > unresolved\] F --> D G --> D
+
+The flowchart in text
+
+Fingerprints are generated by considering the following in combination:
+
+1. The exception type
+2. If there's no resolved stack trace, add the error message to the fingerprint
+3. If there are stack traces but no in-app frames (frames from your code, not a dependency), use the first frame of the stack trace
+4. If there are stack traces, in-app frames, and source maps available, use the resolved in-app stack frames
+5. If there are stack traces, in-app frames, and source maps *not* available, use the first in-app stack frame
+
+In some languages, like Python, one error can trigger another, creating a chain of linked exceptions. PostHog records the entire chain in the event and generates a single fingerprint for it.
+
+### Ensuring accurate fingerprints
+
+[Resolved stack traces](/docs/error-tracking/stack-traces.md) are critical for accurate fingerprinting. Without accurate stack traces, PostHog cannot group exceptions consistently. If you have not uploaded source maps, follow the [source map guide](/docs/error-tracking/upload-source-maps.md) to do so.
+
+This also means that if the exception **type** or **message** changes from one version to the next, the fingerprint will change.
+
+## When are generated fingerprints used?
+
+Fingerprints are used to group similar exceptions into issues automatically. Automatic issue grouping is only done when:
+
+- No [issue grouping rules](/docs/error-tracking/grouping-issues.md) are applied
+- No [issue merging](/docs/error-tracking/managing-issues.md#merging-issues) has been configured
+- No [custom fingerprint](#customizing-fingerprints) is set during capture
+
+You can find details about how issue grouping works in the [issues and exceptions](/docs/error-tracking/issues-and-exceptions.md) guide.
+
+## Customizing fingerprints
+
+Fingerprints can be manually set during exception capture. This is a very useful way to group exceptions that are not related to each other. You can find examples of how to do this in the [custom issue grouping](/docs/error-tracking/grouping-issues.md#option-2-client-side-fingerprint) section.
+
+You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-flask/references/flask.md b/skills/posthog/all/skills/error-tracking-flask/references/flask.md
new file mode 100644
index 00000000..560fa82f
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-flask/references/flask.md
@@ -0,0 +1,147 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Flask - Docs
+
+Copy page
+
+# Flask - Docs
+
+PostHog makes it easy to get data about traffic and usage of your Flask app. Integrating PostHog enables analytics, custom events capture, feature flags, error tracking, and more.
+
+This guide walks you through integrating PostHog into your Flask app using the [Python SDK](/docs/libraries/python.md).
+
+> These docs cover version `7.x` of the Python SDK, which requires Python 3.10 or higher. On Python 3.9? See [supported versions](#supported-versions).
+
+## Installation
+
+To start, run `pip install posthog` to install PostHog’s Python SDK.
+
+Then, initialize PostHog where you'd like to use it. For example, here's how to capture an event in a simple route:
+
+app.py
+
+PostHog AI
+
+```python
+from flask import Flask
+from posthog import Posthog
+app = Flask(__name__)
+posthog = Posthog(
+ '',
+ host='https://us.i.posthog.com',
+)
+@app.route('/api/dashboard', methods=['POST'])
+def api_dashboard():
+ posthog.capture(
+ 'dashboard_api_called',
+ distinct_id='distinct_id_of_your_user',
+ )
+ return '', 204
+```
+
+You can find your project token and instance address in [your project settings](https://app.posthog.com/project/settings).
+
+## Identifying users
+
+> **Identifying users is required.** Backend events need a `distinct_id` to associate events with the correct user.
+>
+> In Python, you can do this through a context. All event captures in the same context will be tagged automatically with the correct `distinct_id`. Typically, you would set a fresh context and identify at the top of each route.
+>
+> Python
+>
+> PostHog AI
+>
+> ```python
+> from posthog import new_context, identify_context, capture
+> @app.get("/foo")
+> def foo(current_user: User = Depends(get_current_user)):
+> with new_context(): # Set context at the top of a route
+> identify_context(current_user.id)
+> capture("foo_viewed")
+> return {"status": "ok"}
+> ```
+>
+> When possible, write a small piece of **middleware** that resolves your authenticated user, wrap a context around the request, and identifies it. Every `capture()` downstream is then attributed *automatically*. The SDK's Django middleware does this automatically and you can replicate it when using the plain Python SDK.
+
+## Request contexts
+
+Use [contexts](/docs/libraries/python.md#contexts) to share identity, session IDs, and tags across multiple captures during a request.
+
+If you're using [PostHog JavaScript Web](/docs/libraries/js.md) on the frontend, configure [`tracing_headers`](/docs/libraries/js/config.md#tracing-headers) for your Flask backend hostname so browser requests include the session and distinct ID headers.
+
+Then read the incoming headers in your Flask request handler. Tracing headers are client-controlled analytics context, not authentication or authorization, so prefer your authenticated user ID when one is available:
+
+Python
+
+PostHog AI
+
+```python
+from flask import request, session
+from posthog import identify_context, set_context_session, tag
+@app.route('/api/dashboard', methods=['POST'])
+def api_dashboard():
+ with posthog.new_context(fresh=True):
+ distinct_id = session.get('user_id') or request.headers.get('X-POSTHOG-DISTINCT-ID')
+ if distinct_id:
+ identify_context(str(distinct_id))
+ session_id = request.headers.get('X-POSTHOG-SESSION-ID')
+ if session_id:
+ set_context_session(session_id)
+ tag('$current_url', request.url)
+ tag('$request_method', request.method)
+ tag('$request_path', request.path)
+ posthog.capture('dashboard_api_called')
+ return '', 204
+```
+
+Events captured without a context or explicit `distinct_id` are sent as [anonymous events](/docs/data/anonymous-vs-identified-events.md) with an auto-generated `distinct_id`. See the [Python SDK docs](/docs/libraries/python.md#person-profiles-and-properties) for more details.
+
+## Error tracking
+
+Flask has built-in error handlers. This means PostHog’s default exception autocapture won’t work and we need to manually capture errors instead using `capture_exception()`:
+
+Python
+
+PostHog AI
+
+```python
+from flask import Flask, jsonify
+from posthog import Posthog
+app = Flask(__name__)
+posthog = Posthog('', host='https://us.i.posthog.com')
+@app.errorhandler(Exception)
+def handle_exception(e):
+ # Capture methods, including capture_exception, return the UUID of the captured event,
+ # which you can use to find specific errors users encountered
+ event_id = posthog.capture_exception(e)
+ # You can show the event ID to your user, and ask them to include it in bug reports
+ response = jsonify({'message': str(e), 'error_id': event_id})
+ response.status_code = 500
+ return response
+```
+
+## Next steps
+
+For any technical questions for how to integrate specific PostHog features into Flask (such as analytics, feature flags, A/B testing, etc.), have a look at our [Python SDK docs](/docs/libraries/python.md).
+
+Alternatively, the following tutorials can help you get started:
+
+- [How to set up analytics in Python and Flask](/tutorials/python-analytics.md)
+- [How to set up feature flags in Python and Flask](/tutorials/python-feature-flags.md)
+- [How to set up A/B tests in Python and Flask](/tutorials/python-ab-testing.md)
+
+## Supported versions
+
+These docs cover version `7.x` of the PostHog Python SDK, which requires Python 3.10 or higher. Python 3.9 is no longer supported on `7.x.x` and higher — pin to the 6.x line with `pip install 'posthog<7'`, where `6.9.3` is the final release.
+
+Everything on this page works the same way on `6.9.3`. Event capture, the context API (`new_context`, `identify_context`, `set_context_session`), and `PosthogContextMiddleware` are identical on `6.9.3` and `7.0.0` — `7.0.0` only dropped Python 3.9 and bumped the optional LLM provider SDKs. That includes the middleware identifying the request context from the `X-POSTHOG-DISTINCT-ID` header and falling back to the authenticated user, which behaves the same across both lines.
+
+Later `7.x` releases add what the 6.x line does not receive, such as the Celery integration, tracing header sanitization, and `set_context_device_id`. They also changed the middleware's own captured properties: `7.x` sends the request IP as `$ip`, where `6.9.3` sends it as `$ip_address`, and `7.x` additionally captures `$request_path`, `$raw_user_agent`, and the authenticated user's `email`.
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-flask/references/monitoring.md b/skills/posthog/all/skills/error-tracking-flask/references/monitoring.md
new file mode 100644
index 00000000..6590cab2
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-flask/references/monitoring.md
@@ -0,0 +1,146 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
+# Monitor and search issues - Docs
+
+This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
+
+## Monitoring issues
+
+When you're monitoring issues in your project, there are generally two common workflows:
+
+- You're exploring issues to identify impactful and problematic areas. You should use sorting features.
+- You're looking for issues assigned to you to resolve them. You should filter by the `Assigned to` property.
+
+### Sorting issues
+
+Issues can be sorted by the following properties:
+
+| Property | Description |
+| --- | --- |
+| Last seen | The issue that has the most recent exception |
+| First seen | The issue that has the oldest exception |
+| Occurrences | The number of exceptions in the issue |
+| Users | The number of unique users affected by the issue |
+| Sessions | The number of unique sessions affected by the issue |
+
+Sorting by **last seen** and **occurrences** are great ways to get a general sense of issues in your project. Sorting by **users** and **sessions** is great to find the most impactful issues if you're using other [filters](#finding-specific-issues) to narrow down your results.
+
+### Monitoring issues assigned to you
+
+You can filter issues by the **Assigned to** property to find issues assigned to you. This is especially useful if you configure [automatic issue assignment](/docs/error-tracking/assigning-issues.md) and configure [alerts](/docs/error-tracking/alerts.md) to notify you when new issues are created.
+
+## Finding specific issues
+
+You can use the search bar at the top of the [issue page](https://app.posthog.com/error_tracking) to filter issues based on the properties of the exceptions in that issue.
+
+Search results are matched based on [properties of exception events](/docs/error-tracking/issues-and-exceptions.md) grouped into the issues. For example, if you search for "TypeError", we show you all issues where *any* exception grouped into the issue has a type of "TypeError".
+
+**Unrelated results**
+
+You may see seemingly unrelated issues in your search results because your search term matches an exception in the issue group. For example, you may see an issues named `RefreshError` when searching "schema", because a `get_schema` method appears on the exception stack traces.
+
+### Filtering modes
+
+The search bar provides two modes of filtering:
+
+#### 1\. Exact property filtering
+
+This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
+
+
+
+Added property filters look like this:
+
+
+
+The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
+
+#### 2\. Freeform text search
+
+This does text matching for a subset of the error tracking specific properties of the exception event. It splits the text you give it into tokens. The search matches an exception if *each* of the tokens in your search term appear in one of the following:
+
+- The exception type
+- The exception message
+- The function names in the exception stack trace (if known)
+- The file paths in the exception stack trace (if known)
+
+For example, imagine you have an exception that looks like this:
+
+PostHog AI
+
+```
+TypeError: Cannot read property 'name' of undefined
+ at Object. (/path/to/myfile.js:123:45)
+ at Module._compile (module.js:653:30)
+ at Object.Module._extensions..js (module.js:664:10)
+ at Module.load (module.js:566:32)
+ at tryModuleLoad (module.js:506:12)
+ at Function.Module._load (module.js:498:3)
+ at Function.Module.runMain (module.js:694:10)
+ at startup (bootstrap_node.js:204:16)
+ at bootstrap_node.js:625:3
+```
+
+If you search for the term `TypeError myfile.js`, the exception matches this search, as it contains `TypeError` (as the exception type) and `myfile.js` (as a file path in the stack trace).
+
+If you search for `TypeError myfile.js abc`, the exception would not match, as the token `abc` does not appear anywhere in freeform search properties.
+
+If you want to search for longer exact strings, e.g. a particular exception message, you can group tokens into a single term using quotes, e.g. `"Cannot read property 'name' of undefined" myfile.js` would match, and `"Cannot read property of myfile.js"` would not.
+
+Note, perhaps unintuitively, `Cannot read property of myfile.js` would match, because the tokens are ungrouped, and all of them appear *somewhere* in the exception search properties.
+
+### Searching chained exceptions
+
+Exception events can have more than one exception in them, due to language features like exception chaining. For freeform search, we put the types, messages, functions and file paths of all exceptions into one list, and match if the token appears in any of them.
+
+For example, if you had a chained exception with the messages `MyCustomError: Failed to load user` and `Cannot read property 'age' of undefined`, searching for `cannot read property` would match the exception, because it matches *one* of the exception messages (`property` appears in the "root" one).
+
+## Issue details
+
+When you click on an issue, you'll see the details page of the issue.
+
+This page shows you the following:
+
+- The stack trace, properties, and sessions related to the **currently selected exception**.
+- Name, description, status, assignee, and external tracking links for the issue.
+- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
+
+
+
+### Filtering exception occurrences within an issue
+
+Once you've found and opened the issue you want to investigate, you can use the same search interface to filter the exception list for a particular instance of the issue. This is particularly useful in cases where some exceptions in the issue have information others don't and you want to use that information for debugging.
+
+For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
+
+
+
+**Alerts**
+
+If you have a set of filters that you use often, you can create alerts for them. This way you can be notified when new issues match your filters. Learn more about [alerts](/docs/error-tracking/alerts.md).
+
+## Improving search performance
+
+We try to return results to you within a second, but sometimes if you're querying over large amounts of data, it may take longer. The following can improve the search performance:
+
+- **Limit the time range you're searching over:** 7 days is usually enough to get a sense for the trends of an issue over time.
+
+- **Use freeform search rather than property filters:** Our freeform searches are generally faster than property filters, as the total amount of data processed is smaller.
+
+If you find your queries timing out or taking more than 30 seconds, please [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue)! We're always looking for benchmarks to improve against.
+
+## Suppressing issues
+
+If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-flask/references/python.md b/skills/posthog/all/skills/error-tracking-flask/references/python.md
new file mode 100644
index 00000000..f442432b
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-flask/references/python.md
@@ -0,0 +1,191 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Python Error Tracking installation - Docs
+
+Copy page
+
+# Python Error Tracking installation - Docs
+
+1. 1
+
+ ## Install the package
+
+ Required
+
+ Install the PostHog Python library using pip:
+
+ Terminal
+
+ PostHog AI
+
+ ```bash
+ pip install posthog
+ ```
+
+2. 2
+
+ ## Initialize PostHog
+
+ Required
+
+ Initialize the PostHog client with your project token and host from your project settings:
+
+ Python
+
+ PostHog AI
+
+ ```python
+ from posthog import Posthog
+ posthog = Posthog(
+ project_api_key='',
+ host='https://us.i.posthog.com'
+ )
+ ```
+
+ **Django integration**
+
+ If you're using Django, check out our [Django integration](/docs/libraries/django.md) for automatic request tracking.
+
+3. 3
+
+ ## Send events
+
+ Recommended
+
+ Once installed, PostHog will automatically start capturing events. You can also manually send events to test your integration:
+
+ Capture custom events by calling the `capture` method with an event name and properties:
+
+ Python
+
+ PostHog AI
+
+ ```python
+ import posthog
+ posthog.capture('user_signed_up', distinct_id='user_123', properties={'example_property': 'example_value'})
+ ```
+
+4. ## Verify PostHog is initialized
+
+ Recommended
+
+ Before proceeding, enable debug and call `posthog.capture('test_event')` to make sure you can capture events.
+
+5. 4
+
+ ## Setting up exception autocapture
+
+ Recommended
+
+ Exception autocapture can be enabled during initialization of the PostHog client to automatically capture any unhandled exceptions thrown by your Python application. It works by setting Python's built-in exception hooks, such as `sys.excepthook` and `threading.excepthook`.
+
+ Python
+
+ PostHog AI
+
+ ```python
+ from posthog import Posthog
+ posthog = Posthog("", enable_exception_autocapture=True, ...)
+ ```
+
+ We recommend setting up and using [contexts](/docs/libraries/python.md#contexts) so that exceptions automatically include distinct IDs, session IDs, and other properties you can set up with tags.
+
+ You can also enable [code variables capture](/docs/error-tracking/code-variables/python.md) to automatically capture the state of local variables when exceptions occur, giving you a debugger-like view of your application.
+
+6. 5
+
+ ## Manually capturing exceptions
+
+ Optional
+
+ For exceptions handled by your application that you would still like sent to PostHog, you can manually call the capture method:
+
+ Python
+
+ PostHog AI
+
+ ```python
+ posthog.capture_exception(e, distinct_id="user_distinct_id", properties=additional_properties)
+ ```
+
+ You can find a full example of all of this in our [Python (and Flask) error tracking tutorial](/tutorials/python-error-tracking.md).
+
+7. 6
+
+ ## Framework-specific exception capture
+
+ Optional
+
+ Python frameworks often have built-in error handlers. This means PostHog's default exception autocapture won't work and we need to manually capture errors instead. The exact process depends on the framework:
+
+ ## Django
+
+ The Python SDK provides a Django middleware that automatically wraps all requests with a [context](/docs/libraries/python.md#contexts). Add the middleware to your Django settings:
+
+ Python
+
+ PostHog AI
+
+ ```python
+ MIDDLEWARE = [
+ # ... other middleware
+ 'posthog.integrations.django.PosthogContextMiddleware',
+ # ... other middleware
+ ]
+ ```
+
+ By default, the middleware captures exceptions and sends them to PostHog. Disable with `POSTHOG_MW_CAPTURE_EXCEPTIONS = False`. Use `POSTHOG_MW_EXTRA_TAGS`, `POSTHOG_MW_REQUEST_FILTER`, and `POSTHOG_MW_TAG_MAP` to customize. See the [Django integration docs](/docs/libraries/django.md) for full configuration.
+
+ ## Flask
+
+ Python
+
+ PostHog AI
+
+ ```python
+ from flask import Flask, jsonify
+ from posthog import Posthog
+ posthog = Posthog('', host='https://us.i.posthog.com')
+ @app.errorhandler(Exception)
+ def handle_exception(e):
+ event_id = posthog.capture_exception(e)
+ response = jsonify({'message': str(e), 'error_id': event_id})
+ response.status_code = 500
+ return response
+ ```
+
+ ## FastAPI
+
+ Python
+
+ PostHog AI
+
+ ```python
+ from fastapi.responses import JSONResponse
+ from posthog import Posthog
+ posthog = Posthog('', host='https://us.i.posthog.com')
+ @app.exception_handler(Exception)
+ async def http_exception_handler(request, exc):
+ posthog.capture_exception(exc)
+ return JSONResponse(status_code=500, content={'message': str(exc)})
+ ```
+
+8. ## Verify error tracking
+
+ Recommended
+
+ *Confirm events are being sent to PostHog*
+
+ Before proceeding, let's make sure exception events are being captured and sent to PostHog. You should see events appear in the activity feed.
+
+ 
+
+ [Check for exceptions in PostHog](https://app.posthog.com/activity/explore)
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-flask/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-flask/references/upload-source-maps.md
new file mode 100644
index 00000000..b6ae318f
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-flask/references/upload-source-maps.md
@@ -0,0 +1,67 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
+# Upload source maps - Docs
+
+If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
+
+If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
+
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
+
+- [Web](/docs/error-tracking/upload-source-maps/web.md)
+
+- [Next.js](/docs/error-tracking/upload-source-maps/nextjs.md)
+
+- [Node.js](/docs/error-tracking/upload-source-maps/node.md)
+
+- [React](/docs/error-tracking/upload-source-maps/react.md)
+
+- [Angular](/docs/error-tracking/upload-source-maps/angular.md)
+
+- [Nuxt](/docs/error-tracking/upload-source-maps/nuxt.md)
+
+- [React Native](/docs/error-tracking/upload-source-maps/react-native.md)
+
+- [Android](/docs/error-tracking/upload-mappings/android.md)
+
+- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
+- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
+- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
+
+- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
+
+- [Vite](/docs/error-tracking/upload-source-maps/vite.md)
+
+- [CLI](/docs/error-tracking/upload-source-maps/cli.md)
+
+- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-flutter/SKILL.md b/skills/posthog/all/skills/error-tracking-flutter/SKILL.md
index b020d3ee..76c90553 100644
--- a/skills/posthog/all/skills/error-tracking-flutter/SKILL.md
+++ b/skills/posthog/all/skills/error-tracking-flutter/SKILL.md
@@ -3,7 +3,7 @@ name: error-tracking-flutter
description: PostHog error tracking for Flutter
metadata:
author: PostHog
- version: 1.9.4
+ version: dev
---
# PostHog error tracking for Flutter
@@ -18,6 +18,7 @@ This skill helps you add PostHog error tracking to Flutter applications.
- `references/monitoring.md` - Monitor and search issues - docs
- `references/assigning-issues.md` - Assign issues to teammates - docs
- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
Consult the documentation for API details and framework-specific patterns.
@@ -31,4 +32,13 @@ Consult the documentation for API details and framework-specific patterns.
## Framework guidelines
-_No specific framework guidelines._
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- posthog_flutter is the Flutter SDK package name; install it with `flutter pub add posthog_flutter` or add it to `pubspec.yaml`
+- For manual setup, call `WidgetsFlutterBinding.ensureInitialized()`, create a `PostHogConfig`, then await `Posthog().setup(config)` before `runApp()`
+- For Android, ensure `minSdkVersion` is at least `23`. If the current value is lower than `23` or missing, update/add it as `minSdkVersion 23`; if it is already `23` or higher, leave it unchanged. Configure `com.posthog.posthog.PROJECT_TOKEN` and `com.posthog.posthog.POSTHOG_HOST` in `android/app/src/main/AndroidManifest.xml` unless using manual setup with `AUTO_INIT=false`
+- For iOS, ensure the minimum deployment target is at least iOS `13.0`. If the current `platform :ios` value is lower than `13.0` or missing, update/add it as `platform :ios, '13.0'`; if it is already `13.0` or higher, leave it unchanged. Configure `com.posthog.posthog.PROJECT_TOKEN` and `com.posthog.posthog.POSTHOG_HOST` in `ios/Runner/Info.plist` unless using manual setup
+- For Session Replay or Surveys, disable auto-init with `com.posthog.posthog.AUTO_INIT=false` and initialize manually so the required options can be enabled
+- For Flutter Web, add the posthog-js web snippet to `web/index.html`. If you are instructed to ever embed the HTML snippet into the user's code, write the real token directly into the snippet. It is not a secret, and when used as an HTML snippet, it should be written in literally. The example token phc_your_project_token_here is a placeholder for readers. It is not the shape to copy. Flutter Web session replay also requires Canvas capture in project settings
+- Capture screen views by adding `PosthogObserver()` to the app's `navigatorObservers`, whatever routing package the app uses; where its routes are unnamed, name them so `$screen` is readable
+- Call `Posthog().identify(...)` after login and `Posthog().reset()` on logout; keep PII in user properties, not event properties
+- Use `beforeSend` to redact or drop Dart-captured events, but remember it does not intercept native session replay, lifecycle, or system properties
diff --git a/skills/posthog/all/skills/error-tracking-flutter/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-flutter/references/COMMANDMENTS.md
new file mode 100644
index 00000000..58624ee9
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-flutter/references/COMMANDMENTS.md
@@ -0,0 +1,14 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- posthog_flutter is the Flutter SDK package name; install it with `flutter pub add posthog_flutter` or add it to `pubspec.yaml`
+- For manual setup, call `WidgetsFlutterBinding.ensureInitialized()`, create a `PostHogConfig`, then await `Posthog().setup(config)` before `runApp()`
+- For Android, ensure `minSdkVersion` is at least `23`. If the current value is lower than `23` or missing, update/add it as `minSdkVersion 23`; if it is already `23` or higher, leave it unchanged. Configure `com.posthog.posthog.PROJECT_TOKEN` and `com.posthog.posthog.POSTHOG_HOST` in `android/app/src/main/AndroidManifest.xml` unless using manual setup with `AUTO_INIT=false`
+- For iOS, ensure the minimum deployment target is at least iOS `13.0`. If the current `platform :ios` value is lower than `13.0` or missing, update/add it as `platform :ios, '13.0'`; if it is already `13.0` or higher, leave it unchanged. Configure `com.posthog.posthog.PROJECT_TOKEN` and `com.posthog.posthog.POSTHOG_HOST` in `ios/Runner/Info.plist` unless using manual setup
+- For Session Replay or Surveys, disable auto-init with `com.posthog.posthog.AUTO_INIT=false` and initialize manually so the required options can be enabled
+- For Flutter Web, add the posthog-js web snippet to `web/index.html`. If you are instructed to ever embed the HTML snippet into the user's code, write the real token directly into the snippet. It is not a secret, and when used as an HTML snippet, it should be written in literally. The example token phc_your_project_token_here is a placeholder for readers. It is not the shape to copy. Flutter Web session replay also requires Canvas capture in project settings
+- Capture screen views by adding `PosthogObserver()` to the app's `navigatorObservers`, whatever routing package the app uses; where its routes are unnamed, name them so `$screen` is readable
+- Call `Posthog().identify(...)` after login and `Posthog().reset()` on logout; keep PII in user properties, not event properties
+- Use `beforeSend` to redact or drop Dart-captured events, but remember it does not intercept native session replay, lifecycle, or system properties
diff --git a/skills/posthog/all/skills/error-tracking-flutter/references/alerts.md b/skills/posthog/all/skills/error-tracking-flutter/references/alerts.md
index 94653a53..a760ac4e 100644
--- a/skills/posthog/all/skills/error-tracking-flutter/references/alerts.md
+++ b/skills/posthog/all/skills/error-tracking-flutter/references/alerts.md
@@ -1,12 +1,18 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
# Send error tracking alerts - Docs
To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
## Issue created or reopened
-To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
-
+
Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
@@ -52,11 +58,11 @@ This sends an email notification to the user you choose. Check out our [alerts d
**Can't find your alert?**
-If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/project/2#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-flutter/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-flutter/references/assigning-issues.md
index 77bb0f72..fe4ddaaa 100644
--- a/skills/posthog/all/skills/error-tracking-flutter/references/assigning-issues.md
+++ b/skills/posthog/all/skills/error-tracking-flutter/references/assigning-issues.md
@@ -1,26 +1,40 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
# Assign issues to teammates - Docs
Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
## Assign issues
-You can manually assign issues as you triage them in the UI. This can be done both in the issue list and issue detail pages.
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
-
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
-1. In your error tracking [issue list](https://app.posthog.com/error_tracking), click the **unassigned** selector under each issue to assign it to a role or user.
+
-2. On the detail page of each issue, click the **Assignee** selector to assign it to a role or user.
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
-
+
## Automatic issue assignment
-You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**.
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
-
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
@@ -58,19 +72,31 @@ A common use case for automatic issue assignment is to alert assignees of new is
## Create external issues
-You can also create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira.
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
-First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system. Then, from an issue's details page, under **External references**, click **Create issue**.
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.

-The new issue will have a partial stack trace and a link to the issue in PostHog.
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-flutter/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-flutter/references/fingerprints.md
index 324758ce..d58a6781 100644
--- a/skills/posthog/all/skills/error-tracking-flutter/references/fingerprints.md
+++ b/skills/posthog/all/skills/error-tracking-flutter/references/fingerprints.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
# Fingerprints - Docs
Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
@@ -48,9 +54,9 @@ Fingerprints can be manually set during exception capture. This is a very useful
You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-flutter/references/flutter.md b/skills/posthog/all/skills/error-tracking-flutter/references/flutter.md
index 86a79679..388ea1c3 100644
--- a/skills/posthog/all/skills/error-tracking-flutter/references/flutter.md
+++ b/skills/posthog/all/skills/error-tracking-flutter/references/flutter.md
@@ -1,4 +1,10 @@
-# Flutter error tracking installation - Docs
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Flutter Error Tracking installation - Docs
+
+Copy page
+
+# Flutter Error Tracking installation - Docs
1. 1
@@ -13,7 +19,7 @@
PostHog AI
```yaml
- posthog_flutter: ^5.0.0
+ posthog_flutter: ^5.24.0
```
2. 2
@@ -35,7 +41,7 @@
[...]
-
+
@@ -50,7 +56,7 @@
```groovy
defaultConfig {
- minSdkVersion 21
+ minSdkVersion 23
// rest of your config
}
```
@@ -66,7 +72,7 @@
```xml
[...]
- com.posthog.posthog.API_KEY
+ com.posthog.posthog.PROJECT_TOKENcom.posthog.posthog.POSTHOG_HOSThttps://us.i.posthog.com
@@ -102,10 +108,10 @@
...
@@ -159,6 +165,7 @@
config.errorTrackingConfig.captureFlutterErrors = true;
config.errorTrackingConfig.capturePlatformDispatcherErrors = true;
config.errorTrackingConfig.captureIsolateErrors = true;
+ // Requires SDK version 5.22.0 or higher
config.errorTrackingConfig.captureNativeExceptions = true;
config.errorTrackingConfig.captureSilentFlutterErrors = false;
await Posthog().setup(config);
@@ -171,7 +178,7 @@
| captureFlutterErrors | Captures Flutter framework errors (FlutterError.onError) |
| capturePlatformDispatcherErrors | Captures Dart runtime errors (PlatformDispatcher.onError). Web not supported. |
| captureIsolateErrors | Captures errors from main isolate. Web not supported. |
- | captureNativeExceptions | Captures native exceptions (Java/Kotlin exceptions). Android only. |
+ | captureNativeExceptions | Captures native exceptions. Android (Java/Kotlin) and Apple platforms (iOS, macOS, tvOS). |
| captureSilentFlutterErrors | Captures Flutter errors that are marked as silent. Default: false. |
5. 5
@@ -247,12 +254,12 @@
We currently don't support the following features:
- No de-obfuscating stacktraces from obfuscated builds ([\--obfuscate](https://docs.flutter.dev/deployment/obfuscate) and [\--split-debug-info](https://docs.flutter.dev/deployment/obfuscate)) for Dart code
- - No de-obfuscating stacktraces when [isMinifyEnabled](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization) is enabled for Java/Kotlin code
- - No [Source code context](/docs/error-tracking/stack-traces.md) associated with an exception
- - No native iOS exception capture
+ - No [Source code context](/docs/error-tracking/stack-traces.md) associated with an exception (native Android Java/Kotlin errors and Flutter web only)
- No native C/C++ exception capture on Android (Java/Kotlin only)
- No background isolate error capture
+ For symbolicated stack traces on native platforms, see the [Flutter debug symbols guide](/docs/error-tracking/upload-source-maps/flutter.md).
+
These features will be added in future releases. We recommend you stay up to date with the latest version of the PostHog Flutter SDK.
7. ## Verify error tracking
@@ -279,9 +286,9 @@
[Upload source maps](/docs/error-tracking/upload-source-maps/flutter.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-flutter/references/monitoring.md b/skills/posthog/all/skills/error-tracking-flutter/references/monitoring.md
index d7383fdd..6590cab2 100644
--- a/skills/posthog/all/skills/error-tracking-flutter/references/monitoring.md
+++ b/skills/posthog/all/skills/error-tracking-flutter/references/monitoring.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
# Monitor and search issues - Docs
This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
@@ -45,11 +51,11 @@ The search bar provides two modes of filtering:
This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
-
+
Added property filters look like this:
-
+
The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
@@ -103,7 +109,7 @@ This page shows you the following:
- Name, description, status, assignee, and external tracking links for the issue.
- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
-
+
### Filtering exception occurrences within an issue
@@ -111,7 +117,7 @@ Once you've found and opened the issue you want to investigate, you can use the
For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
-
+
**Alerts**
@@ -131,9 +137,9 @@ If you find your queries timing out or taking more than 30 seconds, please [let
If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-flutter/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-flutter/references/upload-source-maps.md
index 178a4ab8..b6ae318f 100644
--- a/skills/posthog/all/skills/error-tracking-flutter/references/upload-source-maps.md
+++ b/skills/posthog/all/skills/error-tracking-flutter/references/upload-source-maps.md
@@ -1,10 +1,26 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
# Upload source maps - Docs
If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
-Choose your platform to view specific instructions.
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
- [Web](/docs/error-tracking/upload-source-maps/web.md)
@@ -24,8 +40,14 @@ Choose your platform to view specific instructions.
- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
@@ -36,9 +58,9 @@ Choose your platform to view specific instructions.
- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-go/SKILL.md b/skills/posthog/all/skills/error-tracking-go/SKILL.md
index 016c9c85..ba10036d 100644
--- a/skills/posthog/all/skills/error-tracking-go/SKILL.md
+++ b/skills/posthog/all/skills/error-tracking-go/SKILL.md
@@ -3,7 +3,7 @@ name: error-tracking-go
description: PostHog error tracking for Go
metadata:
author: PostHog
- version: 1.9.4
+ version: dev
---
# PostHog error tracking for Go
@@ -18,6 +18,7 @@ This skill helps you add PostHog error tracking to Go applications.
- `references/monitoring.md` - Monitor and search issues - docs
- `references/assigning-issues.md` - Assign issues to teammates - docs
- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
Consult the documentation for API details and framework-specific patterns.
@@ -31,4 +32,14 @@ Consult the documentation for API details and framework-specific patterns.
## Framework guidelines
-_No specific framework guidelines._
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- posthog-go is the Go SDK package; install it with `go get github.com/posthog/posthog-go` and import `github.com/posthog/posthog-go`
+- Create one PostHog client per process with `posthog.NewWithConfig(...)`; do not create a new client per request or job
+- Always close the client during graceful shutdown with `client.Close()` so queued events flush before the process exits
+- Configure the project token, endpoint, and optional personal API key from environment variables; never hardcode PostHog secrets
+- Server-side captures must set `DistinctId` to a stable user ID that matches frontend identify calls; avoid anonymous or literal IDs for business events
+- Use `posthog.NewProperties().Set(...)` for event properties and keep PII in person properties via `$set`, not in event properties
+- For new feature flag code, prefer `client.EvaluateFlags(...)` once per user/request, then use the returned snapshot's `IsEnabled` or `GetFlag` methods
+- When capturing events related to feature-gated code, attach the evaluated flag snapshot with `Flags`, optionally filtered with `OnlyAccessed()` or `Only(...)`
+- Avoid deprecated feature flag helpers such as `IsFeatureEnabled`, `GetFeatureFlag`, `GetFeatureFlagPayload`, and `Capture.SendFeatureFlags` in new code
+- For error tracking, use `posthog.NewDefaultException(...)` for direct captures or wrap `log/slog` with `posthog.NewSlogCaptureHandler(...)` for automatic warning-and-above exception capture
diff --git a/skills/posthog/all/skills/error-tracking-go/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-go/references/COMMANDMENTS.md
new file mode 100644
index 00000000..68b721fe
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-go/references/COMMANDMENTS.md
@@ -0,0 +1,15 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- posthog-go is the Go SDK package; install it with `go get github.com/posthog/posthog-go` and import `github.com/posthog/posthog-go`
+- Create one PostHog client per process with `posthog.NewWithConfig(...)`; do not create a new client per request or job
+- Always close the client during graceful shutdown with `client.Close()` so queued events flush before the process exits
+- Configure the project token, endpoint, and optional personal API key from environment variables; never hardcode PostHog secrets
+- Server-side captures must set `DistinctId` to a stable user ID that matches frontend identify calls; avoid anonymous or literal IDs for business events
+- Use `posthog.NewProperties().Set(...)` for event properties and keep PII in person properties via `$set`, not in event properties
+- For new feature flag code, prefer `client.EvaluateFlags(...)` once per user/request, then use the returned snapshot's `IsEnabled` or `GetFlag` methods
+- When capturing events related to feature-gated code, attach the evaluated flag snapshot with `Flags`, optionally filtered with `OnlyAccessed()` or `Only(...)`
+- Avoid deprecated feature flag helpers such as `IsFeatureEnabled`, `GetFeatureFlag`, `GetFeatureFlagPayload`, and `Capture.SendFeatureFlags` in new code
+- For error tracking, use `posthog.NewDefaultException(...)` for direct captures or wrap `log/slog` with `posthog.NewSlogCaptureHandler(...)` for automatic warning-and-above exception capture
diff --git a/skills/posthog/all/skills/error-tracking-go/references/alerts.md b/skills/posthog/all/skills/error-tracking-go/references/alerts.md
index 94653a53..a760ac4e 100644
--- a/skills/posthog/all/skills/error-tracking-go/references/alerts.md
+++ b/skills/posthog/all/skills/error-tracking-go/references/alerts.md
@@ -1,12 +1,18 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
# Send error tracking alerts - Docs
To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
## Issue created or reopened
-To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
-
+
Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
@@ -52,11 +58,11 @@ This sends an email notification to the user you choose. Check out our [alerts d
**Can't find your alert?**
-If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/project/2#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-go/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-go/references/assigning-issues.md
index 77bb0f72..fe4ddaaa 100644
--- a/skills/posthog/all/skills/error-tracking-go/references/assigning-issues.md
+++ b/skills/posthog/all/skills/error-tracking-go/references/assigning-issues.md
@@ -1,26 +1,40 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
# Assign issues to teammates - Docs
Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
## Assign issues
-You can manually assign issues as you triage them in the UI. This can be done both in the issue list and issue detail pages.
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
-
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
-1. In your error tracking [issue list](https://app.posthog.com/error_tracking), click the **unassigned** selector under each issue to assign it to a role or user.
+
-2. On the detail page of each issue, click the **Assignee** selector to assign it to a role or user.
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
-
+
## Automatic issue assignment
-You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**.
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
-
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
@@ -58,19 +72,31 @@ A common use case for automatic issue assignment is to alert assignees of new is
## Create external issues
-You can also create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira.
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
-First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system. Then, from an issue's details page, under **External references**, click **Create issue**.
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.

-The new issue will have a partial stack trace and a link to the issue in PostHog.
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-go/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-go/references/fingerprints.md
index 324758ce..d58a6781 100644
--- a/skills/posthog/all/skills/error-tracking-go/references/fingerprints.md
+++ b/skills/posthog/all/skills/error-tracking-go/references/fingerprints.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
# Fingerprints - Docs
Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
@@ -48,9 +54,9 @@ Fingerprints can be manually set during exception capture. This is a very useful
You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-go/references/go.md b/skills/posthog/all/skills/error-tracking-go/references/go.md
index 9ecf6d1a..895058cb 100644
--- a/skills/posthog/all/skills/error-tracking-go/references/go.md
+++ b/skills/posthog/all/skills/error-tracking-go/references/go.md
@@ -1,4 +1,10 @@
-# Go error tracking installation - Docs
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Go Error Tracking installation - Docs
+
+Copy page
+
+# Go Error Tracking installation - Docs
1. 1
@@ -16,9 +22,9 @@
go get github.com/posthog/posthog-go
```
- **Source context not yet supported**
+ **Debug symbol uploads**
- The Go SDK captures stack traces with file names, line numbers, and function names, but does not yet support source context (displaying the surrounding lines of code in the error tracking UI). Symbol set uploads for Go are not currently available.
+ The Go SDK resolves stack traces in-process, so captured frames include file names, line numbers, function names, and inlined calls without any symbol uploads. To also see source context (the surrounding lines of code in the error tracking UI), [upload debug symbols](/docs/error-tracking/upload-source-maps/go.md). That needs posthog-go 1.22.0 or later.
2. 2
@@ -106,6 +112,8 @@
client.Enqueue(exception)
```
+ To see how `net/http` services can automatically associate backend exceptions with frontend users, view the [Go request context documentation](/docs/libraries/go.md#request-context).
+
### Option B: Automatic capture with slog
The SDK provides a `SlogCaptureHandler` that wraps Go's standard `log/slog` logger and automatically captures log records as exceptions.
@@ -185,9 +193,9 @@
client.Close()
```
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-go/references/monitoring.md b/skills/posthog/all/skills/error-tracking-go/references/monitoring.md
index d7383fdd..6590cab2 100644
--- a/skills/posthog/all/skills/error-tracking-go/references/monitoring.md
+++ b/skills/posthog/all/skills/error-tracking-go/references/monitoring.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
# Monitor and search issues - Docs
This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
@@ -45,11 +51,11 @@ The search bar provides two modes of filtering:
This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
-
+
Added property filters look like this:
-
+
The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
@@ -103,7 +109,7 @@ This page shows you the following:
- Name, description, status, assignee, and external tracking links for the issue.
- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
-
+
### Filtering exception occurrences within an issue
@@ -111,7 +117,7 @@ Once you've found and opened the issue you want to investigate, you can use the
For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
-
+
**Alerts**
@@ -131,9 +137,9 @@ If you find your queries timing out or taking more than 30 seconds, please [let
If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-go/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-go/references/upload-source-maps.md
index 178a4ab8..b6ae318f 100644
--- a/skills/posthog/all/skills/error-tracking-go/references/upload-source-maps.md
+++ b/skills/posthog/all/skills/error-tracking-go/references/upload-source-maps.md
@@ -1,10 +1,26 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
# Upload source maps - Docs
If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
-Choose your platform to view specific instructions.
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
- [Web](/docs/error-tracking/upload-source-maps/web.md)
@@ -24,8 +40,14 @@ Choose your platform to view specific instructions.
- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
@@ -36,9 +58,9 @@ Choose your platform to view specific instructions.
- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-hono/SKILL.md b/skills/posthog/all/skills/error-tracking-hono/SKILL.md
index eef3f8a4..1cccc1f9 100644
--- a/skills/posthog/all/skills/error-tracking-hono/SKILL.md
+++ b/skills/posthog/all/skills/error-tracking-hono/SKILL.md
@@ -3,7 +3,7 @@ name: error-tracking-hono
description: PostHog error tracking for Hono
metadata:
author: PostHog
- version: 1.9.4
+ version: dev
---
# PostHog error tracking for Hono
@@ -18,6 +18,7 @@ This skill helps you add PostHog error tracking to Hono applications.
- `references/monitoring.md` - Monitor and search issues - docs
- `references/assigning-issues.md` - Assign issues to teammates - docs
- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
Consult the documentation for API details and framework-specific patterns.
@@ -31,4 +32,7 @@ Consult the documentation for API details and framework-specific patterns.
## Framework guidelines
-_No specific framework guidelines._
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- Remember that source code is available in the node_modules directory
+- Check package.json for type checking or build scripts to validate changes
+- When identity comes from framework-bridged state (Inertia or SSR shared props, a serialized session), confirm the backend actually shares that field — add the share server-side if missing — before identifying from it
diff --git a/skills/posthog/all/skills/error-tracking-hono/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-hono/references/COMMANDMENTS.md
new file mode 100644
index 00000000..64d91138
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-hono/references/COMMANDMENTS.md
@@ -0,0 +1,8 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- Remember that source code is available in the node_modules directory
+- Check package.json for type checking or build scripts to validate changes
+- When identity comes from framework-bridged state (Inertia or SSR shared props, a serialized session), confirm the backend actually shares that field — add the share server-side if missing — before identifying from it
diff --git a/skills/posthog/all/skills/error-tracking-hono/references/alerts.md b/skills/posthog/all/skills/error-tracking-hono/references/alerts.md
index 94653a53..a760ac4e 100644
--- a/skills/posthog/all/skills/error-tracking-hono/references/alerts.md
+++ b/skills/posthog/all/skills/error-tracking-hono/references/alerts.md
@@ -1,12 +1,18 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
# Send error tracking alerts - Docs
To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
## Issue created or reopened
-To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
-
+
Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
@@ -52,11 +58,11 @@ This sends an email notification to the user you choose. Check out our [alerts d
**Can't find your alert?**
-If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/project/2#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-hono/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-hono/references/assigning-issues.md
index 77bb0f72..fe4ddaaa 100644
--- a/skills/posthog/all/skills/error-tracking-hono/references/assigning-issues.md
+++ b/skills/posthog/all/skills/error-tracking-hono/references/assigning-issues.md
@@ -1,26 +1,40 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
# Assign issues to teammates - Docs
Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
## Assign issues
-You can manually assign issues as you triage them in the UI. This can be done both in the issue list and issue detail pages.
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
-
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
-1. In your error tracking [issue list](https://app.posthog.com/error_tracking), click the **unassigned** selector under each issue to assign it to a role or user.
+
-2. On the detail page of each issue, click the **Assignee** selector to assign it to a role or user.
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
-
+
## Automatic issue assignment
-You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**.
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
-
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
@@ -58,19 +72,31 @@ A common use case for automatic issue assignment is to alert assignees of new is
## Create external issues
-You can also create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira.
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
-First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system. Then, from an issue's details page, under **External references**, click **Create issue**.
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.

-The new issue will have a partial stack trace and a link to the issue in PostHog.
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-hono/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-hono/references/fingerprints.md
index 324758ce..d58a6781 100644
--- a/skills/posthog/all/skills/error-tracking-hono/references/fingerprints.md
+++ b/skills/posthog/all/skills/error-tracking-hono/references/fingerprints.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
# Fingerprints - Docs
Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
@@ -48,9 +54,9 @@ Fingerprints can be manually set during exception capture. This is a very useful
You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-hono/references/hono.md b/skills/posthog/all/skills/error-tracking-hono/references/hono.md
index d0fe0b6c..4409ffbf 100644
--- a/skills/posthog/all/skills/error-tracking-hono/references/hono.md
+++ b/skills/posthog/all/skills/error-tracking-hono/references/hono.md
@@ -1,4 +1,10 @@
-# Hono error tracking installation - Docs
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Hono Error Tracking installation - Docs
+
+Copy page
+
+# Hono Error Tracking installation - Docs
1. 1
@@ -128,9 +134,9 @@
[Upload source maps](/docs/error-tracking/upload-source-maps.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-hono/references/monitoring.md b/skills/posthog/all/skills/error-tracking-hono/references/monitoring.md
index d7383fdd..6590cab2 100644
--- a/skills/posthog/all/skills/error-tracking-hono/references/monitoring.md
+++ b/skills/posthog/all/skills/error-tracking-hono/references/monitoring.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
# Monitor and search issues - Docs
This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
@@ -45,11 +51,11 @@ The search bar provides two modes of filtering:
This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
-
+
Added property filters look like this:
-
+
The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
@@ -103,7 +109,7 @@ This page shows you the following:
- Name, description, status, assignee, and external tracking links for the issue.
- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
-
+
### Filtering exception occurrences within an issue
@@ -111,7 +117,7 @@ Once you've found and opened the issue you want to investigate, you can use the
For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
-
+
**Alerts**
@@ -131,9 +137,9 @@ If you find your queries timing out or taking more than 30 seconds, please [let
If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-hono/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-hono/references/upload-source-maps.md
index 178a4ab8..b6ae318f 100644
--- a/skills/posthog/all/skills/error-tracking-hono/references/upload-source-maps.md
+++ b/skills/posthog/all/skills/error-tracking-hono/references/upload-source-maps.md
@@ -1,10 +1,26 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
# Upload source maps - Docs
If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
-Choose your platform to view specific instructions.
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
- [Web](/docs/error-tracking/upload-source-maps/web.md)
@@ -24,8 +40,14 @@ Choose your platform to view specific instructions.
- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
@@ -36,9 +58,9 @@ Choose your platform to view specific instructions.
- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-ios/SKILL.md b/skills/posthog/all/skills/error-tracking-ios/SKILL.md
new file mode 100644
index 00000000..796975d3
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-ios/SKILL.md
@@ -0,0 +1,50 @@
+---
+name: error-tracking-ios
+description: PostHog error tracking for iOS
+metadata:
+ author: PostHog
+ version: dev
+---
+
+# PostHog error tracking for iOS
+
+This skill helps you add PostHog error tracking to iOS applications.
+
+## Reference files
+
+- `references/ios.md` - Ios error tracking installation - docs
+- `references/fingerprints.md` - Fingerprints - docs
+- `references/alerts.md` - Send error tracking alerts - docs
+- `references/monitoring.md` - Monitor and search issues - docs
+- `references/assigning-issues.md` - Assign issues to teammates - docs
+- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
+
+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
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- Install the PostHog iOS SDK as `PostHog` via Swift Package Manager or CocoaPods, using `https://github.com/PostHog/posthog-ios.git` for SPM
+- Initialize `PostHogSDK.shared.setup(config)` exactly once and as early as possible, either in `UIApplicationDelegate.application(_:didFinishLaunchingWithOptions:)` or in the SwiftUI `App` initializer
+- For SwiftUI apps, prefer meaningful `.postHogScreenView(...)` modifiers for screen tracking because automatic SwiftUI screen names can be internal view identifiers
+- Call `PostHogSDK.shared.identify(...)` after login and `PostHogSDK.shared.reset()` on logout; keep PII in user properties, not event properties
+- Enable iOS error autocapture with `config.errorTrackingConfig.autoCapture = true` and upload dSYM files so crash reports are symbolicated
+- Enable session replay with `config.sessionReplay = true` only after confirming project replay settings and privacy masking requirements; session replay is iOS-only, not macOS
+- Use `config.setBeforeSend { event in ... }` to redact, drop, or sample custom events, while preserving PostHog internal events where possible
+- For iOS logs, use posthog-ios 3.58.0 or later, set `config.logs` fields before `setup`, and capture logs manually with `PostHogSDK.shared.logger` or `captureLog`
+- For widgets, app clips, share extensions, and other app extensions, configure `config.appGroupIdentifier` so the main app and extensions share analytics identity
+- Set the PostHog project token and host directly in code when creating the `PostHogConfig` (e.g. `PostHogConfig(apiKey: "", host: "https://us.i.posthog.com")`). The project token is a public client-side key designed to ship in the app binary, so hardcoding it is safe and is the recommended approach for iOS
+- Do NOT depend on Xcode scheme environment variables (`ProcessInfo.processInfo.environment`) as the only source of the token: they are injected only when launching from Xcode (debug/simulator), NOT in Archive/Release builds (TestFlight, App Store). Reading them is fine as an optional override, but never force-unwrap or `fatalError` on their absence — that crashes production builds on launch. Ensure a value always ships in the binary
+- Before editing any Xcode project file, check for a project generator spec. If a `project.yml` with XcodeGen-shaped content (top-level `targets:` and/or `packages:` keys — do not trust the filename alone) exists at the repo root, the `.xcodeproj` is generated and MUST NOT be edited directly: the next `xcodegen generate` silently wipes any edit to `project.pbxproj`. Instead declare the package in `project.yml` under `packages:` as `PostHog: { url: https://github.com/PostHog/posthog-ios, from: }`, add `- package: PostHog` to the app target's `dependencies:` list, then tell the user to re-run `xcodegen generate` to apply it
+- When adding SPM dependencies to project.pbxproj (only when no XcodeGen `project.yml` generator spec exists — see the rule above), create three distinct objects with unique UUIDs — a `PBXBuildFile` (with `productRef`), an `XCSwiftPackageProductDependency` (with `package` and `productName`), and an `XCRemoteSwiftPackageReference` (with `repositoryURL` and `requirement`). The build file goes in the Frameworks phase `files`, the product dependency goes in the target's `packageProductDependencies`, and the package reference goes in the project's `packageReferences`.
+- Check the latest release version of posthog-ios at `https://github.com/PostHog/posthog-ios/releases` before setting the `minimumVersion` in the SPM package reference — do not hardcode a stale version
+- If the project uses App Sandbox (macOS), add `ENABLE_OUTGOING_NETWORK_CONNECTIONS = YES` to the target's build settings so PostHog can reach its servers — do NOT disable the sandbox entirely
diff --git a/skills/posthog/all/skills/error-tracking-ios/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-ios/references/COMMANDMENTS.md
new file mode 100644
index 00000000..dd2c05a5
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-ios/references/COMMANDMENTS.md
@@ -0,0 +1,20 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- Install the PostHog iOS SDK as `PostHog` via Swift Package Manager or CocoaPods, using `https://github.com/PostHog/posthog-ios.git` for SPM
+- Initialize `PostHogSDK.shared.setup(config)` exactly once and as early as possible, either in `UIApplicationDelegate.application(_:didFinishLaunchingWithOptions:)` or in the SwiftUI `App` initializer
+- For SwiftUI apps, prefer meaningful `.postHogScreenView(...)` modifiers for screen tracking because automatic SwiftUI screen names can be internal view identifiers
+- Call `PostHogSDK.shared.identify(...)` after login and `PostHogSDK.shared.reset()` on logout; keep PII in user properties, not event properties
+- Enable iOS error autocapture with `config.errorTrackingConfig.autoCapture = true` and upload dSYM files so crash reports are symbolicated
+- Enable session replay with `config.sessionReplay = true` only after confirming project replay settings and privacy masking requirements; session replay is iOS-only, not macOS
+- Use `config.setBeforeSend { event in ... }` to redact, drop, or sample custom events, while preserving PostHog internal events where possible
+- For iOS logs, use posthog-ios 3.58.0 or later, set `config.logs` fields before `setup`, and capture logs manually with `PostHogSDK.shared.logger` or `captureLog`
+- For widgets, app clips, share extensions, and other app extensions, configure `config.appGroupIdentifier` so the main app and extensions share analytics identity
+- Set the PostHog project token and host directly in code when creating the `PostHogConfig` (e.g. `PostHogConfig(apiKey: "", host: "https://us.i.posthog.com")`). The project token is a public client-side key designed to ship in the app binary, so hardcoding it is safe and is the recommended approach for iOS
+- Do NOT depend on Xcode scheme environment variables (`ProcessInfo.processInfo.environment`) as the only source of the token: they are injected only when launching from Xcode (debug/simulator), NOT in Archive/Release builds (TestFlight, App Store). Reading them is fine as an optional override, but never force-unwrap or `fatalError` on their absence — that crashes production builds on launch. Ensure a value always ships in the binary
+- Before editing any Xcode project file, check for a project generator spec. If a `project.yml` with XcodeGen-shaped content (top-level `targets:` and/or `packages:` keys — do not trust the filename alone) exists at the repo root, the `.xcodeproj` is generated and MUST NOT be edited directly: the next `xcodegen generate` silently wipes any edit to `project.pbxproj`. Instead declare the package in `project.yml` under `packages:` as `PostHog: { url: https://github.com/PostHog/posthog-ios, from: }`, add `- package: PostHog` to the app target's `dependencies:` list, then tell the user to re-run `xcodegen generate` to apply it
+- When adding SPM dependencies to project.pbxproj (only when no XcodeGen `project.yml` generator spec exists — see the rule above), create three distinct objects with unique UUIDs — a `PBXBuildFile` (with `productRef`), an `XCSwiftPackageProductDependency` (with `package` and `productName`), and an `XCRemoteSwiftPackageReference` (with `repositoryURL` and `requirement`). The build file goes in the Frameworks phase `files`, the product dependency goes in the target's `packageProductDependencies`, and the package reference goes in the project's `packageReferences`.
+- Check the latest release version of posthog-ios at `https://github.com/PostHog/posthog-ios/releases` before setting the `minimumVersion` in the SPM package reference — do not hardcode a stale version
+- If the project uses App Sandbox (macOS), add `ENABLE_OUTGOING_NETWORK_CONNECTIONS = YES` to the target's build settings so PostHog can reach its servers — do NOT disable the sandbox entirely
diff --git a/skills/posthog/all/skills/error-tracking-ios/references/alerts.md b/skills/posthog/all/skills/error-tracking-ios/references/alerts.md
new file mode 100644
index 00000000..a760ac4e
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-ios/references/alerts.md
@@ -0,0 +1,69 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
+# Send error tracking alerts - Docs
+
+To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
+
+## Issue created or reopened
+
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+
+
+
+Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
+
+This will then send alerts to your chosen destination when an issue is created or reopened like this:
+
+## Issue properties and assignments
+
+You can filter an alert based on the properties of an issue. This is useful for notifying a specific team when they have been auto assigned an issue using [auto assignment rules](/docs/error-tracking/managing-issues.md#auto-assignment-rules).
+
+
+
+## Spike alerts
+
+PostHog can also alert you when an existing issue suddenly spikes in volume - for example, after a bad deploy. This works differently from issue-created alerts. Instead of triggering when a new issue is first seen, spike alerts fire when an issue's error rate significantly exceeds its historical baseline.
+
+See the [spike detection guide](/docs/error-tracking/spikes.md) to learn how it works and how to configure it.
+
+## Other alerting options
+
+Since error tracking works by capturing `$exception` events, PostHog features that trigger by events can play a role in alerts too.
+
+### Real time destinations
+
+The first way is using [real time destinations](/docs/cdp/destinations.md). This enables you to send events (like `$exception`) to other tools as soon as they are ingested.
+
+To create a real time destination, go to the [data pipelines tab](https://app.posthog.com/data-management/destinations) in PostHog, click **\+ New**, and then select **Destination**. Choose your destination and press **\+ Create**.
+
+On the destination creation screen, make sure to add an event matcher for the `$exception` event, filter for the properties you want, and set the trigger options.
+
+
+
+Check out our [real time destinations docs](/docs/cdp/destinations.md) for more information.
+
+### Trend alerts
+
+You can also visualize your `$exception` events using [trends](/docs/product-analytics/trends/overview.md). Once you create a trend insight, click the **Alerts** button at the top of the insight and then **New alert**.
+
+Here you can set alerts for event volume value, increase, or decrease.
+
+
+
+This sends an email notification to the user you choose. Check out our [alerts docs](/docs/alerts.md) for more information.
+
+**Can't find your alert?**
+
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-ios/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-ios/references/assigning-issues.md
new file mode 100644
index 00000000..fe4ddaaa
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-ios/references/assigning-issues.md
@@ -0,0 +1,103 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
+# Assign issues to teammates - Docs
+
+Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
+
+## Assign issues
+
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
+
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
+
+
+
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
+
+Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
+
+
+
+## Automatic issue assignment
+
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
+
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
+
+Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
+
+Issues can be automatically assigned to a **role** or **user** by configuring a set of filters. These filters can be configured to match **any** or **all** of the criteria.
+
+You can configure automatic assignment to filter on any [event property](/docs/data/events.md) in PostHog. When there are multiple values for a property, the filters return true if it matches **any** of the values. For example, if you have multiple `exception_functions` values, the filters returns true if it matches **any** of the functions.
+
+Here are some common properties you can filter on:
+
+| Property | Event property | Description |
+| --- | --- | --- |
+| Exception type | $exception_types | The type of exception(s) that occurred |
+| Exception message | $exception_values | The message(s) detected on the error |
+| Exception function | $exception_functions | The function(s) where the exception occurred |
+| Exception source | $exception_sources | The source file(s) where the exception occurred |
+| Exception was handled | $exception_handled | Whether the exception was handled by the application |
+| Device type | $device_type | The type of device that the error occurred on |
+| Browser | $browser | The browser that the error occurred in |
+| Current URL | $current_url | The URL that the error occurred on |
+| Feature flag | $feature_flag | The feature flag that the error occurred on |
+
+You can also set custom properties on the error tracking event to filter on. For example, setting a custom `params_received` property to provide more context or debug information.
+
+### Order of issue assignment rules
+
+Issue assignment filters are evaluated in the order they are configured. They can also be reordered once created. The first filter that matches is used to assign the issue. This means you should configure the most specific filters first, and then the more general filters later.
+
+### Disabled assignment rules
+
+Assignment rules can become disabled if an error occurs during ingestion. When a rule is disabled, a banner displays the original error message. To re-enable the rule, edit it to fix the problem and save your changes. If the issue persists, reach out to support.
+
+### Alerting based on assignment
+
+A common use case for automatic issue assignment is to alert assignees of new issues. Once the issues are automatically assigned, you can set up alerts to notify the assignee. See the [alerts](/docs/error-tracking/alerts.md) guide for more information.
+
+## Create external issues
+
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
+
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.
+
+
+
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
+
+> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-ios/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-ios/references/fingerprints.md
new file mode 100644
index 00000000..d58a6781
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-ios/references/fingerprints.md
@@ -0,0 +1,63 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
+# Fingerprints - Docs
+
+Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
+
+## Fingerprint and issue grouping
+
+Every exception has a fingerprint, whether generated or defined by the user. Each fingerprint links to exactly one issue. Exceptions that share the same fingerprint define an issue.
+
+Multiple different fingerprints can point to the same issue (a many-to-one relationship) if you [merge issues](/docs/error-tracking/managing-issues.md#merging-issues).
+
+## How are fingerprints generated?
+
+Fingerprints are built iteratively using components of the exception event. The flowchart below shows how fingerprints are generated.
+
+flowchart LR A\[Add exception type to fingerprint\] --> B{Stack trace available?} B -->|No| C\[Add error message to fingerprint\] C --> D\[Final fingerprint\] B -->|Yes| E{In-app frames exist?} E -->|No| F\[Add first frame to fingerprint\] E -->|Yes| G\[Add in-app frame to fingerprint Priority: resolved > unresolved\] F --> D G --> D
+
+The flowchart in text
+
+Fingerprints are generated by considering the following in combination:
+
+1. The exception type
+2. If there's no resolved stack trace, add the error message to the fingerprint
+3. If there are stack traces but no in-app frames (frames from your code, not a dependency), use the first frame of the stack trace
+4. If there are stack traces, in-app frames, and source maps available, use the resolved in-app stack frames
+5. If there are stack traces, in-app frames, and source maps *not* available, use the first in-app stack frame
+
+In some languages, like Python, one error can trigger another, creating a chain of linked exceptions. PostHog records the entire chain in the event and generates a single fingerprint for it.
+
+### Ensuring accurate fingerprints
+
+[Resolved stack traces](/docs/error-tracking/stack-traces.md) are critical for accurate fingerprinting. Without accurate stack traces, PostHog cannot group exceptions consistently. If you have not uploaded source maps, follow the [source map guide](/docs/error-tracking/upload-source-maps.md) to do so.
+
+This also means that if the exception **type** or **message** changes from one version to the next, the fingerprint will change.
+
+## When are generated fingerprints used?
+
+Fingerprints are used to group similar exceptions into issues automatically. Automatic issue grouping is only done when:
+
+- No [issue grouping rules](/docs/error-tracking/grouping-issues.md) are applied
+- No [issue merging](/docs/error-tracking/managing-issues.md#merging-issues) has been configured
+- No [custom fingerprint](#customizing-fingerprints) is set during capture
+
+You can find details about how issue grouping works in the [issues and exceptions](/docs/error-tracking/issues-and-exceptions.md) guide.
+
+## Customizing fingerprints
+
+Fingerprints can be manually set during exception capture. This is a very useful way to group exceptions that are not related to each other. You can find examples of how to do this in the [custom issue grouping](/docs/error-tracking/grouping-issues.md#option-2-client-side-fingerprint) section.
+
+You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-ios/references/ios.md b/skills/posthog/all/skills/error-tracking-ios/references/ios.md
new file mode 100644
index 00000000..c9b040d1
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-ios/references/ios.md
@@ -0,0 +1,264 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# iOS Error Tracking installation - Docs
+
+Copy page
+
+# iOS Error Tracking installation - Docs
+
+1. 1
+
+ ## Install dependency
+
+ Required
+
+ Install via Swift Package Manager:
+
+ Package.swift
+
+ PostHog AI
+
+ ```swift
+ dependencies: [
+ .package(url: "https://github.com/PostHog/posthog-ios.git", from: "3.56.0")
+ ]
+ ```
+
+ Or add PostHog to your Podfile:
+
+ Podfile
+
+ PostHog AI
+
+ ```ruby
+ pod "PostHog", "~> 3.56"
+ ```
+
+2. 2
+
+ ## Configure PostHog
+
+ Required
+
+ Initialize PostHog in your AppDelegate:
+
+ AppDelegate.swift
+
+ PostHog AI
+
+ ```swift
+ import Foundation
+ import PostHog
+ import UIKit
+ class AppDelegate: NSObject, UIApplicationDelegate {
+ func application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool {
+ let POSTHOG_PROJECT_TOKEN = ""
+ let POSTHOG_HOST = "https://us.i.posthog.com"
+ let config = PostHogConfig(projectToken: POSTHOG_PROJECT_TOKEN, host: POSTHOG_HOST)
+ PostHogSDK.shared.setup(config)
+ return true
+ }
+ }
+ ```
+
+3. 3
+
+ ## Send events
+
+ Recommended
+
+ Once installed, PostHog will automatically start capturing events. You can also manually send events to test your integration:
+
+ Swift
+
+ PostHog AI
+
+ ```swift
+ PostHogSDK.shared.capture("button_clicked", properties: ["button_name": "signup"])
+ ```
+
+4. 4
+
+ ## Set up exception autocapture
+
+ Recommended
+
+ **Remote configuration**
+
+ Exception autocapture can also be managed remotely via the [error tracking settings](https://app.posthog.com/settings/project-error-tracking#exception-autocapture).
+
+ **Platform support**
+
+ Exception autocapture is available on **iOS, macOS, and tvOS** only. It is not available on watchOS or visionOS due to platform limitations.
+
+ You can still capture events manually on all platforms, including visionOS.
+
+ You can autocapture exceptions by setting the `errorTrackingConfig.autoCapture` argument to `true` when initializing the PostHog SDK.
+
+ Swift
+
+ PostHog AI
+
+ ```swift
+ import PostHog
+ let config = PostHogConfig(
+ projectToken: "",
+ host: "https://us.i.posthog.com"
+ )
+ config.errorTrackingConfig.autoCapture = true
+ PostHogSDK.shared.setup(config)
+ ```
+
+ When enabled, this automatically captures `$exception` events for:
+
+ - **Mach exceptions** (e.g., `EXC_BAD_ACCESS`, `EXC_CRASH`)
+ - **POSIX signals** (e.g., `SIGSEGV`, `SIGABRT`, `SIGBUS`)
+ - **Uncaught NSExceptions**
+
+ Crashes are persisted to disk and sent as `$exception` events with level "fatal" on the next app launch.
+
+5. 5
+
+ ## Manually capture exceptions
+
+ Optional
+
+ ### Swift Error handling
+
+ You can manually capture exceptions using the `captureException` method:
+
+ Swift
+
+ PostHog AI
+
+ ```swift
+ import PostHog
+ do {
+ try FileManager.default.removeItem(at: badFileUrl)
+ } catch {
+ PostHogSDK.shared.captureException(error)
+ }
+ ```
+
+ ### Objective-C NSException handling
+
+ For Objective-C code that uses NSException:
+
+ Objective-C
+
+ PostHog AI
+
+ ```objc
+ @import PostHog;
+ @try {
+ [self riskyOperation];
+ } @catch (NSException *exception) {
+ [[PostHogSDK shared] captureExceptionWithNSException:exception properties:nil];
+ }
+ ```
+
+ ### Adding custom properties
+
+ You can add custom properties to help with debugging, grouping, and analysis:
+
+ Swift
+
+ PostHog AI
+
+ ```swift
+ do {
+ try performNetworkRequest()
+ } catch {
+ PostHogSDK.shared.captureException(error, properties: [
+ "endpoint": "/api/users",
+ "retry_count": 3
+ ])
+ }
+ ```
+
+ This is helpful if you've built your own error handling logic or want to capture exceptions that are handled by your application code.
+
+6. 6
+
+ ## Configure in-app frames
+
+ Optional
+
+ By default, PostHog automatically marks your app's code as "in-app" in stack traces to help you focus on your code rather than system frameworks.
+
+ You can customize this behavior with `errorTrackingConfig`:
+
+ Swift
+
+ PostHog AI
+
+ ```swift
+ import PostHog
+ let config = PostHogConfig(
+ projectToken: "",
+ host: "https://us.i.posthog.com"
+ )
+ // Mark additional packages as in-app
+ config.errorTrackingConfig.inAppIncludes = [
+ "MySharedFramework",
+ "MyUtilityLib"
+ ]
+ // Exclude specific packages from being marked as in-app
+ config.errorTrackingConfig.inAppExcludes = [
+ "Alamofire",
+ "SDWebImage"
+ ]
+ // Control default behavior for unknown packages
+ config.errorTrackingConfig.inAppByDefault = true // default
+ PostHogSDK.shared.setup(config)
+ ```
+
+ **Configuration options:**
+
+ | Option | Description |
+ | --- | --- |
+ | inAppIncludes | List of package/bundle identifiers to mark as in-app (takes precedence over excludes) |
+ | inAppExcludes | List of package/bundle identifiers to exclude from in-app |
+ | inAppByDefault | Whether frames are considered in-app by default when origin cannot be determined |
+
+ **Default behavior:**
+
+ - Your app's bundle identifier and executable name are automatically included
+ - System frameworks (Foundation, UIKit, etc.) are automatically excluded
+
+7. ## Verify error tracking
+
+ Recommended
+
+ *Confirm events are being sent to PostHog*
+
+ Before proceeding, let's make sure exception events are being captured and sent to PostHog. You should see events appear in the activity feed.
+
+ 
+
+ [Check for exceptions in PostHog](https://app.posthog.com/activity/explore)
+
+8. 7
+
+ ## Upload dSYMs
+
+ Required
+
+ Great, you're capturing exceptions! The next step is to upload dSYM files so PostHog can symbolicate your crash reports and generate accurate stack traces.
+
+ Let's continue to the next section.
+
+ [Upload dSYMs](/docs/error-tracking/upload-source-maps/ios.md)
+
+## Limitations:
+
+- System symbols and frames are not symbolicated (UIKit, Foundation, etc.) ([issue](https://github.com/PostHog/posthog/issues/50614)).
+- Swift crashes appear as `SIGTRAP` without the actual error message ([issue](https://github.com/PostHog/posthog-ios/issues/522)).
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-ios/references/monitoring.md b/skills/posthog/all/skills/error-tracking-ios/references/monitoring.md
new file mode 100644
index 00000000..6590cab2
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-ios/references/monitoring.md
@@ -0,0 +1,146 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
+# Monitor and search issues - Docs
+
+This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
+
+## Monitoring issues
+
+When you're monitoring issues in your project, there are generally two common workflows:
+
+- You're exploring issues to identify impactful and problematic areas. You should use sorting features.
+- You're looking for issues assigned to you to resolve them. You should filter by the `Assigned to` property.
+
+### Sorting issues
+
+Issues can be sorted by the following properties:
+
+| Property | Description |
+| --- | --- |
+| Last seen | The issue that has the most recent exception |
+| First seen | The issue that has the oldest exception |
+| Occurrences | The number of exceptions in the issue |
+| Users | The number of unique users affected by the issue |
+| Sessions | The number of unique sessions affected by the issue |
+
+Sorting by **last seen** and **occurrences** are great ways to get a general sense of issues in your project. Sorting by **users** and **sessions** is great to find the most impactful issues if you're using other [filters](#finding-specific-issues) to narrow down your results.
+
+### Monitoring issues assigned to you
+
+You can filter issues by the **Assigned to** property to find issues assigned to you. This is especially useful if you configure [automatic issue assignment](/docs/error-tracking/assigning-issues.md) and configure [alerts](/docs/error-tracking/alerts.md) to notify you when new issues are created.
+
+## Finding specific issues
+
+You can use the search bar at the top of the [issue page](https://app.posthog.com/error_tracking) to filter issues based on the properties of the exceptions in that issue.
+
+Search results are matched based on [properties of exception events](/docs/error-tracking/issues-and-exceptions.md) grouped into the issues. For example, if you search for "TypeError", we show you all issues where *any* exception grouped into the issue has a type of "TypeError".
+
+**Unrelated results**
+
+You may see seemingly unrelated issues in your search results because your search term matches an exception in the issue group. For example, you may see an issues named `RefreshError` when searching "schema", because a `get_schema` method appears on the exception stack traces.
+
+### Filtering modes
+
+The search bar provides two modes of filtering:
+
+#### 1\. Exact property filtering
+
+This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
+
+
+
+Added property filters look like this:
+
+
+
+The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
+
+#### 2\. Freeform text search
+
+This does text matching for a subset of the error tracking specific properties of the exception event. It splits the text you give it into tokens. The search matches an exception if *each* of the tokens in your search term appear in one of the following:
+
+- The exception type
+- The exception message
+- The function names in the exception stack trace (if known)
+- The file paths in the exception stack trace (if known)
+
+For example, imagine you have an exception that looks like this:
+
+PostHog AI
+
+```
+TypeError: Cannot read property 'name' of undefined
+ at Object. (/path/to/myfile.js:123:45)
+ at Module._compile (module.js:653:30)
+ at Object.Module._extensions..js (module.js:664:10)
+ at Module.load (module.js:566:32)
+ at tryModuleLoad (module.js:506:12)
+ at Function.Module._load (module.js:498:3)
+ at Function.Module.runMain (module.js:694:10)
+ at startup (bootstrap_node.js:204:16)
+ at bootstrap_node.js:625:3
+```
+
+If you search for the term `TypeError myfile.js`, the exception matches this search, as it contains `TypeError` (as the exception type) and `myfile.js` (as a file path in the stack trace).
+
+If you search for `TypeError myfile.js abc`, the exception would not match, as the token `abc` does not appear anywhere in freeform search properties.
+
+If you want to search for longer exact strings, e.g. a particular exception message, you can group tokens into a single term using quotes, e.g. `"Cannot read property 'name' of undefined" myfile.js` would match, and `"Cannot read property of myfile.js"` would not.
+
+Note, perhaps unintuitively, `Cannot read property of myfile.js` would match, because the tokens are ungrouped, and all of them appear *somewhere* in the exception search properties.
+
+### Searching chained exceptions
+
+Exception events can have more than one exception in them, due to language features like exception chaining. For freeform search, we put the types, messages, functions and file paths of all exceptions into one list, and match if the token appears in any of them.
+
+For example, if you had a chained exception with the messages `MyCustomError: Failed to load user` and `Cannot read property 'age' of undefined`, searching for `cannot read property` would match the exception, because it matches *one* of the exception messages (`property` appears in the "root" one).
+
+## Issue details
+
+When you click on an issue, you'll see the details page of the issue.
+
+This page shows you the following:
+
+- The stack trace, properties, and sessions related to the **currently selected exception**.
+- Name, description, status, assignee, and external tracking links for the issue.
+- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
+
+
+
+### Filtering exception occurrences within an issue
+
+Once you've found and opened the issue you want to investigate, you can use the same search interface to filter the exception list for a particular instance of the issue. This is particularly useful in cases where some exceptions in the issue have information others don't and you want to use that information for debugging.
+
+For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
+
+
+
+**Alerts**
+
+If you have a set of filters that you use often, you can create alerts for them. This way you can be notified when new issues match your filters. Learn more about [alerts](/docs/error-tracking/alerts.md).
+
+## Improving search performance
+
+We try to return results to you within a second, but sometimes if you're querying over large amounts of data, it may take longer. The following can improve the search performance:
+
+- **Limit the time range you're searching over:** 7 days is usually enough to get a sense for the trends of an issue over time.
+
+- **Use freeform search rather than property filters:** Our freeform searches are generally faster than property filters, as the total amount of data processed is smaller.
+
+If you find your queries timing out or taking more than 30 seconds, please [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue)! We're always looking for benchmarks to improve against.
+
+## Suppressing issues
+
+If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-ios/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-ios/references/upload-source-maps.md
new file mode 100644
index 00000000..b6ae318f
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-ios/references/upload-source-maps.md
@@ -0,0 +1,67 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
+# Upload source maps - Docs
+
+If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
+
+If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
+
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
+
+- [Web](/docs/error-tracking/upload-source-maps/web.md)
+
+- [Next.js](/docs/error-tracking/upload-source-maps/nextjs.md)
+
+- [Node.js](/docs/error-tracking/upload-source-maps/node.md)
+
+- [React](/docs/error-tracking/upload-source-maps/react.md)
+
+- [Angular](/docs/error-tracking/upload-source-maps/angular.md)
+
+- [Nuxt](/docs/error-tracking/upload-source-maps/nuxt.md)
+
+- [React Native](/docs/error-tracking/upload-source-maps/react-native.md)
+
+- [Android](/docs/error-tracking/upload-mappings/android.md)
+
+- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
+- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
+- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
+
+- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
+
+- [Vite](/docs/error-tracking/upload-source-maps/vite.md)
+
+- [CLI](/docs/error-tracking/upload-source-maps/cli.md)
+
+- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-laravel/SKILL.md b/skills/posthog/all/skills/error-tracking-laravel/SKILL.md
new file mode 100644
index 00000000..45400fdf
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-laravel/SKILL.md
@@ -0,0 +1,46 @@
+---
+name: error-tracking-laravel
+description: PostHog error tracking for Laravel
+metadata:
+ author: PostHog
+ version: dev
+---
+
+# PostHog error tracking for Laravel
+
+This skill helps you add PostHog error tracking to Laravel applications.
+
+## Reference files
+
+- `references/php.md` - Php error tracking installation - docs
+- `references/laravel.md` - Laravel - docs
+- `references/fingerprints.md` - Fingerprints - docs
+- `references/alerts.md` - Send error tracking alerts - docs
+- `references/monitoring.md` - Monitor and search issues - docs
+- `references/assigning-issues.md` - Assign issues to teammates - docs
+- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
+
+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
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- Create a dedicated PostHogService class in app/Services/ - do NOT scatter PostHog::capture calls throughout controllers
+- Register PostHog configuration in config/posthog.php using env() for all settings (api_key, host, disabled)
+- Do NOT use Laravel's event system or observers for analytics - call capture explicitly where actions occur
+- Call PostHog::flush() after capture in queue jobs, Horizon, and Octane - a long-running worker never destructs, so its events sit in the SDK buffer until batch_size (default 100) is reached and are silently lost on restart
+- Remember that source code is available in the vendor directory after composer install
+- posthog/posthog-php is the PHP SDK package name
+- Check composer.json for existing dependencies and autoload configuration before adding new files
+- The PHP SDK uses static methods (PostHog::capture, PostHog::identify) - initialize once with PostHog::init()
+- PHP SDK methods take associative arrays with 'distinctId', 'event', 'properties' keys - not positional arguments
+- Any first-party loader or proxy script you add must load standalone — require its own config includes explicitly rather than assuming the app bootstrapped them
diff --git a/skills/posthog/all/skills/error-tracking-laravel/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-laravel/references/COMMANDMENTS.md
new file mode 100644
index 00000000..80ab83ad
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-laravel/references/COMMANDMENTS.md
@@ -0,0 +1,15 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- Create a dedicated PostHogService class in app/Services/ - do NOT scatter PostHog::capture calls throughout controllers
+- Register PostHog configuration in config/posthog.php using env() for all settings (api_key, host, disabled)
+- Do NOT use Laravel's event system or observers for analytics - call capture explicitly where actions occur
+- Call PostHog::flush() after capture in queue jobs, Horizon, and Octane - a long-running worker never destructs, so its events sit in the SDK buffer until batch_size (default 100) is reached and are silently lost on restart
+- Remember that source code is available in the vendor directory after composer install
+- posthog/posthog-php is the PHP SDK package name
+- Check composer.json for existing dependencies and autoload configuration before adding new files
+- The PHP SDK uses static methods (PostHog::capture, PostHog::identify) - initialize once with PostHog::init()
+- PHP SDK methods take associative arrays with 'distinctId', 'event', 'properties' keys - not positional arguments
+- Any first-party loader or proxy script you add must load standalone — require its own config includes explicitly rather than assuming the app bootstrapped them
diff --git a/skills/posthog/all/skills/error-tracking-laravel/references/alerts.md b/skills/posthog/all/skills/error-tracking-laravel/references/alerts.md
new file mode 100644
index 00000000..a760ac4e
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-laravel/references/alerts.md
@@ -0,0 +1,69 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
+# Send error tracking alerts - Docs
+
+To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
+
+## Issue created or reopened
+
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+
+
+
+Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
+
+This will then send alerts to your chosen destination when an issue is created or reopened like this:
+
+## Issue properties and assignments
+
+You can filter an alert based on the properties of an issue. This is useful for notifying a specific team when they have been auto assigned an issue using [auto assignment rules](/docs/error-tracking/managing-issues.md#auto-assignment-rules).
+
+
+
+## Spike alerts
+
+PostHog can also alert you when an existing issue suddenly spikes in volume - for example, after a bad deploy. This works differently from issue-created alerts. Instead of triggering when a new issue is first seen, spike alerts fire when an issue's error rate significantly exceeds its historical baseline.
+
+See the [spike detection guide](/docs/error-tracking/spikes.md) to learn how it works and how to configure it.
+
+## Other alerting options
+
+Since error tracking works by capturing `$exception` events, PostHog features that trigger by events can play a role in alerts too.
+
+### Real time destinations
+
+The first way is using [real time destinations](/docs/cdp/destinations.md). This enables you to send events (like `$exception`) to other tools as soon as they are ingested.
+
+To create a real time destination, go to the [data pipelines tab](https://app.posthog.com/data-management/destinations) in PostHog, click **\+ New**, and then select **Destination**. Choose your destination and press **\+ Create**.
+
+On the destination creation screen, make sure to add an event matcher for the `$exception` event, filter for the properties you want, and set the trigger options.
+
+
+
+Check out our [real time destinations docs](/docs/cdp/destinations.md) for more information.
+
+### Trend alerts
+
+You can also visualize your `$exception` events using [trends](/docs/product-analytics/trends/overview.md). Once you create a trend insight, click the **Alerts** button at the top of the insight and then **New alert**.
+
+Here you can set alerts for event volume value, increase, or decrease.
+
+
+
+This sends an email notification to the user you choose. Check out our [alerts docs](/docs/alerts.md) for more information.
+
+**Can't find your alert?**
+
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-laravel/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-laravel/references/assigning-issues.md
new file mode 100644
index 00000000..fe4ddaaa
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-laravel/references/assigning-issues.md
@@ -0,0 +1,103 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
+# Assign issues to teammates - Docs
+
+Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
+
+## Assign issues
+
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
+
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
+
+
+
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
+
+Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
+
+
+
+## Automatic issue assignment
+
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
+
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
+
+Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
+
+Issues can be automatically assigned to a **role** or **user** by configuring a set of filters. These filters can be configured to match **any** or **all** of the criteria.
+
+You can configure automatic assignment to filter on any [event property](/docs/data/events.md) in PostHog. When there are multiple values for a property, the filters return true if it matches **any** of the values. For example, if you have multiple `exception_functions` values, the filters returns true if it matches **any** of the functions.
+
+Here are some common properties you can filter on:
+
+| Property | Event property | Description |
+| --- | --- | --- |
+| Exception type | $exception_types | The type of exception(s) that occurred |
+| Exception message | $exception_values | The message(s) detected on the error |
+| Exception function | $exception_functions | The function(s) where the exception occurred |
+| Exception source | $exception_sources | The source file(s) where the exception occurred |
+| Exception was handled | $exception_handled | Whether the exception was handled by the application |
+| Device type | $device_type | The type of device that the error occurred on |
+| Browser | $browser | The browser that the error occurred in |
+| Current URL | $current_url | The URL that the error occurred on |
+| Feature flag | $feature_flag | The feature flag that the error occurred on |
+
+You can also set custom properties on the error tracking event to filter on. For example, setting a custom `params_received` property to provide more context or debug information.
+
+### Order of issue assignment rules
+
+Issue assignment filters are evaluated in the order they are configured. They can also be reordered once created. The first filter that matches is used to assign the issue. This means you should configure the most specific filters first, and then the more general filters later.
+
+### Disabled assignment rules
+
+Assignment rules can become disabled if an error occurs during ingestion. When a rule is disabled, a banner displays the original error message. To re-enable the rule, edit it to fix the problem and save your changes. If the issue persists, reach out to support.
+
+### Alerting based on assignment
+
+A common use case for automatic issue assignment is to alert assignees of new issues. Once the issues are automatically assigned, you can set up alerts to notify the assignee. See the [alerts](/docs/error-tracking/alerts.md) guide for more information.
+
+## Create external issues
+
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
+
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.
+
+
+
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
+
+> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-laravel/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-laravel/references/fingerprints.md
new file mode 100644
index 00000000..d58a6781
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-laravel/references/fingerprints.md
@@ -0,0 +1,63 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
+# Fingerprints - Docs
+
+Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
+
+## Fingerprint and issue grouping
+
+Every exception has a fingerprint, whether generated or defined by the user. Each fingerprint links to exactly one issue. Exceptions that share the same fingerprint define an issue.
+
+Multiple different fingerprints can point to the same issue (a many-to-one relationship) if you [merge issues](/docs/error-tracking/managing-issues.md#merging-issues).
+
+## How are fingerprints generated?
+
+Fingerprints are built iteratively using components of the exception event. The flowchart below shows how fingerprints are generated.
+
+flowchart LR A\[Add exception type to fingerprint\] --> B{Stack trace available?} B -->|No| C\[Add error message to fingerprint\] C --> D\[Final fingerprint\] B -->|Yes| E{In-app frames exist?} E -->|No| F\[Add first frame to fingerprint\] E -->|Yes| G\[Add in-app frame to fingerprint Priority: resolved > unresolved\] F --> D G --> D
+
+The flowchart in text
+
+Fingerprints are generated by considering the following in combination:
+
+1. The exception type
+2. If there's no resolved stack trace, add the error message to the fingerprint
+3. If there are stack traces but no in-app frames (frames from your code, not a dependency), use the first frame of the stack trace
+4. If there are stack traces, in-app frames, and source maps available, use the resolved in-app stack frames
+5. If there are stack traces, in-app frames, and source maps *not* available, use the first in-app stack frame
+
+In some languages, like Python, one error can trigger another, creating a chain of linked exceptions. PostHog records the entire chain in the event and generates a single fingerprint for it.
+
+### Ensuring accurate fingerprints
+
+[Resolved stack traces](/docs/error-tracking/stack-traces.md) are critical for accurate fingerprinting. Without accurate stack traces, PostHog cannot group exceptions consistently. If you have not uploaded source maps, follow the [source map guide](/docs/error-tracking/upload-source-maps.md) to do so.
+
+This also means that if the exception **type** or **message** changes from one version to the next, the fingerprint will change.
+
+## When are generated fingerprints used?
+
+Fingerprints are used to group similar exceptions into issues automatically. Automatic issue grouping is only done when:
+
+- No [issue grouping rules](/docs/error-tracking/grouping-issues.md) are applied
+- No [issue merging](/docs/error-tracking/managing-issues.md#merging-issues) has been configured
+- No [custom fingerprint](#customizing-fingerprints) is set during capture
+
+You can find details about how issue grouping works in the [issues and exceptions](/docs/error-tracking/issues-and-exceptions.md) guide.
+
+## Customizing fingerprints
+
+Fingerprints can be manually set during exception capture. This is a very useful way to group exceptions that are not related to each other. You can find examples of how to do this in the [custom issue grouping](/docs/error-tracking/grouping-issues.md#option-2-client-side-fingerprint) section.
+
+You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-laravel/references/laravel.md b/skills/posthog/all/skills/error-tracking-laravel/references/laravel.md
new file mode 100644
index 00000000..830063b9
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-laravel/references/laravel.md
@@ -0,0 +1,176 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Laravel - Docs
+
+Copy page
+
+# Laravel - Docs
+
+PostHog integrates with Laravel through the [PostHog PHP SDK](/docs/libraries/php.md). This page covers Laravel-specific setup. For SDK features such as event capture, identifying users, feature flags, group analytics, and configuration options, see the [PHP SDK docs](/docs/libraries/php.md).
+
+## Installation
+
+Install the PHP SDK as described in the [PHP installation guide](/docs/libraries/php.md#installation), then add your project token and host to `.env`:
+
+.env
+
+PostHog AI
+
+```bash
+POSTHOG_API_KEY=
+POSTHOG_HOST=https://us.i.posthog.com
+```
+
+Add PostHog to Laravel's services config:
+
+config/services.php
+
+PostHog AI
+
+```php
+'posthog' => [
+ 'api_key' => env('POSTHOG_API_KEY'),
+ 'host' => env('POSTHOG_HOST', 'https://us.i.posthog.com'),
+],
+```
+
+Initialize PostHog in the `boot` method of `app/Providers/AppServiceProvider.php`:
+
+app/Providers/AppServiceProvider.php
+
+PostHog AI
+
+```php
+ config('services.posthog.host'),
+ ]
+ );
+ }
+}
+```
+
+## Request context middleware
+
+Client SDKs such as [PostHog JS](/docs/libraries/js.md) can send tracing headers to your Laravel backend. Configure [`tracing_headers`](/docs/libraries/js/config.md#tracing-headers) for your Laravel backend hostname so browser requests include the session and distinct ID headers.
+
+The PHP SDK can read `X-PostHog-Distinct-Id` and `X-PostHog-Session-Id` headers and apply them to events captured during the request. Tracing headers are client-controlled analytics context, not authentication or authorization. For security-sensitive server-side events or decisions, pass an authenticated `distinctId` explicitly, such as `auth()->id()`. For the lower-level context APIs, see the [PHP request context docs](/docs/libraries/php.md#request-context).
+
+Add middleware like this:
+
+app/Http/Middleware/PostHogRequestContext.php
+
+PostHog AI
+
+```php
+headers->all());
+ $context['properties'] = array_merge(
+ $context['properties'] ?? [],
+ array_filter([
+ '$current_url' => $request->fullUrl(),
+ '$request_method' => $request->method(),
+ '$request_path' => $request->getPathInfo(),
+ '$user_agent' => $request->userAgent(),
+ '$ip' => $request->ip(),
+ ], static fn ($value): bool => $value !== null && $value !== '')
+ );
+ return PostHog::withContext(
+ $context,
+ static fn (): Response => $next($request),
+ ['fresh' => true]
+ );
+ }
+}
+```
+
+Register this middleware using your Laravel version's normal middleware registration.
+
+## Error tracking in Laravel
+
+The PHP SDK supports [error tracking](/docs/libraries/php.md#error-tracking), but Laravel handles most request exceptions before they become uncaught PHP exceptions. Capture Laravel-reported exceptions explicitly.
+
+In Laravel 11 and later, add a report callback in `bootstrap/app.php`:
+
+bootstrap/app.php
+
+PostHog AI
+
+```php
+use Illuminate\Foundation\Configuration\Exceptions;
+use PostHog\PostHog;
+use Throwable;
+->withExceptions(function (Exceptions $exceptions): void {
+ $exceptions->report(function (Throwable $e): void {
+ if (! config('services.posthog.api_key')) {
+ return;
+ }
+ PostHog::captureException(
+ $e,
+ auth()->id() !== null ? (string) auth()->id() : null,
+ [
+ '$current_url' => request()->fullUrl(),
+ '$request_method' => request()->method(),
+ ]
+ );
+ });
+})
+```
+
+For older Laravel versions, call `PostHog::captureException()` from your exception handler's `report` method.
+
+## Long-running processes
+
+In normal PHP request lifecycles, queued events flush when the client is destroyed. In long-running Laravel processes such as queue workers, Horizon, or Octane, call `PostHog::flush()` after capturing important events or at the end of a job/request.
+
+If you prefer immediate delivery in queue workers, configure the PHP SDK with `batch_size` set to `1` for those workers:
+
+PHP
+
+PostHog AI
+
+```php
+PostHog::init(
+ '',
+ [
+ 'host' => config('services.posthog.host'),
+ 'batch_size' => 1,
+ ]
+);
+```
+
+## Next steps
+
+See the [PHP SDK docs](/docs/libraries/php.md) for usage examples and the full API reference.
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-laravel/references/monitoring.md b/skills/posthog/all/skills/error-tracking-laravel/references/monitoring.md
new file mode 100644
index 00000000..6590cab2
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-laravel/references/monitoring.md
@@ -0,0 +1,146 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
+# Monitor and search issues - Docs
+
+This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
+
+## Monitoring issues
+
+When you're monitoring issues in your project, there are generally two common workflows:
+
+- You're exploring issues to identify impactful and problematic areas. You should use sorting features.
+- You're looking for issues assigned to you to resolve them. You should filter by the `Assigned to` property.
+
+### Sorting issues
+
+Issues can be sorted by the following properties:
+
+| Property | Description |
+| --- | --- |
+| Last seen | The issue that has the most recent exception |
+| First seen | The issue that has the oldest exception |
+| Occurrences | The number of exceptions in the issue |
+| Users | The number of unique users affected by the issue |
+| Sessions | The number of unique sessions affected by the issue |
+
+Sorting by **last seen** and **occurrences** are great ways to get a general sense of issues in your project. Sorting by **users** and **sessions** is great to find the most impactful issues if you're using other [filters](#finding-specific-issues) to narrow down your results.
+
+### Monitoring issues assigned to you
+
+You can filter issues by the **Assigned to** property to find issues assigned to you. This is especially useful if you configure [automatic issue assignment](/docs/error-tracking/assigning-issues.md) and configure [alerts](/docs/error-tracking/alerts.md) to notify you when new issues are created.
+
+## Finding specific issues
+
+You can use the search bar at the top of the [issue page](https://app.posthog.com/error_tracking) to filter issues based on the properties of the exceptions in that issue.
+
+Search results are matched based on [properties of exception events](/docs/error-tracking/issues-and-exceptions.md) grouped into the issues. For example, if you search for "TypeError", we show you all issues where *any* exception grouped into the issue has a type of "TypeError".
+
+**Unrelated results**
+
+You may see seemingly unrelated issues in your search results because your search term matches an exception in the issue group. For example, you may see an issues named `RefreshError` when searching "schema", because a `get_schema` method appears on the exception stack traces.
+
+### Filtering modes
+
+The search bar provides two modes of filtering:
+
+#### 1\. Exact property filtering
+
+This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
+
+
+
+Added property filters look like this:
+
+
+
+The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
+
+#### 2\. Freeform text search
+
+This does text matching for a subset of the error tracking specific properties of the exception event. It splits the text you give it into tokens. The search matches an exception if *each* of the tokens in your search term appear in one of the following:
+
+- The exception type
+- The exception message
+- The function names in the exception stack trace (if known)
+- The file paths in the exception stack trace (if known)
+
+For example, imagine you have an exception that looks like this:
+
+PostHog AI
+
+```
+TypeError: Cannot read property 'name' of undefined
+ at Object. (/path/to/myfile.js:123:45)
+ at Module._compile (module.js:653:30)
+ at Object.Module._extensions..js (module.js:664:10)
+ at Module.load (module.js:566:32)
+ at tryModuleLoad (module.js:506:12)
+ at Function.Module._load (module.js:498:3)
+ at Function.Module.runMain (module.js:694:10)
+ at startup (bootstrap_node.js:204:16)
+ at bootstrap_node.js:625:3
+```
+
+If you search for the term `TypeError myfile.js`, the exception matches this search, as it contains `TypeError` (as the exception type) and `myfile.js` (as a file path in the stack trace).
+
+If you search for `TypeError myfile.js abc`, the exception would not match, as the token `abc` does not appear anywhere in freeform search properties.
+
+If you want to search for longer exact strings, e.g. a particular exception message, you can group tokens into a single term using quotes, e.g. `"Cannot read property 'name' of undefined" myfile.js` would match, and `"Cannot read property of myfile.js"` would not.
+
+Note, perhaps unintuitively, `Cannot read property of myfile.js` would match, because the tokens are ungrouped, and all of them appear *somewhere* in the exception search properties.
+
+### Searching chained exceptions
+
+Exception events can have more than one exception in them, due to language features like exception chaining. For freeform search, we put the types, messages, functions and file paths of all exceptions into one list, and match if the token appears in any of them.
+
+For example, if you had a chained exception with the messages `MyCustomError: Failed to load user` and `Cannot read property 'age' of undefined`, searching for `cannot read property` would match the exception, because it matches *one* of the exception messages (`property` appears in the "root" one).
+
+## Issue details
+
+When you click on an issue, you'll see the details page of the issue.
+
+This page shows you the following:
+
+- The stack trace, properties, and sessions related to the **currently selected exception**.
+- Name, description, status, assignee, and external tracking links for the issue.
+- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
+
+
+
+### Filtering exception occurrences within an issue
+
+Once you've found and opened the issue you want to investigate, you can use the same search interface to filter the exception list for a particular instance of the issue. This is particularly useful in cases where some exceptions in the issue have information others don't and you want to use that information for debugging.
+
+For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
+
+
+
+**Alerts**
+
+If you have a set of filters that you use often, you can create alerts for them. This way you can be notified when new issues match your filters. Learn more about [alerts](/docs/error-tracking/alerts.md).
+
+## Improving search performance
+
+We try to return results to you within a second, but sometimes if you're querying over large amounts of data, it may take longer. The following can improve the search performance:
+
+- **Limit the time range you're searching over:** 7 days is usually enough to get a sense for the trends of an issue over time.
+
+- **Use freeform search rather than property filters:** Our freeform searches are generally faster than property filters, as the total amount of data processed is smaller.
+
+If you find your queries timing out or taking more than 30 seconds, please [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue)! We're always looking for benchmarks to improve against.
+
+## Suppressing issues
+
+If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-laravel/references/php.md b/skills/posthog/all/skills/error-tracking-laravel/references/php.md
new file mode 100644
index 00000000..7a3242cd
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-laravel/references/php.md
@@ -0,0 +1,228 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# PHP Error Tracking installation - Docs
+
+Copy page
+
+# PHP Error Tracking installation - Docs
+
+1. 1
+
+ ## Install the PHP SDK
+
+ Required
+
+ Install the [PostHog PHP SDK](/docs/libraries/php.md) via Composer:
+
+ Terminal
+
+ PostHog AI
+
+ ```bash
+ composer require posthog/posthog-php
+ ```
+
+2. 2
+
+ ## Initialize the client
+
+ Required
+
+ Set your project token and instance address before making any calls:
+
+ PHP
+
+ PostHog AI
+
+ ```php
+ PostHog\PostHog::init(
+ '',
+ ['host' => 'https://us.i.posthog.com']
+ );
+ ```
+
+ You can find your project token and instance address in the [project settings](https://app.posthog.com/settings/project) page in PostHog.
+
+3. 3
+
+ ## Capture exceptions
+
+ Required
+
+ Use `captureException` to manually capture exceptions and send them to PostHog as `$exception` events with full stack traces.
+
+ ### Basic usage
+
+ PHP
+
+ PostHog AI
+
+ ```php
+ try {
+ // Your code that might throw
+ riskyOperation();
+ } catch (\Throwable $e) {
+ PostHog\PostHog::captureException($e, 'user_distinct_id');
+ }
+ ```
+
+ ### With additional properties
+
+ You can pass extra properties to include with the exception event:
+
+ PHP
+
+ PostHog AI
+
+ ```php
+ try {
+ processOrder($orderId);
+ } catch (\Throwable $e) {
+ PostHog\PostHog::captureException($e, 'user_distinct_id', [
+ 'order_id' => $orderId,
+ 'environment' => 'production',
+ ]);
+ }
+ ```
+
+ You can also pass a plain string if you want to send an error message without a `Throwable`.
+
+4. 4
+
+ ## Enable automatic capture
+
+ Recommended
+
+ Automatic capture is opt-in for PHP. When enabled, the SDK installs handlers for uncaught exceptions. With the default `capture_errors: true`, it also captures PHP errors and fatal shutdown errors.
+
+ PHP
+
+ PostHog AI
+
+ ```php
+ PostHog\PostHog::init(
+ '',
+ [
+ 'host' => 'https://us.i.posthog.com',
+ 'error_tracking' => [
+ 'enabled' => true,
+ ],
+ ]
+ );
+ ```
+
+ **Existing handlers are preserved**
+
+ The SDK chains existing exception and error handlers instead of replacing your app's behavior.
+
+5. 5
+
+ ## Identify users and attach request context
+
+ Recommended
+
+ By default, automatically captured errors are anonymous. Use `context_provider` to attach a `distinctId` and request metadata to every automatically captured error event.
+
+ PHP
+
+ PostHog AI
+
+ ```php
+ PostHog\PostHog::init(
+ '',
+ [
+ 'host' => 'https://us.i.posthog.com',
+ 'error_tracking' => [
+ 'enabled' => true,
+ 'context_provider' => static function (array $payload): array {
+ return [
+ 'distinctId' => $_SESSION['user_id'] ?? null,
+ 'properties' => [
+ '$current_url' => $_SERVER['REQUEST_URI'] ?? null,
+ '$request_method' => $_SERVER['REQUEST_METHOD'] ?? null,
+ '$exception_source' => $payload['source'] ?? null,
+ ],
+ ];
+ },
+ ],
+ ]
+ );
+ ```
+
+ If `distinctId` is omitted, PostHog sends the event with an auto-generated ID and sets `$process_person_profile` to `false`.
+
+6. 6
+
+ ## Configure error tracking options
+
+ Optional
+
+ PHP
+
+ PostHog AI
+
+ ```php
+ PostHog\PostHog::init(
+ '',
+ [
+ 'host' => 'https://us.i.posthog.com',
+ 'error_tracking' => [
+ 'enabled' => true,
+ 'capture_errors' => true,
+ 'excluded_exceptions' => [
+ \InvalidArgumentException::class,
+ ],
+ 'max_frames' => 20,
+ 'context_provider' => static function (array $payload): array {
+ return [
+ 'distinctId' => $_SESSION['user_id'] ?? null,
+ 'properties' => [],
+ ];
+ },
+ ],
+ ]
+ );
+ ```
+
+ | Option | Type | Default | Description |
+ | --- | --- | --- | --- |
+ | enabled | boolean | false | Enables automatic error tracking handlers. Manual captureException works regardless. |
+ | capture_errors | boolean | true | When enabled, also captures PHP errors and fatal shutdown errors in addition to uncaught exceptions. |
+ | excluded_exceptions | array of class strings | [] | Throwable classes to skip during automatic capture. |
+ | max_frames | integer | 20 | Maximum number of stack frames included in $exception_list. |
+ | context_provider | callable or null | null | Callback that returns distinctId and extra event properties for automatic captures. |
+
+7. ## Verify error tracking
+
+ Recommended
+
+ Trigger a test exception to confirm events are being sent to PostHog. You should see them appear in the [Error Tracking](https://app.posthog.com/error_tracking) tab.
+
+ PHP
+
+ PostHog AI
+
+ ```php
+ PostHog\PostHog::init(
+ '',
+ [
+ 'host' => 'https://us.i.posthog.com',
+ 'error_tracking' => [
+ 'enabled' => true,
+ ],
+ ]
+ );
+ try {
+ throw new \Exception('Test exception from PHP');
+ } catch (\Throwable $e) {
+ PostHog\PostHog::captureException($e, 'test_user');
+ }
+ ```
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-laravel/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-laravel/references/upload-source-maps.md
new file mode 100644
index 00000000..b6ae318f
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-laravel/references/upload-source-maps.md
@@ -0,0 +1,67 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
+# Upload source maps - Docs
+
+If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
+
+If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
+
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
+
+- [Web](/docs/error-tracking/upload-source-maps/web.md)
+
+- [Next.js](/docs/error-tracking/upload-source-maps/nextjs.md)
+
+- [Node.js](/docs/error-tracking/upload-source-maps/node.md)
+
+- [React](/docs/error-tracking/upload-source-maps/react.md)
+
+- [Angular](/docs/error-tracking/upload-source-maps/angular.md)
+
+- [Nuxt](/docs/error-tracking/upload-source-maps/nuxt.md)
+
+- [React Native](/docs/error-tracking/upload-source-maps/react-native.md)
+
+- [Android](/docs/error-tracking/upload-mappings/android.md)
+
+- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
+- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
+- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
+
+- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
+
+- [Vite](/docs/error-tracking/upload-source-maps/vite.md)
+
+- [CLI](/docs/error-tracking/upload-source-maps/cli.md)
+
+- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-nextjs/SKILL.md b/skills/posthog/all/skills/error-tracking-nextjs/SKILL.md
index 783299ad..234ff13b 100644
--- a/skills/posthog/all/skills/error-tracking-nextjs/SKILL.md
+++ b/skills/posthog/all/skills/error-tracking-nextjs/SKILL.md
@@ -3,7 +3,7 @@ name: error-tracking-nextjs
description: PostHog error tracking for Next.js
metadata:
author: PostHog
- version: 1.9.4
+ version: dev
---
# PostHog error tracking for Next.js
@@ -18,6 +18,7 @@ This skill helps you add PostHog error tracking to Next.js applications.
- `references/monitoring.md` - Monitor and search issues - docs
- `references/assigning-issues.md` - Assign issues to teammates - docs
- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
Consult the documentation for API details and framework-specific patterns.
@@ -31,6 +32,7 @@ Consult the documentation for API details and framework-specific patterns.
## Framework guidelines
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
- For Next.js 15.3+, initialize PostHog in instrumentation-client.ts for the simplest setup
- For feature flags, use useFeatureFlagEnabled() or useFeatureFlagPayload() hooks - they handle loading states and external sync automatically
- Add analytics capture in event handlers where user actions occur, NOT in useEffect reacting to state changes
@@ -40,3 +42,6 @@ Consult the documentation for API details and framework-specific patterns.
- Do NOT use useEffect to notify parent components - call the parent callback alongside setState in the event handler
- To reset component state when a prop changes, pass the prop as the component's key instead of using useEffect
- useEffect is ONLY for synchronizing with external systems (non-React widgets, browser APIs, network subscriptions)
+- Remember that source code is available in the node_modules directory
+- Check package.json for type checking or build scripts to validate changes
+- When identity comes from framework-bridged state (Inertia or SSR shared props, a serialized session), confirm the backend actually shares that field — add the share server-side if missing — before identifying from it
diff --git a/skills/posthog/all/skills/error-tracking-nextjs/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-nextjs/references/COMMANDMENTS.md
new file mode 100644
index 00000000..d9b85301
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-nextjs/references/COMMANDMENTS.md
@@ -0,0 +1,17 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- For Next.js 15.3+, initialize PostHog in instrumentation-client.ts for the simplest setup
+- For feature flags, use useFeatureFlagEnabled() or useFeatureFlagPayload() hooks - they handle loading states and external sync automatically
+- Add analytics capture in event handlers where user actions occur, NOT in useEffect reacting to state changes
+- Do NOT use useEffect for data transformation - calculate derived values during render instead
+- Do NOT use useEffect to respond to user events - put that logic in the event handler itself
+- Do NOT use useEffect to chain state updates - calculate all related updates together in the event handler
+- Do NOT use useEffect to notify parent components - call the parent callback alongside setState in the event handler
+- To reset component state when a prop changes, pass the prop as the component's key instead of using useEffect
+- useEffect is ONLY for synchronizing with external systems (non-React widgets, browser APIs, network subscriptions)
+- Remember that source code is available in the node_modules directory
+- Check package.json for type checking or build scripts to validate changes
+- When identity comes from framework-bridged state (Inertia or SSR shared props, a serialized session), confirm the backend actually shares that field — add the share server-side if missing — before identifying from it
diff --git a/skills/posthog/all/skills/error-tracking-nextjs/references/alerts.md b/skills/posthog/all/skills/error-tracking-nextjs/references/alerts.md
index 94653a53..a760ac4e 100644
--- a/skills/posthog/all/skills/error-tracking-nextjs/references/alerts.md
+++ b/skills/posthog/all/skills/error-tracking-nextjs/references/alerts.md
@@ -1,12 +1,18 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
# Send error tracking alerts - Docs
To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
## Issue created or reopened
-To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
-
+
Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
@@ -52,11 +58,11 @@ This sends an email notification to the user you choose. Check out our [alerts d
**Can't find your alert?**
-If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/project/2#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-nextjs/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-nextjs/references/assigning-issues.md
index 77bb0f72..fe4ddaaa 100644
--- a/skills/posthog/all/skills/error-tracking-nextjs/references/assigning-issues.md
+++ b/skills/posthog/all/skills/error-tracking-nextjs/references/assigning-issues.md
@@ -1,26 +1,40 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
# Assign issues to teammates - Docs
Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
## Assign issues
-You can manually assign issues as you triage them in the UI. This can be done both in the issue list and issue detail pages.
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
-
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
-1. In your error tracking [issue list](https://app.posthog.com/error_tracking), click the **unassigned** selector under each issue to assign it to a role or user.
+
-2. On the detail page of each issue, click the **Assignee** selector to assign it to a role or user.
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
-
+
## Automatic issue assignment
-You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**.
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
-
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
@@ -58,19 +72,31 @@ A common use case for automatic issue assignment is to alert assignees of new is
## Create external issues
-You can also create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira.
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
-First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system. Then, from an issue's details page, under **External references**, click **Create issue**.
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.

-The new issue will have a partial stack trace and a link to the issue in PostHog.
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-nextjs/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-nextjs/references/fingerprints.md
index 324758ce..d58a6781 100644
--- a/skills/posthog/all/skills/error-tracking-nextjs/references/fingerprints.md
+++ b/skills/posthog/all/skills/error-tracking-nextjs/references/fingerprints.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
# Fingerprints - Docs
Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
@@ -48,9 +54,9 @@ Fingerprints can be manually set during exception capture. This is a very useful
You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-nextjs/references/monitoring.md b/skills/posthog/all/skills/error-tracking-nextjs/references/monitoring.md
index d7383fdd..6590cab2 100644
--- a/skills/posthog/all/skills/error-tracking-nextjs/references/monitoring.md
+++ b/skills/posthog/all/skills/error-tracking-nextjs/references/monitoring.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
# Monitor and search issues - Docs
This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
@@ -45,11 +51,11 @@ The search bar provides two modes of filtering:
This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
-
+
Added property filters look like this:
-
+
The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
@@ -103,7 +109,7 @@ This page shows you the following:
- Name, description, status, assignee, and external tracking links for the issue.
- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
-
+
### Filtering exception occurrences within an issue
@@ -111,7 +117,7 @@ Once you've found and opened the issue you want to investigate, you can use the
For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
-
+
**Alerts**
@@ -131,9 +137,9 @@ If you find your queries timing out or taking more than 30 seconds, please [let
If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-nextjs/references/nextjs.md b/skills/posthog/all/skills/error-tracking-nextjs/references/nextjs.md
index 0834e9ae..0cc37a26 100644
--- a/skills/posthog/all/skills/error-tracking-nextjs/references/nextjs.md
+++ b/skills/posthog/all/skills/error-tracking-nextjs/references/nextjs.md
@@ -1,4 +1,10 @@
-# Next.js error tracking installation - Docs
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Next.js Error Tracking installation - Docs
+
+Copy page
+
+# Next.js Error Tracking installation - Docs
1. 1
@@ -65,7 +71,7 @@
import posthog from 'posthog-js'
posthog.init(process.env.NEXT_PUBLIC_POSTHOG_PROJECT_TOKEN!, {
api_host: process.env.NEXT_PUBLIC_POSTHOG_HOST,
- defaults: '2026-01-30'
+ defaults: '2026-05-30'
})
```
@@ -82,12 +88,12 @@
import { usePathname, useSearchParams } from "next/navigation"
import { useEffect } from "react"
import posthog from 'posthog-js'
- import { PostHogProvider as PHProvider } from 'posthog-js/react'
+ import { PostHogProvider as PHProvider } from '@posthog/react'
export function PostHogProvider({ children }: { children: React.ReactNode }) {
useEffect(() => {
posthog.init(process.env.NEXT_PUBLIC_POSTHOG_PROJECT_TOKEN as string, {
api_host: process.env.NEXT_PUBLIC_POSTHOG_HOST,
- defaults: '2026-01-30'
+ defaults: '2026-05-30'
})
}, [])
return (
@@ -132,13 +138,13 @@
import { useEffect } from 'react'
import { Router } from 'next/router'
import posthog from 'posthog-js'
- import { PostHogProvider } from 'posthog-js/react'
+ import { PostHogProvider } from '@posthog/react'
import type { AppProps } from 'next/app'
export default function App({ Component, pageProps }: AppProps) {
useEffect(() => {
posthog.init(process.env.NEXT_PUBLIC_POSTHOG_PROJECT_TOKEN as string, {
api_host: process.env.NEXT_PUBLIC_POSTHOG_HOST,
- defaults: '2026-01-30',
+ defaults: '2026-05-30',
loaded: (posthog) => {
if (process.env.NODE_ENV === 'development') posthog.debug()
}
@@ -191,7 +197,7 @@
```typescript
'use client'
- import { usePostHog } from 'posthog-js/react'
+ import { usePostHog } from '@posthog/react'
export default function CheckoutPage() {
const posthog = usePostHog()
function handlePurchase() {
@@ -414,7 +420,7 @@
Importantly, you need to:
- 1. Set up a `posthog-node` client in your server-side code. See our doc on [setting up Next.js server-side analytics](/docs/libraries/next-js.md#server-side-analytics.md) for more.
+ 1. Set up a `posthog-node` client in your server-side code. See our doc on [setting up Next.js server-side analytics](/docs/libraries/next-js.md#server-side-analytics) for more.
2. Check the request is running in the `nodejs` runtime to ensure PostHog works. You can call `posthog.debug()` to get verbose logging.
3. Get the `distinct_id` from the cookie to connect the error to a specific user.
@@ -481,9 +487,9 @@
[Upload source maps](/docs/error-tracking/upload-source-maps/nextjs.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-nextjs/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-nextjs/references/upload-source-maps.md
index 178a4ab8..b6ae318f 100644
--- a/skills/posthog/all/skills/error-tracking-nextjs/references/upload-source-maps.md
+++ b/skills/posthog/all/skills/error-tracking-nextjs/references/upload-source-maps.md
@@ -1,10 +1,26 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
# Upload source maps - Docs
If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
-Choose your platform to view specific instructions.
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
- [Web](/docs/error-tracking/upload-source-maps/web.md)
@@ -24,8 +40,14 @@ Choose your platform to view specific instructions.
- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
@@ -36,9 +58,9 @@ Choose your platform to view specific instructions.
- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-node/SKILL.md b/skills/posthog/all/skills/error-tracking-node/SKILL.md
index e3ff2fc4..c42f383d 100644
--- a/skills/posthog/all/skills/error-tracking-node/SKILL.md
+++ b/skills/posthog/all/skills/error-tracking-node/SKILL.md
@@ -3,7 +3,7 @@ name: error-tracking-node
description: PostHog error tracking for Node.js
metadata:
author: PostHog
- version: 1.9.4
+ version: dev
---
# PostHog error tracking for Node.js
@@ -18,6 +18,7 @@ This skill helps you add PostHog error tracking to Node.js applications.
- `references/monitoring.md` - Monitor and search issues - docs
- `references/assigning-issues.md` - Assign issues to teammates - docs
- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
Consult the documentation for API details and framework-specific patterns.
@@ -31,12 +32,14 @@ Consult the documentation for API details and framework-specific patterns.
## Framework guidelines
-- posthog-node is the Node.js server-side SDK package name – do NOT use posthog-js on the server
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- posthog-node is the Node.js server-side SDK package name; posthog-js is browser-only, so use posthog-node on the server instead
- Include enableExceptionAutocapture: true in the PostHog constructor options
- Add posthog.capture() calls in route handlers for meaningful user actions – every route that creates, updates, or deletes data should track an event with contextual properties
- Add posthog.captureException(err, distinctId) in the application's error handler (e.g., Express error middleware, Fastify setErrorHandler, Koa app.on('error'))
-- In long-running servers, the SDK batches events automatically – do NOT set flushAt or flushInterval unless you have a specific reason to
-- For short-lived processes (scripts, CLIs, serverless), set flushAt to 1 and flushInterval to 0 to send events immediately
+- The SDK batches events and flushes asynchronously. await flush() or await shutdown() before letting that process exit. If unsure, set flushAt 1 and flushInterval 0.
+- `posthog.capture()` enqueues synchronously and returns; the batched HTTP send happens afterwards. Treat every per-request handler as short-lived even when the framework feels like a server: Next.js / Nuxt / SvelteKit / Remix route handlers, serverless and edge functions, and Lambda are torn down per invocation before the send runs. Create the client with flushAt 1 and flushInterval 0, then await the send before returning. Always use `await posthog.flush()` for a shared/singleton client, `await posthog.shutdown()` for a per-request client. Never skip the awaited flush or risk the enqueued event being silently dropped.
- Reverse proxy is NOT needed for server-side Node.js – only client-side JavaScript needs a proxy to avoid ad blockers
- Remember that source code is available in the node_modules directory
- Check package.json for type checking or build scripts to validate changes
+- When identity comes from framework-bridged state (Inertia or SSR shared props, a serialized session), confirm the backend actually shares that field — add the share server-side if missing — before identifying from it
diff --git a/skills/posthog/all/skills/error-tracking-node/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-node/references/COMMANDMENTS.md
new file mode 100644
index 00000000..11206d59
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-node/references/COMMANDMENTS.md
@@ -0,0 +1,15 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- posthog-node is the Node.js server-side SDK package name; posthog-js is browser-only, so use posthog-node on the server instead
+- Include enableExceptionAutocapture: true in the PostHog constructor options
+- Add posthog.capture() calls in route handlers for meaningful user actions – every route that creates, updates, or deletes data should track an event with contextual properties
+- Add posthog.captureException(err, distinctId) in the application's error handler (e.g., Express error middleware, Fastify setErrorHandler, Koa app.on('error'))
+- The SDK batches events and flushes asynchronously. await flush() or await shutdown() before letting that process exit. If unsure, set flushAt 1 and flushInterval 0.
+- `posthog.capture()` enqueues synchronously and returns; the batched HTTP send happens afterwards. Treat every per-request handler as short-lived even when the framework feels like a server: Next.js / Nuxt / SvelteKit / Remix route handlers, serverless and edge functions, and Lambda are torn down per invocation before the send runs. Create the client with flushAt 1 and flushInterval 0, then await the send before returning. Always use `await posthog.flush()` for a shared/singleton client, `await posthog.shutdown()` for a per-request client. Never skip the awaited flush or risk the enqueued event being silently dropped.
+- Reverse proxy is NOT needed for server-side Node.js – only client-side JavaScript needs a proxy to avoid ad blockers
+- Remember that source code is available in the node_modules directory
+- Check package.json for type checking or build scripts to validate changes
+- When identity comes from framework-bridged state (Inertia or SSR shared props, a serialized session), confirm the backend actually shares that field — add the share server-side if missing — before identifying from it
diff --git a/skills/posthog/all/skills/error-tracking-node/references/alerts.md b/skills/posthog/all/skills/error-tracking-node/references/alerts.md
index 94653a53..a760ac4e 100644
--- a/skills/posthog/all/skills/error-tracking-node/references/alerts.md
+++ b/skills/posthog/all/skills/error-tracking-node/references/alerts.md
@@ -1,12 +1,18 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
# Send error tracking alerts - Docs
To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
## Issue created or reopened
-To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
-
+
Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
@@ -52,11 +58,11 @@ This sends an email notification to the user you choose. Check out our [alerts d
**Can't find your alert?**
-If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/project/2#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-node/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-node/references/assigning-issues.md
index 77bb0f72..fe4ddaaa 100644
--- a/skills/posthog/all/skills/error-tracking-node/references/assigning-issues.md
+++ b/skills/posthog/all/skills/error-tracking-node/references/assigning-issues.md
@@ -1,26 +1,40 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
# Assign issues to teammates - Docs
Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
## Assign issues
-You can manually assign issues as you triage them in the UI. This can be done both in the issue list and issue detail pages.
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
-
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
-1. In your error tracking [issue list](https://app.posthog.com/error_tracking), click the **unassigned** selector under each issue to assign it to a role or user.
+
-2. On the detail page of each issue, click the **Assignee** selector to assign it to a role or user.
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
-
+
## Automatic issue assignment
-You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**.
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
-
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
@@ -58,19 +72,31 @@ A common use case for automatic issue assignment is to alert assignees of new is
## Create external issues
-You can also create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira.
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
-First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system. Then, from an issue's details page, under **External references**, click **Create issue**.
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.

-The new issue will have a partial stack trace and a link to the issue in PostHog.
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-node/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-node/references/fingerprints.md
index 324758ce..d58a6781 100644
--- a/skills/posthog/all/skills/error-tracking-node/references/fingerprints.md
+++ b/skills/posthog/all/skills/error-tracking-node/references/fingerprints.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
# Fingerprints - Docs
Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
@@ -48,9 +54,9 @@ Fingerprints can be manually set during exception capture. This is a very useful
You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-node/references/monitoring.md b/skills/posthog/all/skills/error-tracking-node/references/monitoring.md
index d7383fdd..6590cab2 100644
--- a/skills/posthog/all/skills/error-tracking-node/references/monitoring.md
+++ b/skills/posthog/all/skills/error-tracking-node/references/monitoring.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
# Monitor and search issues - Docs
This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
@@ -45,11 +51,11 @@ The search bar provides two modes of filtering:
This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
-
+
Added property filters look like this:
-
+
The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
@@ -103,7 +109,7 @@ This page shows you the following:
- Name, description, status, assignee, and external tracking links for the issue.
- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
-
+
### Filtering exception occurrences within an issue
@@ -111,7 +117,7 @@ Once you've found and opened the issue you want to investigate, you can use the
For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
-
+
**Alerts**
@@ -131,9 +137,9 @@ If you find your queries timing out or taking more than 30 seconds, please [let
If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-node/references/node.md b/skills/posthog/all/skills/error-tracking-node/references/node.md
index 6e843e31..e903a026 100644
--- a/skills/posthog/all/skills/error-tracking-node/references/node.md
+++ b/skills/posthog/all/skills/error-tracking-node/references/node.md
@@ -1,4 +1,10 @@
-# Node.js error tracking installation - Docs
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Node.js Error Tracking installation - Docs
+
+Copy page
+
+# Node.js Error Tracking installation - Docs
1. 1
@@ -151,9 +157,9 @@
[Upload source maps](/docs/error-tracking/upload-source-maps/node.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-node/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-node/references/upload-source-maps.md
index 178a4ab8..b6ae318f 100644
--- a/skills/posthog/all/skills/error-tracking-node/references/upload-source-maps.md
+++ b/skills/posthog/all/skills/error-tracking-node/references/upload-source-maps.md
@@ -1,10 +1,26 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
# Upload source maps - Docs
If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
-Choose your platform to view specific instructions.
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
- [Web](/docs/error-tracking/upload-source-maps/web.md)
@@ -24,8 +40,14 @@ Choose your platform to view specific instructions.
- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
@@ -36,9 +58,9 @@ Choose your platform to view specific instructions.
- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-nuxt/SKILL.md b/skills/posthog/all/skills/error-tracking-nuxt/SKILL.md
index 877e7b49..c7ca1c93 100644
--- a/skills/posthog/all/skills/error-tracking-nuxt/SKILL.md
+++ b/skills/posthog/all/skills/error-tracking-nuxt/SKILL.md
@@ -3,7 +3,7 @@ name: error-tracking-nuxt
description: PostHog error tracking for Nuxt
metadata:
author: PostHog
- version: 1.9.4
+ version: dev
---
# PostHog error tracking for Nuxt
@@ -12,12 +12,14 @@ This skill helps you add PostHog error tracking to Nuxt applications.
## Reference files
-- `references/nuxt.md` - Nuxt error tracking installation (v3.7 and above) - docs
+- `references/nuxt-3-7.md` - Nuxt error tracking installation (v3.7 and above) - docs
+- `references/nuxt-3-6.md` - Nuxt error tracking installation (v3.6 and below) - docs
- `references/fingerprints.md` - Fingerprints - docs
- `references/alerts.md` - Send error tracking alerts - docs
- `references/monitoring.md` - Monitor and search issues - docs
- `references/assigning-issues.md` - Assign issues to teammates - docs
- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
Consult the documentation for API details and framework-specific patterns.
@@ -31,4 +33,7 @@ Consult the documentation for API details and framework-specific patterns.
## Framework guidelines
-_No specific framework guidelines._
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- Remember that source code is available in the node_modules directory
+- Check package.json for type checking or build scripts to validate changes
+- When identity comes from framework-bridged state (Inertia or SSR shared props, a serialized session), confirm the backend actually shares that field — add the share server-side if missing — before identifying from it
diff --git a/skills/posthog/all/skills/error-tracking-nuxt/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-nuxt/references/COMMANDMENTS.md
new file mode 100644
index 00000000..64d91138
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-nuxt/references/COMMANDMENTS.md
@@ -0,0 +1,8 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- Remember that source code is available in the node_modules directory
+- Check package.json for type checking or build scripts to validate changes
+- When identity comes from framework-bridged state (Inertia or SSR shared props, a serialized session), confirm the backend actually shares that field — add the share server-side if missing — before identifying from it
diff --git a/skills/posthog/all/skills/error-tracking-nuxt/references/alerts.md b/skills/posthog/all/skills/error-tracking-nuxt/references/alerts.md
index 94653a53..a760ac4e 100644
--- a/skills/posthog/all/skills/error-tracking-nuxt/references/alerts.md
+++ b/skills/posthog/all/skills/error-tracking-nuxt/references/alerts.md
@@ -1,12 +1,18 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
# Send error tracking alerts - Docs
To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
## Issue created or reopened
-To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
-
+
Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
@@ -52,11 +58,11 @@ This sends an email notification to the user you choose. Check out our [alerts d
**Can't find your alert?**
-If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/project/2#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-nuxt/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-nuxt/references/assigning-issues.md
index 77bb0f72..fe4ddaaa 100644
--- a/skills/posthog/all/skills/error-tracking-nuxt/references/assigning-issues.md
+++ b/skills/posthog/all/skills/error-tracking-nuxt/references/assigning-issues.md
@@ -1,26 +1,40 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
# Assign issues to teammates - Docs
Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
## Assign issues
-You can manually assign issues as you triage them in the UI. This can be done both in the issue list and issue detail pages.
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
-
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
-1. In your error tracking [issue list](https://app.posthog.com/error_tracking), click the **unassigned** selector under each issue to assign it to a role or user.
+
-2. On the detail page of each issue, click the **Assignee** selector to assign it to a role or user.
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
-
+
## Automatic issue assignment
-You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**.
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
-
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
@@ -58,19 +72,31 @@ A common use case for automatic issue assignment is to alert assignees of new is
## Create external issues
-You can also create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira.
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
-First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system. Then, from an issue's details page, under **External references**, click **Create issue**.
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.

-The new issue will have a partial stack trace and a link to the issue in PostHog.
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-nuxt/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-nuxt/references/fingerprints.md
index 324758ce..d58a6781 100644
--- a/skills/posthog/all/skills/error-tracking-nuxt/references/fingerprints.md
+++ b/skills/posthog/all/skills/error-tracking-nuxt/references/fingerprints.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
# Fingerprints - Docs
Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
@@ -48,9 +54,9 @@ Fingerprints can be manually set during exception capture. This is a very useful
You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-nuxt/references/monitoring.md b/skills/posthog/all/skills/error-tracking-nuxt/references/monitoring.md
index d7383fdd..6590cab2 100644
--- a/skills/posthog/all/skills/error-tracking-nuxt/references/monitoring.md
+++ b/skills/posthog/all/skills/error-tracking-nuxt/references/monitoring.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
# Monitor and search issues - Docs
This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
@@ -45,11 +51,11 @@ The search bar provides two modes of filtering:
This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
-
+
Added property filters look like this:
-
+
The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
@@ -103,7 +109,7 @@ This page shows you the following:
- Name, description, status, assignee, and external tracking links for the issue.
- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
-
+
### Filtering exception occurrences within an issue
@@ -111,7 +117,7 @@ Once you've found and opened the issue you want to investigate, you can use the
For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
-
+
**Alerts**
@@ -131,9 +137,9 @@ If you find your queries timing out or taking more than 30 seconds, please [let
If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-nuxt/references/nuxt-3-6.md b/skills/posthog/all/skills/error-tracking-nuxt/references/nuxt-3-6.md
new file mode 100644
index 00000000..faef300e
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-nuxt/references/nuxt-3-6.md
@@ -0,0 +1,257 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Nuxt Error Tracking installation (v3.6 and below) - Docs
+
+Copy page
+
+# Nuxt Error Tracking installation (v3.6 and below) - Docs
+
+1. 1
+
+ ## Install the package
+
+ Required
+
+ Install the PostHog JavaScript library using your package manager:
+
+ PostHog AI
+
+ ### npm
+
+ ```bash
+ npm install posthog-js
+ ```
+
+ ### yarn
+
+ ```bash
+ yarn add posthog-js
+ ```
+
+ ### pnpm
+
+ ```bash
+ pnpm add posthog-js
+ ```
+
+ **Nuxt version**
+
+ This guide is for Nuxt v3.0 and above. For Nuxt v2.16 and below, see our [Nuxt docs](/docs/libraries/nuxt-js.md#nuxt-v216-and-below).
+
+2. 2
+
+ ## Add environment variables
+
+ Required
+
+ Add your PostHog project token and host to your `nuxt.config.js` file:
+
+ nuxt.config.js
+
+ PostHog AI
+
+ ```javascript
+ export default defineNuxtConfig({
+ runtimeConfig: {
+ public: {
+ posthogPublicKey: '',
+ posthogHost: 'https://us.i.posthog.com',
+ posthogDefaults: '2026-05-30'
+ }
+ }
+ })
+ ```
+
+3. 3
+
+ ## Create a plugin
+
+ Required
+
+ Create a new plugin by creating a new file `posthog.client.js` in your plugins directory:
+
+ plugins/posthog.client.js
+
+ PostHog AI
+
+ ```javascript
+ import { defineNuxtPlugin } from '#app'
+ import posthog from 'posthog-js'
+ export default defineNuxtPlugin(nuxtApp => {
+ const runtimeConfig = useRuntimeConfig();
+ const posthogClient = posthog.init(runtimeConfig.public.posthogPublicKey, {
+ api_host: runtimeConfig.public.posthogHost,
+ defaults: runtimeConfig.public.posthogDefaults,
+ loaded: (posthog) => {
+ if (import.meta.env.MODE === 'development') posthog.debug();
+ }
+ })
+ return {
+ provide: {
+ posthog: () => posthogClient
+ }
+ }
+ })
+ ```
+
+4. 4
+
+ ## Server-side setup
+
+ Optional
+
+ To capture events from server routes, install `posthog-node` and instantiate it directly. You can also use it to evaluate feature flags on the server:
+
+ PostHog AI
+
+ ### npm
+
+ ```bash
+ npm install posthog-node
+ ```
+
+ ### yarn
+
+ ```bash
+ yarn add posthog-node
+ ```
+
+ ### pnpm
+
+ ```bash
+ pnpm add posthog-node
+ ```
+
+ server/api/example.js
+
+ PostHog AI
+
+ ```javascript
+ import { PostHog } from 'posthog-node'
+ export default defineEventHandler(async (event) => {
+ const runtimeConfig = useRuntimeConfig()
+ const posthog = new PostHog(
+ runtimeConfig.public.posthogPublicKey,
+ { host: runtimeConfig.public.posthogHost }
+ )
+ posthog.capture({
+ distinctId: 'distinct_id_of_the_user',
+ event: 'event_name'
+ })
+ await posthog.shutdown()
+ })
+ ```
+
+5. 5
+
+ ## Send events
+
+ Click around and view a couple pages to generate some events. PostHog automatically captures pageviews, clicks, and other interactions for you.
+
+ If you'd like, you can also manually capture custom events:
+
+ JavaScript
+
+ PostHog AI
+
+ ```javascript
+ posthog.capture('my_custom_event', { property: 'value' })
+ ```
+
+6. 6
+
+ ## Manually capturing exceptions
+
+ Optional
+
+ To send errors directly using the PostHog client, import it and use the `captureException` method like this:
+
+ Vue
+
+ PostHog AI
+
+ ```html
+
+ ```
+
+ On the server side, you can use the `posthog` object directly.
+
+ server/api/example.js
+
+ PostHog AI
+
+ ```javascript
+ const runtimeConfig = useRuntimeConfig()
+ const posthog = new PostHog(
+ runtimeConfig.public.posthogPublicKey,
+ {
+ host: runtimeConfig.public.posthogHost,
+ }
+ );
+ try {
+ const results = await DB.query.users.findMany()
+ return results
+ } catch (error) {
+ posthog.captureException(error)
+ }
+ ```
+
+7. 7
+
+ ## Configuring exception autocapture
+
+ Recommended
+
+ Update your `posthog.client.js` to add an error hook.
+
+ JavaScript
+
+ PostHog AI
+
+ ```javascript
+ export default defineNuxtPlugin((nuxtApp) => {
+ ...
+ nuxtApp.hook('vue:error', (error) => {
+ posthogClient.captureException(error)
+ })
+ ...
+ })
+ ```
+
+8. ## Verify error tracking
+
+ Recommended
+
+ *Confirm events are being sent to PostHog*
+
+ Before proceeding, let's make sure exception events are being captured and sent to PostHog. You should see events appear in the activity feed.
+
+ 
+
+ [Check for exceptions in PostHog](https://app.posthog.com/activity/explore)
+
+9. 8
+
+ ## Upload source maps
+
+ Required
+
+ Great, you're capturing exceptions! If you serve minified bundles, the next step is to upload source maps to generate accurate stack traces.
+
+ Let's continue to the next section.
+
+ [Upload source maps](/docs/error-tracking/upload-source-maps/nuxt.md)
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-nuxt/references/nuxt-3-7.md b/skills/posthog/all/skills/error-tracking-nuxt/references/nuxt-3-7.md
new file mode 100644
index 00000000..2a0eb7aa
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-nuxt/references/nuxt-3-7.md
@@ -0,0 +1,187 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Nuxt Error Tracking installation (v3.7 and above) - Docs
+
+Copy page
+
+# Nuxt Error Tracking installation (v3.7 and above) - Docs
+
+1. 1
+
+ ## Install the PostHog Nuxt module
+
+ Required
+
+ Install the PostHog Nuxt module using your package manager:
+
+ PostHog AI
+
+ ### npm
+
+ ```bash
+ npm install @posthog/nuxt
+ ```
+
+ ### yarn
+
+ ```bash
+ yarn add @posthog/nuxt
+ ```
+
+ ### pnpm
+
+ ```bash
+ pnpm add @posthog/nuxt
+ ```
+
+ ### bun
+
+ ```bash
+ bun add @posthog/nuxt
+ ```
+
+ Add the module to your `nuxt.config.ts` file:
+
+ nuxt.config.ts
+
+ PostHog AI
+
+ ```typescript
+ export default defineNuxtConfig({
+ modules: ['@posthog/nuxt'],
+ // Enable source maps generation in both vue and nitro
+ sourcemap: {
+ client: 'hidden'
+ },
+ nitro: {
+ rollupConfig: {
+ output: {
+ sourcemapExcludeSources: false,
+ },
+ },
+ },
+ posthogConfig: {
+ publicKey: '', // Find it in project settings https://app.posthog.com/settings/project
+ host: 'https://us.i.posthog.com', // Optional: defaults to https://us.i.posthog.com. Use https://eu.i.posthog.com for EU region
+ clientConfig: {
+ capture_exceptions: true, // Enables automatic exception capture on the client side (Vue)
+ },
+ serverConfig: {
+ enableExceptionAutocapture: true, // Enables automatic exception capture on the server side (Nitro)
+ },
+ sourcemaps: {
+ enabled: true,
+ projectId: '', // Your project ID, found in your environment settings: https://app.posthog.com/settings/environment#variables
+ personalApiKey: '', // Your personal API key from PostHog settings https://app.posthog.com/settings/user-api-keys (requires organization:read and error_tracking:write scopes)
+ releaseName: 'my-application', // Optional: defaults to git repository name
+ releaseVersion: '1.0.0', // Optional: defaults to current git commit
+ },
+ },
+ })
+ ```
+
+ **Personal API key**
+
+ Your personal API key will require `organization:read` and `error_tracking:write` scopes.
+
+ The module will automatically:
+
+ - Initialize PostHog on both Vue (client side) and Nitro (server side)
+ - Capture exceptions on both client and server
+ - Generate and upload source maps during build
+
+2. 2
+
+ ## Manually capturing exceptions
+
+ Optional
+
+ Our module if set up as shown above already captures both client and server side exceptions automatically.
+
+ To send errors manually on the client side, import it and use the `captureException` method like this:
+
+ Vue
+
+ PostHog AI
+
+ ```html
+
+ ```
+
+ On the server side instantiate PostHog using:
+
+ server/api/example.js
+
+ PostHog AI
+
+ ```javascript
+ const runtimeConfig = useRuntimeConfig()
+ const posthog = new PostHog(
+ runtimeConfig.public.posthogPublicKey,
+ {
+ host: runtimeConfig.public.posthogHost,
+ }
+ );
+ try {
+ const results = await DB.query.users.findMany()
+ return results
+ } catch (error) {
+ posthog.captureException(error)
+ }
+ ```
+
+3. 3
+
+ ## Build your project for production
+
+ Required
+
+ Build your project for production by running the following command:
+
+ Terminal
+
+ PostHog AI
+
+ ```bash
+ nuxt build
+ ```
+
+ The PostHog module will automatically **generate and upload source maps** to PostHog during the build process.
+
+4. ## Verify error tracking
+
+ Recommended
+
+ *Confirm events are being sent to PostHog*
+
+ Before proceeding, let's make sure exception events are being captured and sent to PostHog. You should see events appear in the activity feed.
+
+ 
+
+ [Check for exceptions in PostHog](https://app.posthog.com/activity/explore)
+
+5. 4
+
+ ## Upload source maps
+
+ Required
+
+ Great, you're capturing exceptions! If you serve minified bundles, the next step is to upload source maps to generate accurate stack traces.
+
+ Let's continue to the next section.
+
+ [Upload source maps](/docs/error-tracking/upload-source-maps/nuxt.md)
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-nuxt/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-nuxt/references/upload-source-maps.md
index 178a4ab8..b6ae318f 100644
--- a/skills/posthog/all/skills/error-tracking-nuxt/references/upload-source-maps.md
+++ b/skills/posthog/all/skills/error-tracking-nuxt/references/upload-source-maps.md
@@ -1,10 +1,26 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
# Upload source maps - Docs
If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
-Choose your platform to view specific instructions.
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
- [Web](/docs/error-tracking/upload-source-maps/web.md)
@@ -24,8 +40,14 @@ Choose your platform to view specific instructions.
- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
@@ -36,9 +58,9 @@ Choose your platform to view specific instructions.
- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-php/SKILL.md b/skills/posthog/all/skills/error-tracking-php/SKILL.md
new file mode 100644
index 00000000..d59f3ae4
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-php/SKILL.md
@@ -0,0 +1,41 @@
+---
+name: error-tracking-php
+description: PostHog error tracking for PHP
+metadata:
+ author: PostHog
+ version: dev
+---
+
+# PostHog error tracking for PHP
+
+This skill helps you add PostHog error tracking to PHP applications.
+
+## Reference files
+
+- `references/php.md` - Php error tracking installation - docs
+- `references/fingerprints.md` - Fingerprints - docs
+- `references/alerts.md` - Send error tracking alerts - docs
+- `references/monitoring.md` - Monitor and search issues - docs
+- `references/assigning-issues.md` - Assign issues to teammates - docs
+- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
+
+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
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- Remember that source code is available in the vendor directory after composer install
+- posthog/posthog-php is the PHP SDK package name
+- Check composer.json for existing dependencies and autoload configuration before adding new files
+- The PHP SDK uses static methods (PostHog::capture, PostHog::identify) - initialize once with PostHog::init()
+- PHP SDK methods take associative arrays with 'distinctId', 'event', 'properties' keys - not positional arguments
+- Any first-party loader or proxy script you add must load standalone — require its own config includes explicitly rather than assuming the app bootstrapped them
diff --git a/skills/posthog/all/skills/error-tracking-php/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-php/references/COMMANDMENTS.md
new file mode 100644
index 00000000..71c9848e
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-php/references/COMMANDMENTS.md
@@ -0,0 +1,11 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- Remember that source code is available in the vendor directory after composer install
+- posthog/posthog-php is the PHP SDK package name
+- Check composer.json for existing dependencies and autoload configuration before adding new files
+- The PHP SDK uses static methods (PostHog::capture, PostHog::identify) - initialize once with PostHog::init()
+- PHP SDK methods take associative arrays with 'distinctId', 'event', 'properties' keys - not positional arguments
+- Any first-party loader or proxy script you add must load standalone — require its own config includes explicitly rather than assuming the app bootstrapped them
diff --git a/skills/posthog/all/skills/error-tracking-php/references/alerts.md b/skills/posthog/all/skills/error-tracking-php/references/alerts.md
new file mode 100644
index 00000000..a760ac4e
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-php/references/alerts.md
@@ -0,0 +1,69 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
+# Send error tracking alerts - Docs
+
+To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
+
+## Issue created or reopened
+
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+
+
+
+Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
+
+This will then send alerts to your chosen destination when an issue is created or reopened like this:
+
+## Issue properties and assignments
+
+You can filter an alert based on the properties of an issue. This is useful for notifying a specific team when they have been auto assigned an issue using [auto assignment rules](/docs/error-tracking/managing-issues.md#auto-assignment-rules).
+
+
+
+## Spike alerts
+
+PostHog can also alert you when an existing issue suddenly spikes in volume - for example, after a bad deploy. This works differently from issue-created alerts. Instead of triggering when a new issue is first seen, spike alerts fire when an issue's error rate significantly exceeds its historical baseline.
+
+See the [spike detection guide](/docs/error-tracking/spikes.md) to learn how it works and how to configure it.
+
+## Other alerting options
+
+Since error tracking works by capturing `$exception` events, PostHog features that trigger by events can play a role in alerts too.
+
+### Real time destinations
+
+The first way is using [real time destinations](/docs/cdp/destinations.md). This enables you to send events (like `$exception`) to other tools as soon as they are ingested.
+
+To create a real time destination, go to the [data pipelines tab](https://app.posthog.com/data-management/destinations) in PostHog, click **\+ New**, and then select **Destination**. Choose your destination and press **\+ Create**.
+
+On the destination creation screen, make sure to add an event matcher for the `$exception` event, filter for the properties you want, and set the trigger options.
+
+
+
+Check out our [real time destinations docs](/docs/cdp/destinations.md) for more information.
+
+### Trend alerts
+
+You can also visualize your `$exception` events using [trends](/docs/product-analytics/trends/overview.md). Once you create a trend insight, click the **Alerts** button at the top of the insight and then **New alert**.
+
+Here you can set alerts for event volume value, increase, or decrease.
+
+
+
+This sends an email notification to the user you choose. Check out our [alerts docs](/docs/alerts.md) for more information.
+
+**Can't find your alert?**
+
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-php/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-php/references/assigning-issues.md
new file mode 100644
index 00000000..fe4ddaaa
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-php/references/assigning-issues.md
@@ -0,0 +1,103 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
+# Assign issues to teammates - Docs
+
+Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
+
+## Assign issues
+
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
+
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
+
+
+
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
+
+Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
+
+
+
+## Automatic issue assignment
+
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
+
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
+
+Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
+
+Issues can be automatically assigned to a **role** or **user** by configuring a set of filters. These filters can be configured to match **any** or **all** of the criteria.
+
+You can configure automatic assignment to filter on any [event property](/docs/data/events.md) in PostHog. When there are multiple values for a property, the filters return true if it matches **any** of the values. For example, if you have multiple `exception_functions` values, the filters returns true if it matches **any** of the functions.
+
+Here are some common properties you can filter on:
+
+| Property | Event property | Description |
+| --- | --- | --- |
+| Exception type | $exception_types | The type of exception(s) that occurred |
+| Exception message | $exception_values | The message(s) detected on the error |
+| Exception function | $exception_functions | The function(s) where the exception occurred |
+| Exception source | $exception_sources | The source file(s) where the exception occurred |
+| Exception was handled | $exception_handled | Whether the exception was handled by the application |
+| Device type | $device_type | The type of device that the error occurred on |
+| Browser | $browser | The browser that the error occurred in |
+| Current URL | $current_url | The URL that the error occurred on |
+| Feature flag | $feature_flag | The feature flag that the error occurred on |
+
+You can also set custom properties on the error tracking event to filter on. For example, setting a custom `params_received` property to provide more context or debug information.
+
+### Order of issue assignment rules
+
+Issue assignment filters are evaluated in the order they are configured. They can also be reordered once created. The first filter that matches is used to assign the issue. This means you should configure the most specific filters first, and then the more general filters later.
+
+### Disabled assignment rules
+
+Assignment rules can become disabled if an error occurs during ingestion. When a rule is disabled, a banner displays the original error message. To re-enable the rule, edit it to fix the problem and save your changes. If the issue persists, reach out to support.
+
+### Alerting based on assignment
+
+A common use case for automatic issue assignment is to alert assignees of new issues. Once the issues are automatically assigned, you can set up alerts to notify the assignee. See the [alerts](/docs/error-tracking/alerts.md) guide for more information.
+
+## Create external issues
+
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
+
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.
+
+
+
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
+
+> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-php/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-php/references/fingerprints.md
new file mode 100644
index 00000000..d58a6781
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-php/references/fingerprints.md
@@ -0,0 +1,63 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
+# Fingerprints - Docs
+
+Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
+
+## Fingerprint and issue grouping
+
+Every exception has a fingerprint, whether generated or defined by the user. Each fingerprint links to exactly one issue. Exceptions that share the same fingerprint define an issue.
+
+Multiple different fingerprints can point to the same issue (a many-to-one relationship) if you [merge issues](/docs/error-tracking/managing-issues.md#merging-issues).
+
+## How are fingerprints generated?
+
+Fingerprints are built iteratively using components of the exception event. The flowchart below shows how fingerprints are generated.
+
+flowchart LR A\[Add exception type to fingerprint\] --> B{Stack trace available?} B -->|No| C\[Add error message to fingerprint\] C --> D\[Final fingerprint\] B -->|Yes| E{In-app frames exist?} E -->|No| F\[Add first frame to fingerprint\] E -->|Yes| G\[Add in-app frame to fingerprint Priority: resolved > unresolved\] F --> D G --> D
+
+The flowchart in text
+
+Fingerprints are generated by considering the following in combination:
+
+1. The exception type
+2. If there's no resolved stack trace, add the error message to the fingerprint
+3. If there are stack traces but no in-app frames (frames from your code, not a dependency), use the first frame of the stack trace
+4. If there are stack traces, in-app frames, and source maps available, use the resolved in-app stack frames
+5. If there are stack traces, in-app frames, and source maps *not* available, use the first in-app stack frame
+
+In some languages, like Python, one error can trigger another, creating a chain of linked exceptions. PostHog records the entire chain in the event and generates a single fingerprint for it.
+
+### Ensuring accurate fingerprints
+
+[Resolved stack traces](/docs/error-tracking/stack-traces.md) are critical for accurate fingerprinting. Without accurate stack traces, PostHog cannot group exceptions consistently. If you have not uploaded source maps, follow the [source map guide](/docs/error-tracking/upload-source-maps.md) to do so.
+
+This also means that if the exception **type** or **message** changes from one version to the next, the fingerprint will change.
+
+## When are generated fingerprints used?
+
+Fingerprints are used to group similar exceptions into issues automatically. Automatic issue grouping is only done when:
+
+- No [issue grouping rules](/docs/error-tracking/grouping-issues.md) are applied
+- No [issue merging](/docs/error-tracking/managing-issues.md#merging-issues) has been configured
+- No [custom fingerprint](#customizing-fingerprints) is set during capture
+
+You can find details about how issue grouping works in the [issues and exceptions](/docs/error-tracking/issues-and-exceptions.md) guide.
+
+## Customizing fingerprints
+
+Fingerprints can be manually set during exception capture. This is a very useful way to group exceptions that are not related to each other. You can find examples of how to do this in the [custom issue grouping](/docs/error-tracking/grouping-issues.md#option-2-client-side-fingerprint) section.
+
+You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-php/references/monitoring.md b/skills/posthog/all/skills/error-tracking-php/references/monitoring.md
new file mode 100644
index 00000000..6590cab2
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-php/references/monitoring.md
@@ -0,0 +1,146 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
+# Monitor and search issues - Docs
+
+This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
+
+## Monitoring issues
+
+When you're monitoring issues in your project, there are generally two common workflows:
+
+- You're exploring issues to identify impactful and problematic areas. You should use sorting features.
+- You're looking for issues assigned to you to resolve them. You should filter by the `Assigned to` property.
+
+### Sorting issues
+
+Issues can be sorted by the following properties:
+
+| Property | Description |
+| --- | --- |
+| Last seen | The issue that has the most recent exception |
+| First seen | The issue that has the oldest exception |
+| Occurrences | The number of exceptions in the issue |
+| Users | The number of unique users affected by the issue |
+| Sessions | The number of unique sessions affected by the issue |
+
+Sorting by **last seen** and **occurrences** are great ways to get a general sense of issues in your project. Sorting by **users** and **sessions** is great to find the most impactful issues if you're using other [filters](#finding-specific-issues) to narrow down your results.
+
+### Monitoring issues assigned to you
+
+You can filter issues by the **Assigned to** property to find issues assigned to you. This is especially useful if you configure [automatic issue assignment](/docs/error-tracking/assigning-issues.md) and configure [alerts](/docs/error-tracking/alerts.md) to notify you when new issues are created.
+
+## Finding specific issues
+
+You can use the search bar at the top of the [issue page](https://app.posthog.com/error_tracking) to filter issues based on the properties of the exceptions in that issue.
+
+Search results are matched based on [properties of exception events](/docs/error-tracking/issues-and-exceptions.md) grouped into the issues. For example, if you search for "TypeError", we show you all issues where *any* exception grouped into the issue has a type of "TypeError".
+
+**Unrelated results**
+
+You may see seemingly unrelated issues in your search results because your search term matches an exception in the issue group. For example, you may see an issues named `RefreshError` when searching "schema", because a `get_schema` method appears on the exception stack traces.
+
+### Filtering modes
+
+The search bar provides two modes of filtering:
+
+#### 1\. Exact property filtering
+
+This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
+
+
+
+Added property filters look like this:
+
+
+
+The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
+
+#### 2\. Freeform text search
+
+This does text matching for a subset of the error tracking specific properties of the exception event. It splits the text you give it into tokens. The search matches an exception if *each* of the tokens in your search term appear in one of the following:
+
+- The exception type
+- The exception message
+- The function names in the exception stack trace (if known)
+- The file paths in the exception stack trace (if known)
+
+For example, imagine you have an exception that looks like this:
+
+PostHog AI
+
+```
+TypeError: Cannot read property 'name' of undefined
+ at Object. (/path/to/myfile.js:123:45)
+ at Module._compile (module.js:653:30)
+ at Object.Module._extensions..js (module.js:664:10)
+ at Module.load (module.js:566:32)
+ at tryModuleLoad (module.js:506:12)
+ at Function.Module._load (module.js:498:3)
+ at Function.Module.runMain (module.js:694:10)
+ at startup (bootstrap_node.js:204:16)
+ at bootstrap_node.js:625:3
+```
+
+If you search for the term `TypeError myfile.js`, the exception matches this search, as it contains `TypeError` (as the exception type) and `myfile.js` (as a file path in the stack trace).
+
+If you search for `TypeError myfile.js abc`, the exception would not match, as the token `abc` does not appear anywhere in freeform search properties.
+
+If you want to search for longer exact strings, e.g. a particular exception message, you can group tokens into a single term using quotes, e.g. `"Cannot read property 'name' of undefined" myfile.js` would match, and `"Cannot read property of myfile.js"` would not.
+
+Note, perhaps unintuitively, `Cannot read property of myfile.js` would match, because the tokens are ungrouped, and all of them appear *somewhere* in the exception search properties.
+
+### Searching chained exceptions
+
+Exception events can have more than one exception in them, due to language features like exception chaining. For freeform search, we put the types, messages, functions and file paths of all exceptions into one list, and match if the token appears in any of them.
+
+For example, if you had a chained exception with the messages `MyCustomError: Failed to load user` and `Cannot read property 'age' of undefined`, searching for `cannot read property` would match the exception, because it matches *one* of the exception messages (`property` appears in the "root" one).
+
+## Issue details
+
+When you click on an issue, you'll see the details page of the issue.
+
+This page shows you the following:
+
+- The stack trace, properties, and sessions related to the **currently selected exception**.
+- Name, description, status, assignee, and external tracking links for the issue.
+- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
+
+
+
+### Filtering exception occurrences within an issue
+
+Once you've found and opened the issue you want to investigate, you can use the same search interface to filter the exception list for a particular instance of the issue. This is particularly useful in cases where some exceptions in the issue have information others don't and you want to use that information for debugging.
+
+For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
+
+
+
+**Alerts**
+
+If you have a set of filters that you use often, you can create alerts for them. This way you can be notified when new issues match your filters. Learn more about [alerts](/docs/error-tracking/alerts.md).
+
+## Improving search performance
+
+We try to return results to you within a second, but sometimes if you're querying over large amounts of data, it may take longer. The following can improve the search performance:
+
+- **Limit the time range you're searching over:** 7 days is usually enough to get a sense for the trends of an issue over time.
+
+- **Use freeform search rather than property filters:** Our freeform searches are generally faster than property filters, as the total amount of data processed is smaller.
+
+If you find your queries timing out or taking more than 30 seconds, please [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue)! We're always looking for benchmarks to improve against.
+
+## Suppressing issues
+
+If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-php/references/php.md b/skills/posthog/all/skills/error-tracking-php/references/php.md
new file mode 100644
index 00000000..7a3242cd
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-php/references/php.md
@@ -0,0 +1,228 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# PHP Error Tracking installation - Docs
+
+Copy page
+
+# PHP Error Tracking installation - Docs
+
+1. 1
+
+ ## Install the PHP SDK
+
+ Required
+
+ Install the [PostHog PHP SDK](/docs/libraries/php.md) via Composer:
+
+ Terminal
+
+ PostHog AI
+
+ ```bash
+ composer require posthog/posthog-php
+ ```
+
+2. 2
+
+ ## Initialize the client
+
+ Required
+
+ Set your project token and instance address before making any calls:
+
+ PHP
+
+ PostHog AI
+
+ ```php
+ PostHog\PostHog::init(
+ '',
+ ['host' => 'https://us.i.posthog.com']
+ );
+ ```
+
+ You can find your project token and instance address in the [project settings](https://app.posthog.com/settings/project) page in PostHog.
+
+3. 3
+
+ ## Capture exceptions
+
+ Required
+
+ Use `captureException` to manually capture exceptions and send them to PostHog as `$exception` events with full stack traces.
+
+ ### Basic usage
+
+ PHP
+
+ PostHog AI
+
+ ```php
+ try {
+ // Your code that might throw
+ riskyOperation();
+ } catch (\Throwable $e) {
+ PostHog\PostHog::captureException($e, 'user_distinct_id');
+ }
+ ```
+
+ ### With additional properties
+
+ You can pass extra properties to include with the exception event:
+
+ PHP
+
+ PostHog AI
+
+ ```php
+ try {
+ processOrder($orderId);
+ } catch (\Throwable $e) {
+ PostHog\PostHog::captureException($e, 'user_distinct_id', [
+ 'order_id' => $orderId,
+ 'environment' => 'production',
+ ]);
+ }
+ ```
+
+ You can also pass a plain string if you want to send an error message without a `Throwable`.
+
+4. 4
+
+ ## Enable automatic capture
+
+ Recommended
+
+ Automatic capture is opt-in for PHP. When enabled, the SDK installs handlers for uncaught exceptions. With the default `capture_errors: true`, it also captures PHP errors and fatal shutdown errors.
+
+ PHP
+
+ PostHog AI
+
+ ```php
+ PostHog\PostHog::init(
+ '',
+ [
+ 'host' => 'https://us.i.posthog.com',
+ 'error_tracking' => [
+ 'enabled' => true,
+ ],
+ ]
+ );
+ ```
+
+ **Existing handlers are preserved**
+
+ The SDK chains existing exception and error handlers instead of replacing your app's behavior.
+
+5. 5
+
+ ## Identify users and attach request context
+
+ Recommended
+
+ By default, automatically captured errors are anonymous. Use `context_provider` to attach a `distinctId` and request metadata to every automatically captured error event.
+
+ PHP
+
+ PostHog AI
+
+ ```php
+ PostHog\PostHog::init(
+ '',
+ [
+ 'host' => 'https://us.i.posthog.com',
+ 'error_tracking' => [
+ 'enabled' => true,
+ 'context_provider' => static function (array $payload): array {
+ return [
+ 'distinctId' => $_SESSION['user_id'] ?? null,
+ 'properties' => [
+ '$current_url' => $_SERVER['REQUEST_URI'] ?? null,
+ '$request_method' => $_SERVER['REQUEST_METHOD'] ?? null,
+ '$exception_source' => $payload['source'] ?? null,
+ ],
+ ];
+ },
+ ],
+ ]
+ );
+ ```
+
+ If `distinctId` is omitted, PostHog sends the event with an auto-generated ID and sets `$process_person_profile` to `false`.
+
+6. 6
+
+ ## Configure error tracking options
+
+ Optional
+
+ PHP
+
+ PostHog AI
+
+ ```php
+ PostHog\PostHog::init(
+ '',
+ [
+ 'host' => 'https://us.i.posthog.com',
+ 'error_tracking' => [
+ 'enabled' => true,
+ 'capture_errors' => true,
+ 'excluded_exceptions' => [
+ \InvalidArgumentException::class,
+ ],
+ 'max_frames' => 20,
+ 'context_provider' => static function (array $payload): array {
+ return [
+ 'distinctId' => $_SESSION['user_id'] ?? null,
+ 'properties' => [],
+ ];
+ },
+ ],
+ ]
+ );
+ ```
+
+ | Option | Type | Default | Description |
+ | --- | --- | --- | --- |
+ | enabled | boolean | false | Enables automatic error tracking handlers. Manual captureException works regardless. |
+ | capture_errors | boolean | true | When enabled, also captures PHP errors and fatal shutdown errors in addition to uncaught exceptions. |
+ | excluded_exceptions | array of class strings | [] | Throwable classes to skip during automatic capture. |
+ | max_frames | integer | 20 | Maximum number of stack frames included in $exception_list. |
+ | context_provider | callable or null | null | Callback that returns distinctId and extra event properties for automatic captures. |
+
+7. ## Verify error tracking
+
+ Recommended
+
+ Trigger a test exception to confirm events are being sent to PostHog. You should see them appear in the [Error Tracking](https://app.posthog.com/error_tracking) tab.
+
+ PHP
+
+ PostHog AI
+
+ ```php
+ PostHog\PostHog::init(
+ '',
+ [
+ 'host' => 'https://us.i.posthog.com',
+ 'error_tracking' => [
+ 'enabled' => true,
+ ],
+ ]
+ );
+ try {
+ throw new \Exception('Test exception from PHP');
+ } catch (\Throwable $e) {
+ PostHog\PostHog::captureException($e, 'test_user');
+ }
+ ```
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-php/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-php/references/upload-source-maps.md
new file mode 100644
index 00000000..b6ae318f
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-php/references/upload-source-maps.md
@@ -0,0 +1,67 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
+# Upload source maps - Docs
+
+If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
+
+If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
+
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
+
+- [Web](/docs/error-tracking/upload-source-maps/web.md)
+
+- [Next.js](/docs/error-tracking/upload-source-maps/nextjs.md)
+
+- [Node.js](/docs/error-tracking/upload-source-maps/node.md)
+
+- [React](/docs/error-tracking/upload-source-maps/react.md)
+
+- [Angular](/docs/error-tracking/upload-source-maps/angular.md)
+
+- [Nuxt](/docs/error-tracking/upload-source-maps/nuxt.md)
+
+- [React Native](/docs/error-tracking/upload-source-maps/react-native.md)
+
+- [Android](/docs/error-tracking/upload-mappings/android.md)
+
+- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
+- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
+- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
+
+- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
+
+- [Vite](/docs/error-tracking/upload-source-maps/vite.md)
+
+- [CLI](/docs/error-tracking/upload-source-maps/cli.md)
+
+- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-python/SKILL.md b/skills/posthog/all/skills/error-tracking-python/SKILL.md
index 23ea5830..5e8b51dd 100644
--- a/skills/posthog/all/skills/error-tracking-python/SKILL.md
+++ b/skills/posthog/all/skills/error-tracking-python/SKILL.md
@@ -3,7 +3,7 @@ name: error-tracking-python
description: PostHog error tracking for Python
metadata:
author: PostHog
- version: 1.9.4
+ version: dev
---
# PostHog error tracking for Python
@@ -18,6 +18,7 @@ This skill helps you add PostHog error tracking to Python applications.
- `references/monitoring.md` - Monitor and search issues - docs
- `references/assigning-issues.md` - Assign issues to teammates - docs
- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
Consult the documentation for API details and framework-specific patterns.
@@ -31,6 +32,7 @@ Consult the documentation for API details and framework-specific patterns.
## Framework guidelines
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
- Remember that source code is available in the venv/site-packages directory
- posthog is the Python SDK package name
- Install dependencies with `pip install posthog` or `pip install -r requirements.txt` and do NOT use unquoted version specifiers like `>=` directly in shell commands
diff --git a/skills/posthog/all/skills/error-tracking-python/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-python/references/COMMANDMENTS.md
new file mode 100644
index 00000000..c8ef6d3b
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-python/references/COMMANDMENTS.md
@@ -0,0 +1,15 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- Remember that source code is available in the venv/site-packages directory
+- posthog is the Python SDK package name
+- Install dependencies with `pip install posthog` or `pip install -r requirements.txt` and do NOT use unquoted version specifiers like `>=` directly in shell commands
+- In CLIs and scripts: MUST call posthog.shutdown() before exit or all events are lost
+- Always use the Posthog() class constructor (instance-based API) instead of module-level posthog.api_key config
+- Always include enable_exception_autocapture=True in the Posthog() constructor to automatically track exceptions
+- NEVER send PII in capture() event properties — no emails, full names, phone numbers, physical addresses, IP addresses, or user-generated content
+- PII belongs in identify() person properties, NOT in capture() event properties. Safe event properties are metadata like message_length, form_type, boolean flags.
+- Register posthog_client.shutdown with atexit.register() to ensure all events are flushed on exit
+- The Python SDK has NO identify() method — use posthog_client.set(distinct_id=user_id, properties={...}) to set person properties, or use identify_context(user_id) within a context
diff --git a/skills/posthog/all/skills/error-tracking-python/references/alerts.md b/skills/posthog/all/skills/error-tracking-python/references/alerts.md
index 94653a53..a760ac4e 100644
--- a/skills/posthog/all/skills/error-tracking-python/references/alerts.md
+++ b/skills/posthog/all/skills/error-tracking-python/references/alerts.md
@@ -1,12 +1,18 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
# Send error tracking alerts - Docs
To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
## Issue created or reopened
-To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
-
+
Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
@@ -52,11 +58,11 @@ This sends an email notification to the user you choose. Check out our [alerts d
**Can't find your alert?**
-If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/project/2#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-python/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-python/references/assigning-issues.md
index 77bb0f72..fe4ddaaa 100644
--- a/skills/posthog/all/skills/error-tracking-python/references/assigning-issues.md
+++ b/skills/posthog/all/skills/error-tracking-python/references/assigning-issues.md
@@ -1,26 +1,40 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
# Assign issues to teammates - Docs
Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
## Assign issues
-You can manually assign issues as you triage them in the UI. This can be done both in the issue list and issue detail pages.
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
-
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
-1. In your error tracking [issue list](https://app.posthog.com/error_tracking), click the **unassigned** selector under each issue to assign it to a role or user.
+
-2. On the detail page of each issue, click the **Assignee** selector to assign it to a role or user.
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
-
+
## Automatic issue assignment
-You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**.
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
-
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
@@ -58,19 +72,31 @@ A common use case for automatic issue assignment is to alert assignees of new is
## Create external issues
-You can also create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira.
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
-First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system. Then, from an issue's details page, under **External references**, click **Create issue**.
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.

-The new issue will have a partial stack trace and a link to the issue in PostHog.
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-python/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-python/references/fingerprints.md
index 324758ce..d58a6781 100644
--- a/skills/posthog/all/skills/error-tracking-python/references/fingerprints.md
+++ b/skills/posthog/all/skills/error-tracking-python/references/fingerprints.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
# Fingerprints - Docs
Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
@@ -48,9 +54,9 @@ Fingerprints can be manually set during exception capture. This is a very useful
You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-python/references/monitoring.md b/skills/posthog/all/skills/error-tracking-python/references/monitoring.md
index d7383fdd..6590cab2 100644
--- a/skills/posthog/all/skills/error-tracking-python/references/monitoring.md
+++ b/skills/posthog/all/skills/error-tracking-python/references/monitoring.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
# Monitor and search issues - Docs
This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
@@ -45,11 +51,11 @@ The search bar provides two modes of filtering:
This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
-
+
Added property filters look like this:
-
+
The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
@@ -103,7 +109,7 @@ This page shows you the following:
- Name, description, status, assignee, and external tracking links for the issue.
- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
-
+
### Filtering exception occurrences within an issue
@@ -111,7 +117,7 @@ Once you've found and opened the issue you want to investigate, you can use the
For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
-
+
**Alerts**
@@ -131,9 +137,9 @@ If you find your queries timing out or taking more than 30 seconds, please [let
If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-python/references/python.md b/skills/posthog/all/skills/error-tracking-python/references/python.md
index 49fbdad2..f442432b 100644
--- a/skills/posthog/all/skills/error-tracking-python/references/python.md
+++ b/skills/posthog/all/skills/error-tracking-python/references/python.md
@@ -1,4 +1,10 @@
-# Python error tracking installation - Docs
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Python Error Tracking installation - Docs
+
+Copy page
+
+# Python Error Tracking installation - Docs
1. 1
@@ -56,7 +62,7 @@
```python
import posthog
- posthog.capture('user_123', 'user_signed_up', properties={'example_property': 'example_value'})
+ posthog.capture('user_signed_up', distinct_id='user_123', properties={'example_property': 'example_value'})
```
4. ## Verify PostHog is initialized
@@ -176,9 +182,9 @@
[Check for exceptions in PostHog](https://app.posthog.com/activity/explore)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-python/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-python/references/upload-source-maps.md
index 178a4ab8..b6ae318f 100644
--- a/skills/posthog/all/skills/error-tracking-python/references/upload-source-maps.md
+++ b/skills/posthog/all/skills/error-tracking-python/references/upload-source-maps.md
@@ -1,10 +1,26 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
# Upload source maps - Docs
If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
-Choose your platform to view specific instructions.
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
- [Web](/docs/error-tracking/upload-source-maps/web.md)
@@ -24,8 +40,14 @@ Choose your platform to view specific instructions.
- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
@@ -36,9 +58,9 @@ Choose your platform to view specific instructions.
- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-react-native/SKILL.md b/skills/posthog/all/skills/error-tracking-react-native/SKILL.md
index 73d5db33..937726a5 100644
--- a/skills/posthog/all/skills/error-tracking-react-native/SKILL.md
+++ b/skills/posthog/all/skills/error-tracking-react-native/SKILL.md
@@ -3,7 +3,7 @@ name: error-tracking-react-native
description: PostHog error tracking for React Native
metadata:
author: PostHog
- version: 1.9.4
+ version: dev
---
# PostHog error tracking for React Native
@@ -18,6 +18,7 @@ This skill helps you add PostHog error tracking to React Native applications.
- `references/monitoring.md` - Monitor and search issues - docs
- `references/assigning-issues.md` - Assign issues to teammates - docs
- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
Consult the documentation for API details and framework-specific patterns.
@@ -31,7 +32,11 @@ Consult the documentation for API details and framework-specific patterns.
## Framework guidelines
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
- posthog-react-native is the React Native SDK package name
- Use react-native-config to load POSTHOG_PROJECT_TOKEN and POSTHOG_HOST from .env (variables are embedded at build time, not runtime)
- react-native-svg is a required peer dependency of posthog-react-native (used by the surveys feature) and must be installed alongside it
- Place PostHogProvider INSIDE NavigationContainer for React Navigation v7 compatibility
+- Remember that source code is available in the node_modules directory
+- Check package.json for type checking or build scripts to validate changes
+- When identity comes from framework-bridged state (Inertia or SSR shared props, a serialized session), confirm the backend actually shares that field — add the share server-side if missing — before identifying from it
diff --git a/skills/posthog/all/skills/error-tracking-react-native/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-react-native/references/COMMANDMENTS.md
new file mode 100644
index 00000000..a1d09803
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-react-native/references/COMMANDMENTS.md
@@ -0,0 +1,12 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- posthog-react-native is the React Native SDK package name
+- Use react-native-config to load POSTHOG_PROJECT_TOKEN and POSTHOG_HOST from .env (variables are embedded at build time, not runtime)
+- react-native-svg is a required peer dependency of posthog-react-native (used by the surveys feature) and must be installed alongside it
+- Place PostHogProvider INSIDE NavigationContainer for React Navigation v7 compatibility
+- Remember that source code is available in the node_modules directory
+- Check package.json for type checking or build scripts to validate changes
+- When identity comes from framework-bridged state (Inertia or SSR shared props, a serialized session), confirm the backend actually shares that field — add the share server-side if missing — before identifying from it
diff --git a/skills/posthog/all/skills/error-tracking-react-native/references/alerts.md b/skills/posthog/all/skills/error-tracking-react-native/references/alerts.md
index 94653a53..a760ac4e 100644
--- a/skills/posthog/all/skills/error-tracking-react-native/references/alerts.md
+++ b/skills/posthog/all/skills/error-tracking-react-native/references/alerts.md
@@ -1,12 +1,18 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
# Send error tracking alerts - Docs
To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
## Issue created or reopened
-To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
-
+
Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
@@ -52,11 +58,11 @@ This sends an email notification to the user you choose. Check out our [alerts d
**Can't find your alert?**
-If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/project/2#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-react-native/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-react-native/references/assigning-issues.md
index 77bb0f72..fe4ddaaa 100644
--- a/skills/posthog/all/skills/error-tracking-react-native/references/assigning-issues.md
+++ b/skills/posthog/all/skills/error-tracking-react-native/references/assigning-issues.md
@@ -1,26 +1,40 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
# Assign issues to teammates - Docs
Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
## Assign issues
-You can manually assign issues as you triage them in the UI. This can be done both in the issue list and issue detail pages.
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
-
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
-1. In your error tracking [issue list](https://app.posthog.com/error_tracking), click the **unassigned** selector under each issue to assign it to a role or user.
+
-2. On the detail page of each issue, click the **Assignee** selector to assign it to a role or user.
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
-
+
## Automatic issue assignment
-You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**.
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
-
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
@@ -58,19 +72,31 @@ A common use case for automatic issue assignment is to alert assignees of new is
## Create external issues
-You can also create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira.
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
-First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system. Then, from an issue's details page, under **External references**, click **Create issue**.
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.

-The new issue will have a partial stack trace and a link to the issue in PostHog.
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-react-native/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-react-native/references/fingerprints.md
index 324758ce..d58a6781 100644
--- a/skills/posthog/all/skills/error-tracking-react-native/references/fingerprints.md
+++ b/skills/posthog/all/skills/error-tracking-react-native/references/fingerprints.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
# Fingerprints - Docs
Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
@@ -48,9 +54,9 @@ Fingerprints can be manually set during exception capture. This is a very useful
You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-react-native/references/monitoring.md b/skills/posthog/all/skills/error-tracking-react-native/references/monitoring.md
index d7383fdd..6590cab2 100644
--- a/skills/posthog/all/skills/error-tracking-react-native/references/monitoring.md
+++ b/skills/posthog/all/skills/error-tracking-react-native/references/monitoring.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
# Monitor and search issues - Docs
This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
@@ -45,11 +51,11 @@ The search bar provides two modes of filtering:
This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
-
+
Added property filters look like this:
-
+
The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
@@ -103,7 +109,7 @@ This page shows you the following:
- Name, description, status, assignee, and external tracking links for the issue.
- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
-
+
### Filtering exception occurrences within an issue
@@ -111,7 +117,7 @@ Once you've found and opened the issue you want to investigate, you can use the
For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
-
+
**Alerts**
@@ -131,9 +137,9 @@ If you find your queries timing out or taking more than 30 seconds, please [let
If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-react-native/references/react-native.md b/skills/posthog/all/skills/error-tracking-react-native/references/react-native.md
index a83d991e..cbd7c200 100644
--- a/skills/posthog/all/skills/error-tracking-react-native/references/react-native.md
+++ b/skills/posthog/all/skills/error-tracking-react-native/references/react-native.md
@@ -1,4 +1,10 @@
-# React Native error tracking installation - Docs
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# React Native Error Tracking installation - Docs
+
+Copy page
+
+# React Native Error Tracking installation - Docs
1. 1
@@ -108,6 +114,7 @@
uncaughtExceptions: true,
unhandledRejections: true,
console: ['error', 'warn'],
+ nativeCrashes: true, // native iOS/Android crashes (see below)
},
},
})
@@ -120,6 +127,15 @@
| uncaughtExceptions | Captures Uncaught exceptions (ReactNativeGlobal.ErrorUtils.setGlobalHandler) |
| unhandledRejections | Captures Unhandled rejections (ReactNativeGlobal.onunhandledrejection) |
| console | Captures console logs as errors according to the reported LogLevel |
+ | nativeCrashes | Captures native iOS/Android crashes. Requires @posthog/react-native-plugin and uploaded native symbols (see below) |
+
+ **Capturing native crashes**
+
+ `nativeCrashes` captures native iOS and Android crashes that the JavaScript layer can't see. Beyond the config above, it needs:
+
+ 1. The optional native plugin installed — `npx expo install @posthog/react-native-plugin` (Expo) or `npm i @posthog/react-native-plugin` (bare React Native). If it's missing, native capture is a no-op and your JS-level autocapture is unaffected.
+ 2. Your project's **Enable exception autocapture** setting enabled in [error tracking settings](https://app.posthog.com/settings/project-error-tracking#exception-autocapture) — the same server-side setting that gates JavaScript autocapture.
+ 3. Native debug symbols uploaded at build time, so crash stack traces are readable. See [native crash symbolication](/docs/error-tracking/upload-source-maps/react-native.md#native-crash-symbolication).
5. 5
@@ -197,10 +213,9 @@
We currently don't support the following features:
- - No native Android and iOS exception capture
- No automatic source map uploads on React Native web
- These features will be added in future releases. We recommend you stay up to date with the latest version of the PostHog React Native SDK.
+ This will be added in a future release. We recommend you stay up to date with the latest version of the PostHog React Native SDK.
8. ## Verify error tracking
@@ -216,19 +231,19 @@
9. 8
- ## Upload source maps
+ ## Upload source maps & native symbols
Required
- Great, you're capturing exceptions! If you serve minified bundles, the next step is to upload source maps to generate accurate stack traces.
+ Great, you're capturing exceptions! The next step is to upload source maps (for JavaScript stack traces) and native symbols (for native iOS/Android crash symbolication) so PostHog can generate accurate stack traces.
Let's continue to the next section.
- [Upload source maps](/docs/error-tracking/upload-source-maps/react-native.md)
+ [Upload source maps & native symbols](/docs/error-tracking/upload-source-maps/react-native.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-react-native/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-react-native/references/upload-source-maps.md
index 178a4ab8..b6ae318f 100644
--- a/skills/posthog/all/skills/error-tracking-react-native/references/upload-source-maps.md
+++ b/skills/posthog/all/skills/error-tracking-react-native/references/upload-source-maps.md
@@ -1,10 +1,26 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
# Upload source maps - Docs
If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
-Choose your platform to view specific instructions.
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
- [Web](/docs/error-tracking/upload-source-maps/web.md)
@@ -24,8 +40,14 @@ Choose your platform to view specific instructions.
- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
@@ -36,9 +58,9 @@ Choose your platform to view specific instructions.
- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-react/SKILL.md b/skills/posthog/all/skills/error-tracking-react/SKILL.md
index a46a01d0..c10efd95 100644
--- a/skills/posthog/all/skills/error-tracking-react/SKILL.md
+++ b/skills/posthog/all/skills/error-tracking-react/SKILL.md
@@ -3,7 +3,7 @@ name: error-tracking-react
description: PostHog error tracking for React
metadata:
author: PostHog
- version: 1.9.4
+ version: dev
---
# PostHog error tracking for React
@@ -18,6 +18,7 @@ This skill helps you add PostHog error tracking to React applications.
- `references/monitoring.md` - Monitor and search issues - docs
- `references/assigning-issues.md` - Assign issues to teammates - docs
- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
Consult the documentation for API details and framework-specific patterns.
@@ -31,6 +32,7 @@ Consult the documentation for API details and framework-specific patterns.
## Framework guidelines
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
- For feature flags, use useFeatureFlagEnabled() or useFeatureFlagPayload() hooks - they handle loading states and external sync automatically
- Add analytics capture in event handlers where user actions occur, NOT in useEffect reacting to state changes
- Do NOT use useEffect for data transformation - calculate derived values during render instead
@@ -39,3 +41,6 @@ Consult the documentation for API details and framework-specific patterns.
- Do NOT use useEffect to notify parent components - call the parent callback alongside setState in the event handler
- To reset component state when a prop changes, pass the prop as the component's key instead of using useEffect
- useEffect is ONLY for synchronizing with external systems (non-React widgets, browser APIs, network subscriptions)
+- Remember that source code is available in the node_modules directory
+- Check package.json for type checking or build scripts to validate changes
+- When identity comes from framework-bridged state (Inertia or SSR shared props, a serialized session), confirm the backend actually shares that field — add the share server-side if missing — before identifying from it
diff --git a/skills/posthog/all/skills/error-tracking-react/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-react/references/COMMANDMENTS.md
new file mode 100644
index 00000000..cc803992
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-react/references/COMMANDMENTS.md
@@ -0,0 +1,16 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- For feature flags, use useFeatureFlagEnabled() or useFeatureFlagPayload() hooks - they handle loading states and external sync automatically
+- Add analytics capture in event handlers where user actions occur, NOT in useEffect reacting to state changes
+- Do NOT use useEffect for data transformation - calculate derived values during render instead
+- Do NOT use useEffect to respond to user events - put that logic in the event handler itself
+- Do NOT use useEffect to chain state updates - calculate all related updates together in the event handler
+- Do NOT use useEffect to notify parent components - call the parent callback alongside setState in the event handler
+- To reset component state when a prop changes, pass the prop as the component's key instead of using useEffect
+- useEffect is ONLY for synchronizing with external systems (non-React widgets, browser APIs, network subscriptions)
+- Remember that source code is available in the node_modules directory
+- Check package.json for type checking or build scripts to validate changes
+- When identity comes from framework-bridged state (Inertia or SSR shared props, a serialized session), confirm the backend actually shares that field — add the share server-side if missing — before identifying from it
diff --git a/skills/posthog/all/skills/error-tracking-react/references/alerts.md b/skills/posthog/all/skills/error-tracking-react/references/alerts.md
index 94653a53..a760ac4e 100644
--- a/skills/posthog/all/skills/error-tracking-react/references/alerts.md
+++ b/skills/posthog/all/skills/error-tracking-react/references/alerts.md
@@ -1,12 +1,18 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
# Send error tracking alerts - Docs
To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
## Issue created or reopened
-To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
-
+
Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
@@ -52,11 +58,11 @@ This sends an email notification to the user you choose. Check out our [alerts d
**Can't find your alert?**
-If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/project/2#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-react/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-react/references/assigning-issues.md
index 77bb0f72..fe4ddaaa 100644
--- a/skills/posthog/all/skills/error-tracking-react/references/assigning-issues.md
+++ b/skills/posthog/all/skills/error-tracking-react/references/assigning-issues.md
@@ -1,26 +1,40 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
# Assign issues to teammates - Docs
Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
## Assign issues
-You can manually assign issues as you triage them in the UI. This can be done both in the issue list and issue detail pages.
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
-
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
-1. In your error tracking [issue list](https://app.posthog.com/error_tracking), click the **unassigned** selector under each issue to assign it to a role or user.
+
-2. On the detail page of each issue, click the **Assignee** selector to assign it to a role or user.
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
-
+
## Automatic issue assignment
-You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**.
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
-
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
@@ -58,19 +72,31 @@ A common use case for automatic issue assignment is to alert assignees of new is
## Create external issues
-You can also create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira.
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
-First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system. Then, from an issue's details page, under **External references**, click **Create issue**.
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.

-The new issue will have a partial stack trace and a link to the issue in PostHog.
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-react/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-react/references/fingerprints.md
index 324758ce..d58a6781 100644
--- a/skills/posthog/all/skills/error-tracking-react/references/fingerprints.md
+++ b/skills/posthog/all/skills/error-tracking-react/references/fingerprints.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
# Fingerprints - Docs
Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
@@ -48,9 +54,9 @@ Fingerprints can be manually set during exception capture. This is a very useful
You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-react/references/monitoring.md b/skills/posthog/all/skills/error-tracking-react/references/monitoring.md
index d7383fdd..6590cab2 100644
--- a/skills/posthog/all/skills/error-tracking-react/references/monitoring.md
+++ b/skills/posthog/all/skills/error-tracking-react/references/monitoring.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
# Monitor and search issues - Docs
This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
@@ -45,11 +51,11 @@ The search bar provides two modes of filtering:
This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
-
+
Added property filters look like this:
-
+
The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
@@ -103,7 +109,7 @@ This page shows you the following:
- Name, description, status, assignee, and external tracking links for the issue.
- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
-
+
### Filtering exception occurrences within an issue
@@ -111,7 +117,7 @@ Once you've found and opened the issue you want to investigate, you can use the
For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
-
+
**Alerts**
@@ -131,9 +137,9 @@ If you find your queries timing out or taking more than 30 seconds, please [let
If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-react/references/react.md b/skills/posthog/all/skills/error-tracking-react/references/react.md
index 88351b00..a846f574 100644
--- a/skills/posthog/all/skills/error-tracking-react/references/react.md
+++ b/skills/posthog/all/skills/error-tracking-react/references/react.md
@@ -1,4 +1,10 @@
-# React error tracking installation - Docs
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# React Error Tracking installation - Docs
+
+Copy page
+
+# React Error Tracking installation - Docs
1. 1
@@ -34,15 +40,15 @@
Required
- Add your PostHog project token and host to your environment variables. For Vite-based React apps, use the `VITE_PUBLIC_` prefix:
+ Add your PostHog project token and host to your environment variables. For Vite-based React apps, use the `VITE_` prefix to expose them to the client:
.env
PostHog AI
```bash
- VITE_PUBLIC_POSTHOG_PROJECT_TOKEN=
- VITE_PUBLIC_POSTHOG_HOST=https://us.i.posthog.com
+ VITE_POSTHOG_PROJECT_TOKEN=
+ VITE_POSTHOG_HOST=https://us.i.posthog.com
```
3. 3
@@ -64,12 +70,12 @@
import App from './App.jsx'
import { PostHogProvider } from '@posthog/react'
const options = {
- api_host: import.meta.env.VITE_PUBLIC_POSTHOG_HOST,
- defaults: '2026-01-30',
+ api_host: import.meta.env.VITE_POSTHOG_HOST,
+ defaults: '2026-05-30',
} as const
createRoot(document.getElementById('root')).render(
-
+
@@ -214,9 +220,9 @@
[Upload source maps](/docs/error-tracking/upload-source-maps/react.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-react/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-react/references/upload-source-maps.md
index 178a4ab8..b6ae318f 100644
--- a/skills/posthog/all/skills/error-tracking-react/references/upload-source-maps.md
+++ b/skills/posthog/all/skills/error-tracking-react/references/upload-source-maps.md
@@ -1,10 +1,26 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
# Upload source maps - Docs
If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
-Choose your platform to view specific instructions.
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
- [Web](/docs/error-tracking/upload-source-maps/web.md)
@@ -24,8 +40,14 @@ Choose your platform to view specific instructions.
- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
@@ -36,9 +58,9 @@ Choose your platform to view specific instructions.
- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-ruby-on-rails/SKILL.md b/skills/posthog/all/skills/error-tracking-ruby-on-rails/SKILL.md
index 5b4f71b2..35a5572e 100644
--- a/skills/posthog/all/skills/error-tracking-ruby-on-rails/SKILL.md
+++ b/skills/posthog/all/skills/error-tracking-ruby-on-rails/SKILL.md
@@ -3,7 +3,7 @@ name: error-tracking-ruby-on-rails
description: PostHog error tracking for Ruby on Rails
metadata:
author: PostHog
- version: 1.9.4
+ version: dev
---
# PostHog error tracking for Ruby on Rails
@@ -13,11 +13,13 @@ This skill helps you add PostHog error tracking to Ruby on Rails applications.
## Reference files
- `references/ruby-on-rails.md` - Ruby on rails error tracking installation - docs
+- `references/ruby-on-rails.md` - Ruby on rails - docs
- `references/fingerprints.md` - Fingerprints - docs
- `references/alerts.md` - Send error tracking alerts - docs
- `references/monitoring.md` - Monitor and search issues - docs
- `references/assigning-issues.md` - Assign issues to teammates - docs
- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
Consult the documentation for API details and framework-specific patterns.
@@ -31,6 +33,7 @@ Consult the documentation for API details and framework-specific patterns.
## Framework guidelines
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
- Use posthog-rails gem alongside posthog-ruby for automatic exception capture and ActiveJob instrumentation
- Run `rails generate posthog:install` to create the initializer, or manually create config/initializers/posthog.rb
- Configure auto_capture_exceptions: true to automatically track unhandled exceptions in controllers
@@ -41,7 +44,7 @@ Consult the documentation for API details and framework-specific patterns.
- capture_exception takes POSITIONAL args: PostHog.capture_exception(exception, distinct_id, additional_properties) — do NOT use keyword args
- Define posthog_distinct_id on the User model for automatic user association in error reports — posthog-rails auto-detects by trying: posthog_distinct_id, distinct_id, id, pk, uuid (in order)
- For ActiveJob user association, use the class-level DSL `posthog_distinct_id ->(user) { user.email }` or pass user_id: in a hash argument
-- Store API key in Rails credentials or environment variables, never hardcode
+- Store the project token in Rails credentials or environment variables, never hardcode
- For frontend tracking alongside posthog-rails, add the posthog-js snippet to the layout template — posthog-js handles pageviews, session replay, and client-side errors while posthog-ruby handles backend events, server errors, feature flags, and background jobs
- posthog-ruby is the Ruby SDK gem name (add `gem 'posthog-ruby'` to Gemfile) but require it with `require 'posthog'` (NOT `require 'posthog-ruby'`)
- Use PostHog::Client.new(api_key: key, host: host) for instance-based initialization in scripts and CLIs
diff --git a/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/COMMANDMENTS.md
new file mode 100644
index 00000000..9f024f48
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/COMMANDMENTS.md
@@ -0,0 +1,23 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- Use posthog-rails gem alongside posthog-ruby for automatic exception capture and ActiveJob instrumentation
+- Run `rails generate posthog:install` to create the initializer, or manually create config/initializers/posthog.rb
+- Configure auto_capture_exceptions: true to automatically track unhandled exceptions in controllers
+- Configure report_rescued_exceptions: true to also capture exceptions that Rails rescues (e.g. with rescue_from)
+- Configure auto_instrument_active_job: true to track background job failures with job class, queue, and arguments
+- Use PostHog.capture() and PostHog.identify() class-level methods (NOT instance methods) — the posthog-rails gem manages the client lifecycle via PostHog.init
+- Do NOT manually create PostHog::Client instances in Rails — use PostHog.init in the initializer and PostHog.capture/identify everywhere else
+- capture_exception takes POSITIONAL args: PostHog.capture_exception(exception, distinct_id, additional_properties) — do NOT use keyword args
+- Define posthog_distinct_id on the User model for automatic user association in error reports — posthog-rails auto-detects by trying: posthog_distinct_id, distinct_id, id, pk, uuid (in order)
+- For ActiveJob user association, use the class-level DSL `posthog_distinct_id ->(user) { user.email }` or pass user_id: in a hash argument
+- Store the project token in Rails credentials or environment variables, never hardcode
+- For frontend tracking alongside posthog-rails, add the posthog-js snippet to the layout template — posthog-js handles pageviews, session replay, and client-side errors while posthog-ruby handles backend events, server errors, feature flags, and background jobs
+- posthog-ruby is the Ruby SDK gem name (add `gem 'posthog-ruby'` to Gemfile) but require it with `require 'posthog'` (NOT `require 'posthog-ruby'`)
+- Use PostHog::Client.new(api_key: key, host: host) for instance-based initialization in scripts and CLIs
+- In CLIs and scripts: MUST call client.shutdown before exit or all events are lost
+- Use begin/rescue/ensure with shutdown in the ensure block for proper cleanup
+- capture and identify take a single hash argument: client.capture(distinct_id: 'user_123', event: 'my_event', properties: { key: 'value' })
+- capture_exception takes POSITIONAL args (not keyword): client.capture_exception(exception, distinct_id, additional_properties) — do NOT use `distinct_id:` keyword syntax
diff --git a/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/alerts.md b/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/alerts.md
index 94653a53..a760ac4e 100644
--- a/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/alerts.md
+++ b/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/alerts.md
@@ -1,12 +1,18 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
# Send error tracking alerts - Docs
To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
## Issue created or reopened
-To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
-
+
Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
@@ -52,11 +58,11 @@ This sends an email notification to the user you choose. Check out our [alerts d
**Can't find your alert?**
-If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/project/2#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/assigning-issues.md
index 77bb0f72..fe4ddaaa 100644
--- a/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/assigning-issues.md
+++ b/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/assigning-issues.md
@@ -1,26 +1,40 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
# Assign issues to teammates - Docs
Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
## Assign issues
-You can manually assign issues as you triage them in the UI. This can be done both in the issue list and issue detail pages.
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
-
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
-1. In your error tracking [issue list](https://app.posthog.com/error_tracking), click the **unassigned** selector under each issue to assign it to a role or user.
+
-2. On the detail page of each issue, click the **Assignee** selector to assign it to a role or user.
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
-
+
## Automatic issue assignment
-You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**.
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
-
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
@@ -58,19 +72,31 @@ A common use case for automatic issue assignment is to alert assignees of new is
## Create external issues
-You can also create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira.
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
-First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system. Then, from an issue's details page, under **External references**, click **Create issue**.
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.

-The new issue will have a partial stack trace and a link to the issue in PostHog.
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/fingerprints.md
index 324758ce..d58a6781 100644
--- a/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/fingerprints.md
+++ b/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/fingerprints.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
# Fingerprints - Docs
Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
@@ -48,9 +54,9 @@ Fingerprints can be manually set during exception capture. This is a very useful
You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/monitoring.md b/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/monitoring.md
index d7383fdd..6590cab2 100644
--- a/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/monitoring.md
+++ b/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/monitoring.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
# Monitor and search issues - Docs
This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
@@ -45,11 +51,11 @@ The search bar provides two modes of filtering:
This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
-
+
Added property filters look like this:
-
+
The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
@@ -103,7 +109,7 @@ This page shows you the following:
- Name, description, status, assignee, and external tracking links for the issue.
- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
-
+
### Filtering exception occurrences within an issue
@@ -111,7 +117,7 @@ Once you've found and opened the issue you want to investigate, you can use the
For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
-
+
**Alerts**
@@ -131,9 +137,9 @@ If you find your queries timing out or taking more than 30 seconds, please [let
If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/ruby-on-rails.md b/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/ruby-on-rails.md
index de1d1560..74838eaf 100644
--- a/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/ruby-on-rails.md
+++ b/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/ruby-on-rails.md
@@ -1,191 +1,609 @@
-# Ruby on Rails error tracking installation - Docs
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
-1. 1
+# Ruby on Rails - Docs
- ## Install the gems
+Copy page
- Required
+# Ruby on Rails - Docs
- Add the `posthog-ruby` and `posthog-rails` gems to your Gemfile:
+PostHog makes it easy to get data about traffic and usage of your Ruby on Rails app. Integrating PostHog enables analytics, custom event capture, feature flags, and automatic exception tracking.
- Gemfile
+This guide walks you through integrating PostHog into your Rails app using the [posthog-rails gem](https://github.com/PostHog/posthog-ruby/tree/main/posthog-rails).
- PostHog AI
+## Beta: integration via LLM
- ```ruby
- gem "posthog-ruby"
- gem "posthog-rails"
- ```
+Install PostHog for Rails in seconds with our wizard by running this prompt with [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt, or by running it in your terminal.
- Then run:
+`npx @posthog/wizard`
- Terminal
+[Learn more](/wizard.md)
- PostHog AI
+Or, to integrate manually, continue with the rest of this guide.
- ```bash
- bundle install
- ```
+## Features
-2. 2
+- **Automatic exception tracking** – Captures unhandled and rescued exceptions
+- **ActiveJob instrumentation** – Tracks background job exceptions
+- **User context** – Automatically associates exceptions with the current user
+- **Smart filtering** – Excludes common Rails exceptions (404s, etc.) by default
+- **Request context** – Adds request metadata and optional PostHog tracing header identity/session context to captured events
+- **Rails 7.0+ error reporter** – Integrates with Rails' built-in error reporting
+- **Log forwarding** – Optionally forwards `Rails.logger` output to [PostHog Logs](/docs/logs.md) over OpenTelemetry, automatically correlated with request context (Ruby 3.3+)
- ## Generate the initializer
+## Installation
- Required
+Add both gems to your Gemfile:
- Run the install generator to create the PostHog initializer:
+Gemfile
- Terminal
+PostHog AI
- PostHog AI
+```ruby
+gem 'posthog-ruby', require: 'posthog'
+gem 'posthog-rails'
+```
- ```bash
- rails generate posthog:install
- ```
+Then run:
- This will create `config/initializers/posthog.rb` with sensible defaults and documentation.
+Terminal
-3. 3
+PostHog AI
- ## Configure PostHog
+```bash
+bundle install
+```
+
+## Identifying users
+
+> **Identifying users is required.** Backend events need a `distinct_id` that matches the ID your frontend uses when calling `posthog.identify()`. Without this, backend events are orphaned — they can't be linked to frontend event captures, [session replays](/docs/session-replay.md), [LLM traces](/docs/ai-engineering.md), or [error tracking](/docs/error-tracking.md).
+>
+> See our guide on [identifying users](/docs/getting-started/identify-users.md) for how to set this up.
+
+### Generate the initializer
+
+Run the install generator to create the PostHog initializer:
+
+Terminal
+
+PostHog AI
+
+```bash
+rails generate posthog:install
+```
+
+This creates `config/initializers/posthog.rb` with sensible defaults and documentation.
+
+## Configuration
+
+`PostHog.init` creates a single client instance used across your app. Avoid creating multiple `PostHog::Client` instances with the same API key, as this can cause dropped events and inconsistent behavior.
+
+The generated initializer includes the most common options:
+
+config/initializers/posthog.rb
- Required
+PostHog AI
- Update `config/initializers/posthog.rb` with your project token and host:
+```ruby
+# Rails-specific configuration
+PostHog::Rails.configure do |config|
+ config.auto_capture_exceptions = true # Enable automatic exception capture (default: false)
+ config.report_rescued_exceptions = true # Report exceptions Rails rescues (default: false)
+ config.auto_instrument_active_job = true # Instrument background jobs (default: false)
+ config.use_tracing_headers = true # Use PostHog tracing headers for identity/session context (default: true)
+ config.capture_user_context = true # Include authenticated user info in exceptions (default: true)
+ config.current_user_method = :current_user # Method to get current user (default: :current_user)
+ config.user_id_method = nil # Method to get ID from user object (default: auto-detect)
+ # Add additional exceptions to ignore
+ config.excluded_exceptions = ['MyCustomError']
+end
+# Core PostHog client initialization
+PostHog.init do |config|
+ # Required: Your PostHog project API key
+ config.api_key = ''
+ # Optional: Your PostHog instance URL
+ config.host = 'https://us.i.posthog.com'
+ # Optional: Personal API key for feature flags
+ config.personal_api_key = 'phx_xxxxxxxxx'
+ # Maximum number of events to queue before dropping (default: 10000)
+ config.max_queue_size = 10_000
+ # Send events synchronously on the calling thread (default: false)
+ config.sync_mode = false
+ # Feature flags polling interval in seconds (default: 30)
+ config.feature_flags_polling_interval = 30
+ # Feature flag request timeout in seconds (default: 3)
+ config.feature_flag_request_timeout_seconds = 3
+ # Error callback to detect misconfiguration
+ config.on_error = proc { |status, msg|
+ Rails.logger.error("PostHog error: #{msg}")
+ }
+ # Before-send callback to modify or drop events
+ config.before_send = proc { |event|
+ event[:properties] ||= {}
+ event[:properties]['environment'] = Rails.env
+ event
+ }
+ # Disable network calls in test mode
+ config.test_mode = true if Rails.env.test?
+end
+```
- config/initializers/posthog.rb
+You can find your project token and instance address in [your project settings](https://us.posthog.com/project/settings).
- PostHog AI
+> **Tip:** Use [`Rails.application.credentials`](https://guides.rubyonrails.org/security.html#custom-credentials) to avoid hardcoding API keys. First, add your keys and then reference them in your initializer:
+>
+> Terminal
+>
+> PostHog AI
+>
+> ```bash
+> rails credentials:edit
+> ```
+>
+> config/credentials.yml.enc
+>
+> PostHog AI
+>
+> ```yaml
+> posthog:
+> api_key:
+> host: https://us.i.posthog.com
+> personal_api_key: phx_xxxxxxxxx
+> ```
+>
+> config/initializers/posthog.rb
+>
+> PostHog AI
+>
+> ```ruby
+> config.api_key = Rails.application.credentials.posthog[:api_key]
+> config.host = Rails.application.credentials.posthog[:host]
+> config.personal_api_key = Rails.application.credentials.posthog[:personal_api_key]
+> ```
+
+## Capturing events
+
+Track custom events anywhere in your Rails app:
+
+Ruby
+
+PostHog AI
+
+```ruby
+PostHog.capture({
+ distinct_id: current_user.id,
+ event: 'post_created',
+ properties: { title: @post.title }
+})
+```
+
+Identify a user and set their person properties:
+
+Ruby
+
+PostHog AI
+
+```ruby
+PostHog.identify({
+ distinct_id: current_user.id,
+ properties: {
+ email: current_user.email,
+ plan: current_user.plan
+ }
+})
+```
+
+The Rails integration delegates methods like `capture`, `identify`, `alias`, `group_identify`, `evaluate_flags`, `capture_exception`, `flush`, and `shutdown` to the initialized `PostHog::Client`.
+
+## Request context
+
+PostHog Rails automatically applies request-scoped context to events captured during web requests. Request metadata such as `$current_url`, `$request_method`, `$request_path`, `$user_agent`, and `$ip` is added to event properties.
+
+When `use_tracing_headers` is enabled, PostHog tracing headers (`X-PostHog-Distinct-Id` and `X-PostHog-Session-Id`) are also used as default `distinct_id` and `$session_id` values. Explicit `distinct_id` and properties passed to `PostHog.capture` always take precedence.
- ```ruby
- PostHog.init do |config|
- config.api_key = ''
- config.host = 'https://us.i.posthog.com'
- end
- ```
+If you're using [PostHog JS](/docs/libraries/js.md) on the frontend, configure [`tracing_headers`](/docs/libraries/js/config.md#tracing-headers) for your Rails backend hostname so browser requests include the session and distinct ID headers.
-4. 4
+Tracing headers are client-controlled analytics context, not authentication or authorization. Pass an authenticated `distinct_id` explicitly for security-sensitive server-side decisions.
- ## Send events
+Disable tracing header identity/session capture if you do not want client-supplied tracing headers used for server-side events. Request metadata is still captured:
- Recommended
+Ruby
- Once installed, you can manually send events to test your integration:
+PostHog AI
- Ruby
+```ruby
+PostHog::Rails.config.use_tracing_headers = false
+```
- PostHog AI
+## Logs
- ```ruby
- PostHog.capture({
- distinct_id: 'user_123',
- event: 'button_clicked',
- properties: {
- button_name: 'signup'
- }
- })
- ```
+To set up [PostHog Logs](/docs/logs.md) in your Rails app, follow the [Ruby on Rails logs installation guide](/docs/logs/installation/ruby-on-rails.md). The integration forwards `Rails.logger` output to PostHog Logs over OpenTelemetry, automatically correlated with each request's distinct ID and session ID. Requires Ruby 3.3+.
-5. 5
+## Error tracking
- ## Configure error tracking
+For full details on setting up error tracking with Rails, see our [Rails error tracking installation guide](/docs/error-tracking/installation/ruby-on-rails.md).
- Required
+### Automatic exception tracking
- Update `config/initializers/posthog.rb` to enable automatic exception capture:
+When `auto_capture_exceptions` is enabled, exceptions are automatically captured:
- config/initializers/posthog.rb
+Ruby
- PostHog AI
+PostHog AI
- ```ruby
- PostHog::Rails.configure do |config|
- config.auto_capture_exceptions = true
- config.report_rescued_exceptions = true
- config.auto_instrument_active_job = true
- config.capture_user_context = true
- config.current_user_method = :current_user
- end
- ```
+```ruby
+class PostsController < ApplicationController
+ def show
+ @post = Post.find(params[:id])
+ # Any exception here is automatically captured
+ end
+end
+```
-6. 6
+`report_rescued_exceptions` controls whether exceptions Rails rescues (for example, exceptions rendered by Rails error pages) are captured. Enable it along with `auto_capture_exceptions` for complete error visibility, or leave it disabled to capture only unhandled exceptions.
- ## Automatic exception capture
+### Manual exception capture
- Recommended
+You can also manually capture exceptions:
- With `auto_capture_exceptions` enabled, exceptions are automatically captured from your controllers:
+Ruby
- app/controllers/posts\_controller.rb
+PostHog AI
- PostHog AI
+```ruby
+PostHog.capture_exception(
+ exception,
+ current_user.id,
+ { custom_property: 'value' }
+)
+```
- ```ruby
- class PostsController < ApplicationController
- def show
- @post = Post.find(params[:id])
- # Any exception here is automatically captured
- end
+If you evaluated feature flags for the request, pass the same snapshot to include matching flag properties on the exception event:
+
+Ruby
+
+PostHog AI
+
+```ruby
+flags = PostHog.evaluate_flags(current_user.id)
+PostHog.capture_exception(
+ exception,
+ current_user.id,
+ { custom_property: 'value' },
+ flags: flags
+)
+```
+
+### Background job exceptions
+
+When `auto_instrument_active_job` is enabled, ActiveJob exceptions are automatically captured with job context:
+
+Ruby
+
+PostHog AI
+
+```ruby
+class EmailJob < ApplicationJob
+ def perform(user_id)
+ user = User.find(user_id)
+ UserMailer.welcome(user).deliver_now
+ # Exceptions are automatically captured
+ end
+end
+```
+
+#### Associating jobs with users
+
+By default, PostHog extracts a `distinct_id` from job arguments by looking for a `user_id` key in hash arguments:
+
+Ruby
+
+PostHog AI
+
+```ruby
+# PostHog will automatically use options[:user_id] as the distinct_id
+ProcessOrderJob.perform_later(order.id, user_id: current_user.id)
+```
+
+For more control, use the `posthog_distinct_id` class method. The proc or block receives the same arguments as `perform`:
+
+Ruby
+
+PostHog AI
+
+```ruby
+class SendWelcomeEmailJob < ApplicationJob
+ posthog_distinct_id ->(user, _options) { user.id }
+ def perform(user, options = {})
+ UserMailer.welcome(user).deliver_now
+ end
+end
+```
+
+You can also use a block:
+
+Ruby
+
+PostHog AI
+
+```ruby
+class ProcessOrderJob < ApplicationJob
+ posthog_distinct_id do |_order, notify_user_id|
+ notify_user_id
+ end
+ def perform(order, notify_user_id)
+ # Process the order...
+ end
+end
+```
+
+### Rails 7.0+ error reporter
+
+PostHog integrates with Rails' built-in error reporting:
+
+Ruby
+
+PostHog AI
+
+```ruby
+# These errors are automatically sent to PostHog
+Rails.error.handle do
+ # Code that might raise an error
+end
+Rails.error.record(exception, context: { user_id: current_user.id })
+```
+
+PostHog automatically extracts the user's distinct ID from `user_id` or `distinct_id` in the context hash. Other context keys are included as properties on the exception event.
+
+### User context
+
+PostHog Rails automatically captures authenticated user information from your controllers for exceptions. Authenticated Rails user context takes precedence over client-supplied tracing headers for exception identity.
+
+If your user method has a different name, configure it:
+
+Ruby
+
+PostHog AI
+
+```ruby
+PostHog::Rails.config.current_user_method = :logged_in_user
+```
+
+#### User ID extraction
+
+By default, PostHog Rails auto-detects the user's distinct ID by trying these methods in order:
+
+1. `posthog_distinct_id` – Define this on your User model for full control
+2. `distinct_id` – Common analytics convention
+3. `id` – Standard ActiveRecord primary key
+4. `pk` – Primary key alias
+5. `uuid` – For UUID-based primary keys
+
+It also checks hash-like users for `id`, `pk`, and `uuid` keys.
+
+You can configure a specific method:
+
+Ruby
+
+PostHog AI
+
+```ruby
+PostHog::Rails.config.user_id_method = :email
+```
+
+Or define a method on your User model:
+
+Ruby
+
+PostHog AI
+
+```ruby
+class User < ApplicationRecord
+ def posthog_distinct_id
+ "user_#{id}" # or external_id, or any unique identifier
+ end
+end
+```
+
+### Excluded exceptions
+
+The following exceptions are not reported by default (common 4xx errors):
+
+- `AbstractController::ActionNotFound`
+- `ActionController::BadRequest`
+- `ActionController::InvalidAuthenticityToken`
+- `ActionController::InvalidCrossOriginRequest`
+- `ActionController::MethodNotAllowed`
+- `ActionController::NotImplemented`
+- `ActionController::ParameterMissing`
+- `ActionController::RoutingError`
+- `ActionController::UnknownFormat`
+- `ActionController::UnknownHttpMethod`
+- `ActionDispatch::Http::Parameters::ParseError`
+- `ActiveRecord::RecordNotFound`
+- `ActiveRecord::RecordNotUnique`
+
+Add more with:
+
+Ruby
+
+PostHog AI
+
+```ruby
+PostHog::Rails.config.excluded_exceptions = ['MyException']
+```
+
+## Feature flags
+
+Evaluate flags once for the current user, then read values from the returned snapshot:
+
+Ruby
+
+PostHog AI
+
+```ruby
+class PostsController < ApplicationController
+ def show
+ flags = PostHog.evaluate_flags(current_user.id)
+ if flags.enabled?('new-post-design')
+ render 'posts/show_new'
+ else
+ render 'posts/show'
end
- ```
+ end
+end
+```
+
+For multivariate flags and experiments, use `get_flag`:
+
+Ruby
+
+PostHog AI
+
+```ruby
+flags = PostHog.evaluate_flags(current_user.id)
+variant = flags.get_flag('checkout-experiment')
+if variant == 'test'
+ # Do something differently
+end
+```
+
+When capturing an event after branching on a flag, pass the same `flags` snapshot so the event includes the exact flag values used by your code:
-7. 7
+Ruby
- ## Background jobs
+PostHog AI
- Optional
+```ruby
+flags = PostHog.evaluate_flags(current_user.id)
+PostHog.capture({
+ distinct_id: current_user.id,
+ event: 'checkout_started',
+ flags: flags.only_accessed
+})
+```
- When `auto_instrument_active_job` is enabled, ActiveJob exceptions are automatically captured:
+For local evaluation, ensure you've set `personal_api_key`:
- app/jobs/email\_job.rb
+Ruby
+
+PostHog AI
+
+```ruby
+config.personal_api_key = Rails.application.credentials.posthog[:personal_api_key]
+```
+
+See our [Ruby SDK docs](/docs/libraries/ruby.md#local-evaluation) for details on local evaluation with Puma and Unicorn servers.
+
+> **Note:** `PostHog.is_feature_enabled`, `PostHog.get_feature_flag`, `PostHog.get_feature_flag_result`, `PostHog.get_feature_flag_payload`, and `PostHog.capture({ ..., send_feature_flags: true })` still work during the migration period, but they're deprecated. Prefer `PostHog.evaluate_flags` for new code.
+
+## Testing
+
+In your test environment, disable network calls with test mode:
+
+config/environments/test.rb
+
+PostHog AI
+
+```ruby
+PostHog.init do |config|
+ config.api_key = ''
+ config.test_mode = true
+end
+```
+
+Or in your specs:
+
+spec/rails\_helper.rb
+
+PostHog AI
+
+```ruby
+RSpec.configure do |config|
+ config.before(:each) do
+ allow(PostHog).to receive(:capture)
+ end
+end
+```
+
+## Configuration reference
+
+### Core PostHog options
+
+| Option | Type | Default | Description |
+| --- | --- | --- | --- |
+| api_key | String | required | Your PostHog project token. |
+| host | String | https://us.i.posthog.com | Fully qualified PostHog API host. |
+| personal_api_key | String | nil | Personal API key for local feature flag evaluation and remote config payloads. |
+| max_queue_size | Integer | 10000 | Maximum number of events to keep in the async queue before dropping new events. |
+| test_mode | Boolean | false | Keep events queued and do not send them. Useful for tests. |
+| sync_mode | Boolean | false | Send events synchronously on the calling thread. |
+| on_error | Proc | no-op | Callback called as on_error.call(status, error). |
+| feature_flags_polling_interval | Integer | 30 | Seconds between local feature flag definition polls. |
+| feature_flag_request_timeout_seconds | Integer | 3 | Timeout, in seconds, for feature flag requests. |
+| before_send | Proc | nil | Callback that receives the event hash before it is queued or sent. Return a modified event hash, or nil to drop the event. |
+
+The `PostHog.init` block supports the options above. Less common core options like `batch_size`, `disable_singleton_warning`, `skip_ssl_verification`, and `flag_definition_cache_provider` can be passed as an options hash to `PostHog.init(...)`; see the [Ruby SDK docs](/docs/libraries/ruby.md#configuration) for details.
+
+### Rails-specific options
+
+Configure these via `PostHog::Rails.configure` or `PostHog::Rails.config`:
+
+| Option | Type | Default | Description |
+| --- | --- | --- | --- |
+| auto_capture_exceptions | Boolean | false | Automatically capture exceptions. |
+| report_rescued_exceptions | Boolean | false | Report exceptions Rails rescues. |
+| auto_instrument_active_job | Boolean | false | Capture ActiveJob exceptions with job context. |
+| excluded_exceptions | Array | [] | Additional exception class names to ignore. |
+| use_tracing_headers | Boolean | true | Use X-PostHog-Distinct-Id and X-PostHog-Session-Id as request-scoped defaults. |
+| capture_user_context | Boolean | true | Include authenticated user info in exceptions. |
+| current_user_method | Symbol | :current_user | Controller method used to fetch the current user. |
+| user_id_method | Symbol | nil | Method used to extract the distinct ID from the user object. Auto-detects when nil. |
+
+## Troubleshooting
+
+### Exceptions not being captured
+
+1. Verify PostHog is initialized:
+
+ Ruby
PostHog AI
```ruby
- class EmailJob < ApplicationJob
- def perform(user_id)
- user = User.find(user_id)
- UserMailer.welcome(user).deliver_now
- # Exceptions are automatically captured with job context
- end
- end
+ Rails.console
+ > PostHog.initialized?
+ => true
```
-8. 8
-
- ## Manually capture exceptions
-
- Optional
+2. Check your excluded exceptions list.
- You can also manually capture exceptions that you handle in your application:
+3. Verify middleware is installed:
Ruby
PostHog AI
```ruby
- PostHog.capture_exception(
- exception,
- current_user.id,
- { custom_property: 'value' }
- )
+ Rails.application.middleware
```
-9. ## Verify error tracking
+### User context not working
- Recommended
+1. Verify `current_user_method` matches your controller method.
+2. Check that the user object responds to `posthog_distinct_id`, `distinct_id`, `id`, `pk`, or `uuid`.
+3. If using a custom identifier, set `PostHog::Rails.config.user_id_method = :your_method`.
- *Confirm events are being sent to PostHog*
+### Feature flags not working
- Before proceeding, let's make sure exception events are being captured and sent to PostHog. You should see events appear in the activity feed.
+Ensure you've set `personal_api_key` in your configuration.
- 
+## Next steps
- [Check for exceptions in PostHog](https://app.posthog.com/activity/explore)
+For any technical questions for how to integrate specific PostHog features into Rails (such as analytics, feature flags, A/B testing, etc.), have a look at our [Ruby SDK docs](/docs/libraries/ruby.md).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/upload-source-maps.md
index 178a4ab8..b6ae318f 100644
--- a/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/upload-source-maps.md
+++ b/skills/posthog/all/skills/error-tracking-ruby-on-rails/references/upload-source-maps.md
@@ -1,10 +1,26 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
# Upload source maps - Docs
If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
-Choose your platform to view specific instructions.
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
- [Web](/docs/error-tracking/upload-source-maps/web.md)
@@ -24,8 +40,14 @@ Choose your platform to view specific instructions.
- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
@@ -36,9 +58,9 @@ Choose your platform to view specific instructions.
- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-ruby/SKILL.md b/skills/posthog/all/skills/error-tracking-ruby/SKILL.md
index 9a808d45..3c6e4731 100644
--- a/skills/posthog/all/skills/error-tracking-ruby/SKILL.md
+++ b/skills/posthog/all/skills/error-tracking-ruby/SKILL.md
@@ -3,7 +3,7 @@ name: error-tracking-ruby
description: PostHog error tracking for Ruby
metadata:
author: PostHog
- version: 1.9.4
+ version: dev
---
# PostHog error tracking for Ruby
@@ -18,6 +18,7 @@ This skill helps you add PostHog error tracking to Ruby applications.
- `references/monitoring.md` - Monitor and search issues - docs
- `references/assigning-issues.md` - Assign issues to teammates - docs
- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
Consult the documentation for API details and framework-specific patterns.
@@ -31,6 +32,7 @@ Consult the documentation for API details and framework-specific patterns.
## Framework guidelines
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
- posthog-ruby is the Ruby SDK gem name (add `gem 'posthog-ruby'` to Gemfile) but require it with `require 'posthog'` (NOT `require 'posthog-ruby'`)
- Use PostHog::Client.new(api_key: key, host: host) for instance-based initialization in scripts and CLIs
- In CLIs and scripts: MUST call client.shutdown before exit or all events are lost
diff --git a/skills/posthog/all/skills/error-tracking-ruby/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-ruby/references/COMMANDMENTS.md
new file mode 100644
index 00000000..6652b15b
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-ruby/references/COMMANDMENTS.md
@@ -0,0 +1,11 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- posthog-ruby is the Ruby SDK gem name (add `gem 'posthog-ruby'` to Gemfile) but require it with `require 'posthog'` (NOT `require 'posthog-ruby'`)
+- Use PostHog::Client.new(api_key: key, host: host) for instance-based initialization in scripts and CLIs
+- In CLIs and scripts: MUST call client.shutdown before exit or all events are lost
+- Use begin/rescue/ensure with shutdown in the ensure block for proper cleanup
+- capture and identify take a single hash argument: client.capture(distinct_id: 'user_123', event: 'my_event', properties: { key: 'value' })
+- capture_exception takes POSITIONAL args (not keyword): client.capture_exception(exception, distinct_id, additional_properties) — do NOT use `distinct_id:` keyword syntax
diff --git a/skills/posthog/all/skills/error-tracking-ruby/references/alerts.md b/skills/posthog/all/skills/error-tracking-ruby/references/alerts.md
index 94653a53..a760ac4e 100644
--- a/skills/posthog/all/skills/error-tracking-ruby/references/alerts.md
+++ b/skills/posthog/all/skills/error-tracking-ruby/references/alerts.md
@@ -1,12 +1,18 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
# Send error tracking alerts - Docs
To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
## Issue created or reopened
-To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
-
+
Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
@@ -52,11 +58,11 @@ This sends an email notification to the user you choose. Check out our [alerts d
**Can't find your alert?**
-If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/project/2#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-ruby/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-ruby/references/assigning-issues.md
index 77bb0f72..fe4ddaaa 100644
--- a/skills/posthog/all/skills/error-tracking-ruby/references/assigning-issues.md
+++ b/skills/posthog/all/skills/error-tracking-ruby/references/assigning-issues.md
@@ -1,26 +1,40 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
# Assign issues to teammates - Docs
Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
## Assign issues
-You can manually assign issues as you triage them in the UI. This can be done both in the issue list and issue detail pages.
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
-
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
-1. In your error tracking [issue list](https://app.posthog.com/error_tracking), click the **unassigned** selector under each issue to assign it to a role or user.
+
-2. On the detail page of each issue, click the **Assignee** selector to assign it to a role or user.
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
-
+
## Automatic issue assignment
-You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**.
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
-
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
@@ -58,19 +72,31 @@ A common use case for automatic issue assignment is to alert assignees of new is
## Create external issues
-You can also create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira.
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
-First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system. Then, from an issue's details page, under **External references**, click **Create issue**.
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.

-The new issue will have a partial stack trace and a link to the issue in PostHog.
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-ruby/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-ruby/references/fingerprints.md
index 324758ce..d58a6781 100644
--- a/skills/posthog/all/skills/error-tracking-ruby/references/fingerprints.md
+++ b/skills/posthog/all/skills/error-tracking-ruby/references/fingerprints.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
# Fingerprints - Docs
Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
@@ -48,9 +54,9 @@ Fingerprints can be manually set during exception capture. This is a very useful
You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-ruby/references/monitoring.md b/skills/posthog/all/skills/error-tracking-ruby/references/monitoring.md
index d7383fdd..6590cab2 100644
--- a/skills/posthog/all/skills/error-tracking-ruby/references/monitoring.md
+++ b/skills/posthog/all/skills/error-tracking-ruby/references/monitoring.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
# Monitor and search issues - Docs
This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
@@ -45,11 +51,11 @@ The search bar provides two modes of filtering:
This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
-
+
Added property filters look like this:
-
+
The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
@@ -103,7 +109,7 @@ This page shows you the following:
- Name, description, status, assignee, and external tracking links for the issue.
- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
-
+
### Filtering exception occurrences within an issue
@@ -111,7 +117,7 @@ Once you've found and opened the issue you want to investigate, you can use the
For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
-
+
**Alerts**
@@ -131,9 +137,9 @@ If you find your queries timing out or taking more than 30 seconds, please [let
If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-ruby/references/ruby.md b/skills/posthog/all/skills/error-tracking-ruby/references/ruby.md
index 337af284..8cc10d01 100644
--- a/skills/posthog/all/skills/error-tracking-ruby/references/ruby.md
+++ b/skills/posthog/all/skills/error-tracking-ruby/references/ruby.md
@@ -1,4 +1,10 @@
-# Ruby error tracking installation - Docs
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Ruby Error Tracking installation - Docs
+
+Copy page
+
+# Ruby Error Tracking installation - Docs
1. 1
@@ -80,8 +86,8 @@
rescue => e
posthog.capture_exception(
e,
- distinct_id: 'user_distinct_id',
- properties: {
+ 'user_distinct_id',
+ {
custom_property: 'custom_value'
}
)
@@ -94,7 +100,7 @@
| --- | --- | --- |
| exception | Exception | The exception object to capture (required) |
| distinct_id | String | The distinct ID of the user (optional) |
- | properties | Hash | Additional properties to attach to the exception event (optional) |
+ | additional_properties | Hash | Additional properties to attach to the exception event (optional) |
5. ## Verify error tracking
@@ -108,9 +114,9 @@
[Check for exceptions in PostHog](https://app.posthog.com/activity/explore)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-ruby/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-ruby/references/upload-source-maps.md
index 178a4ab8..b6ae318f 100644
--- a/skills/posthog/all/skills/error-tracking-ruby/references/upload-source-maps.md
+++ b/skills/posthog/all/skills/error-tracking-ruby/references/upload-source-maps.md
@@ -1,10 +1,26 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
# Upload source maps - Docs
If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
-Choose your platform to view specific instructions.
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
- [Web](/docs/error-tracking/upload-source-maps/web.md)
@@ -24,8 +40,14 @@ Choose your platform to view specific instructions.
- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
@@ -36,9 +58,9 @@ Choose your platform to view specific instructions.
- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-rust/SKILL.md b/skills/posthog/all/skills/error-tracking-rust/SKILL.md
new file mode 100644
index 00000000..db522be2
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-rust/SKILL.md
@@ -0,0 +1,44 @@
+---
+name: error-tracking-rust
+description: PostHog error tracking for Rust
+metadata:
+ author: PostHog
+ version: dev
+---
+
+# PostHog error tracking for Rust
+
+This skill helps you add PostHog error tracking to Rust applications.
+
+## Reference files
+
+- `references/rust.md` - Rust error tracking installation - docs
+- `references/fingerprints.md` - Fingerprints - docs
+- `references/alerts.md` - Send error tracking alerts - docs
+- `references/monitoring.md` - Monitor and search issues - docs
+- `references/assigning-issues.md` - Assign issues to teammates - docs
+- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
+
+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
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- posthog-rs is the Rust SDK crate; add it with `cargo add posthog-rs` and construct the client with `posthog_rs::client(options).await`
+- Create one client per process and share it (for example an `Arc` in your app state or a `OnceCell`); do not build a new client per request or task
+- Configure the project token and host from environment variables via `ClientOptions` (the `(api_key, host)` tuple); never hardcode PostHog secrets
+- Because `capture` is fire-and-forget, call `client.flush().await` then `client.shutdown().await` before the process exits — where the server future resolves. An app with no shutdown path still needs this; add the calls there rather than skipping them so queued events are delivered before exit
+- Server-side captures must set a stable `distinct_id` on `Event::new(event, distinct_id)` that matches frontend identify calls; avoid anonymous or literal IDs for business events
+- The SDK has no `identify` or `alias` helper; set person properties by inserting a `$set` property on an event
+- For feature flags, call `client.evaluate_flags(distinct_id, EvaluateFlagsOptions::default()).await` once per user/request, then read values from the returned snapshot with `is_enabled(...)`
+- For error tracking, use `client.capture_exception_with(&err, CaptureExceptionOptions::new()...)`; the `error-tracking` feature is enabled by default in recent versions
+- The Rust SDK has no surveys or session replay support; do not promise or scaffold those features
diff --git a/skills/posthog/all/skills/error-tracking-rust/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-rust/references/COMMANDMENTS.md
new file mode 100644
index 00000000..4eb31257
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-rust/references/COMMANDMENTS.md
@@ -0,0 +1,14 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- posthog-rs is the Rust SDK crate; add it with `cargo add posthog-rs` and construct the client with `posthog_rs::client(options).await`
+- Create one client per process and share it (for example an `Arc` in your app state or a `OnceCell`); do not build a new client per request or task
+- Configure the project token and host from environment variables via `ClientOptions` (the `(api_key, host)` tuple); never hardcode PostHog secrets
+- Because `capture` is fire-and-forget, call `client.flush().await` then `client.shutdown().await` before the process exits — where the server future resolves. An app with no shutdown path still needs this; add the calls there rather than skipping them so queued events are delivered before exit
+- Server-side captures must set a stable `distinct_id` on `Event::new(event, distinct_id)` that matches frontend identify calls; avoid anonymous or literal IDs for business events
+- The SDK has no `identify` or `alias` helper; set person properties by inserting a `$set` property on an event
+- For feature flags, call `client.evaluate_flags(distinct_id, EvaluateFlagsOptions::default()).await` once per user/request, then read values from the returned snapshot with `is_enabled(...)`
+- For error tracking, use `client.capture_exception_with(&err, CaptureExceptionOptions::new()...)`; the `error-tracking` feature is enabled by default in recent versions
+- The Rust SDK has no surveys or session replay support; do not promise or scaffold those features
diff --git a/skills/posthog/all/skills/error-tracking-rust/references/alerts.md b/skills/posthog/all/skills/error-tracking-rust/references/alerts.md
new file mode 100644
index 00000000..a760ac4e
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-rust/references/alerts.md
@@ -0,0 +1,69 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
+# Send error tracking alerts - Docs
+
+To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
+
+## Issue created or reopened
+
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+
+
+
+Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
+
+This will then send alerts to your chosen destination when an issue is created or reopened like this:
+
+## Issue properties and assignments
+
+You can filter an alert based on the properties of an issue. This is useful for notifying a specific team when they have been auto assigned an issue using [auto assignment rules](/docs/error-tracking/managing-issues.md#auto-assignment-rules).
+
+
+
+## Spike alerts
+
+PostHog can also alert you when an existing issue suddenly spikes in volume - for example, after a bad deploy. This works differently from issue-created alerts. Instead of triggering when a new issue is first seen, spike alerts fire when an issue's error rate significantly exceeds its historical baseline.
+
+See the [spike detection guide](/docs/error-tracking/spikes.md) to learn how it works and how to configure it.
+
+## Other alerting options
+
+Since error tracking works by capturing `$exception` events, PostHog features that trigger by events can play a role in alerts too.
+
+### Real time destinations
+
+The first way is using [real time destinations](/docs/cdp/destinations.md). This enables you to send events (like `$exception`) to other tools as soon as they are ingested.
+
+To create a real time destination, go to the [data pipelines tab](https://app.posthog.com/data-management/destinations) in PostHog, click **\+ New**, and then select **Destination**. Choose your destination and press **\+ Create**.
+
+On the destination creation screen, make sure to add an event matcher for the `$exception` event, filter for the properties you want, and set the trigger options.
+
+
+
+Check out our [real time destinations docs](/docs/cdp/destinations.md) for more information.
+
+### Trend alerts
+
+You can also visualize your `$exception` events using [trends](/docs/product-analytics/trends/overview.md). Once you create a trend insight, click the **Alerts** button at the top of the insight and then **New alert**.
+
+Here you can set alerts for event volume value, increase, or decrease.
+
+
+
+This sends an email notification to the user you choose. Check out our [alerts docs](/docs/alerts.md) for more information.
+
+**Can't find your alert?**
+
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-rust/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-rust/references/assigning-issues.md
new file mode 100644
index 00000000..fe4ddaaa
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-rust/references/assigning-issues.md
@@ -0,0 +1,103 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
+# Assign issues to teammates - Docs
+
+Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
+
+## Assign issues
+
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
+
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
+
+
+
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
+
+Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
+
+
+
+## Automatic issue assignment
+
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
+
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
+
+Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
+
+Issues can be automatically assigned to a **role** or **user** by configuring a set of filters. These filters can be configured to match **any** or **all** of the criteria.
+
+You can configure automatic assignment to filter on any [event property](/docs/data/events.md) in PostHog. When there are multiple values for a property, the filters return true if it matches **any** of the values. For example, if you have multiple `exception_functions` values, the filters returns true if it matches **any** of the functions.
+
+Here are some common properties you can filter on:
+
+| Property | Event property | Description |
+| --- | --- | --- |
+| Exception type | $exception_types | The type of exception(s) that occurred |
+| Exception message | $exception_values | The message(s) detected on the error |
+| Exception function | $exception_functions | The function(s) where the exception occurred |
+| Exception source | $exception_sources | The source file(s) where the exception occurred |
+| Exception was handled | $exception_handled | Whether the exception was handled by the application |
+| Device type | $device_type | The type of device that the error occurred on |
+| Browser | $browser | The browser that the error occurred in |
+| Current URL | $current_url | The URL that the error occurred on |
+| Feature flag | $feature_flag | The feature flag that the error occurred on |
+
+You can also set custom properties on the error tracking event to filter on. For example, setting a custom `params_received` property to provide more context or debug information.
+
+### Order of issue assignment rules
+
+Issue assignment filters are evaluated in the order they are configured. They can also be reordered once created. The first filter that matches is used to assign the issue. This means you should configure the most specific filters first, and then the more general filters later.
+
+### Disabled assignment rules
+
+Assignment rules can become disabled if an error occurs during ingestion. When a rule is disabled, a banner displays the original error message. To re-enable the rule, edit it to fix the problem and save your changes. If the issue persists, reach out to support.
+
+### Alerting based on assignment
+
+A common use case for automatic issue assignment is to alert assignees of new issues. Once the issues are automatically assigned, you can set up alerts to notify the assignee. See the [alerts](/docs/error-tracking/alerts.md) guide for more information.
+
+## Create external issues
+
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
+
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.
+
+
+
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
+
+> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-rust/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-rust/references/fingerprints.md
new file mode 100644
index 00000000..d58a6781
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-rust/references/fingerprints.md
@@ -0,0 +1,63 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
+# Fingerprints - Docs
+
+Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
+
+## Fingerprint and issue grouping
+
+Every exception has a fingerprint, whether generated or defined by the user. Each fingerprint links to exactly one issue. Exceptions that share the same fingerprint define an issue.
+
+Multiple different fingerprints can point to the same issue (a many-to-one relationship) if you [merge issues](/docs/error-tracking/managing-issues.md#merging-issues).
+
+## How are fingerprints generated?
+
+Fingerprints are built iteratively using components of the exception event. The flowchart below shows how fingerprints are generated.
+
+flowchart LR A\[Add exception type to fingerprint\] --> B{Stack trace available?} B -->|No| C\[Add error message to fingerprint\] C --> D\[Final fingerprint\] B -->|Yes| E{In-app frames exist?} E -->|No| F\[Add first frame to fingerprint\] E -->|Yes| G\[Add in-app frame to fingerprint Priority: resolved > unresolved\] F --> D G --> D
+
+The flowchart in text
+
+Fingerprints are generated by considering the following in combination:
+
+1. The exception type
+2. If there's no resolved stack trace, add the error message to the fingerprint
+3. If there are stack traces but no in-app frames (frames from your code, not a dependency), use the first frame of the stack trace
+4. If there are stack traces, in-app frames, and source maps available, use the resolved in-app stack frames
+5. If there are stack traces, in-app frames, and source maps *not* available, use the first in-app stack frame
+
+In some languages, like Python, one error can trigger another, creating a chain of linked exceptions. PostHog records the entire chain in the event and generates a single fingerprint for it.
+
+### Ensuring accurate fingerprints
+
+[Resolved stack traces](/docs/error-tracking/stack-traces.md) are critical for accurate fingerprinting. Without accurate stack traces, PostHog cannot group exceptions consistently. If you have not uploaded source maps, follow the [source map guide](/docs/error-tracking/upload-source-maps.md) to do so.
+
+This also means that if the exception **type** or **message** changes from one version to the next, the fingerprint will change.
+
+## When are generated fingerprints used?
+
+Fingerprints are used to group similar exceptions into issues automatically. Automatic issue grouping is only done when:
+
+- No [issue grouping rules](/docs/error-tracking/grouping-issues.md) are applied
+- No [issue merging](/docs/error-tracking/managing-issues.md#merging-issues) has been configured
+- No [custom fingerprint](#customizing-fingerprints) is set during capture
+
+You can find details about how issue grouping works in the [issues and exceptions](/docs/error-tracking/issues-and-exceptions.md) guide.
+
+## Customizing fingerprints
+
+Fingerprints can be manually set during exception capture. This is a very useful way to group exceptions that are not related to each other. You can find examples of how to do this in the [custom issue grouping](/docs/error-tracking/grouping-issues.md#option-2-client-side-fingerprint) section.
+
+You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-rust/references/monitoring.md b/skills/posthog/all/skills/error-tracking-rust/references/monitoring.md
new file mode 100644
index 00000000..6590cab2
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-rust/references/monitoring.md
@@ -0,0 +1,146 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
+# Monitor and search issues - Docs
+
+This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
+
+## Monitoring issues
+
+When you're monitoring issues in your project, there are generally two common workflows:
+
+- You're exploring issues to identify impactful and problematic areas. You should use sorting features.
+- You're looking for issues assigned to you to resolve them. You should filter by the `Assigned to` property.
+
+### Sorting issues
+
+Issues can be sorted by the following properties:
+
+| Property | Description |
+| --- | --- |
+| Last seen | The issue that has the most recent exception |
+| First seen | The issue that has the oldest exception |
+| Occurrences | The number of exceptions in the issue |
+| Users | The number of unique users affected by the issue |
+| Sessions | The number of unique sessions affected by the issue |
+
+Sorting by **last seen** and **occurrences** are great ways to get a general sense of issues in your project. Sorting by **users** and **sessions** is great to find the most impactful issues if you're using other [filters](#finding-specific-issues) to narrow down your results.
+
+### Monitoring issues assigned to you
+
+You can filter issues by the **Assigned to** property to find issues assigned to you. This is especially useful if you configure [automatic issue assignment](/docs/error-tracking/assigning-issues.md) and configure [alerts](/docs/error-tracking/alerts.md) to notify you when new issues are created.
+
+## Finding specific issues
+
+You can use the search bar at the top of the [issue page](https://app.posthog.com/error_tracking) to filter issues based on the properties of the exceptions in that issue.
+
+Search results are matched based on [properties of exception events](/docs/error-tracking/issues-and-exceptions.md) grouped into the issues. For example, if you search for "TypeError", we show you all issues where *any* exception grouped into the issue has a type of "TypeError".
+
+**Unrelated results**
+
+You may see seemingly unrelated issues in your search results because your search term matches an exception in the issue group. For example, you may see an issues named `RefreshError` when searching "schema", because a `get_schema` method appears on the exception stack traces.
+
+### Filtering modes
+
+The search bar provides two modes of filtering:
+
+#### 1\. Exact property filtering
+
+This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
+
+
+
+Added property filters look like this:
+
+
+
+The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
+
+#### 2\. Freeform text search
+
+This does text matching for a subset of the error tracking specific properties of the exception event. It splits the text you give it into tokens. The search matches an exception if *each* of the tokens in your search term appear in one of the following:
+
+- The exception type
+- The exception message
+- The function names in the exception stack trace (if known)
+- The file paths in the exception stack trace (if known)
+
+For example, imagine you have an exception that looks like this:
+
+PostHog AI
+
+```
+TypeError: Cannot read property 'name' of undefined
+ at Object. (/path/to/myfile.js:123:45)
+ at Module._compile (module.js:653:30)
+ at Object.Module._extensions..js (module.js:664:10)
+ at Module.load (module.js:566:32)
+ at tryModuleLoad (module.js:506:12)
+ at Function.Module._load (module.js:498:3)
+ at Function.Module.runMain (module.js:694:10)
+ at startup (bootstrap_node.js:204:16)
+ at bootstrap_node.js:625:3
+```
+
+If you search for the term `TypeError myfile.js`, the exception matches this search, as it contains `TypeError` (as the exception type) and `myfile.js` (as a file path in the stack trace).
+
+If you search for `TypeError myfile.js abc`, the exception would not match, as the token `abc` does not appear anywhere in freeform search properties.
+
+If you want to search for longer exact strings, e.g. a particular exception message, you can group tokens into a single term using quotes, e.g. `"Cannot read property 'name' of undefined" myfile.js` would match, and `"Cannot read property of myfile.js"` would not.
+
+Note, perhaps unintuitively, `Cannot read property of myfile.js` would match, because the tokens are ungrouped, and all of them appear *somewhere* in the exception search properties.
+
+### Searching chained exceptions
+
+Exception events can have more than one exception in them, due to language features like exception chaining. For freeform search, we put the types, messages, functions and file paths of all exceptions into one list, and match if the token appears in any of them.
+
+For example, if you had a chained exception with the messages `MyCustomError: Failed to load user` and `Cannot read property 'age' of undefined`, searching for `cannot read property` would match the exception, because it matches *one* of the exception messages (`property` appears in the "root" one).
+
+## Issue details
+
+When you click on an issue, you'll see the details page of the issue.
+
+This page shows you the following:
+
+- The stack trace, properties, and sessions related to the **currently selected exception**.
+- Name, description, status, assignee, and external tracking links for the issue.
+- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
+
+
+
+### Filtering exception occurrences within an issue
+
+Once you've found and opened the issue you want to investigate, you can use the same search interface to filter the exception list for a particular instance of the issue. This is particularly useful in cases where some exceptions in the issue have information others don't and you want to use that information for debugging.
+
+For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
+
+
+
+**Alerts**
+
+If you have a set of filters that you use often, you can create alerts for them. This way you can be notified when new issues match your filters. Learn more about [alerts](/docs/error-tracking/alerts.md).
+
+## Improving search performance
+
+We try to return results to you within a second, but sometimes if you're querying over large amounts of data, it may take longer. The following can improve the search performance:
+
+- **Limit the time range you're searching over:** 7 days is usually enough to get a sense for the trends of an issue over time.
+
+- **Use freeform search rather than property filters:** Our freeform searches are generally faster than property filters, as the total amount of data processed is smaller.
+
+If you find your queries timing out or taking more than 30 seconds, please [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue)! We're always looking for benchmarks to improve against.
+
+## Suppressing issues
+
+If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-rust/references/rust.md b/skills/posthog/all/skills/error-tracking-rust/references/rust.md
new file mode 100644
index 00000000..3021282e
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-rust/references/rust.md
@@ -0,0 +1,199 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Rust Error Tracking installation - Docs
+
+Copy page
+
+# Rust Error Tracking installation - Docs
+
+1. 1
+
+ ## Install the Rust SDK
+
+ Required
+
+ Install the [PostHog Rust SDK](/docs/libraries/rust.md):
+
+ Terminal
+
+ PostHog AI
+
+ ```bash
+ cargo add posthog-rs
+ ```
+
+ Error tracking ships enabled by default through the `error-tracking` feature. If you build with `default-features = false`, add it back explicitly:
+
+ toml
+
+ PostHog AI
+
+ ```toml
+ [dependencies]
+ posthog-rs = { version = "*", default-features = false, features = ["error-tracking"] }
+ ```
+
+ **Debug symbol uploads**
+
+ The Rust SDK resolves stack traces in-process, so when the running binary carries debug info (as development builds do), captured frames include file names, line numbers, and function names without any symbol uploads. For resolved stack traces from release builds — which omit debug info by default — plus inlined frame resolution and source context (the surrounding lines of code in the error tracking UI), [upload debug symbols](/docs/error-tracking/upload-source-maps/rust.md).
+
+2. 2
+
+ ## Initialize the client
+
+ Required
+
+ Rust
+
+ PostHog AI
+
+ ```rust
+ let client = posthog_rs::client((
+ "",
+ "https://us.i.posthog.com",
+ )).await;
+ ```
+
+ The default client is async (Tokio). Building with `default-features = false` gives you a blocking client instead — the same methods without `.await`.
+
+3. 3
+
+ ## Capture exceptions
+
+ Required
+
+ `capture_exception` works with any `std::error::Error` and captures it personlessly — the exception type, message, and full `source()` chain are sent, with a stack trace recorded at the call site:
+
+ Rust
+
+ PostHog AI
+
+ ```rust
+ let error = std::io::Error::new(std::io::ErrorKind::Other, "connection refused");
+ client.capture_exception(&error).await.unwrap();
+ ```
+
+ To associate the exception with a person or attach context, use `capture_exception_with`:
+
+ Rust
+
+ PostHog AI
+
+ ```rust
+ use posthog_rs::CaptureExceptionOptions;
+ client.capture_exception_with(
+ &error,
+ CaptureExceptionOptions::new()
+ .distinct_id("user_distinct_id")
+ .property("route", "/checkout").unwrap()
+ .group("company", "company_id")
+ .fingerprint("my-custom-fingerprint")
+ .level("warning"),
+ ).await.unwrap();
+ ```
+
+ All options are optional: `distinct_id` links a person, `property` and `group` add context, `fingerprint` overrides [issue grouping](/docs/error-tracking/grouping-issues.md), and `level` sets the severity (defaults to `error`).
+
+ If you use `anyhow`, pass the underlying error with `err.as_ref()`:
+
+ Rust
+
+ PostHog AI
+
+ ```rust
+ let result: anyhow::Result<()> = do_work();
+ if let Err(err) = result {
+ client.capture_exception(err.as_ref()).await.unwrap();
+ }
+ ```
+
+4. 4
+
+ ## Capture panics
+
+ Optional
+
+ Panic autocapture is opt-in and uses the process-global client. Enable `capture_panics` and initialize the global client with `init_global`; the SDK then installs a process-wide `std::panic` hook:
+
+ Rust
+
+ PostHog AI
+
+ ```rust
+ use posthog_rs::{ClientOptionsBuilder, ErrorTrackingOptionsBuilder};
+ let options = ClientOptionsBuilder::default()
+ .api_key("".to_string())
+ .host("https://us.i.posthog.com")
+ .error_tracking(
+ ErrorTrackingOptionsBuilder::default()
+ .capture_panics(true)
+ .build()
+ .unwrap(),
+ )
+ .build()
+ .unwrap();
+ // Installs the panic hook and routes panics through the global client.
+ posthog_rs::init_global(options).await.unwrap();
+ ```
+
+ Each panic is captured as a personless `$exception` carrying the panic message, the panic-site location, and a call-site stack trace (subject to `capture_stacktrace`). The previously installed hook still runs afterwards.
+
+ Because a panic hook is process-global, panic autocapture pairs with the global client — there is no per-`Client` panic API. Capture routes through the SDK's background worker, so it needs no async runtime, and the flush is bounded to a short timeout (2s) so a slow or unreachable PostHog can't freeze the crashing process. Delivery is best-effort: under sustained backpressure the event may not be sent before the process exits.
+
+5. 5
+
+ ## Configure stack traces
+
+ Optional
+
+ Stack trace capture and in-app frame classification are configured per client through `ErrorTrackingOptionsBuilder`:
+
+ Rust
+
+ PostHog AI
+
+ ```rust
+ use posthog_rs::{ClientOptionsBuilder, ErrorTrackingOptionsBuilder};
+ let options = ClientOptionsBuilder::default()
+ .api_key("".to_string())
+ .host("https://us.i.posthog.com")
+ .error_tracking(
+ ErrorTrackingOptionsBuilder::default()
+ // Skip the stack walk entirely, e.g. for high-volume handled errors
+ .capture_stacktrace(false)
+ // Mark frames from a crate as library code rather than in-app
+ .in_app_exclude_paths(vec!["other_crate::".to_string()])
+ .build()
+ .unwrap(),
+ )
+ .build()
+ .unwrap();
+ let client = posthog_rs::client(options).await;
+ ```
+
+ In-app patterns match both file paths and function symbols, so crate prefixes like `"my_crate::"` and path fragments like `"/service/"` both work. By default, frames from the cargo registry, the standard library, and vendored or target paths are classified as library code.
+
+6. 6
+
+ ## Verify error tracking
+
+ Recommended
+
+ Trigger a test exception to confirm events are being sent to PostHog. You should see it appear in the [error tracking issues view](https://app.posthog.com/error_tracking).
+
+ Rust
+
+ PostHog AI
+
+ ```rust
+ let error = std::io::Error::new(std::io::ErrorKind::Other, "This is a test exception from Rust");
+ client.capture_exception(&error).await.unwrap();
+ ```
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-rust/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-rust/references/upload-source-maps.md
new file mode 100644
index 00000000..b6ae318f
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-rust/references/upload-source-maps.md
@@ -0,0 +1,67 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
+# Upload source maps - Docs
+
+If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
+
+If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
+
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
+
+- [Web](/docs/error-tracking/upload-source-maps/web.md)
+
+- [Next.js](/docs/error-tracking/upload-source-maps/nextjs.md)
+
+- [Node.js](/docs/error-tracking/upload-source-maps/node.md)
+
+- [React](/docs/error-tracking/upload-source-maps/react.md)
+
+- [Angular](/docs/error-tracking/upload-source-maps/angular.md)
+
+- [Nuxt](/docs/error-tracking/upload-source-maps/nuxt.md)
+
+- [React Native](/docs/error-tracking/upload-source-maps/react-native.md)
+
+- [Android](/docs/error-tracking/upload-mappings/android.md)
+
+- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
+- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
+- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
+
+- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
+
+- [Vite](/docs/error-tracking/upload-source-maps/vite.md)
+
+- [CLI](/docs/error-tracking/upload-source-maps/cli.md)
+
+- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
+
+### Still have questions?
+
+Ask PostHog AI
+
+### Was this page useful?
+
+HelpfulCould be better
\ No newline at end of file
diff --git a/skills/posthog/all/skills/error-tracking-svelte/SKILL.md b/skills/posthog/all/skills/error-tracking-svelte/SKILL.md
index 930e3474..89cd38c0 100644
--- a/skills/posthog/all/skills/error-tracking-svelte/SKILL.md
+++ b/skills/posthog/all/skills/error-tracking-svelte/SKILL.md
@@ -3,7 +3,7 @@ name: error-tracking-svelte
description: PostHog error tracking for Svelte
metadata:
author: PostHog
- version: 1.9.4
+ version: dev
---
# PostHog error tracking for Svelte
@@ -18,6 +18,7 @@ This skill helps you add PostHog error tracking to Svelte applications.
- `references/monitoring.md` - Monitor and search issues - docs
- `references/assigning-issues.md` - Assign issues to teammates - docs
- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
Consult the documentation for API details and framework-specific patterns.
@@ -31,5 +32,10 @@ Consult the documentation for API details and framework-specific patterns.
## Framework guidelines
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- For server-side capture (+server.ts endpoints, actions, hooks like handleError), the handler is short-lived per request. Configure the posthog-node singleton with flushAt 1 and flushInterval 0, and `await posthog.flush()` after capturing and before returning, or the batched event is silently dropped when the request ends
- Set paths.relative to false in svelte.config.js — this is required for PostHog session replay to work correctly with SSR and is easy to miss
- Use the Svelte MCP server tools to check Svelte documentation (list-sections, get-documentation) and validate components (svelte-autofixer) — always run svelte-autofixer on new or modified .svelte files before finishing
+- Remember that source code is available in the node_modules directory
+- Check package.json for type checking or build scripts to validate changes
+- When identity comes from framework-bridged state (Inertia or SSR shared props, a serialized session), confirm the backend actually shares that field — add the share server-side if missing — before identifying from it
diff --git a/skills/posthog/all/skills/error-tracking-svelte/references/COMMANDMENTS.md b/skills/posthog/all/skills/error-tracking-svelte/references/COMMANDMENTS.md
new file mode 100644
index 00000000..a5053c3d
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-svelte/references/COMMANDMENTS.md
@@ -0,0 +1,11 @@
+# Framework rules
+
+Follow these when integrating PostHog into this framework.
+
+- A missing PostHog configuration must never break the app — read keys optionally (never a required setting), guard init and capture behind their presence, and keep build and boot working with no PostHog environment set — but never silently: in development or debug builds fail loudly, using the language's idiomatic error, with the message " variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once is configured" (substituting the actual variable name); production stays a no-op
+- For server-side capture (+server.ts endpoints, actions, hooks like handleError), the handler is short-lived per request. Configure the posthog-node singleton with flushAt 1 and flushInterval 0, and `await posthog.flush()` after capturing and before returning, or the batched event is silently dropped when the request ends
+- Set paths.relative to false in svelte.config.js — this is required for PostHog session replay to work correctly with SSR and is easy to miss
+- Use the Svelte MCP server tools to check Svelte documentation (list-sections, get-documentation) and validate components (svelte-autofixer) — always run svelte-autofixer on new or modified .svelte files before finishing
+- Remember that source code is available in the node_modules directory
+- Check package.json for type checking or build scripts to validate changes
+- When identity comes from framework-bridged state (Inertia or SSR shared props, a serialized session), confirm the backend actually shares that field — add the share server-side if missing — before identifying from it
diff --git a/skills/posthog/all/skills/error-tracking-svelte/references/alerts.md b/skills/posthog/all/skills/error-tracking-svelte/references/alerts.md
index 94653a53..a760ac4e 100644
--- a/skills/posthog/all/skills/error-tracking-svelte/references/alerts.md
+++ b/skills/posthog/all/skills/error-tracking-svelte/references/alerts.md
@@ -1,12 +1,18 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Send error tracking alerts - Docs
+
+Copy page
+
# Send error tracking alerts - Docs
To stay on top of issues, you can set up alerts. These enable you to post to Slack, Discord, Teams, or an HTTP Webhook when an issue is created or reopened.
## Issue created or reopened
-To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
+To alert when an issue is created or reopened, go to [error tracking's configuration page](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-alerting) and click **Alerting**. This shows you a list of existing alerts. Clicking **New notification** brings you to a page to create a new one.
-
+
Choosing an option brings you to a page to configure the alert. This may require setting up the Slack integration or pasting in a webhook URL. Once done, you can test the alert by clicking **Test function** and then finalize by clicking **Create & enable**.
@@ -52,11 +58,11 @@ This sends an email notification to the user you choose. Check out our [alerts d
**Can't find your alert?**
-If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/project/2#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
+If you'd like a destination to be added that we don't yet support, [let us know in-app](https://app.posthog.com/#panel=support%3Afeedback%3Aerror_tracking%3A%3Afalse).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-svelte/references/assigning-issues.md b/skills/posthog/all/skills/error-tracking-svelte/references/assigning-issues.md
index 77bb0f72..fe4ddaaa 100644
--- a/skills/posthog/all/skills/error-tracking-svelte/references/assigning-issues.md
+++ b/skills/posthog/all/skills/error-tracking-svelte/references/assigning-issues.md
@@ -1,26 +1,40 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Assign issues to teammates - Docs
+
+Copy page
+
# Assign issues to teammates - Docs
Error tracking enables you to assign issues to specific PostHog [roles](https://app.posthog.com/settings/organization-roles) or teammates. This helps your team find relevant issues through **filtering**. You can also set up team-specific **alerting** to notify them when assigned issues are created or reopened.
## Assign issues
-You can manually assign issues as you triage them in the UI. This can be done both in the issue list and issue detail pages.
+You can manually assign issues as you triage them in the UI, either from the issue list or an issue's details page.
-
+From your error tracking [issue list](https://app.posthog.com/error_tracking), click the **Unassigned** selector under any issue to assign it to a role or user.
-1. In your error tracking [issue list](https://app.posthog.com/error_tracking), click the **unassigned** selector under each issue to assign it to a role or user.
+
-2. On the detail page of each issue, click the **Assignee** selector to assign it to a role or user.
+Alternatively, open an issue and click the **Assignee** selector on its details page.
+
+
Want to assign issues to a **team** rather than an individual teammate? You can create a role in [your project settings](https://app.posthog.com/settings/organization-roles).
-
+
## Automatic issue assignment
-You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking?activeTab=configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**.
+You can set up automatic issue assignment through a set of rules. This can be configured in the [error tracking settings](https://app.posthog.com/error_tracking/configuration#selectedSetting=error-tracking-auto-assignment) using **auto assignment rules**. You can also create assignment rules programmatically using the [PostHog MCP server](/docs/error-tracking/surfaces/mcp.md).
+
+The settings show a list of your existing assignment rules:
+
+
-
+When adding or editing a rule, you can test it before saving. Click **Test** to see how many exceptions matched the rule's conditions over the last 7 days, so you can confirm it behaves as expected.
+
+
Assignment conditions are evaluated against the properties of the exception event that created the issue. Because assignment rules are evaluated during ingestion, the stack trace (if present) will be unminified, which enables filtering on exception properties such as function name and source file.
@@ -58,19 +72,31 @@ A common use case for automatic issue assignment is to alert assignees of new is
## Create external issues
-You can also create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira.
+You can create issues in external tracking systems like GitHub Issues, Linear, GitLab, or Jira. This links PostHog error tracking issues to your existing issue tracking workflows.
+
+First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system.
-First, set up an [integration](/docs/error-tracking/integrations.md) with your tracking system. Then, from an issue's details page, under **External references**, click **Create issue**.
+### From the UI
+
+From an issue's details page, under **External references**, click **Create issue**.

-The new issue will have a partial stack trace and a link to the issue in PostHog.
+The new issue has a partial stack trace and a link to the issue in PostHog.
+
+### Via the API
+
+You can also create external references programmatically using the [PostHog API](/docs/api.md) with a [personal API key](/docs/api.md#personal-api-keys) that has the `error_tracking:write` scope.
+
+### Via MCP
+
+AI agents using the [PostHog MCP server](/docs/model-context-protocol.md) can create external references with the `error-tracking-external-references-create` tool. See the [MCP debugging guide](/docs/error-tracking/surfaces/mcp.md) for more.
> If you use another issue tracking system and would like to request it, [let us know in-app](https://app.posthog.com#panel=support%3Afeedback%3Aerror_tracking%3Alow%3Atrue).
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-svelte/references/fingerprints.md b/skills/posthog/all/skills/error-tracking-svelte/references/fingerprints.md
index 324758ce..d58a6781 100644
--- a/skills/posthog/all/skills/error-tracking-svelte/references/fingerprints.md
+++ b/skills/posthog/all/skills/error-tracking-svelte/references/fingerprints.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Fingerprints - Docs
+
+Copy page
+
# Fingerprints - Docs
Every captured exception is assigned a fingerprint. This fingerprint is used to group similar exceptions into issues. This page covers how fingerprints are generated, how they're used, and how you can override them when capturing exceptions.
@@ -48,9 +54,9 @@ Fingerprints can be manually set during exception capture. This is a very useful
You can also learn more about grouping issues using rules in the [grouping issues](/docs/error-tracking/grouping-issues.md) guide.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-svelte/references/monitoring.md b/skills/posthog/all/skills/error-tracking-svelte/references/monitoring.md
index d7383fdd..6590cab2 100644
--- a/skills/posthog/all/skills/error-tracking-svelte/references/monitoring.md
+++ b/skills/posthog/all/skills/error-tracking-svelte/references/monitoring.md
@@ -1,3 +1,9 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Monitor and search issues - Docs
+
+Copy page
+
# Monitor and search issues - Docs
This guide covers how to find the most relevant, urgent, and impactful issues in your error tracking using the [issues page](https://app.posthog.com/error_tracking).
@@ -45,11 +51,11 @@ The search bar provides two modes of filtering:
This operates like property filters elsewhere in PostHog, enabling you to add terms like `where 'http_referer' is set` or `where 'library' equals 'web'`. You add a property filter by clicking the property name shown here:
-
+
Added property filters look like this:
-
+
The results of both of these filter types (property filters and freeform search) are combined with `AND` logic, such that only exceptions that match all filters are included in the search results.
@@ -103,7 +109,7 @@ This page shows you the following:
- Name, description, status, assignee, and external tracking links for the issue.
- A filterable list of all exceptions in the issue. **Selecting an exception** will show you the stack trace, properties, and sessions related to that exception at the top of the page.
-
+
### Filtering exception occurrences within an issue
@@ -111,7 +117,7 @@ Once you've found and opened the issue you want to investigate, you can use the
For example, you can add a property filter on `http_referer` that shows all exceptions where the `http_referer` is set:
-
+
**Alerts**
@@ -131,9 +137,9 @@ If you find your queries timing out or taking more than 30 seconds, please [let
If you find issues that are not useful to you, you can suppress them by changing the status to **Suppressed**. We recommend that you also implement [client-side suppression](/docs/error-tracking/capture.md#suppressing-exceptions) to not capture these exceptions in the first place, for cost and performance reasons.
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-svelte/references/svelte.md b/skills/posthog/all/skills/error-tracking-svelte/references/svelte.md
index cf1cb549..3a32d170 100644
--- a/skills/posthog/all/skills/error-tracking-svelte/references/svelte.md
+++ b/skills/posthog/all/skills/error-tracking-svelte/references/svelte.md
@@ -1,4 +1,10 @@
-# SvelteKit error tracking installation - Docs
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# SvelteKit Error Tracking installation - Docs
+
+Copy page
+
+# SvelteKit Error Tracking installation - Docs
1. 1
@@ -50,7 +56,7 @@
'',
{
api_host: 'https://us.i.posthog.com',
- defaults: '2026-01-30'
+ defaults: '2026-05-30'
}
)
}
@@ -210,9 +216,9 @@
[Upload source maps](/docs/error-tracking/upload-source-maps/web.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-svelte/references/upload-source-maps.md b/skills/posthog/all/skills/error-tracking-svelte/references/upload-source-maps.md
index 178a4ab8..b6ae318f 100644
--- a/skills/posthog/all/skills/error-tracking-svelte/references/upload-source-maps.md
+++ b/skills/posthog/all/skills/error-tracking-svelte/references/upload-source-maps.md
@@ -1,10 +1,26 @@
+> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt
+
+# Upload source maps - Docs
+
+Copy page
+
# Upload source maps - Docs
If you serve compiled or minified code, PostHog requires source maps to generate accurate stack traces.
If your source maps are not publicly hosted, you will need to upload them during your build process to see unminified code in your stack traces.
-Choose your platform to view specific instructions.
+## AI wizard
+
+If you're using a JavaScript or TypeScript framework, set up source map uploading automatically with our wizard by running this command in your project directory with your terminal (it also works for [LLM coding agents](/blog/envoy-wizard-llm-agent.md) like Cursor and Bolt):
+
+`npx @posthog/wizard upload-source-maps`
+
+[Learn more](/wizard.md)
+
+Otherwise, choose your platform below for manual instructions.
+
+## Platforms
- [Web](/docs/error-tracking/upload-source-maps/web.md)
@@ -24,8 +40,14 @@ Choose your platform to view specific instructions.
- [Flutter](/docs/error-tracking/upload-source-maps/flutter.md)
+- [Go](/docs/error-tracking/upload-source-maps/go.md)
+
- [iOS](/docs/error-tracking/upload-source-maps/ios.md)
+- [Kotlin Multiplatform](/docs/error-tracking/upload-debug-symbols/kmp.md)
+
+- [Rust](/docs/error-tracking/upload-source-maps/rust.md)
+
- [Rollup](/docs/error-tracking/upload-source-maps/rollup.md)
- [Webpack](/docs/error-tracking/upload-source-maps/webpack.md)
@@ -36,9 +58,9 @@ Choose your platform to view specific instructions.
- [GitHub Action](/docs/error-tracking/upload-source-maps/github-actions.md)
-### Community questions
+### Still have questions?
-Ask a question
+Ask PostHog AI
### Was this page useful?
diff --git a/skills/posthog/all/skills/error-tracking-upload-source-maps-android/SKILL.md b/skills/posthog/all/skills/error-tracking-upload-source-maps-android/SKILL.md
new file mode 100644
index 00000000..6dc04b14
--- /dev/null
+++ b/skills/posthog/all/skills/error-tracking-upload-source-maps-android/SKILL.md
@@ -0,0 +1,409 @@
+---
+name: error-tracking-upload-source-maps-android
+description: Upload ProGuard / R8 mapping files to PostHog Error Tracking for Android
+metadata:
+ author: PostHog
+ version: dev
+---
+
+# Upload source maps to PostHog for Android
+
+This skill helps you upload source maps (or platform debug symbols) so PostHog Error Tracking can resolve minified stack traces back to your original source.
+
+## Reference files
+
+- `references/android.md` - Upload mappings for android - docs
+- `references/upload-source-maps.md` - Upload source maps - docs
+- `references/cli.md` - Upload source maps with cli - docs
+- `references/COMMANDMENTS.md` - Framework-specific rules the integration must follow
+
+The overview lists every supported framework and build tool. The CLI reference covers `posthog-cli sourcemap process`, which injects chunk IDs and uploads maps in one step. Native binaries (Go, Rust) instead use `posthog-cli symbol-sets upload` — it uploads debug symbols discovered in a build directory, with no inject step; the platform reference covers it.
+
+## Steps
+
+The stages of wiring up source map upload, in order. Each step has a short overview, gotchas under **Tips**, and per-technology notes under **Examples**. The reference files above are the source of truth for the exact, per-framework API — when this page and a reference disagree, follow the reference for Android.
+
+### Get a personal API key
+
+Source map upload authenticates with a **personal API key**, not the public project API key the SDK uses at runtime. The key needs error-tracking write access; the quickest path is the "Source map upload" preset on PostHog's personal API keys settings page.
+
+#### Tips
+- The public project key (the one in your SDK `init`) will **not** work for uploads — it has no write scope for symbol sets.
+- Never hardcode the key in source. It belongs in an environment variable read at build time (see "Write credentials to the env file").
+- Keys can't be minted programmatically — create them by hand in PostHog settings, then store the value as a secret.
+
+### Apply build-config changes
+
+Wire source map generation, chunk-ID injection, and upload into your **production build** so every deploy ships matching maps. Depending on the platform this is either a build/bundler plugin, or a `posthog-cli sourcemap process` step run after the build (it injects chunk IDs and uploads in one pass). Follow the Android reference for the exact wiring.
+
+#### Tips
+- If you wire `posthog-cli` directly (no framework or bundler plugin), generating the maps is **your** responsibility — the CLI only injects chunk IDs into, and uploads, maps your build already produced. Two things must be true before `posthog-cli sourcemap process` works:
+ - Source maps are emitted next to your output bundles (e.g. `.js.map` files).
+ - The maps include `sourcesContent` (the original source embedded inside the map). Without it PostHog has the line/column mappings but not the code, so traces can't be fully resolved.
+- **Inject before deploy**: the *injected* bundles must be the ones shipped to production. Bundles missing the `//# chunkId=…` comment can't be matched to uploaded maps.
+- Wire injection + upload into the build itself (plugin, post-build script, or CI step) — manual uploads drift from deployed code.
+- **Don't ship source maps publicly**: omit `.map` files from the deployed artifact, or use hidden source maps. Uploaded maps live in PostHog, not on your origin.
+- **Link each release to its commit.** The CLI auto-detects the commit from the CI's git env vars — see "Associate the release with a git commit" for making those reachable in Docker/CI builds.
+
+#### Examples
+- **Node / tsc** Emit maps with embedded sources by setting both in `tsconfig.json`: `"sourceMap": true` and `"inlineSources": true`. Then run `posthog-cli sourcemap process` against the build output dir as a post-build step — it injects chunk IDs and uploads in one pass, and needs the upload credentials (see "Make credentials available at build time").
+- **Vite / Webpack / Rollup** Prefer the bundler plugin from the reference over hand-rolling the CLI — it injects and uploads in one pass. Make sure the bundler is configured to emit source maps.
+- **iOS (Xcode)** iOS uploads **dSYM debug symbols**, not source maps. Required target changes:
+ 1. `DEBUG_INFORMATION_FORMAT = dwarf-with-dsym` for Release.
+ 2. `ENABLE_USER_SCRIPT_SANDBOXING = NO`.
+ 3. A Run Script phase, ordered last, with `$(DWARF_DSYM_FOLDER_PATH)/$(DWARF_DSYM_FILE_NAME)/Contents/Resources/DWARF/$(EXECUTABLE_NAME)` in its Input Files, calling the SDK's bundled script — do not hand-roll the upload:
+ - SPM: `POSTHOG_INCLUDE_SOURCE=1 POSTHOG_CLI_DOTENV_FILE="${SRCROOT}/.env" "${BUILD_DIR%/Build/*}/SourcePackages/checkouts/posthog-ios/build-tools/upload-symbols.sh"`
+ - CocoaPods: `POSTHOG_INCLUDE_SOURCE=1 POSTHOG_CLI_DOTENV_FILE="${SRCROOT}/.env" "${PODS_ROOT}/PostHog/build-tools/upload-symbols.sh"`
+ Copy the invocation verbatim — the `POSTHOG_INCLUDE_SOURCE=1` and `POSTHOG_CLI_DOTENV_FILE` prefixes HAVE to be there. This needs a recent `posthog-cli` (older ones silently ignore `POSTHOG_CLI_DOTENV_FILE`); the PostHog wizard installs it for you, so do not run `npm install -g` yourself.
+- **Android (Gradle)** Android uploads **ProGuard/R8 mapping files**, not source maps. Apply the `com.posthog.android` Gradle plugin on the **app module's** `build.gradle(.kts)` (never the root project), per the reference — the plugin hooks the build and uploads automatically, do not hand-roll a `posthog-cli` step. Gotchas:
+ 1. The plugin only hooks minified variants — if the release build type has `isMinifyEnabled = false`, set it to `true` (keep the existing `proguardFiles` line) or nothing is uploaded.
+ 2. The upload shells out to `posthog-cli` on the `PATH` (v0.7.4+); the PostHog wizard installs it for you, so do not run `npm install -g` yourself.
+ 3. The Gradle plugin is versioned separately from the `posthog-android` SDK — never reuse the SDK version in `id("com.posthog.android") version "…"`.
+- **Go** Go uploads **native debug symbols**, not source maps, and there is no inject step — the binary's identity (GNU build ID on Linux, Mach-O UUID on macOS) links frames to the uploaded symbols. The upload is a standalone CLI step after the build: `posthog-cli --dotenv-file .env symbol-sets upload --directory ` (add `--include-source` so PostHog can show source context around frames). Wire it into the same script/pipeline that produces the production binary — every build gets its own identity, so re-upload for each deployed build. The wizard pre-installs `posthog-cli` for you, so do not run `npm install -g` yourself. Gotchas:
+ 1. On Linux, Go emits no GNU build ID by default — build with `go build -ldflags="-B gobuildid"`. The flag matters at runtime too, not only for upload: without it the SDK can't identify the running binary and falls back to plain runtime-resolved frames.
+ 2. On macOS, disable DWARF compression instead: `go build -ldflags="-compressdwarf=false"` — symbolication can't read the compressed form (the Mach-O UUID identity is automatic).
+ 3. Never build with `-ldflags="-s"` or `-ldflags="-w"` (they strip the DWARF, leaving nothing to upload), and avoid `-trimpath` (it rewrites the source paths `--include-source` reads from).
+ 4. Requires posthog-go 1.22.0+ — older SDKs never emit the instruction addresses and `$debug_images` server-side symbolication needs, so uploaded symbols would sit unused. If go.mod pins an older version, upgrade it as part of this step: `go get github.com/posthog/posthog-go@latest && go mod tidy`.
+ 5. Windows binaries aren't supported yet — the SDK falls back to plain runtime frames there.
+- **Rust (Cargo)** Rust uploads **native debug symbols**, not source maps, and there is no inject step — the build ID baked into the binary links frames to the uploaded symbols. The upload is a standalone CLI step after the build: `posthog-cli --dotenv-file .env symbol-sets upload --directory target/release` (add `--include-source` so PostHog can show source context around frames). Wire it into the same script/pipeline that produces the production binary — each build has its own build ID, so symbols must be re-uploaded for every deployed build. The wizard pre-installs `posthog-cli` for you, so do not run `npm install -g` yourself. Gotchas:
+ 1. Release builds omit debug info by default — set `debug = "line-tables-only"` under `[profile.release]` in `Cargo.toml` (enough for file, line, and inline resolution), per the reference.
+ 2. On macOS also set `split-debuginfo = "packed"` in the same profile — the default leaves debug info in intermediate object files and no `.dSYM` bundle is produced for the CLI to upload.
+ 3. If the profile sets `strip` explicitly, set it to `"none"` — a stripped binary leaves nothing to upload.
+ 4. In a Cargo **workspace**, `[profile.*]` settings are only honored in the workspace root `Cargo.toml` — put the debug-info profile there, not in a member crate — and the build output is the workspace-level `target/release`, so point the upload `--directory` at that. Resolve the root with `cargo locate-project --workspace --message-format plain` (prints the root manifest path); the gitignored `.env` belongs next to that root manifest too.
+- **Next.js / Nuxt / Angular** Use the framework's documented source-map upload integration from the reference; these own their build pipeline, so configure upload there rather than bolting on a separate CLI step.
+- **React Native (Expo)** Per the reference: add the `posthog-react-native/expo` plugin entry to `plugins` in `app.json`, and switch `metro.config.js` to `getPostHogExpoConfig` from `posthog-react-native/metro`. The reference badges **native crash symbolication** as *optional* — here it is not: enable `uploadNativeSymbols` with source inclusion on the plugin entry.
+ Gotchas:
+ 1. The PostHog wizard installs `posthog-cli` for you — do not run `npm install -g` yourself.
+ 2. You **must** also enable native crash autocapture (`errorTracking.autocapture.nativeCrashes`) in the SDK setup and install the `@posthog/react-native-plugin` package it depends on — per the reference.
+- **Flutter** One upload path per platform directory present (`web/`, `android/`, `ios/`) — wire every one that exists. There is no Dart-level upload.
+ - **Web** `flutter build web --source-maps`, then `posthog-cli sourcemap process --directory build/web` as a post-build step.
+ - **Android** Follow the **Android (Gradle)** bullet above, but on `android/app/build.gradle.kts` (never `android/build.gradle.kts`). Flutter's `android/settings.gradle.kts` owns plugin versions: declare `id("com.posthog.android") version "" apply false` there, then apply it versionless in the app module. Skip that bullet's `isMinifyEnabled` step — Flutter always shrinks release builds.
+ - **iOS** Follow the **iOS (Xcode)** bullet above, on the **Runner** target in `ios/Runner.xcworkspace`. Flutter is always CocoaPods: `${PODS_ROOT}/PostHog/build-tools/upload-symbols.sh`.
+
+ Set `captureNativeExceptions = true` in `PostHogConfig.errorTrackingConfig` — it defaults to `false`, and while it's off the native SDKs capture nothing to symbolicate.
+
+### Make credentials available at build time
+
+The upload credentials must be readable **by the build pipeline at build time**, not merely present in a `.env` file. Whether `.env` is auto-loaded depends on the technology.
+
+#### Tips
+- **Auto-loads `.env`**: Next.js, Nuxt and similar frameworks read `.env` into the build for you — nothing extra to do.
+- **Vite is a partial exception**: it auto-loads `.env` into `import.meta.env` for client code (only `VITE_`-prefixed vars), but does **not** put vars in `process.env` for your config to read. The upload credentials (`POSTHOG_*`, not `VITE_`-prefixed) are read when the plugin is constructed, so load them yourself — see the Vite example below.
+- **Does NOT auto-load `.env`**: Rollup, plain webpack, and plain Node scripts. Load it explicitly — add `dotenv` (`require('dotenv').config()`, or `import 'dotenv/config'` for ESM) at the top of the bundler/config file.
+- **Separate-process gotcha**: if `posthog-cli sourcemap process` runs as its own `package.json` step (after the bundler), the CLI call is a **separate child process** and will *not* see env vars a loader set inside the bundler config. Point the CLI at the file directly: `posthog-cli --dotenv-file sourcemap process …` (the flag goes before the subcommand).
+- **`process` authenticates from the start.** `posthog-cli sourcemap process` resolves credentials before it injects chunk IDs — the inject phase needs them too, not just the upload — and fails without them. Always pass `--dotenv-file` to the `process` invocation. (It can still appear to work if the developer once ran `posthog-cli login`, which leaves credentials in `~/.posthog` — that won't exist in CI or on a teammate's machine.)
+- **iOS / Xcode** No loader — the Run Script phase's `POSTHOG_CLI_DOTENV_FILE="${SRCROOT}/.env"` prefix points posthog-cli at the gitignored `.env`. `POSTHOG_CLI_HOST` is the API host (`https://us.posthog.com`), never the `*.i.posthog.com` ingestion host.
+- **Android / Gradle** Gradle does not read `.env` — bridge it in the app module's build script (see the Android example). Unset properties fall back to real `POSTHOG_CLI_*` environment variables, so the same wiring works in CI. The host var follows the same API-host rule as iOS above.
+- **React Native (Expo)** Add `"dotenvFile": ".env"` to the `posthog-react-native/expo` plugin entry's options in `app.json` (needs posthog-react-native >= 4.60.0 — bump the package if older). No Xcode or Gradle wiring needed — the plugin handles the native hooks. In CI, set the `POSTHOG_CLI_*` values as job secrets instead. The host var follows the same API-host rule as iOS above.
+- **Flutter** One gitignored `.env` at the Flutter project root. Both native sub-projects sit one level down, so they reach *up* for it:
+ - Web: `posthog-cli --dotenv-file .env sourcemap process --directory build/web` (flag goes **before** the subcommand).
+ - Android: `rootProject.file("../.env")` — Gradle's root project is `android/`, not the Flutter root.
+ - iOS: `POSTHOG_CLI_DOTENV_FILE="${SRCROOT}/../.env"` — `SRCROOT` is `ios/`.
+- **Go / Rust** The upload is always a standalone `posthog-cli` step after the compiler runs, so the separate-process rule applies — pass the dotenv file explicitly (flag before the subcommand): `posthog-cli --dotenv-file .env symbol-sets upload --directory