skills/crash-analyst/SKILL.md
Parse and analyze crash reports from tools like Crashlytics or Sentry. Interpret iOS symbolication and Android ProGuard/R8 mappings, trace stack execution to find the root cause, and propose code-level fixes.
npx skillsauth add fatih-developer/fth-skills crash-analystInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A stack trace is a map to a bug, but on mobile, that map is often written in an obfuscated language. This skill interprets raw crash data (Crashlytics, Sentry, Bugsnag), identifies the true origin of the crash (which is often hidden deep in the trace), and provides actionable fixes.
Core principle: The top line of a stack trace is rarely the root cause. Follow the execution path.
1. Validate the Crash Report (Is it symbolicated? Is it complete?)
2. Isolate the Core Exception type and the Failing Thread
3. Trace the Stack (Find the highest point of *user* code)
4. Correlate with OS/Device/App Version context
5. Provide Root Cause and Mitigation
Before debugging, check if the report is readable.
a.b.c(), it is obfuscated. The developer needs to upload their ProGuard/R8 mapping.txt to their crash reporter.0x00000001bcdefg), it is unsymbolicated. The developer needs to upload the .dSYM file.Identify the type of crash:
Ignore the OS framework lines at the very top (e.g., android.app.ActivityThread.main or CoreFoundation).
Look at the metadata:
Translate the stack trace into plain English and provide the code block to fix it.
# 💥 Crash Analysis Report
## 🔍 Incident Summary
- **Exception:** `[e.g., java.lang.NullPointerException]`
- **Reason:** `[e.g., Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference]`
- **Affected OS/Devices:** `[e.g., Android 12+, All Manufacturers]`
## 🧵 Stack Trace Breakdown
The crash occurred in the `[Thread Name]` thread.
The origin point in your code is:
`com.myapp.utils.FormatHelper.formatNames(FormatHelper.kt:42)`
*Trace path:*
1. User clicked the "Save Profile" button (`ProfileFragment.kt:112`)
2. Formatter tried to parse the middle name.
3. The DB returns null instead of an empty string for missing middle names.
4. Calling `.length` on this null value caused the NPE.
## 🛠 Actionable Fix
### Fix: Safecall / Optional Chaining
Your `formatNames` function assumes the `middleName` parameter string will always be present. You must check for nullability.
**Code Fix:**
```kotlin
// Before (Crashing):
fun formatNames(first: String, middle: String, last: String) {
if (middle.length > 0) { ... }
}
// After (Safe):
fun formatNames(first: String, middle: String?, last: String) {
if (!middle.isNullOrEmpty()) { ... }
}
---
## When to Skip
- The User is asking about backend server crashes (use a standard backend debug skill).
---
## Guardrails
- **OOM Warnings:** If the exception is an OutOfMemoryError, immediately warn the user that the stack trace provided is likely misleading and they need to use a memory profiler (like Android Studio Profiler or Xcode Allocations) to find the actual leak.
- **Background vs Foreground:** Always check the app state. A crash that says "Cannot execute background task" means the OS killed the app for taking too long, not necessarily a logic error in the code itself.
---
## References
See `references/EXAMPLES.md` for a worked case.
tools
Create, optimize, critique, and structure prompts for AI systems. Use this skill whenever the user is designing or improving a prompt, system prompt, coding prompt, image prompt, evaluation rubric, agent prompt, workflow prompt, or MCP-oriented prompt package. Also use it when the user asks to turn vague AI behavior into a precise instruction set, tool policy, agent spec, or prompt architecture.
testing
Assumption-first architecture review skill to stress-test project plans and expose hidden risks.
testing
Enforce and manage DESIGN.md specifications, extract design systems from URLs, and combine design reasoning with token roles to prevent drift.
testing
Forces the agent to act with a Claude-like product mindset, prioritizing user journey, UX states, and visual quality before coding.