Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generates protocol-based analytics infrastructure with swappable providers (TelemetryDeck, Firebase, Mixpanel). Use when user wants to add analytics, track events, or set up telemetry.
.claude/skills/rshankras-analytics-setup/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-09 | ✗→✓ | ▲ Improved | -17% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -17% | 0% |
| case-11 | ✗→✓ | ▲ Improved | -2% | 0% |
| case-05 | ✓→✗ | ▼ Worse | 46% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 29% | 0% |
Generate a protocol-based analytics infrastructure that makes it easy to swap providers without changing app code.
Use this skill when the user:
The generated code uses a protocol-based architecture:
swift// Your app uses the protocol analytics.track(.buttonTapped("subscribe")) // Swap providers by changing ONE line: let analytics: AnalyticsService = TelemetryDeckAnalytics() // or FirebaseAnalytics()
Search for existing analytics:
Glob: **/*Analytics*.swift, **/*Telemetry*.swift
Grep: "protocol.*Analytics" or "TelemetryDeck" or "Firebase"If found, ask user:
Ask user via AskUserQuestion:
Always generate these files:
AnalyticsService.swift - Protocol (never changes)AnalyticsEvent.swift - Event definitions (app-specific)NoOpAnalytics.swift - For testing/privacy modeBased on user selection:
TelemetryDeckAnalytics.swiftFirebaseAnalytics.swiftMixpanelAnalytics.swiftFor SwiftUI apps:
AnalyticsServiceKey.swift - Environment key for dependency injectionCheck project structure:
Sources/ exists → Sources/Analytics/App/ exists → App/Analytics/Analytics/After generation, provide:
Sources/Analytics/
├── AnalyticsService.swift # Protocol (stable interface)
├── AnalyticsEvent.swift # Your app's events
├── Providers/
│ ├── NoOpAnalytics.swift # Testing/privacy
│ └── [Provider]Analytics.swift # Selected provider(s)
└── AnalyticsServiceKey.swift # SwiftUI Environment (optional)App Entry Point:
swift@main struct MyApp: App { // Choose your provider private let analytics: AnalyticsService = TelemetryDeckAnalytics(appID: "YOUR-APP-ID") init() { analytics.configure() } var body: some Scene { WindowGroup { ContentView() .environment(\.analytics, analytics) } } }
Tracking Events:
swiftstruct ContentView: View { @Environment(\.analytics) private var analytics var body: some View { Button("Subscribe") { analytics.track(.buttonTapped("subscribe")) } } }
TelemetryDeck:
swift// Package.swift .package(url: "https://github.com/TelemetryDeck/SwiftClient", from: "1.0.0")
Firebase:
swift// Package.swift .package(url: "https://github.com/firebase/firebase-ios-sdk", from: "10.0.0") // Also requires GoogleService-Info.plist
To switch providers:
swift// Before private let analytics: AnalyticsService = TelemetryDeckAnalytics(...) // After private let analytics: AnalyticsService = FirebaseAnalytics()
NoOpAnalytics() in tests and previewsOther measured skills in the registry, with their headline benchmark lift.