Pen TestingCloud PostureShadow-AI discoveryCI/CDContinuous PlatformReportsIdentity & accessAgent Trust Fabric
CI/CD

Scan from your pipeline. Gate the build on findings.

Run scans from your pipeline and gate builds on findings. The mechanism is a per-asset trigger key — a scoped secret that can start and read scans of one asset, without your account bearer token.

Start a scan Read the docs
One asset
is all a trigger key can reach; it never touches the rest of your account
5 gates
fail-on critical, high, medium, low, or never
50 replays
the cap on an Attack Success Rate measurement
GitHub Action bl014h/millenniums-scan-action@v1 · on the Marketplace
Three inputs, and the build fails on your threshold
The Action starts a scan of one asset, polls it, posts a job summary, and fails the build at the severity you choose. fail-on: never is notify-only.
Workflow
- uses: bl014h/millenniums-scan-action@v1
  with:
    api-key: ${{ secrets.MILLENNIUMS_SCAN_KEY }}
    asset-id: "abcd1234"
    fail-on: high   # critical | high | medium | low | never
Poll status
GET /api/assets/<id>/runs/<run_id>   X-Scan-Key: •••
{ "status": "done", "findings_count": 3,
  "severity": { "critical": 0, "high": 1, "medium": 2, "low": 0 },
  "max_severity": "high" }
A quota or verification block returns non-2xx, so CI sees it Build fails
The gate

A pull request that would ship an attack path does not ship.

✓
push
✓
trigger key
•
scan runs
×
fail-on: high
×
merge blocked
max_severity: high severity: { critical: 0, high: 1, medium: 2, low: 0 } exit 1 → build fails

Set fail-on: never and the same run posts a job summary without failing anything.

How it runs
01
A key scoped to one asset
Reveal or mint the asset’s trigger key, then rotate it whenever you like — old CI secrets stop working immediately. Deleting the asset drops its keys.
02
The same path as a manual scan
A trigger runs through the same gate → scan → billing path, tagged triggered_by=webhook, so quota, concurrency and budget caps all still apply.
03
Attack Success Rate replay
Replay a behavioral finding’s re-runnable PoC up to 50 times and record its success rate. Marker and refusal judging use no LLM, so there is no model cost — just requests to your own target.

The Action, input by input.

Ownership-gated: ASR replay requires a verified domain
Input
Default
What it does
api-key
required
The asset’s trigger key, held as a repository secret
asset-id
required
Which registered asset this workflow scans
fail-on
high
critical · high · medium · low · never — the severity that fails the build
api-url
https://scan.millenniums.ai
Point the Action at another deployment
timeout-seconds
—
How long the job waits for the run to finish
poll-seconds
—
How often it asks for status

Put a proven finding in front of the merge.

Set up the Action