REES analyzer reference
Every analyzer name you can put in REES_ANALYZERS, what it inspects, what it reports, and whether it needs network or GitHub token access.
REES runs analyzers independently. A failed analyzer is marked degraded, completed analyzers still return findings, and an empty result produces no user-facing brief. Use exact analyzer names in REES_ANALYZERS. A typo-only analyzer list fails closed with no analyzers selected.
# Unset, all, or * runs the full registry.
REES_ANALYZERS=all
# A subset runs only the named analyzers.
REES_ANALYZERS=secret,actionPin,redos
# Invalid names are ignored; if none are valid, REES runs no analyzers.
REES_ANALYZERS=unknownNameAll analyzer names
dependency
lockfileDrift
secret
license
installScript
actionPin
eol
redos
provenance
codeowners
secretLog
assetWeight
typosquatNetwork and token model
- Pure analyzers
- secret, actionPin, redos, and secretLog work only from the diff/files sent to REES.
- Public registry analyzers
- dependency, lockfileDrift, license, installScript, eol, provenance, and typosquat call public package or lifecycle APIs.
- GitHub API analyzers
- codeowners and assetWeight need author/head metadata and GitHub token forwarding when the repo is private.
REES_FORWARD_GITHUB_TOKEN=false. REES will still receive the PR diff/files when enabled, but token-aware analyzers will skip GitHub API reads they cannot authenticate.Analyzer details
Dependency vulnerabilities
Checks changed direct dependency versions against OSV.dev.
dependency- Looks at
- Added or upgraded dependencies in package.json, requirements.txt, and go.mod diffs.
- Reports
- Known CVEs with severity, advisory id, summary, and fixed version when OSV publishes one.
- Network
- Calls OSV.dev. No GitHub token required.
- Operational note
- Manifest-only by design; use lockfileDrift for transitive lockfile changes.
Lockfile drift
Finds vulnerable transitive dependency versions introduced only through lockfile changes.
lockfileDrift- Looks at
- package-lock.json, yarn.lock, and poetry.lock patches, excluding packages already named in a changed manifest.
- Reports
- Lockfile line, package/version, ecosystem, direction, and OSV vulnerability details.
- Network
- Calls OSV.dev querybatch. No GitHub token required.
- Operational note
- Useful when a PR does not touch a top-level manifest but changes resolved dependency pins.
Hardcoded secrets
Scans added diff lines for credential-shaped values.
secret- Looks at
- Added lines in every changed file patch.
- Reports
- File, line, secret kind, and confidence. The matched value is never returned.
- Network
- Pure local analyzer. No external network call.
- Operational note
- High-confidence patterns are treated as rotate-and-remove candidates; generic assignments stay verify-first.
Dependency licenses
Checks licenses for newly added or upgraded dependencies.
license- Looks at
- The same direct dependency changes used by the dependency analyzer.
- Reports
- Copyleft or unknown license classifications that need maintainer compatibility review.
- Network
- Calls deps.dev. No GitHub token required.
- Operational note
- Permissive and otherwise-known licenses are intentionally silent.
npm install scripts
Flags npm packages that run lifecycle hooks during install.
installScript- Looks at
- New or upgraded npm dependencies.
- Reports
- Package, version, hook names, and publish date when available.
- Network
- Calls the npm registry. No GitHub token required.
- Operational note
- The script body is not returned, which keeps the brief compact and non-executable.
Unpinned GitHub Actions
Detects third-party workflow actions pinned to mutable tags or branches.
actionPin- Looks at
- Added uses: lines in .github/workflows YAML patches.
- Reports
- Workflow file, line, action, and mutable ref.
- Network
- Pure local analyzer. No external network call.
- Operational note
- Official actions/* and github/* actions are excluded to keep the signal focused.
End-of-life runtimes
Checks changed runtime and base-image pins against EOL calendars.
eol- Looks at
- Dockerfile FROM lines, .nvmrc, and go.mod runtime pins.
- Reports
- File, product, version, EOL date, and whether the release is already EOL or close to EOL.
- Network
- Calls endoflife.date. No GitHub token required.
- Operational note
- Only changed pins are checked; existing old runtimes outside the PR are not reported.
ReDoS-prone regex
Finds newly introduced regex shapes that can catastrophically backtrack.
redos- Looks at
- Regex literals and RegExp constructor string arguments in added lines.
- Reports
- File, line, and a truncated vulnerable pattern.
- Network
- Pure local analyzer. No external network call.
- Operational note
- Structural and precision-first; it flags nested unbounded quantifier shapes such as (a+)+.
Provenance and committed artifacts
Checks package attestations and reviewability of newly added artifacts.
provenance- Looks at
- New npm/PyPI dependency versions plus added binary, vendored, and minified files.
- Reports
- Missing attestations, binary files without reviewable source, and vendored or minified code.
- Network
- Calls npm and PyPI attestation/provenance endpoints for package checks. Path checks are local.
- Operational note
- Network failures fail safe; it flags only confident no-attestation responses.
CODEOWNERS coverage
Checks whether changed files cross ownership domains not owned by the PR author.
codeowners- Looks at
- .github/CODEOWNERS, CODEOWNERS, or docs/CODEOWNERS plus the changed file list.
- Reports
- Owned files where the PR author is not listed, plus ownership blast-radius context in the rendered brief.
- Network
- Calls the GitHub API. Requires author plus GitHub token forwarding for private repos.
- Operational note
- Set REES_FORWARD_GITHUB_TOKEN=false to disable token forwarding; this analyzer will then skip when it cannot read CODEOWNERS.
Secrets or PII in logs
Flags added code that writes sensitive values to logs or stdout.
secretLog- Looks at
- Added lines that call console, logger, process.stdout, or process.stderr sinks.
- Reports
- File, line, sink, and category: secret, pii, or request-object.
- Network
- Pure local analyzer. No external network call.
- Operational note
- String log messages are stripped before matching, so ordinary prose like password reset is not enough to trigger.
Heavy binary assets
Finds large binary assets added to a PR, and growth deltas when base size is available.
assetWeight- Looks at
- Changed binary assets such as images, fonts, archives, PDFs, videos, and compiled binaries.
- Reports
- Path, size, delta, and whether the asset was added or grown.
- Network
- Calls the GitHub API. Requires headSha and GitHub token forwarding for private repos.
- Operational note
- Added asset detection works from headSha. Growth comparison needs baseSha in the enrichment request.
Typosquat and dependency-confusion risk
Checks newly added dependency names for near-miss and publicly claimable package names.
typosquat- Looks at
- Newly added npm and PyPI dependency names.
- Reports
- Typosquat matches against popular packages, or unscoped names missing from the public registry.
- Network
- Uses bundled popular-package lists plus npm/PyPI registry lookups for dependency-confusion checks.
- Operational note
- Scoped npm packages are treated as namespace-protected and are not flagged as typosquats.
Back to REES setup
Use REES enrichment for enablement, auth, troubleshooting, and where the brief appears in the review result.