Agent skill

Fix Crash

by MartinStyk in MartinStyk/apk-analyzer

A skill your agent uses to fix a specific production crash or non-fatal — pulling its Crashlytics data, finding the linked GitHub issue, root-causing it, reproducing it, fixing it, and verifying the…

GPL-3.0Auto-check passedMobile

Install Fix Crash

skills CLI
$ npx skills add MartinStyk/apk-analyzer --skill fix-crash -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install MartinStyk/apk-analyzer fix-crash --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/MartinStyk/apk-analyzer.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/fix-crash .claude/skills/fix-crash && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
fix-crash
GitHub stars
369
Token cost
~2.5k tokens
SKILL.md length
1,337 words
Files
1
Skills in repo
18
Repo updated
First seen
Licence
GPL-3.0

At a glance

A skill your agent uses to fix a specific production crash or non-fatal — pulling its Crashlytics data, finding the linked GitHub issue, root-causing it, reproducing it, fixing it, and verifying the…

  • Works in 8 steps: Resolve the crash and its GitHub issue → Pull everything the platform knows → Root cause it in this repo → …
  • Fix a specific production crash
  • SKILL.md covers Step 1 — Resolve the crash and…, Step 2 — Pull everything the…, Step 3 — Root cause it in this… and Step 4 — Reproduce before fixing, plus 5 more sections
  • Calls adb, gh and git

What it does

Fix Crash is an agent skill from MartinStyk/apk-analyzer. Use to fix a specific production crash or non-fatal — pulling its Crashlytics data, finding the linked GitHub issue, root-causing it, reproducing it, fixing it, and verifying the fix without breaking stored-data compatibility. Triggered by phrases like "fix this crash", "fix issue

Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Mobile. It works with GitHub. The repository describes itself as: The most downloaded APK analysis app on Google Play. Detailed reports of every app on your device. No root, no ads, nothing leaves the phone. The licence is GPL-3.0.

When your agent uses it

  • Fix a specific production crash
  • Non-fatal — pulling its Crashlytics data
  • Finding the linked GitHub issue
  • Root-causing it

Example prompts

  • “fix this crash”
  • “/fix-crash”

Workflow steps

8 steps, taken from the step headings in SKILL.md.

  1. Resolve the crash and its GitHub issue
  2. Pull everything the platform knows
  3. Root cause it in this repo
  4. Reproduce before fixing
  5. Fix it
  6. Do not break stored data
  7. Verify
  8. Close the loop

What it can do on your machine

Read from SKILL.md and the folder at commit d807559. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • adb
    • gh
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use gh and git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Fix Crash loads about 2.5k tokens when it runs. Until then it costs about 73 tokens; SKILL.md has 1,337 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~73
When it runs · the whole SKILL.md, loaded when a task matches
~2.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from MartinStyk/apk-analyzer at commit d807559, republished under its GPL-3.0 licence (© MartinStyk). 1,337 words, ~2,484 tokens.

