원클릭으로
vulnerability-scanning
Local vulnerability scans: dependencies, secrets, GitHub Actions, SAST, SBOM, package intake, cron/predeploy.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Local vulnerability scans: dependencies, secrets, GitHub Actions, SAST, SBOM, package intake, cron/predeploy.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | vulnerability-scanning |
| description | Local vulnerability scans: dependencies, secrets, GitHub Actions, SAST, SBOM, package intake, cron/predeploy. |
Use this skill to inspect codebases, choose local security scanners, run the repo CLI or direct tools, and report evidence-backed findings without requiring SaaS services for normal scans.
python3 scripts/vuln-scan.py validate-tools --config templates/config-starter.yaml --format text
Use --deep before broad or unattended scans. Do not install scanners unless
the user explicitly asks for setup or approves host changes. Missing scanners,
timeouts, unsupported targets, and parse failures are setup debt, not clean
coverage. Install guidance lives in references/install-tools.md.
scripts/vuln-scan.py scan when it supports the requested mode.templates/config-starter.yaml; override narrowly.full focused on security: dependencies, broad repo, secrets, workflow, and SAST.--scan-mode hygiene is requested.package_intake.osv_api_enabled: false unless the user wants public OSV lookup.--output and --artifact-dir outside target repos for multi-repo scans, usually under /tmp.Run a normal scan:
python3 scripts/vuln-scan.py scan \
--config templates/config-starter.yaml \
--root /path/to/repo-or-workspace \
--scan-mode full \
--output /tmp/vuln-summary.json \
--artifact-dir /tmp/vuln-artifacts \
--format text
Plan without scanner execution:
python3 scripts/vuln-scan.py plan --config templates/config-starter.yaml --root /path/to/repo --scan-mode full --format text
List engines or validate tools:
python3 scripts/vuln-scan.py list-engines --format text
python3 scripts/vuln-scan.py validate-tools --config templates/config-starter.yaml --format text --deep
Retest focused engines:
python3 scripts/vuln-scan.py scan --root /path/to/repo --scan-mode full --only-engine trivy --output /tmp/vuln-summary.json --artifact-dir /tmp/vuln-artifacts --format text
Render an existing JSON summary:
python3 scripts/vuln-scan.py render-report /tmp/vuln-summary.json --format text
For more examples, direct tool fallback syntax, and parser expectations, read
README.md and references/.
scripts/nightly-vuln-scan.py may remain in use for existing cron jobs.references/install-tools.md for install commands and tool-specific troubleshooting.$HOME/.hermes/vuln_knowledge.json or the configured tracker path to avoid reprocessing known fixed, unfixable or blocked findings until their retry window expires.| Mode | Use |
|---|---|
full | Default local security scan; SBOM, hygiene, supply-chain, and licenses remain explicit |
dependencies | Known vulnerable dependency checks |
secrets | Secret scanning and git-tracked .env* checks |
ci | GitHub Actions and CI workflow checks |
supply-chain | Package-intake and malicious-package behavior checks |
sast | Source-code security scanning |
sbom | SBOM generation and optional SBOM vulnerability checks |
hygiene | Repo security hygiene checks |
remediation-prep | Group findings by likely fix strategy without editing |
| Evidence or request | Preferred scanner |
|---|---|
| Supported dependency manifests or lockfiles | OSV Scanner first, then native audit |
bun.lock or bun.lockb | bun audit --json |
package-lock.json | npm audit --json |
pnpm-lock.yaml | pnpm audit --json |
| Python manifests | pip-audit |
| Rust manifests | cargo audit |
| Go or JVM manifests | OSV Scanner; add dedicated tooling only when implemented or direct-run and reported |
| Dockerfile, Compose, Terraform, Kubernetes, Helm | Trivy filesystem scan |
| Image target | Trivy image scan |
| License review | Add --include-licenses |
| Secrets-only or git repo | Gitleaks; TruffleHog for verified credential checks |
| Missing secret tools | Built-in metadata-only secret-pattern scan |
| New npm or PyPI dependency | GuardDog; optional OSV API lookup only when enabled or requested |
| GitHub Action intake | GuardDog, zizmor, action pinning checks |
.github/workflows | zizmor and actionlint |
| Source security scan | Semgrep CE with --config=auto |
| SBOM requested | Syft, then Grype when vulnerability scan from SBOM is needed |
| Repo hygiene requested | OpenSSF Scorecard, noting network/API requirements |
--allowed-root, --allowed-label-prefix, --forbidden-label-prefix, and --fail-on-scope-violation for unattended scans.Every non-silent report must include:
scanned, verified_clean, not_requested, not_applicable, skipped, unsupported, scanner_missing, scanner_failed, or timed_outNever print secret values. Report metadata only: file, line, detector, severity,
confidence, git-tracked state, and remediation hint. Normalized report fields
are documented in references/report-schema.md.
For unattended cron delivery, respond exactly:
[SILENT]
Only do this when there are zero findings, actionable setup-debt items, scope
violations, parse failures, and scanner timeouts. Do not return [SILENT] if a
missing tool prevented coverage.
For dependency intake, identify ecosystem and package, then run:
python3 scripts/vuln-scan.py package-intake npm package-name --output /tmp/package-intake.json --artifact-dir /tmp/package-intake-artifacts --format text
Supported ecosystems: npm, pypi, go, rubygems, github_action,
extension. Return one of allow, allow with caution, avoid, or
blocked pending review. Do not add the dependency unless separately asked.
The scan phase is read-only. Run Codex remediation only when the user explicitly
asks or the command includes --auto-remediate.
For remediation, preserve one log per repo under the artifact directory and guard each task:
Use $HOME/.hermes/vuln_knowledge.json or the configured tracker path to skip
known fixed/unfixable/blocked findings until their retry window expires.