Quickstart

There are two ways to run Cerberus: the web app for native GitHub scans and the CLI for local or GitHub targets, ALIGNMENT analysis, optional security feeders, and CI. Both share the same 59-check native catalog in checks.json.

Option A: Web app

The web app is a static site — no build step, no server required. Open Cerberus Agent in a browser and paste a GitHub repository URL.

GitHub only in the browser

Browsers cannot fetch arbitrary origins due to CORS, so the web app can only scan public GitHub repositories. To scan a local directory, a private repo, or a non-GitHub target, use the CLI below.

Option B: CLI (examine.py)

1. Prerequisites

2. Run a scan

python3 examine.py <path-or-github-url>

Examples:

python3 examine.py ./my-project
python3 examine.py https://github.com/owner/repo
python3 examine.py . --native-only
python3 examine.py . --feeders auto --json report.json --html report.html --sarif report.sarif

A normal CLI run performs native checks and ALIGNMENT. Feeders default to none; auto records unavailable tools gracefully and never installs them.

3. Useful flags

FlagPurpose
--json out.jsonWrite the full report object (schema cerberus.report/2) to a file.
--html out.htmlWrite a standalone HTML report.
--sarif out.sarifWrite SARIF for GitHub code scanning upload.
--feeders autoRun all applicable Phase 1 adapters; missing tools are warnings.
--native-onlyRun only the catalog checks and disable ALIGNMENT/feeders.
--feeder-timeout 60Set the timeout independently for each external tool.
--feeder-json feeders.jsonWrite normalized feeder statuses and findings.
--strict-feedersFail when a requested feeder is unavailable or fails.
--fail-under 80Exit non-zero if the native score is below the threshold.
--only sentinel,vaultRestrict the run to specific agents.
--severity highOnly report findings at or above a severity level.

See the full CLI Scanner reference for every flag and the exact output schema.

What happens next

Work through findings in severity order:

  1. Patch all CRITICAL issues first — they deduct the most per hit and usually represent immediate exploit risk.
  2. Address HIGH findings next.
  3. Triage MEDIUM and LOW findings into your backlog.
  4. Re-run the scan to verify fixes and improve your score.

Setting up Cerberus as a GitHub Action

Automate Cerberus security reviews on every Pull Request and branch push using GitHub Actions. Cerberus will scan your codebase, post SARIF findings directly to the repository's Security → Code scanning tab, upload interactive HTML and JSON reports as workflow artifacts, and gate merges using --fail-under.

1. Quick Setup

  1. Create a workflow file in your repository at .github/workflows/cerberus.yml.
  2. Paste the production-ready workflow template below.
  3. Adjust the --fail-under 80 score threshold to match your project's quality gate.
  4. Commit and push to trigger your first automated security review.

2. Workflow Template (.github/workflows/cerberus.yml)

name: Cerberus Security Review

on:
  pull_request:
  push:
    branches: [main]
  workflow_dispatch:
    inputs:
      feeder_mode:
        description: Run reviewed native scanner only, or detect optional preinstalled feeders
        required: true
        default: native-only
        type: choice
        options:
          - native-only
          - auto
      strict_feeders:
        description: Fail when a requested feeder is unavailable, times out, or returns errors
        required: true
        default: false
        type: boolean

permissions:
  contents: read
  security-events: write

jobs:
  cerberus:
    name: Cerberus Security Review
    runs-on: ubuntu-latest

    steps:
      - name: Check out application code
        uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6

      # Pin Cerberus checkout to a reviewed commit SHA for supply-chain security
      - name: Check out Cerberus scanner
        uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
        with:
          repository: murderszn/cerberus
          ref: eb78139399c022e2cea68dd3fdeb201f3847da48
          path: .cerberus

      - name: Exclude scanner checkout from scan
        run: echo '.cerberus/' >> .cerberusignore

      - name: Run Cerberus examination
        id: scan
        continue-on-error: true
        env:
          FEEDER_MODE: ${{ inputs.feeder_mode || 'native-only' }}
          STRICT_FEEDERS: ${{ inputs.strict_feeders || 'false' }}
        run: |
          scan_args=(
            .
            --json cerberus-report.json
            --html cerberus-report.html
            --sarif cerberus.sarif
            --fail-under 80
            --no-color
          )

          if python3 .cerberus/examine.py --help | grep -q -- '--native-only'; then
            if [[ "$FEEDER_MODE" == 'auto' ]]; then
              scan_args+=(--feeders auto --feeder-json cerberus-feeders.json)
              if [[ "$STRICT_FEEDERS" == 'true' ]]; then
                scan_args+=(--strict-feeders)
              fi
            else
              scan_args+=(--native-only)
            fi
          fi

          python3 .cerberus/examine.py "${scan_args[@]}"

      - name: Publish findings to GitHub Code Security (SARIF)
        if: always()
        continue-on-error: true
        uses: github/codeql-action/upload-sarif@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9
        with:
          sarif_file: cerberus.sarif

      - name: Upload Cerberus report artifacts
        if: always()
        uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
        with:
          name: cerberus-security-review
          path: |
            cerberus-report.json
            cerberus-report.html
            cerberus.sarif
            cerberus-feeders.json
          if-no-files-found: warn
          retention-days: 14

      - name: Add Cerberus summary
        if: always()
        env:
          SCAN_OUTCOME: ${{ steps.scan.outcome }}
          REPORT_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
        run: |
          {
            echo '# CERBERUS LABS — Security Review'
            echo
            echo "Cerberus review result: **${SCAN_OUTCOME}**"
            echo
            echo "[Open workflow run](${REPORT_URL}) · Download the full HTML/JSON reports from artifacts below."
          } >> "$GITHUB_STEP_SUMMARY"

      - name: Enforce score threshold
        if: steps.scan.outcome == 'failure'
        run: |
          echo 'Cerberus found critical issues or the repository scored below the configured threshold.'
          exit 1

3. Key Features of the GitHub Action

Next steps