{"manifest":{"name":"CI Fix Agent","version":"1.0.0","description":"Diagnoses failing CI/CD pipelines from build logs. Classifies failures, performs root cause analysis, applies targeted fixes. Inspired by Codex gh-fix-ci.","tags":["ci-cd","debugging","devops","workflow"],"standard":"agentskills.io","standard_version":"1.0","content_checksum":"28d662f08ea0bff64466db6a84ff3d59b1332ca0871e91bc839c9c0fbfc5d152","bundle_checksum":null,"metadata":{},"files":[]},"files":{"SKILL.md":"# CI Fix Agent\n\n> **Purpose:** Diagnose and fix failing CI/CD pipelines. Reads build logs, identifies root causes, and applies targeted fixes.\n\n---\n\n## Invocation\n\n```\n/fix-ci [--run-id <id>]\n```\n\nWithout a run ID, fetches the latest failed run for the current branch.\n\n---\n\n## Diagnosis Process\n\n### Step 1: Fetch CI Logs\n\n```bash\ngh run list --branch $(git branch --show-current) --status failure --limit 1\ngh run view <run_id> --log-failed\n```\n\n### Step 2: Classify the Failure\n\n| Pattern | Category | Priority |\n|---------|----------|----------|\n| `npm ERR! peer dep` | Dependency conflict | High |\n| `ENOSPC` / `out of memory` | Resource limit | Medium |\n| `FAIL src/tests/` | Test failure | High |\n| `error TS` / `type error` | Type error | High |\n| `ESLint:` / `Lint error` | Lint violation | Low |\n| `ETIMEOUT` / `connect ECONNREFUSED` | Network/service | Medium |\n| `permission denied` | Permissions | Medium |\n| `Module not found` | Missing dependency | High |\n| `exit code 137` | OOM killed | High |\n\n### Step 3: Root Cause Analysis\n\nFor each failure category:\n\n**Test failures:**\n1. Read the failing test file\n2. Read the source file it tests\n3. Check recent changes to both: `git log --oneline -5 <file>`\n4. Identify if the test or the source is wrong\n\n**Type errors:**\n1. Read the error location\n2. Check if types changed upstream\n3. Verify import paths are correct\n\n**Dependency issues:**\n1. Check `package-lock.json` for conflicts\n2. Compare with the last passing CI run\n3. Try `npm ci` vs `npm install`\n\n### Step 4: Apply Fix\n\n- Edit the minimum files needed\n- Run the same CI step locally to verify\n- Commit with: `fix(ci): <description of what was wrong>`\n\n---\n\n## Common Fixes\n\n| Issue | Fix |\n|-------|-----|\n| Snapshot mismatch | `npx vitest run --update` if change is intentional |\n| Missing env var | Add to CI config secrets, not to code |\n| Lock file conflict | `npm ci` (clean install from lock) |\n| Flaky test (timing) | Add `vi.useFakeTimers()` or increase timeout |\n| OOM on build | Split the build step or increase runner memory |\n\n---\n\n## Rules\n\n- Never skip or delete failing tests — fix the root cause\n- Never add `--no-verify` or `continue-on-error` to hide failures\n- If a test is genuinely flaky, fix the flakiness don't skip it\n- Always verify the fix locally before pushing"}}