investigate-ci — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited investigate-ci (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Investigate GitHub Actions failures — fetch logs, diagnose root causes, suggest fixes.
_Read ~/.claude/skills/investigate-ci/preferences.md using the Read tool. If not found, no preferences are set._
_On startup, use Bash to detect: current repo (gh repo view --json nameWithOwner -q .nameWithOwner) and default org (gh repo view --json owner -q .owner.login). Skip any that fail._
Check $ARGUMENTS for subcommands:
helpIf $ARGUMENTS is "help" (case-insensitive), display:
Investigate CI — diagnose GitHub Actions failures
Usage:
/investigate-ci <workflow-url> Investigate a specific workflow
/investigate-ci <run-url> Investigate a specific run
/investigate-ci <repo> [workflow] Investigate by repo name
/investigate-ci config Set preferences
/investigate-ci reset Clear preferences
/investigate-ci help This help
Examples:
/investigate-ci https://github.com/org/repo/actions/workflows/deploy.yml
/investigate-ci https://github.com/org/repo/actions/runs/12345678
/investigate-ci ai-stacks deploy.yml
/investigate-ci ai-stacks All failing workflows
/investigate-ci 12345678 Run ID (uses current/default repo)
Current preferences:
[show from preferences.md or "defaults"]Then stop.
configIf $ARGUMENTS is "config" or "configure", use `AskUserQuestion`:
Question 1 — "Default organization?" (multiSelect: false)
Question 2 — "How many recent runs to check?" (multiSelect: false)
Question 3 — "Default branch filter?" (multiSelect: false)
Save to ~/.claude/skills/investigate-ci/preferences.md. Display summary. Then stop.
resetIf $ARGUMENTS is "reset", delete preferences.md. Confirm: "Preferences cleared. Using defaults." Then stop.
If $ARGUMENTS is anything else, proceed below.
Extract from $ARGUMENTS:
Full workflow URL — e.g., https://github.com/org/repo/actions/workflows/deploy.yml
Full run URL — e.g., https://github.com/org/repo/actions/runs/12345678
Repo + workflow — e.g., ai-stacks deploy.yml
/), prepend the detected orgRepo only — e.g., ai-stacks
Run ID only — e.g., 12345678
If ambiguous, use AskUserQuestion to clarify.
gh run list --repo <org/repo> --workflow <workflow> --limit <N> --json databaseId,status,conclusion,headBranch,event,createdAt,displayTitle,headShaIf no workflow specified, list all workflows first:
gh workflow list --repo <org/repo> --json name,id,stateThen fetch runs for workflows with recent failures.
Workflow: deploy.yml (org/repo)
Recent runs (last N):
[FAIL] #123 — "Deploy to prod" — main — 2h ago
[PASS] #122 — "Deploy to staging" — main — 5h ago
[FAIL] #121 — "Deploy to prod" — main — 1d ago
[PASS] #120 — "Feature X" — feature/x — 1d agoIf multiple failures, use AskUserQuestion:
If only one failure, investigate it directly.
gh run view <run-id> --repo <org/repo> --json jobs,conclusion,headBranch,headSha,event,createdAt,updatedAt,displayTitleFor each failed job, fetch logs:
gh run view <run-id> --repo <org/repo> --log-failed 2>&1This returns only the logs from failed steps — much more targeted than full logs.
From the failed step logs, extract:
error, Error, FAILED, fatal, Exception, exit codesgh api repos/<org>/<repo>/commits/<sha> --jq '{message: .commit.message, author: .commit.author.name, date: .commit.author.date, files: [.files[].filename]}'Analyze the error and categorize:
| Category | Signals | Common fixes |
|---|---|---|
| Dependency | ModuleNotFoundError, npm ERR!, Could not resolve | Lock file out of sync, missing package |
| Build | tsc, SyntaxError, TypeError, compilation errors | Type errors, syntax issues in changed files |
| Test | FAIL, AssertionError, test file paths | Failing tests, snapshot mismatches |
| Deploy | AccessDenied, timeout, connection refused | Permissions, infra issues, env vars |
| Config | invalid workflow, yaml, secrets references | Workflow syntax, missing secrets |
| Flaky | Same commit passed before, timing-related errors | Re-run, increase timeout |
Cross-reference with:
CI Investigation: <workflow> — Run #<id>
Trigger: <event> on <branch> by <author> (<relative time>)
Commit: <sha_short> "<commit message>"
Duration: <time>
Failed job: <job name>
Failed step: <step name>
Error:
<extracted error message, formatted>
Root cause:
<one-paragraph diagnosis>
Changed files in trigger commit:
- file1.py
- file2.ts
Related:
- [Previous run on same branch: PASS/FAIL]
- [Main branch status: PASS/FAIL]Use AskUserQuestion (multiSelect: true):
Options based on diagnosis:
gh run rerun <id> --repo <org/repo> --failedgh run view <id> --repo <org/repo> --loggh run view <id> --repo <org/repo> --webFor code-related failures, also suggest:
--repo flags.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.