CI Failure Triage and Repair
Chachamaru127/claude-code-harness
Diagnoses failing CI pipelines and tests, deciding first whether the test or the implementation is at fault, and hands hard cases to a dedicated fixer subagent.
A skill your agent uses to check GitHub Actions build status or diagnose why a workflow run failed and propose a fix.
$ npx skills add MartinStyk/apk-analyzer --skill analyze-ci-failure -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install MartinStyk/apk-analyzer analyze-ci-failure --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/analyze-ci-failure .claude/skills/analyze-ci-failure && 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 "analyze-ci-failure" agent skill from https://github.com/MartinStyk/apk-analyzer/tree/develop/.claude/skills/analyze-ci-failure into .claude/skills/analyze-ci-failure/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-ci-failure", 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/analyze-ci-failureType 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 analyze-ci-failure -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install MartinStyk/apk-analyzer analyze-ci-failure --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/analyze-ci-failure .agents/skills/analyze-ci-failure && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "analyze-ci-failure" agent skill from https://github.com/MartinStyk/apk-analyzer/tree/develop/.claude/skills/analyze-ci-failure into .agents/skills/analyze-ci-failure/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-ci-failure", 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 analyze-ci-failure -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install MartinStyk/apk-analyzer analyze-ci-failure --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/analyze-ci-failure .cursor/skills/analyze-ci-failure && 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 "analyze-ci-failure" agent skill from https://github.com/MartinStyk/apk-analyzer/tree/develop/.claude/skills/analyze-ci-failure into .cursor/skills/analyze-ci-failure/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-ci-failure", 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/analyze-ci-failure--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 analyze-ci-failure -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install MartinStyk/apk-analyzer analyze-ci-failure --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/analyze-ci-failure .gemini/skills/analyze-ci-failure && 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 "analyze-ci-failure" agent skill from https://github.com/MartinStyk/apk-analyzer/tree/develop/.claude/skills/analyze-ci-failure into .gemini/skills/analyze-ci-failure/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-ci-failure", 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 analyze-ci-failureInstalls 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 analyze-ci-failure -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/analyze-ci-failure .github/skills/analyze-ci-failure && 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 "analyze-ci-failure" agent skill from https://github.com/MartinStyk/apk-analyzer/tree/develop/.claude/skills/analyze-ci-failure into .github/skills/analyze-ci-failure/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-ci-failure", 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 analyze-ci-failure -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 analyze-ci-failure --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/analyze-ci-failure .opencode/skills/analyze-ci-failure && 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 "analyze-ci-failure" agent skill from https://github.com/MartinStyk/apk-analyzer/tree/develop/.claude/skills/analyze-ci-failure into .opencode/skills/analyze-ci-failure/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-ci-failure", 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.
analyze-ci-failureA skill your agent uses to check GitHub Actions build status or diagnose why a workflow run failed and propose a fix.
Analyze CI Failure is an agent skill from MartinStyk/apk-analyzer. Use to check GitHub Actions build status or diagnose why a workflow run failed and propose a fix. Triggered by phrases like "check the latest build", "did CI pass", "why did the build fail", "check the GitHub Actions run", "analyze this workflow run", "check run <id", "check the build for this PR".
Its SKILL.md is about 1.9k 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 DevOps & Cloud, covering CI/CD and Failing and flaky tests. It works with GitHub Actions. 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.
5 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:
ghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
FIREBASE_TOKENSIGN_KEYSIGN_KEY_STORE_PASSWORDSIGN_KEY_PASSWORDFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Analyze CI Failure loads about 1.9k tokens when it runs. Until then it costs about 80 tokens; SKILL.md has 924 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). 924 words, ~1,879 tokens.
.claude/skills/analyze-ci-failure/SKILL.md (or your agent's skills folder).Uses the
ghCLI (already authenticated) to inspect workflow runs on GitHub Actions, isolate the actual failing step from a noisy log, and turn it into a root cause + a proposed fix.
They live at .github/workflows/.
| File | Name | Trigger | What it runs |
|---|---|---|---|
.github/workflows/ci.yml | Continuous integration | Push to or pull request against develop | Parallel verify and build-apk jobs; distribute on pushes after both pass |
.github/workflows/release.yml | Release | Push of a semantic version tag (X.Y.Z) | Parallel verify and build-release jobs; GitHub Release, Play Store beta, and Firebase App Distribution publish after both pass |
.github/workflows/agent-context.yml | Agent context | Context, skill, adapter, root-build, or module-graph changes against develop | validate: validateAgentContext |
| Given | Command |
|---|---|
| "latest build" / "latest CI run" | gh run list --workflow ci.yml --limit 5 |
| "latest release run" | gh run list --workflow release.yml --limit 5 |
| "latest context check" | gh run list --workflow agent-context.yml --limit 5 |
| A run ID or run URL | gh run view <run-id> |
| A PR number | gh pr checks <pr-number> |
| Only failures | gh run list --status failure --limit 10 |
gh run view <run-id> prints a ✓/X per job — read this before pulling logs. The Android workflows
have parallel verification and artifact-build jobs followed by downstream distribution jobs. The
release workflow also has Play Store and GitHub Release jobs. Confirm the failed job and its
dependencies before assuming the cause; a downstream artifact failure may still originate in
build-apk or build-release.
On macOS/Linux:
gh run view <run-id> --log-failed | grep -inE "error:|FAILURE:|Execution failed|exception|##\[error\]"gh run view <run-id> --log-failed | sed -n '<start>,<end>p'On Windows PowerShell:
gh run view <run-id> --log-failed |
Select-String -Pattern 'error:|FAILURE:|Execution failed|exception|##\[error\]' `
-CaseSensitive:$false `
-Context 5, 15If filtering finds nothing useful, the failure may be a plain BUILD FAILED with no separate error:
line — in that case find the last > Task :... line before the failure; that's the failing
Gradle task.
| Symptom in the log | Root cause | Fix |
|---|---|---|
Agent context validation failed | A module lacks scoped guidance, an AGENTS.md/CLAUDE.md pair is broken, skill metadata is invalid, a local context link is broken, or a Copilot adapter duplicates a shared skill | Follow each listed validation error, then rerun ./gradlew validateAgentContext |
BUILD FAILED with ktlint-style messages or Compose compile errors traceable to formatting | Unformatted/violating Kotlin broke compilation | Use the spotless-fix skill |
e: file:///path/to/File.kt:12:5 ... | Kotlin compiler error, points directly at file:line | Open the file, fix per AGENTS.md conventions |
Fetch Firebase google-services.json fails in either workflow | FIREBASE_TOKEN, FIREBASE_APP_ID, or FIREBASE_PROJECT_ID is missing/wrong, or the token cannot access the configured Firebase project/app | Use gh secret list to confirm all three exist. Secret values are masked and Firebase access cannot be repaired from logs; report the exact Firebase CLI error to the user |
Signing step fails in release.yml (sign_aab or sign_apk) | One of SIGN_KEY, SIGN_KEY_ALIAS, SIGN_KEY_STORE_PASSWORD, SIGN_KEY_PASSWORD repo secrets is missing/wrong, or the keystore is corrupt/mismatched with the alias | gh secret list to confirm all four exist; can't verify the keystore itself from CI logs — ask the user to check it locally |
Deploy to Play Store step fails with an auth/permission error | GOOGLE_SERVICE_ACCOUNT secret is missing, expired, or the service account lacks Play Console API access for sk.styk.martin.apkanalyzer | Check gh secret list; Play Console access itself can't be fixed from CI — flag to the user |
Distribute APK to Firebase App Distribution fails after a successful build | FIREBASE_TOKEN/FIREBASE_APP_ID is wrong, the token lacks access, or the internal-testers group is unavailable | Confirm both secrets exist with gh secret list, then report the Firebase CLI error; project permissions and tester groups require user access |
A future JDK bump to the Gradle toolchain (jvmToolchain(N), gradle-daemon-jvm.properties) isn't mirrored in one of the two workflows' setup-java step | Usually not the actual failure cause even if they briefly drift — gradle-daemon-jvm.properties has toolchainUrl.* entries for the foojay Disco API, so Gradle auto-downloads a matching JDK regardless of the JDK setup-java installed (needs the org.gradle.toolchains.foojay-resolver-convention plugin in settings.gradle.kts, which is applied). Don't assume a JDK mismatch is the root cause without other evidence | If you do suspect it, search the log for Downloading / Unpacking JDK lines from the toolchain auto-provisioning, or a No matching toolchains found error, before concluding this is the cause |
gradle: Execution failed for task ':...:compileDebugKotlin' or similar per-module compile task | Compile error scoped to one module | Narrow reproduction locally: ./gradlew :module:path:compileDebugKotlin |
If a failure doesn't match this table, treat the filtered error:/FAILURE: line as authoritative
and reason from there — don't guess.
run: steps
in the workflow YAML) before proposing a fix — this repo's CI failures are almost always
reproducible with ./gradlew <same task>..github/workflows/*.yml (CI/CD
pipeline changes are a shared-system change — don't push them unasked).AGENTS.md conventions and run the
spotless-fix skill if it's formatting-related.continue-on-error: true, no || true, no disabling a check — unless the user explicitly asks
for that. The goal is root cause, not a green checkmark.error:/FAILURE: line, not just generic exit-code noise© 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/analyze-ci-failure of MartinStyk/apk-analyzer.
Open the folder on GitHubat commit d807559
Analyze CI Failure 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 |
|---|---|---|---|---|---|---|
| Analyze CI Failure this skillMartinStyk/apk-analyzer | 370 | — | ~1.9k | Automated safety check: Pass | GPL-3.0 | |
| CI Failure Triage and RepairChachamaru127/claude-code-harness | 3.2k | 1 repos | ~1.1k | Automated safety check: Notes | MIT | |
| ONNX Runtime CI Managementmicrosoft/onnxruntime | 22k | — | ~4.1k | Automated safety check: Pass | MIT | |
| CI Watchdoglatitude-dev/latitude-llm | 4.7k | — | ~1.6k | Automated safety check: Pass | MIT | |
| Megatron-LM CI Failure TriageNVIDIA/Megatron-LM | 18k | — | ~1.6k | Automated safety check: Pass | Apache-2.0 | |
| Swig CI Reproswig/swig | 6.3k | — | ~1.2k | Automated safety check: Pass | Custom licence |
Chachamaru127/claude-code-harness
Diagnoses failing CI pipelines and tests, deciding first whether the test or the implementation is at fault, and hands hard cases to a dedicated fixer subagent.
microsoft/onnxruntime
Triggers, re-runs and unblocks the CI checks on an ONNX Runtime pull request, after diagnosing whether a failure is transient or needs a code change.
latitude-dev/latitude-llm
Continuously monitor GitHub PR CI checks and automatically fix failures until all checks pass.
NVIDIA/Megatron-LM
Investigates a failing GitHub Actions run or job for Megatron-LM, finds the root cause plus the PR and test author involved, and files a structured bug issue.
swig/swig
Reproduce a GitHub Actions Linux CI failure locally when it does not happen on your machine: a podman/docker image that mirrors the ubuntu-22.04 runner by reusing the real Tools/CI-linux-.sh install…
ruby-git/ruby-git
Diagnoses and fixes failing GitHub Actions runs by identifying the failure, fetching only the relevant logs, finding the root cause and reproducing it locally.
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 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.
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…
Works with
Categories
A skill your agent uses to check GitHub Actions build status or diagnose why a workflow run failed and propose a fix. Analyze CI Failure is an agent skill from MartinStyk/apk-analyzer. Use to check GitHub Actions build status or diagnose why a workflow run failed and propose a fix.
Analyze CI Failure fits situations like: check GitHub Actions build status; diagnose why a workflow run failed and propose a fix.
Run `npx skills add MartinStyk/apk-analyzer --skill analyze-ci-failure -a claude-code`. Or copy the skill folder (.claude/skills/analyze-ci-failure in MartinStyk/apk-analyzer) into .claude/skills/analyze-ci-failure in your project. Claude Code loads it when a task matches its description.
Run `npx skills add MartinStyk/apk-analyzer --skill analyze-ci-failure -a codex`. Or copy the skill folder (.claude/skills/analyze-ci-failure in MartinStyk/apk-analyzer) into .agents/skills/analyze-ci-failure 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 analyze-ci-failure -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/analyze-ci-failure, .gemini/skills/analyze-ci-failure, .github/skills/analyze-ci-failure and .opencode/skills/analyze-ci-failure in your project.
Going by SKILL.md and its folder, Analyze CI Failure needs the command-line tools its instructions call (gh) and credentials named FIREBASE_TOKEN, SIGN_KEY, SIGN_KEY_STORE_PASSWORD and SIGN_KEY_PASSWORD. Our summary lists: A credential in FIREBASE_TOKEN; A credential in SIGN_KEY.
SKILL.md contains no URLs. Its commands use gh, 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.
Analyze CI Failure 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 1.9k tokens (SKILL.md is roughly 7.5k 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 Analyze CI Failure: CI Failure Triage and Repair (Chachamaru127/claude-code-harness, 3.2k stars), ONNX Runtime CI Management (microsoft/onnxruntime, 22k stars), CI Watchdog (latitude-dev/latitude-llm, 4.7k stars) and Megatron-LM CI Failure Triage (NVIDIA/Megatron-LM, 18k 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 370 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.