Non-English comments are not evidence of malware and are not scored.
Detection coverage
Know what the scan can see.Know where review still matters.
This guide maps repyy’s built-in static checks to their rule IDs, explains the controls that reduce false positives, and names the boundaries that a scan deliberately leaves outside its scope.
Exact indicators age. Heuristics can produce false positives and false negatives. NO FINDINGS means no enabled rule matched within completed coverage; it does not prove safety.
Coverage map
The scanner combines individual indicators with correlated behavior. The IDs below are the families you will see in terminal, JSON, SARIF, and HTML reports.
eval, Function constructors, VM execution, string timers, browser execution APIs, OS process spawningEXEC-*, COMBO-002OBFS-*, UNICODE-001PKG-001, PY-001, PHP-001, RUST-001, RUST-002, GO-001, JVM-001, DOTNET-001IOC-PKG-*, TYPOSQUAT-001, PKG-002, PKG-003, PKG-005NPMRC-*, LOCK-001, PKG-004, PKG-006, PKG-008, PKG-009, PY-003, RUBY-002, RUST-003, RUST-004, RUST-005, PHP-002, PHP-003, NUGET-001, YARN-*, JVMWRAP-*CHAIN-*, IMPORT-002, DOCKER-002BACKDOOR-*, IMPORT-001, IMPORT-003CRED-*, EXFIL-002, ENV-001SECRET-*NET-*, IPURL-001, EXFIL-001FINGERPRINT-001, COMBO-001REVSHELL-*MINER-001EVADE-001, COMBO-003workflow_run jobs, pull requests on self-hosted runners, CI variable injectionCICD-*IDE-*, AGENT-*IMAGE-001ADD, privileged/host namespaces, Docker socket, capabilities, sensitive mountsDOCKER-*GITHOOK-*, GITMETA-001IOC-HASH-SHA256, BINARY-001, EXECBIT-001, SYMLINK-*, ARCHIVE-001, REPO-*SOCIAL-*, APT-001Supply-chain files by ecosystem
These are static review signals in repository files. An alternate source or build hook can be intentional; repyy does not install, resolve, or execute it.
package.json lifecycle scripts, non-registry dependencies across all four scopes, aliases checked by actual package name, nested overrides and resolutions; registry settings, Yarn executable/plugins, and suspicious lockfile URLs. npm package spec · Yarn settingsrequirements*.txt, pip config, Pipfile, pyproject.toml, and uv.toml alternate indexes or unsafe uv strategy; setup hooks and direct URL/VCS dependencies. pip format · uv indexesGemfile and .bundle/config alternate sources or mirrors and inline Git/path gems. Gemfile.lock has generic text checks, not a resolved-source audit. Bundler Gemfilego.mod/go.work replacements, including block form, and //go:generate. go.sum hashes are not independently audited. Go module referenceCargo.toml declared or sibling build.rs execution, Git/path/registry dependencies, and overrides; .cargo/config.toml source replacement. Cargo.lock is not resolved. Cargo build scripts · source replacementcomposer.json scripts, alternate repositories, and unrestricted plugin permission. composer.lock has generic text checks, not a resolved-source audit. Composer repositories · plugin permissionsNuGet.Config feeds and wildcard mappings; project and centrally managed Directory.Packages.props dependencies; MSBuild Exec in project, .props, and .targets files. NuGet configuration · MSBuild ExecHow repyy improves precision
Rules are interpreted with context so a suspicious token in a test fixture is not treated exactly like the same token in an install hook. Precision changes the review signal; it never turns a scan into proof of safety.
raw checks content, code separates executable tokens from common comments and literals, and structured checks parse supported formats.Artifact findings require a download of an upstream run’s artifact followed by a command in the same workflow_run job. Cache-write findings require pull_request_target, issue_comment, or workflow_run with effective write or write-only cache mode. They prompt review of upstream trust and job behavior; see GitHub’s secure-use guidance and cache access guidance. CI interpolation and secret-egress checks also inspect decoded multiline run blocks one step at a time. A pull_request job on a self-hosted runner is a review signal because the scanner cannot infer repository visibility or fork-approval settings; see GitHub’s runner warning.
Every finding keeps matched locations, occurrence totals, confidence, disposition, and a stable fingerprint. Display controls such as --min-severity, --min-confidence, and --detail change what you see, not the verdict or exit code.
repyy scan ./repo --min-severity high --min-confidence high --detail reviewCoverage has a boundary
Default resource limits prevent hostile repositories and archives from exhausting the scanner. When a timeout, limit, permission, clone, archive, or read error reduces coverage, the result is SCAN INCOMPLETE.
--include-dependenciesrepyy scan ./repo --timeout 20m --max-files 150000 --max-file-size 104857600Review the coverage warnings before relying on a result. Exit code 2 indicates an incomplete target, even if another target completed successfully. See the exit-code reference for automation behavior.
Package-manager options such as pip -r/-c are not followed, build configuration is not evaluated, and declared dependencies are not compared with resolved lockfile content. Wrapper archive hashes are checked for presence and format, not verified against downloaded bytes. Sibling build.rs detection applies to unpacked repository files.
Raster-image metadata and pixels are not parsed for embedded instructions or scripts. Valid text SVG files are inspected for active content.
Deliberate exclusions
Some signals are outside the scanner’s private, offline boundary or would create misleading accusations.
GitHub account age, followers, and activity are not collected. They would require sending identifiers to an online API.
Loopback, private, unspecified, link-local, and multicast addresses are excluded from raw-IP alerts.
Lockfiles, source maps, generated output, and full-SHA-pinned GitHub Actions receive targeted exclusions where appropriate.
Scans never contact the update service or upload repository data. Use repyy intel status to inspect snapshot age; use repyy intel update only when you choose to download a signed public snapshot.
Explain a rule before acting
Rule explanations are available offline and show the rule’s severity, confidence, disposition, category, matching scope, applicable paths, rationale, legitimate-use context, and recommended action.
repyy rules explain EXEC-001repyy rules explain EXEC-001 --format jsonFor package indicators, explanation includes the active snapshot’s advisory source and affected-version context. A package name alone is a review signal; verify the resolved version and artifact before deciding.
Inspect the active intelligence
Built-in behavioral rules and the dated offline intelligence snapshot are separate inputs. The snapshot adds sourced package/version advisories and exact published file hashes.
repyy intel statusrepyy rules listrepyy rules list --format jsonEvery report records the ruleset and intelligence snapshot used, so a finding can be audited later. Read the intelligence guide for update and rollback behavior.
A practical review workflow
Look for SCAN INCOMPLETE, skipped dependency trees, archive warnings, and the snapshot date.
Open high-confidence critical findings in executable, install-time, or CI code. Then review hardening and informational findings.
Use the location, file role, match scope, rationale, and legitimate-use context. A rule hit is a prompt for inspection.
Ask the owner for context, continue in an isolated environment, or stop. Keep dependencies and target code unexecuted until review is complete.
Return to the main documentation, or open the dedicated CLI reference and configuration guide.
Try a rule ID, detection area, or “limits”.