Periodic, GitHub-Actions-as-SaaS security scanner for agent skills declared in the Coder registry catalogue.
Every 6 hours, this repo's scheduled workflow:
- Enumerates every skill declared in
coder/registry. - Shallow-clones each source repo.
- Runs NVIDIA SkillSpector (agentic risk, static mode) and ClamAV (malware signatures) over the upstream content.
- Builds a per-skill verdict (
clean,suspicious,malicious,unknown) from the scanner outputs and the policy inconfig.yaml. - Publishes a versioned report as a GitHub Release asset and a public
latest.jsonto GitHub Pages.
The registry site reads the public report through a small proxy endpoint
in coder/registry-server and shows a per-skill scan badge. The
registry's deploys are not gated on the scan result; this is visibility,
not enforcement.
Stable URLs (no auth required):
- Public JSON (CDN-cached):
https://coder.github.io/coder-skill-scanner/latest.json - Tagged Release:
https://github.com/coder/coder-skill-scanner/releases/latest/download/latest.json - Per-scan history:
https://coder.github.io/coder-skill-scanner/history/<date>/<time>.json
The schema is defined in schema/report.schema.json and versioned.
.
|-- .github/
| |-- workflows/
| | `-- ci.yaml # lint scripts + validate config + validate schema
| `-- ISSUE_TEMPLATE/
| `-- scanner-down.md
|-- README.md
|-- LICENSE # Apache-2.0
|-- AGENTS.md # contributor + agent conventions
|-- config.yaml # catalogue source, scanners, verdict policy
|-- schema/
| `-- report.schema.json # JSON Schema for latest.json
|-- scripts/ # populated in subsequent PRs
`-- testdata/ # fixtures for self-test
The scanner workflow itself (scan.yaml) is added in a follow-up PR; this
initial commit is the contract and tooling skeleton.
This scanner is data-driven. To run it against a different registry:
- Fork
coder/coder-skill-scanner. - Edit
config.yamlto point at your catalogue and pin the scanner versions you want. - Configure GitHub Pages on your fork.
- Enable Actions.
No source changes required for catalogue changes.
Bootstrap. The scanner workflow lands in PR 2 (SkillSpector path), PR 3
(ClamAV path), PR 4 (Pages + history pruner), PR 5 (external-sources
catalogue format once coder/registry-server#442 ships).
Apache-2.0. See LICENSE.