graphql-audit — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited graphql-audit (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.
This skill drives the GitHub Code Scanning API (REST + GraphQL via gh) for the repository's CodeQL alerts. The repo's CI runs the security-extended CodeQL suite, which surfaces a wider set of findings than the default suite.
The skill operates on whatever repo this checkout points at — it derives the owner/repo from the upstream (or origin) git remote. Auth uses the gh CLI's stored credentials; no token is needed in .env.
If you (the agent) discover a new pattern, gotcha, working flow, correction, or any piece of knowledge while running this skill — update this `SKILL.md` AND commit it BEFORE proceeding. Knowledge that isn't committed is lost.
Examples of things to capture:
gh CLI authenticatedgh auth statusMust show authentication for github.com. If not, run gh auth login.
The gh user needs write scope on the repository to dismiss alerts; read scope is enough for listing.
None required for this skill. gh handles auth.
(Optional GITHUB_TOKEN could go in .env if you ever need to bypass gh and call REST/GraphQL directly via curl, e.g. from a script that runs without an authenticated gh session.)
GitHub Code Scanning alerts have three lifecycle states: open, dismissed, fixed (auto-detected when the underlying code changes). Manual triage uses dismissed with one of three reasons:
| Decision | API value | When to use |
|---|---|---|
| False Positive | false positive | CodeQL is wrong (path is unreachable, type is wider, guard exists) |
| Won't Fix | won't fix | Real but acceptable risk; not addressing in this codebase |
| Used in Tests | used in tests | Alert is in test fixtures / vendored test code, not production |
A dismissed alert can be reopened later (manually in the UI or via PATCH /alerts/<n> with state=open); the dismissal history is preserved.
bash .agents/skills/graphql-audit/scripts/codeql-list.shDefault output is a count-by-rule summary for open alerts:
42 cpp/integer-overflow|warning
17 cpp/uninitialized-local|error
...Filters:
bash .agents/skills/graphql-audit/scripts/codeql-list.sh --state=open --severity=high
bash .agents/skills/graphql-audit/scripts/codeql-list.sh --tool=CodeQL --severity=critical
bash .agents/skills/graphql-audit/scripts/codeql-list.sh --raw # full JSONgh api /repos/<owner>/<repo>/code-scanning/alerts/<n>Or visit https://github.com/<owner>/<repo>/security/code-scanning/<n> in the browser for the full data-flow view.
bash .agents/skills/graphql-audit/scripts/codeql-dismiss.sh \
<alert_number> "false positive" "<short ASCII comment>"Comments are stored verbatim; keep them short, factual, and ASCII.
For a known-FP rule pattern (e.g., cpp/uninitialized-local always firing on a particular header), GitHub does NOT have a REST bulk endpoint. The working pattern is:
bash .agents/skills/graphql-audit/scripts/codeql-list.sh --raw \
| jq -r '.[] | select(.rule.id=="cpp/uninitialized-local") | .number' \
| while read n; do
bash .agents/skills/graphql-audit/scripts/codeql-dismiss.sh \
"$n" "false positive" "FP: rule firing on a stub model not real code"
doneThrottle if you have many — the REST API tolerates ~10 req/s for a single user.
that produce them. To suppress a class of FPs at the source, edit .github/codeql/ config or the queries themselves.
.github/workflows/codeql.yml — not here.
use sibling APIs (/secret-scanning/alerts, /dependabot/alerts). They could be added to this skill if needed.
CodeQL alerts are exposed via REST (/repos/{owner}/{repo}/code-scanning/...). GraphQL (gh api graphql) is useful for cross-repo queries or reaching combined data (e.g., alert + commit history in one call):
gh api graphql -f query='
query($owner:String!,$name:String!) {
repository(owner:$owner, name:$name) {
vulnerabilityAlerts(first: 100, states:OPEN) {
nodes { securityAdvisory { ghsaId, severity } }
}
}
}' -F owner=netdata -F name=netdataThe above is for Dependabot advisories, not CodeQL — CodeQL alerts remain REST-only at the time of writing.
| Symptom | Likely cause |
|---|---|
HTTP 403 Resource not accessible by integration | gh token lacks security_events scope |
HTTP 404 on the alerts endpoint | Code Scanning not enabled for the repo, or wrong slug |
gh: not found | gh CLI not installed |
| Empty output, no error | No alerts in that state — try --state=dismissed to confirm gh is reaching the API |
| Pagination cuts off at 100 | Use --paginate (already in codeql-list.sh) |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.