Skip to main content

Report formats and CI automation

plugin-scanner can emit human-readable summaries, machine-readable artifacts, and GitHub-friendly security reports from the same scan.

Report formatsDirect link to Report formats

FormatBest use
textlocal terminal review with category totals and findings
jsonstructured integrations and dashboards
markdownpull request or issue-ready summaries
sarifGitHub code scanning uploads and security automation

Examples:

plugin-scanner scan . --format text
plugin-scanner scan . --format json
plugin-scanner scan . --format markdown
plugin-scanner scan . --format sarif --output plugin-scanner.sarif

Common gating flagsDirect link to Common gating flags

Fail CI when a finding crosses your severity floor:

plugin-scanner scan . --fail-on-severity high

Require stronger optional integrations when needed:

plugin-scanner ./my-plugin --cisco-skill-scan on --cisco-policy strict
plugin-scanner ./my-plugin --cisco-mcp-scan on

Signals emitted by the suiteDirect link to Signals emitted by the suite

The scanner can emit stable machine signals such as:

  • score
  • grade
  • grade_label
  • policy_pass
  • verify_pass
  • max_severity
  • findings_total

That makes it easy to gate review, registry ingestion, or release workflows on one predictable artifact.

CLI-first CI patternDirect link to CLI-first CI pattern

Use the CLI directly when you want the repository to control install, caching, and report upload:

permissions:
contents: read
security-events: write

jobs:
scan-plugin:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install scanner
run: pip install plugin-scanner
- name: Scan plugin
run: plugin-scanner scan . --format sarif --output plugin-scanner.sarif --fail-on-severity high
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: plugin-scanner.sarif

Local pre-commit patternDirect link to Local pre-commit pattern

repos:
- repo: local
hooks:
- id: plugin-scanner
name: Plugin Scanner
entry: plugin-scanner
language: system
types: [directory]
pass_filenames: false
args: ["./"]

Next guidesDirect link to Next guides