Maa Issue Log Analysis
MaaAssistantArknights/MaaAssistantArknights
分析 MaaAssistantArknights 上游仓库公开 Issue(https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/...
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…
$ npx skills add MartinStyk/apk-analyzer --skill fix-crash -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install MartinStyk/apk-analyzer fix-crash --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "fix-crash" agent skill from https://github.com/MartinStyk/apk-analyzer/tree/develop/.claude/skills/fix-crash into .claude/skills/fix-crash/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fix-crash", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/MartinStyk/apk-analyzer/tree/develop/.claude/skills/fix-crashType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add MartinStyk/apk-analyzer --skill fix-crash -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install MartinStyk/apk-analyzer fix-crash --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MartinStyk/apk-analyzer.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/fix-crash .agents/skills/fix-crash && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "fix-crash" agent skill from https://github.com/MartinStyk/apk-analyzer/tree/develop/.claude/skills/fix-crash into .agents/skills/fix-crash/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fix-crash", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add MartinStyk/apk-analyzer --skill fix-crash -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install MartinStyk/apk-analyzer fix-crash --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MartinStyk/apk-analyzer.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/fix-crash .cursor/skills/fix-crash && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "fix-crash" agent skill from https://github.com/MartinStyk/apk-analyzer/tree/develop/.claude/skills/fix-crash into .cursor/skills/fix-crash/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fix-crash", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/MartinStyk/apk-analyzer.git --path .claude/skills/fix-crash--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add MartinStyk/apk-analyzer --skill fix-crash -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install MartinStyk/apk-analyzer fix-crash --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MartinStyk/apk-analyzer.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/fix-crash .gemini/skills/fix-crash && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "fix-crash" agent skill from https://github.com/MartinStyk/apk-analyzer/tree/develop/.claude/skills/fix-crash into .gemini/skills/fix-crash/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fix-crash", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install MartinStyk/apk-analyzer fix-crashInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add MartinStyk/apk-analyzer --skill fix-crash -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/MartinStyk/apk-analyzer.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/fix-crash .github/skills/fix-crash && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "fix-crash" agent skill from https://github.com/MartinStyk/apk-analyzer/tree/develop/.claude/skills/fix-crash into .github/skills/fix-crash/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fix-crash", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add MartinStyk/apk-analyzer --skill fix-crash -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install MartinStyk/apk-analyzer fix-crash --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MartinStyk/apk-analyzer.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/fix-crash .opencode/skills/fix-crash && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "fix-crash" agent skill from https://github.com/MartinStyk/apk-analyzer/tree/develop/.claude/skills/fix-crash into .opencode/skills/fix-crash/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fix-crash", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
fix-crashA 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. 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.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit d807559. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
adbghgitFrom the folder's file list and the shell code blocks in SKILL.md.
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.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
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.
The full file from MartinStyk/apk-analyzer at commit d807559, republished under its GPL-3.0 licence (© MartinStyk). 1,337 words, ~2,484 tokens.
.claude/skills/fix-crash/SKILL.md (or your agent's skills folder).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.
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:
| Given | Do |
|---|---|
| Crashlytics id or console URL | crashlytics_list_notes for a github.com/.../issues/<n> link; if none, gh issue list --state all --limit 200 --search "<id>" |
| GitHub issue number | gh issue view <n> --comments and find the Crashlytics id in the body or comments |
| A description only | Run 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.
[
{ "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:
| Pattern | What it means |
|---|---|
| One OS version, or everything below/above an API level | An API availability or behaviour change — check the runtime SDK guard around that call or use a backward-compatible API |
| One manufacturer | An OEM-modified framework; often needs a defensive path, not a "correct" fix |
| Starts exactly at one app version | A regression — git log between that tag and the previous one |
| Spread evenly across everything | Logic or state bug, not environmental |
firstSeenVersion plus git log <prev-tag>..<that-tag> is the fastest route to a regression's cause.
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:
NoSuchMethodError, NoSuchFieldError)
— the compile-time SDK has it, the runtime device doesn't.@Query using syntax newer than the device's bundled SQLite.LazyColumn item key that isn't unique across the whole list.SecurityException from a package the caller can't inspect on newer Android.An unreproduced fix is a guess. Reproduce in the cheapest way that actually exercises the failure:
run-app skill to build, install and launch, and navigate-app-adb to drive to the screen.adb shell against
the app's database — never by adding production code that fabricates the state.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.
Follow AGENTS.md and the module's own AGENTS.md. Beyond those:
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.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.
version without one, and never
resort to fallbackToDestructiveMigration — that silently deletes user data.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.
./gradlew :<module>:compileDebugKotlin, then ./gradlew spotlessApply before committing.spotlessCheck doesn't flag those.Fixes #<n>). Author as the human user only — see the
git-commit-author skill.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.spotlessApply run; no orphaned imports© 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
Just SKILL.md in .claude/skills/fix-crash of MartinStyk/apk-analyzer.
Open the folder on GitHubat commit d807559
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Fix Crash this skillMartinStyk/apk-analyzer | 369 | — | ~2.5k | Automated safety check: Pass | GPL-3.0 | |
| Maa Issue Log AnalysisMaaAssistantArknights/MaaAssistantArknights | 24k | — | ~4k | Automated safety check: Pass | AGPL-3.0 | |
| Workbuddy Skin Studiocdredfox/workbuddy-skin-studio | 198 | — | ~1.5k | Automated safety check: Pass | MIT | |
| Frb PR Chain Splitfzyzcjy/flutter_rust_bridge | 5.4k | — | ~1.9k | Automated safety check: Pass | MIT | |
| TriageK9i-0/ccpocket | 1.1k | — | ~334 | Automated safety check: Pass | MIT | |
| PRn0an/VivaDicta | 131 | — | ~1.2k | Automated safety check: Pass | MIT |
MaaAssistantArknights/MaaAssistantArknights
分析 MaaAssistantArknights 上游仓库公开 Issue(https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/...
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.
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.
K9i-0/ccpocket
GitHub Issueの対応判断と、PRの調査・手直し・検証・マージを行う。PR指定時は取り込みまで進めるのが既定. An agent skill from K9i-0/ccpocket.
n0an/VivaDicta
Create a GitHub Pull Request in Claude Code with Claude and Codex review requests and built-in polling workflow
n0an/VivaDicta
Create a GitHub Pull Request in Codex with Claude and Codex review requests and standard GitHub polling
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.
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.
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.
MartinStyk/apk-analyzer
A skill your agent uses when creating a new reusable Compose UI component that should live in core:ui-library.
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.
MartinStyk/apk-analyzer
A skill your agent uses when creating a new feature module, screen, or feature area.
Works with
Categories
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.
Fix Crash fits situations like: fix a specific production crash; non-fatal — pulling its Crashlytics data; finding the linked GitHub issue; root-causing it.
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.
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.
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.
Going by SKILL.md and its folder, Fix Crash needs the command-line tools its instructions call (adb, gh and git).
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.
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.
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.
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.
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.
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.