Download SKILL.mdSave it as .claude/skills/fix-crash/SKILL.md (or your agent's skills folder).
name
fix-crash
description
Use to fix a specific production crash or non-fatal — pulling its Crashlytics data, finding the linked GitHub issue, root-causing it, reproducing it, fixing it, and verifying the fix without breaking stored-data compatibility. Triggered by phrases like "fix this crash", "fix issue

Skill: Root-Cause, Reproduce, and Fix a Production Crash

Takes one Crashlytics issue (or the GitHub issue tracking it) from symptom to a verified fix, without breaking users whose stored data was written by an older release.

Finding which crashes to work on is a different skill: triage-crashes. This one fixes a single known crash. Read triage-crashes for how the Crashlytics MCP bridge works — this skill uses the same scripts/crashlytics.js and the same appId.

Step 1 — Resolve the crash and its GitHub issue

You may be given a Crashlytics issue id, a console URL, a GitHub issue number, or a description. Get to a (crashlyticsIssueId, githubIssueNumber) pair, where either may be absent:

GivenDo
Crashlytics id or console URLcrashlytics_list_notes for a github.com/.../issues/<n> link; if none, gh issue list --state all --limit 200 --search "<id>"
GitHub issue numbergh issue view <n> --comments and find the Crashlytics id in the body or comments
A description onlyRun the triage-crashes report queries and match on the exception and frame

The Crashlytics id is the join key in both directions — issues filed by triage-crashes carry it in their body and a note pointing back. If you find a GitHub issue with no Crashlytics note, add the note now with crashlytics_create_note.

If no GitHub issue exists, file one with create_issue (label bug) using the triage-crashes body format before starting work, so the fix has something to close.

Step 2 — Pull everything the platform knows

json
[
  { "name": "crashlytics_get_issue", "arguments": { "appId": "1:636588470688:android:c27a676c8deb5eb0", "issueId": "<id>" } },
  { "name": "crashlytics_list_events", "arguments": { "appId": "...", "pageSize": 5, "filter": { "issueId": "<id>" } } },
  { "name": "crashlytics_get_report", "arguments": { "appId": "...", "report": "topAndroidDevices", "pageSize": 10, "filter": { "issueId": "<id>" } } },
  { "name": "crashlytics_get_report", "arguments": { "appId": "...", "report": "topOperatingSystems", "pageSize": 10, "filter": { "issueId": "<id>" } } },
  { "name": "crashlytics_get_report", "arguments": { "appId": "...", "report": "topVersions", "pageSize": 10, "filter": { "issueId": "<id>" } } }
]

Read several events, not just one. One stack tells you where it broke; several tell you what the occurrences share. Look at each event's breadcrumbs, custom keys, and device state.

The distribution is evidence, and it usually names the root cause on its own:

PatternWhat it means
One OS version, or everything below/above an API levelAn API availability or behaviour change — check the runtime SDK guard around that call or use a backward-compatible API
One manufacturerAn OEM-modified framework; often needs a defensive path, not a "correct" fix
Starts exactly at one app versionA regression — git log between that tag and the previous one
Spread evenly across everythingLogic or state bug, not environmental

firstSeenVersion plus git log <prev-tag>..<that-tag> is the fastest route to a regression's cause.

Step 3 — Root cause it in this repo

Find the deepest sk.styk.martin.apkanalyzer.* frame, map its package to a module (see AGENTS.md), read that module's AGENTS.md, then read the actual code. Then state the root cause as one sentence naming the specific condition — "ON CONFLICT upsert syntax requires SQLite 3.24, which is absent below API 30", not "a database error".

Do not start editing until you can state that sentence. If the evidence doesn't support one, say so and pull more events rather than guessing.

Watch for these, which this codebase has actually produced:

  • A framework symbol that doesn't exist on older API levels (NoSuchMethodError, NoSuchFieldError) — the compile-time SDK has it, the runtime device doesn't.
  • Raw SQL in a Room @Query using syntax newer than the device's bundled SQLite.
  • A LazyColumn item key that isn't unique across the whole list.
  • A SecurityException from a package the caller can't inspect on newer Android.

Step 4 — Reproduce before fixing

An unreproduced fix is a guess. Reproduce in the cheapest way that actually exercises the failure:

  1. Match the environment. If the distribution points at an API level, start an emulator at that exact level — a fix verified only on your daily driver proves nothing about an API-29 crash. Use the run-app skill to build, install and launch, and navigate-app-adb to drive to the screen.
  2. Reach the state. Breadcrumbs and custom keys on the event tell you what the user did. For a crash needing specific stored data, seed it via the app's own flows, or with adb shell against the app's database — never by adding production code that fabricates the state.
  3. Confirm the same stack. adb logcat must show the same exception at the same frame. A different crash on the same screen is a different bug.

If it genuinely can't be reproduced locally (OEM-specific, a device you don't have), say so explicitly, and compensate: write the fix so the failing path is provably impossible (a version guard, a supported API) rather than probabilistically better, and prove the guard with the API level you can run.

Never add a debug hook, test-only flag, or logging to production code to force a repro. Remove any temporary scaffolding before finishing.

Step 5 — Fix it

Follow AGENTS.md and the module's own AGENTS.md. Beyond those:

  • Fix the cause, not the symptom. A try/catch around a crash that leaves the feature silently broken is not a fix — AGENTS.md forbids hiding errors behind broad exception handling. Catching is only correct when the exception is genuinely expected and the app has a real answer for it.
  • Prefer the platform-supported API over a version-guarded fork when one exists.
  • If the same broken pattern appears elsewhere, fix every occurrence — grep for it. Shipping a fix for one of three identical DAOs means two more crash reports next release.
Show full SKILL.md (499 more words)Show less

Step 6 — Do not break stored data

Mandatory whenever the fix touches persistence — Room entities, DAOs, migrations, DataStore, SharedPreferences, or any serialized model. Users upgrade in place; their existing data was written by the old code.

  • Schema change → a Room migration is required. Never bump version without one, and never resort to fallbackToDestructiveMigration — that silently deletes user data.
  • A migration already shipped → it is immutable. Users have run it. Add a new one; never edit it.
  • Entity/serialized model field change → adding a nullable field with a default is safe. Removing or renaming a field, or narrowing a type, breaks old rows — migrate them.
  • DataStore / preferences key change → old keys persist. Either keep reading the old key, or migrate the value on first read. Silently ignoring it resets the user's settings.
  • Query-only fix (this is the common case) → confirm the new SQL reads the existing schema correctly, including rows written before the fix.

