Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Mobile app analytics and crash reporting integration
.claude/skills/a5c-ai-mobile-analytics/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 54% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 79% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 30% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 89% | 0% |
| case-06 | ✓→✓ | = Same ✓ | 27% | 0% |
This skill provides comprehensive capabilities for mobile app analytics and crash reporting integration. It enables configuration of Firebase Analytics, Crashlytics, Mixpanel, Amplitude, and other analytics platforms.
bash - Execute Firebase CLI and SDK commandsread - Analyze analytics configurationswrite - Generate analytics event schemas and configurationsedit - Update analytics implementationsglob - Search for analytics filesgrep - Search for event tracking patternsmobile-analytics-setup.js - Analytics implementationfirebase-backend-integration.js - Firebase servicesmobile-performance-optimization.js - Performance monitoringswift// AppDelegate.swift import FirebaseCore import FirebaseAnalytics @main class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { FirebaseApp.configure() return true } } // Analytics Helper struct AnalyticsManager { static func logEvent(_ name: String, parameters: [String: Any]? = nil) { Analytics.logEvent(name, parameters: parameters) } static func setUserId(_ userId: String) { Analytics.setUserID(userId) } static func setUserProperty(_ value: String?, forName name: String) { Analytics.setUserProperty(value, forName: name) } static func logScreenView(screenName: String, screenClass: String) { Analytics.logEvent(AnalyticsEventScreenView, parameters: [ AnalyticsParameterScreenName: screenName, AnalyticsParameterScreenClass: screenClass ]) } }
kotlin// AnalyticsManager.kt class AnalyticsManager @Inject constructor( private val analytics: FirebaseAnalytics ) { fun logEvent(name: String, params: Map<String, Any>? = null) { analytics.logEvent(name, params?.toBundle()) } fun setUserId(userId: String?) { analytics.setUserId(userId) } fun setUserProperty(name: String, value: String?) { analytics.setUserProperty(name, value) } fun logScreenView(screenName: String, screenClass: String) { analytics.logEvent(FirebaseAnalytics.Event.SCREEN_VIEW) { param(FirebaseAnalytics.Param.SCREEN_NAME, screenName) param(FirebaseAnalytics.Param.SCREEN_CLASS, screenClass) } } } private fun Map<String, Any>.toBundle(): Bundle { return Bundle().apply { this@toBundle.forEach { (key, value) -> when (value) { is String -> putString(key, value) is Int -> putInt(key, value) is Long -> putLong(key, value) is Double -> putDouble(key, value) is Boolean -> putBoolean(key, value) } } } }
typescript// analytics/events.ts export const AnalyticsEvents = { // User Events USER_SIGNED_UP: 'user_signed_up', USER_LOGGED_IN: 'user_logged_in', USER_LOGGED_OUT: 'user_logged_out', // Feature Events FEATURE_USED: 'feature_used', ITEM_VIEWED: 'item_viewed', ITEM_ADDED_TO_CART: 'item_added_to_cart', PURCHASE_COMPLETED: 'purchase_completed', // Engagement Events SHARE_CLICKED: 'share_clicked', NOTIFICATION_RECEIVED: 'notification_received', NOTIFICATION_OPENED: 'notification_opened', } as const; export interface EventParameters { user_signed_up: { method: 'email' | 'google' | 'apple' }; item_viewed: { item_id: string; item_name: string; category: string }; purchase_completed: { transaction_id: string; value: number; currency: string }; }
firebase-mobile - Firebase servicesmobile-perf - Performance monitoring| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 16,721 | 16,773 | +0% | 1 | 1 | 0% | 3,415 | 4,337 | +27% | 0 | 0 | — |
case-02 | pass→pass | 15,586 | 11,072 | -29% | 1 | 1 | 0% | 2,560 | 3,335 | +30% | 0 | 0 | — |
case-03 | fail→pass | 11,330 | 10,448 | -8% | 1 | 1 | 0% | 2,193 | 3,373 | +54% | 0 | 0 | — |
case-04 | pass→pass | 11,912 | 21,917 | +84% | 1 | 1 | 0% | 2,598 | 4,907 | +89% | 0 | 0 | — |
case-05 | fail→fail | 12,260 | 11,806 | -4% | 1 | 1 | 0% | 2,428 | 3,775 | +55% | 0 | 0 | — |
case-06 | pass→pass | 8,332 | 4,618 | -45% | 1 | 1 | 0% | 1,704 | 2,172 | +27% | 0 | 0 | — |
case-07 | pass→pass | 13,059 | 11,905 | -9% | 1 | 1 | 0% | 2,446 | 3,559 | +46% | 0 | 0 | — |
case-08 | pass→pass | 12,585 | 10,917 | -13% | 1 | 1 | 0% | 2,345 | 3,482 | +48% | 0 | 0 | — |
case-09 | fail→fail | 14,266 | 14,628 | +3% | 1 | 1 | 0% | 3,056 | 4,710 | +54% | 0 | 0 | — |
case-10 | pass→pass | 18,723 | 11,925 | -36% | 1 | 1 | 0% | 2,819 | 3,601 | +28% | 0 | 0 | — |
case-11 | pass→pass | 8,686 | 9,938 | +14% | 1 | 1 | 0% | 1,712 | 2,854 | +67% | 0 | 0 | — |
case-12 | pass→pass | 15,963 | 13,781 | -14% | 1 | 1 | 0% | 2,372 | 3,747 | +58% | 0 | 0 | — |
case-13 | pass→pass | 11,319 | 12,764 | +13% | 1 | 1 | 0% | 2,067 | 3,751 | +81% | 0 | 0 | — |
case-14 | fail→pass | 16,767 | 16,310 | -3% | 1 | 1 | 0% | 2,342 | 4,192 | +79% | 0 | 0 | — |
case-15 | pass→pass | 18,678 | 20,734 | +11% | 1 | 1 | 0% | 3,360 | 5,486 | +63% | 0 | 0 | — |
case-16 | pass→pass | 20,685 | 27,401 | +32% | 1 | 1 | 0% | 3,498 | 5,610 | +60% | 0 | 0 | — |
case-17 | pass→pass | 10,227 | 7,068 | -31% | 1 | 1 | 0% | 1,857 | 2,504 | +35% | 0 | 0 | — |
case-18 | pass→pass | 13,072 | 13,425 | +3% | 1 | 1 | 0% | 2,212 | 3,733 | +69% | 0 | 0 | — |
case-19 | pass→pass | 8,795 | 7,710 | -12% | 1 | 1 | 0% | 1,668 | 2,767 | +66% | 0 | 0 | — |
case-20 | pass→pass | 7,963 | 5,962 | -25% | 1 | 1 | 0% | 1,590 | 2,349 | +48% | 0 | 0 | — |
case-21 | pass→pass | 7,955 | 7,299 | -8% | 1 | 1 | 0% | 1,309 | 2,612 | +100% | 0 | 0 | — |
case-22 | pass→pass | 7,765 | 8,442 | +9% | 1 | 1 | 0% | 1,513 | 2,735 | +81% | 0 | 0 | — |
case-23 | fail→fail | 8,543 | 5,465 | -36% | 1 | 1 | 0% | 1,608 | 2,337 | +45% | 0 | 0 | — |
case-24 | pass→pass | 15,587 | 13,404 | -14% | 1 | 1 | 0% | 3,006 | 4,113 | +37% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted. The headline lift of +8 percentage points is the difference between those two pass rates over the 24 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.