From posthog-pack
Installs PostHog SDKs for browser JS, Node.js server, Python; configures project/personal API keys and env vars for new integrations.
How this skill is triggered — by the user, by Claude, or both
Slash command
/posthog-pack:posthog-install-authThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Install PostHog SDKs and configure authentication. PostHog uses two key types: **Project API Key** (`phc_...`) for event capture (public, safe for frontend) and **Personal API Key** (`phx_...`) for private API endpoints (never expose to clients).
Install PostHog SDKs and configure authentication. PostHog uses two key types: Project API Key (phc_...) for event capture (public, safe for frontend) and Personal API Key (phx_...) for private API endpoints (never expose to clients).
set -euo pipefail
# Browser SDK (posthog-js)
npm install posthog-js
# Node.js server SDK (posthog-node)
npm install posthog-node
# Python SDK
pip install posthog
# .env (add to .gitignore — never commit)
NEXT_PUBLIC_POSTHOG_KEY=phc_your_project_api_key # Safe for frontend
POSTHOG_HOST=https://us.i.posthog.com # US Cloud (or eu.i.posthog.com)
POSTHOG_PERSONAL_API_KEY=phx_your_personal_key # Server-only, never expose
POSTHOG_PROJECT_ID=12345 # From project URL
// lib/posthog.ts
import posthog from 'posthog-js';
export function initPostHog() {
if (typeof window === 'undefined') return;
posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY!, {
api_host: process.env.NEXT_PUBLIC_POSTHOG_HOST || 'https://us.i.posthog.com',
capture_pageview: true, // Auto-capture $pageview
capture_pageleave: true, // Auto-capture $pageleave
autocapture: true, // Auto-capture clicks, inputs, form submits
persistence: 'localStorage+cookie',
loaded: (ph) => {
if (process.env.NODE_ENV === 'development') {
ph.debug(); // Logs all events to console
}
},
});
}
// lib/posthog-server.ts
import { PostHog } from 'posthog-node';
let client: PostHog | null = null;
export function getPostHog(): PostHog {
if (!client) {
client = new PostHog(process.env.NEXT_PUBLIC_POSTHOG_KEY!, {
host: process.env.POSTHOG_HOST || 'https://us.i.posthog.com',
flushAt: 20, // Send batch when 20 events queued
flushInterval: 10000, // Or every 10 seconds
personalApiKey: process.env.POSTHOG_PERSONAL_API_KEY, // Enables local flag eval
});
}
return client;
}
// CRITICAL: Flush before process exits (especially in serverless)
export async function shutdownPostHog() {
if (client) {
await client.shutdown();
client = null;
}
}
import posthog
import os
posthog.project_api_key = os.getenv('NEXT_PUBLIC_POSTHOG_KEY')
posthog.host = os.getenv('POSTHOG_HOST', 'https://us.i.posthog.com')
posthog.personal_api_key = os.getenv('POSTHOG_PERSONAL_API_KEY')
posthog.debug = os.getenv('NODE_ENV') == 'development'
# Capture an event
posthog.capture('user-123', 'my_event', {'property_key': 'value'})
import { getPostHog } from './posthog-server';
async function verifyPostHog() {
const ph = getPostHog();
ph.capture({
distinctId: 'test-setup',
event: 'posthog_setup_verified',
properties: { source: 'install-auth-skill' },
});
await ph.flush();
console.log('PostHog event sent — check Activity tab in app.posthog.com');
}
verifyPostHog();
| Key Type | Prefix | Use | Expose to Client? |
|---|---|---|---|
| Project API Key | phc_ | Capture events, evaluate flags | Yes (public) |
| Personal API Key | phx_ | Admin API, local flag eval, HogQL queries | Never |
| Region | Ingest Host | App Host |
|---|---|---|
| US Cloud | https://us.i.posthog.com | https://us.posthog.com |
| EU Cloud | https://eu.i.posthog.com | https://eu.posthog.com |
| Self-hosted | Your domain | Your domain |
| Error | Cause | Solution |
|---|---|---|
posthog.init ignored | Called server-side | Guard with typeof window !== 'undefined' |
| Events not appearing | Wrong API key prefix | Use phc_ project key for capture |
401 Unauthorized on API | Personal key expired/missing | Generate new key in Settings > Personal API Keys |
ECONNREFUSED | Wrong host URL | Verify US vs EU region in api_host |
| Module not found | SDK not installed | Run npm install posthog-js or npm install posthog-node |
node_modules or site-packages.env file with project and personal API keysAfter setup, proceed to posthog-hello-world for your first event capture.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin posthog-packAdd PostHog SDK integration to any application: install package, initialize client, set up provider, and identify users.
Generates minimal PostHog examples for event capture, identify, and feature flags using posthog-js (browser/React) and posthog-node (Node.js). For quick starts, testing, or learning SDK patterns.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.