Then verify with an actual upgrade, not a clean install: install the previous release, use the app enough to write data, install the fixed build over it without uninstalling, and confirm the old data still reads correctly and the crash is gone. adb install -r preserves data; adb uninstall destroys the evidence and turns this check into theatre.

Step 7 — Verify

  1. Re-run the repro from Step 4 on the same emulator/API level. The crash must be gone and the feature must actually work — not just not crash.
  2. Check the neighbouring paths the change touched.
  3. Build: ./gradlew :<module>:compileDebugKotlin, then ./gradlew spotlessApply before committing.
  4. Check by hand for imports left behind by deleted code — spotlessCheck doesn't flag those.
  5. For any visual change, look at it on a device; a clean compile proves nothing about layout.

Step 8 — Close the loop

  • Commit referencing the GitHub issue (Fixes #<n>). Author as the human user only — see the git-commit-author skill.
  • Comment on the GitHub issue with the root cause, how it was reproduced, what the fix does, and how it was verified — including the upgrade check if persistence was touched.
  • Add a Crashlytics note recording the fix and the commit/PR.
  • Do not close the Crashlytics issue with crashlytics_update_issue. It is fixed when a release containing the fix stops producing events, which you can't know yet. Note it and move on.

Verification

  • Crashlytics issue and GitHub issue are linked in both directions
  • Multiple events read, not just one sample
  • Device/OS/version distribution examined for the environmental pattern
  • Root cause stated in one sentence naming the specific condition
  • Reproduced on an environment matching the crash — or the inability stated explicitly, with a guard-based fix compensating
  • Fix addresses the cause; no exception swallowed to silence it
  • Grepped for the same pattern elsewhere and fixed every occurrence
  • Persistence changes carry a migration; existing keys/fields still read
  • Verified by upgrading over the previous release, not by a clean install
  • Crash gone on re-run and the feature actually works
  • spotlessApply run; no orphaned imports
  • GitHub issue commented, Crashlytics note added, Crashlytics state left alone

© MartinStyk, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/fix-crash of MartinStyk/apk-analyzer.

Open the folder on GitHubat commit d807559

Compare with similar skills

Fix Crash next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Fix Crash compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Fix Crash this skillMartinStyk/apk-analyzer369—~2.5kAutomated safety check: PassGPL-3.0
Maa Issue Log AnalysisMaaAssistantArknights/MaaAssistantArknights24k—~4kAutomated safety check: PassAGPL-3.0
Workbuddy Skin Studiocdredfox/workbuddy-skin-studio198—~1.5kAutomated safety check: PassMIT
Frb PR Chain Splitfzyzcjy/flutter_rust_bridge5.4k—~1.9kAutomated safety check: PassMIT
TriageK9i-0/ccpocket1.1k—~334Automated safety check: PassMIT
PRn0an/VivaDicta131—~1.2kAutomated safety check: PassMIT

Similar skills

  • Maa Issue Log Analysis

    MaaAssistantArknights/MaaAssistantArknights

    分析 MaaAssistantArknights 上游仓库公开 Issue(https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/...

    24k GitHub stars~4k tokensUpdated yesterday
    MobileAuto-check passed
  • Workbuddy Skin Studio

    cdredfox/workbuddy-skin-studio

    Apply a reversible theme/skin to the WorkBuddy desktop app (Tencent AI office agent) via local Chromium DevTools Protocol (CDP) injection.

    198 GitHub stars~1.5k tokensUpdated 2 mo ago
    MobileAuto-check passed
  • Frb PR Chain Split

    fzyzcjy/flutter_rust_bridge

    A skill your agent uses when an FRB PR contains independently landable work that should be extracted into predecessor PRs and connected as a GitHub PR chain without wasting full automatic CI.

    5.4k GitHub stars~1.9k tokensUpdated 2 days ago
    MobileAuto-check passed
  • Triage

    K9i-0/ccpocket

    GitHub Issueの対応判断と、PRの調査・手直し・検証・マージを行う。PR指定時は取り込みまで進めるのが既定. An agent skill from K9i-0/ccpocket.

    1.1k GitHub stars~334 tokensUpdated 7 days ago
    MobileAuto-check passed
  • PR

    n0an/VivaDicta

    Create a GitHub Pull Request in Claude Code with Claude and Codex review requests and built-in polling workflow

    131 GitHub stars~1.2k tokensUpdated 4 days ago
    MobileAuto-check passed
  • Prcdx

    n0an/VivaDicta

    Create a GitHub Pull Request in Codex with Claude and Codex review requests and standard GitHub polling

    131 GitHub stars~1.4k tokensUpdated 4 days ago
    MobileAuto-check passed

More from MartinStyk/apk-analyzer

All 18 skills in this repo
  • Triage Crashes

    MartinStyk/apk-analyzer

    A skill your agent uses to review production Crashlytics crashes and non-fatals for the latest release and file a GitHub issue for each one that isn't tracked yet.

    369 GitHub stars~4.3k tokensUpdated 4 days ago
    Auto-check passed
  • Analyze CI Failure

    MartinStyk/apk-analyzer

    A skill your agent uses to check GitHub Actions build status or diagnose why a workflow run failed and propose a fix.

    369 GitHub stars~1.9k tokensUpdated 4 days ago
    Auto-check passed
  • Capture App Flow Media

    MartinStyk/apk-analyzer

    A skill your agent uses to record or convert ApkAnalyzer app flows into screenshots or GIFs for the README or product docs.

    369 GitHub stars~1.7k tokensUpdated 4 days ago
    Auto-check passed
  • Create Compose Component

    MartinStyk/apk-analyzer

    A skill your agent uses when creating a new reusable Compose UI component that should live in core:ui-library.

    369 GitHub stars~885 tokensUpdated 4 days ago
    Auto-check passed
  • Create Core Module

    MartinStyk/apk-analyzer

    A skill your agent uses when creating a new core or shared library module for domain logic, data access, repositories, managers, or utilities.

    369 GitHub stars~1.7k tokensUpdated 4 days ago
    Auto-check passed
  • Create Feature Module

    MartinStyk/apk-analyzer

    A skill your agent uses when creating a new feature module, screen, or feature area.

    369 GitHub stars~1.6k tokensUpdated 4 days ago
    Auto-check passed

Works with

Categories

Questions about Fix Crash

What does Fix Crash do?

A skill your agent uses to fix a specific production crash or non-fatal — pulling its Crashlytics data, finding the linked GitHub issue, root-causing it, reproducing it, fixing it, and verifying the…. Fix Crash is an agent skill from MartinStyk/apk-analyzer. Use to fix a specific production crash or non-fatal — pulling its Crashlytics data, finding the linked GitHub issue, root-causing it, reproducing it, fixing it, and verifying the fix without breaking stored-data compatibility.

When should I use Fix Crash?

Fix Crash fits situations like: fix a specific production crash; non-fatal — pulling its Crashlytics data; finding the linked GitHub issue; root-causing it.

How do I install Fix Crash in Claude Code?

Run `npx skills add MartinStyk/apk-analyzer --skill fix-crash -a claude-code`. Or copy the skill folder (.claude/skills/fix-crash in MartinStyk/apk-analyzer) into .claude/skills/fix-crash in your project. Claude Code loads it when a task matches its description.

How do I install Fix Crash in Codex?

Run `npx skills add MartinStyk/apk-analyzer --skill fix-crash -a codex`. Or copy the skill folder (.claude/skills/fix-crash in MartinStyk/apk-analyzer) into .agents/skills/fix-crash in your project. Codex loads it when a task matches its description.

Can I use Fix Crash in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add MartinStyk/apk-analyzer --skill fix-crash -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/fix-crash, .gemini/skills/fix-crash, .github/skills/fix-crash and .opencode/skills/fix-crash in your project.

What does Fix Crash need to run?

Going by SKILL.md and its folder, Fix Crash needs the command-line tools its instructions call (adb, gh and git).

Does Fix Crash access the network?

SKILL.md contains no URLs. Its commands use gh and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Fix Crash safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Fix Crash use?

Fix Crash is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Fix Crash use?

About 2.5k tokens (SKILL.md is roughly 9.9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Fix Crash?

Skills that share tags, products or a category with Fix Crash: Maa Issue Log Analysis (MaaAssistantArknights/MaaAssistantArknights, 24k stars), Workbuddy Skin Studio (cdredfox/workbuddy-skin-studio, 198 stars), Frb PR Chain Split (fzyzcjy/flutter_rust_bridge, 5.4k stars) and Triage (K9i-0/ccpocket, 1.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Fix Crash?

MartinStyk (a GitHub user) maintains it in MartinStyk/apk-analyzer, which has 369 GitHub stars. The repository holds 18 skills in this directory. The repository was last updated on October 5, 2026.

Source: MartinStyk/apk-analyzer on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.