Web
instrument-repo - Claude MCP Skill
Add observability to any repo: Sentry (errors), PostHog (analytics), Helicone (LLM costs). Auto-detects language/framework. Creates Sentry project via MCP. Installs SDKs, writes config, updates .env.example, opens PR. Supports: Next.js, Node/Express/Hono, Go, Python, Swift, Rust, React Native.
SEO Guide: Enhance your AI agent with the instrument-repo tool. This Model Context Protocol (MCP) server allows Claude Desktop and other LLMs to add observability to any repo: sentry (errors), posthog (analytics), helicone (llm costs). auto-dete... Download and configure this skill to unlock new capabilities for your AI workflow.
Documentation
SKILL.md# /instrument-repo
Add production observability to a repository. Detects stack, installs SDKs, writes config, opens PR.
## Shared Config
```
SENTRY_ORG=misty-step
SENTRY_TEAM=misty-step
POSTHOG_PROJECT_ID=293836
POSTHOG_HOST=https://us.i.posthog.com
```
All repos share ONE PostHog project (segmented by events). Each repo gets its OWN Sentry project.
## Detection
Before instrumenting, detect what we're working with:
```bash
# Language detection
[ -f package.json ] && echo "typescript"
[ -f go.mod ] && echo "go"
[ -f pyproject.toml ] || [ -f setup.py ] && echo "python"
[ -f Package.swift ] && echo "swift"
[ -f Cargo.toml ] && echo "rust"
# Framework detection (TypeScript)
grep -q '"next"' package.json 2>/dev/null && echo "nextjs"
grep -q '"hono"' package.json 2>/dev/null && echo "hono"
grep -q '"express"' package.json 2>/dev/null && echo "express"
grep -q '"react-native"' package.json 2>/dev/null && echo "react-native"
# LLM usage detection (for Helicone)
grep -rq '@ai-sdk\|openai\|anthropic\|@google/genai' package.json src/ lib/ app/ 2>/dev/null && echo "has-llm"
grep -rq 'openai\|anthropic\|langchain' *.go cmd/ internal/ 2>/dev/null && echo "has-llm"
grep -rq 'openai\|anthropic\|langchain' *.py src/ 2>/dev/null && echo "has-llm"
# Existing instrumentation
grep -q '@sentry' package.json 2>/dev/null && echo "has-sentry"
grep -q 'posthog' package.json 2>/dev/null && echo "has-posthog"
grep -rq 'helicone' src/ lib/ app/ 2>/dev/null && echo "has-helicone"
```
## Per-repo Workflow
```
1. cd ~/Development/$REPO
2. Detect language, framework, LLM usage, existing instrumentation
3. git fetch origin && git checkout -b infra/observability origin/main (or master)
4. Create Sentry project if needed → mcp__sentry__create_project
5. Install packages (language-specific)
6. Write/update config files from templates
7. Update .env.example
8. Typecheck/build to verify
9. git add <specific files> && git commit
10. git push -u origin infra/observability
11. gh pr create with structured body
```
## What to Add (Decision Matrix)
| Condition | Sentry | PostHog | Helicone |
|-----------|--------|---------|----------|
| Any app/service | YES | — | — |
| User-facing web app | YES | YES | — |
| Has LLM SDK imports | YES | maybe | YES |
| CLI tool | YES | NO | maybe |
| GitHub Action / lib | NO | NO | NO |
## Sentry Sampling Rates
Cost-conscious defaults (5k errors/mo free tier):
```
tracesSampleRate: 0.1 # 10% of transactions
replaysSessionSampleRate: 0 # Don't record sessions by default
replaysOnErrorSampleRate: 1.0 # Always replay on error
```
## Templates
### Next.js → `templates/nextjs/`
Files to create:
- `sentry.client.config.ts` — Client-side Sentry init
- `sentry.server.config.ts` — Server-side Sentry init
- `sentry.edge.config.ts` — Edge runtime Sentry init (same as server)
- `instrumentation.ts` — Next.js instrumentation hook
- `lib/sentry.ts` — Shared Sentry config factory with PII scrubbing
- `components/posthog-provider.tsx` — PostHog React provider
- `components/posthog-pageview.tsx` — Route-aware pageview tracking
- `lib/posthog.ts` — PostHog client init + helpers
Install: `pnpm add @sentry/nextjs posthog-js posthog-node`
Next.js config: wrap with `withSentryConfig()` in `next.config.ts`
PostHog `/ingest` rewrite in `next.config.ts`:
```typescript
async rewrites() {
return [
{ source: "/ingest/static/:path*", destination: "https://us-assets.i.posthog.com/static/:path*" },
{ source: "/ingest/:path*", destination: "https://us.i.posthog.com/:path*" },
{ source: "/ingest/decide", destination: "https://us.i.posthog.com/decide" },
];
},
```
### Node.js (Express/Hono) → `templates/node/`
Files to create:
- `lib/sentry.ts` — Sentry init for Node
Install: `pnpm add @sentry/node`
Express: `Sentry.setupExpressErrorHandler(app)` after all routes
Hono: Import and init at app entry, use `onError` hook
### Go → `templates/go/`
Files to create:
- `internal/observability/sentry.go` — Sentry init + flush helper
Install: `go get github.com/getsentry/sentry-go`
### Python → `templates/python/`
Files to create:
- `observability.py` — Sentry init
Install: `pip install sentry-sdk` or add to `pyproject.toml`
### Swift → `templates/swift/`
Files to create:
- `SentrySetup.swift` — Sentry init via SPM
SPM dependency: `https://github.com/getsentry/sentry-cocoa`
PostHog SPM: `https://github.com/PostHog/posthog-ios`
### Rust → `templates/rust/`
Files to create:
- `src/sentry_init.rs` — Sentry guard init
Install: Add `sentry = "0.35"` to `Cargo.toml`
### React Native → `templates/react-native/`
Install: `pnpm add @sentry/react-native posthog-react-native`
### Helicone → `templates/helicone/`
Files to create:
- `lib/ai-provider.ts` — Helicone-proxied AI SDK provider
Pattern: Change `baseURL` on AI SDK provider to Helicone gateway, add auth + property headers.
## Commit Message
```
feat: add observability (Sentry [+ PostHog] [+ Helicone])
- Sentry: error tracking with PII-safe defaults
[- PostHog: product analytics with privacy masking]
[- Helicone: LLM cost tracking via gateway proxy]
- Updated .env.example with required variables
```
## PR Body
```markdown
## Summary
Add production observability to {repo}.
## Changes
- Sentry error tracking (DSN: `{dsn}`)
- PII scrubbing (emails, IPs, sensitive headers)
- Environment-aware (production/preview/development)
- Traces sample rate: 10%
[- PostHog product analytics
- Pageview tracking via `/ingest` proxy rewrite
- Privacy: `respect_dnt: true`, manual pageview capture]
[- Helicone LLM cost tracking
- Proxied through gateway for cost/latency monitoring
- Tagged with product name and environment]
- Updated `.env.example` with all required variables
## Required Env Vars
| Variable | Where | Value |
|----------|-------|-------|
| `NEXT_PUBLIC_SENTRY_DSN` | Vercel | `{dsn}` |
| `SENTRY_AUTH_TOKEN` | Vercel + GH Actions | org-level token |
[| `NEXT_PUBLIC_POSTHOG_KEY` | Vercel | project API key |]
[| `HELICONE_API_KEY` | Vercel (server) | Helicone API key |]
## Test Plan
- [ ] `pnpm build` passes
- [ ] Deploy to preview → check Sentry for test error
- [ ] Set env vars on Vercel production
[- [ ] Verify PostHog Live Events after deploy]
[- [ ] Verify Helicone dashboard shows tagged requests]
```
## Env Var Reference
| Variable | Scope | Notes |
|----------|-------|-------|
| `NEXT_PUBLIC_SENTRY_DSN` | Per-project | Unique per Sentry project |
| `SENTRY_DSN` | Per-project (server-only) | Same DSN, no NEXT_PUBLIC prefix |
| `SENTRY_AUTH_TOKEN` | Shared | For source map uploads |
| `SENTRY_ORG` | `misty-step` | Hardcode in config |
| `SENTRY_PROJECT` | Per-project | Matches Sentry project slug |
| `NEXT_PUBLIC_POSTHOG_KEY` | Shared | PostHog project API key |
| `NEXT_PUBLIC_POSTHOG_HOST` | `/ingest` | Via rewrite proxy |
| `HELICONE_API_KEY` | Shared (server-only) | Never expose client-side |
## Audit Mode
When `--audit` flag or repo already has instrumentation:
1. Check Sentry config against best practices (PII scrubbing, sampling rates, env detection)
2. Check PostHog config (respect_dnt, manual pageview, proxy rewrite)
3. Check Helicone config (product tag, environment tag, user-id)
4. Report findings, fix issues, open PR with fixes
## Anti-Patterns
- `tracesSampleRate: 1` — exhausts free tier instantly
- Missing PII scrubbing — privacy violation
- `sendDefaultPii: true` — leaks emails/IPs
- PostHog without `/ingest` rewrite — blocked by ad blockers
- Helicone API key in client-side code — key exposure
- Hardcoded DSN in code instead of env var — can't change per environment
- Missing `respect_dnt: true` on PostHog — privacy violationSignals
Information
- Repository
- phrazzld/claude-config
- Author
- phrazzld
- Last Sync
- 3/2/2026
- Repo Updated
- 3/1/2026
- Created
- 2/23/2026
Reviews (0)
No reviews yet. Be the first to review this skill!
Related Skills
pr-status
PR Status
upgrade-nodejs
Upgrading Bun's Self-Reported Node.js Version
cursorrules
CrewAI Development Rules
cn-check
Install and run the Continue CLI (`cn`) to execute AI agent checks on local code changes. Use when asked to "run checks", "lint with AI", "review my changes with cn", or set up Continue CI locally.
Related Guides
Bear Notes Claude Skill: Your AI-Powered Note-Taking Assistant
Learn how to use the bear-notes Claude skill. Complete guide with installation instructions and examples.
Mastering tmux with Claude: A Complete Guide to the tmux Claude Skill
Learn how to use the tmux Claude skill. Complete guide with installation instructions and examples.
OpenAI Whisper API Claude Skill: Complete Guide to AI-Powered Audio Transcription
Learn how to use the openai-whisper-api Claude skill. Complete guide with installation instructions and examples.