Diagnose and fix a failing CI run by pulling the actual failure logs (gh run view --log-failed), reproducing the failure locally, fixing the root cause rather than the symptom, and verifying green before and after pushing. Use when a GitHub Actions run is red, a PR check is failing, or CI passes locally but fails remotely.
Scanned 9/3/2026
Install to Claude Code
npx -y skills add KhaledSaeed18/dotclaude --skill fix-ci --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Fix Ci?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/khaledsaeed18-fix-ci-dotclaude)More formats (shields.io, HTML) on the badges page.
---
name: fix-ci
description: Diagnose and fix a failing CI run by pulling the actual failure logs (gh run view --log-failed), reproducing the failure locally, fixing the root cause rather than the symptom, and verifying green before and after pushing. Use when a GitHub Actions run is red, a PR check is failing, or CI passes locally but fails remotely.
---
Fix the failure CI actually reported, not the one you assume it hit. The log line that failed the job is evidence; everything else is guessing. Pull it first, reproduce it locally second, and only then change code.
## Step 1: Get the real failure
```bash
# What failed, and on which commit
gh run list --limit 10
gh run view <run-id> --log-failed 2>&1 | tail -80
```
Read the failed step's output completely. Identify: the failing step name, the exact error, and whether the failure is in *your change* or in the pipeline itself (setup step, cache, runner image, flaky network). If several jobs failed, find the first failure in dependency order; downstream jobs often fail as a consequence.
If the run belongs to a PR, also check which check is required and whether the failure is new to this branch:
```bash
gh pr checks <pr-number>
git log --oneline origin/main..HEAD
```
## Step 2: Reproduce locally
Run the failing step's actual command from the workflow file, not your usual local equivalent:
```bash
# Read the workflow to get the exact command and environment
cat .github/workflows/<workflow>.yml
```
- **Reproduces locally:** it is a code problem. Debug it normally (the `systematic-debugging` skill applies) and fix the root cause.
- **Passes locally, fails in CI:** the difference is environmental. Compare in this order: dependency install mode (`--frozen-lockfile` vs a loose local install), Node/tool versions (CI pins one; check yours), OS differences (case-sensitive paths, line endings), missing env vars or secrets, and cache staleness. State which difference explains the failure before changing anything.
- **Not reproducible and clearly infrastructure** (runner network blip, rate limit, timeout on a step that touches nothing you changed): rerun once with `gh run rerun <run-id> --failed`. If it fails the same way twice, it is not flake; go back to evidence.
## Step 3: Fix the cause, not the check
Make the smallest change that addresses the named root cause. Things that are not fixes:
- Deleting or skipping the failing test to make CI green.
- Loosening an assertion until it passes.
- Adding `continue-on-error` or removing the step.
- Bumping a timeout without knowing why the step got slower.
Any of these may be *proposed* to the user with justification, but never applied silently as "the fix".
## Step 4: Verify green, twice
1. **Locally:** run the exact failing command again and confirm it passes, plus the project's full check suite so the fix didn't break a sibling.
2. **Remotely:** push, then watch the run to completion rather than assuming:
```bash
gh run watch <new-run-id> --exit-status
```
Report the root cause, the fix, and the green run link. If the failure was flake, say so explicitly and note the rerun that confirmed it.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!