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
Generated from the built-in behavioral catalog for ruleset 2026.10.27. Each ID links to its exact scope, base severity and confidence, legitimate use, and review action. Package and hash advisories belong to the separate intelligence snapshot.
AGENT-001 AI-agent configuration requests automatic command execution (high/medium; raw)ARCHIVE-001 Archive entry escapes its extraction root (critical/high; structured)BACKDOOR-002 Hardcoded authentication bypass or universal credential (high/medium; raw)BACKDOOR-001 Request-controlled input reaches command execution (critical/high; code)FONT-002 Binary font file requires provenance review (medium/high; structured)SYMLINK-002 Symbolic link target is unavailable (medium/medium; structured)BUILD-001 CMake configuration executes an external command (medium/high; raw)BUILD-002 Meson configuration executes an external command (medium/high; raw)BUILD-003 Bazel rule declares a shell command (medium/medium; raw)BUILD-004 Make evaluates a shell command while reading the build file (high/high; raw)CICD-006 Privileged workflow_run job executes after downloading an artifact (high/medium; structured)CICD-007 Low-trust workflow explicitly allows cache writes (high/medium; structured)CICD-008 Pull-request workflow runs on a self-hosted runner (high/medium; structured)CICD-002 CI workflow interpolates untrusted event data into a shell command (high/medium; raw)CICD-004 CI command sends a secret to an external endpoint (critical/high; raw)CICD-001 Privileged pull_request_target workflow checks out untrusted pull-request code (critical/high; raw)CICD-005 Non-GitHub CI configuration builds a shell command from change-controlled input (high/medium; raw)CICD-003 GitHub Action is referenced by a mutable tag or branch (high/high; structured)COMBO-001 Collection appears alongside network transfer (high/high; structured)BINARY-001 Compiled executable content is present (high/high; structured)PHP-002 Composer defines alternate package repositories (medium/medium; structured)PHP-003 Composer permits every dependency plugin to execute (high/high; structured)PHP-001 Composer package defines an installation or update script (high/medium; raw)APT-001 BeaverTail or InvisibleFerret filesystem indicator (high/high; raw)DOCKER-002 Container build downloads and immediately executes a script (critical/high; raw)DOCKER-001 Container configuration exposes host control (high/medium; raw)DOCKER-003 Container imports remote content or mounts a sensitive host path (high/medium; raw)CRED-001 Access to sensitive credential storage (high/high; raw)CRED-002 File API reads a sensitive path (high/medium; raw)EXFIL-002 Clipboard, cookie, browser-password, or keylogging access (high/medium; raw)MINER-001 Cryptocurrency mining indicator (high/high; raw)CHAIN-002 Encoded content decoded and executed (critical/high; raw)DECODE-001 A bounded literal decode reveals a rule indicator (high/medium; structured)PKG-005 Dependency uses an unusually high major version (medium/medium; structured)PKG-008 Dependency override changes package source or identity (high/medium; structured)IDE-006 Devcontainer configuration installs reusable features (medium/high; raw)AUTORUN-002 Nix development shell defines a shell hook (medium/high; raw)AUTORUN-001 Directory-entry environment hook can execute repository-controlled commands (high/medium; raw)DOC-001 PDF declares active or embedded content (high/medium; structured)DOTNET-001 MSBuild project or imported file runs a command (high/medium; structured)CHAIN-001 Remote download piped into a command interpreter (critical/high; raw)CHAIN-003 Downloaded file is made executable and launched (critical/medium; raw)EXEC-001 Dynamic code execution primitive (high/medium; code)EXEC-003 Browser or timer string execution primitive (high/medium; raw)IMPORT-001 Dynamic import or require assembled at runtime (high/medium; code)IMPORT-003 Node.js internal or global require bypass (high/high; code)IDE-001 Editor configuration can execute a command automatically (high/high; raw)IDE-002 Project-local editor configuration can execute commands, override tools, or weaken workspace safeguards (high/medium; raw)IDE-005 Workspace task or debug configuration references an executable command (medium/high; raw)IDE-008 VSIX extension declares activation or execution capabilities (medium/high; structured)IDE-009 VSIX extension package declares an installation lifecycle script (high/high; structured)IDE-004 Repository configuration installs VS Code extensions (medium/high; raw)IDE-007 Packaged VSIX editor extension is present (medium/high; structured)IDE-003 Workspace recommends VS Code extensions (low/high; raw)EXEC-005 PowerShell executes an encoded command (critical/high; raw)OBFS-001 Long base64-like payload (medium/medium; raw)ENV-001 Broad environment-variable access (medium/low; code)SYMLINK-001 Symbolic link escapes the repository (high/high; structured)COMBO-003 Environment evasion appears alongside execution (high/high; structured)EXECBIT-001 File has executable permissions (low/medium; structured)EXFIL-001 WebSocket or DNS-based data transfer primitive (high/medium; raw)COMBO-002 Network retrieval appears alongside execution (critical/high; structured)FONT-004 OpenType SVG glyph contains active content (medium/medium; structured)FONT-003 Font container is malformed or contains an executable payload (high/high; structured)FONT-001 Script installs or registers fonts on the host (medium/high; raw)FONT-005 Font contains TrueType instructions (low/high; structured)GITHOOK-001 Executable Git hook or hooks-path override (high/medium; raw)GITHOOK-002 Active Git hook contains execution or remote-fetch behavior (critical/high; structured)GITHOOK-003 Repository config installs and runs pre-commit hooks (medium/high; raw)GITMETA-001 Git configuration defines an executable filter or helper (critical/high; raw)OBFS-009 Exported router accesses Node global state (medium/low; raw)GO-001 Go source declares a generator command (medium/high; raw)GO-002 Go module replaces a dependency source (medium/medium; raw)IPURL-001 URL uses a hardcoded public-looking IP address (medium/medium; raw)OBFS-005 High-entropy content appears beside execution (medium/medium; structured)FINGERPRINT-001 Host or user fingerprint collection (medium/low; code)IMAGE-001 SVG contains active content (medium/medium; structured)JVM-001 JVM build configuration invokes an external process (high/medium; raw)JVM-002 JVM build uses a custom dependency repository (medium/medium; raw)JVMWRAP-002 JVM wrapper distribution has no expected SHA-256 (medium/high; structured)JVMWRAP-003 JVM wrapper distribution SHA-256 is malformed (high/high; structured)JVMWRAP-001 JVM wrapper distribution URL is missing or redirects from the official source (high/high; structured)IOC-HASH-SHA256 File hash matches confirmed intelligence (critical/high; structured)IOC-PKG-* Package declaration matches confirmed intelligence (critical/high; structured)LOCK-001 Lockfile resolves a package from a nonstandard URL (high/medium; raw)OBFS-004 Very long single line (low/low; structured)NUGET-001 NuGet configuration uses an alternate package source (medium/medium; structured)DOC-004 Office document contains a Dynamic Data Exchange field (high/medium; structured)DOC-003 Office package references external content (medium/high; structured)DOC-002 Office package contains a VBA macro project (high/high; structured)PKG-009 Dependency name resolves to a different registry package (medium/medium; structured)PKG-004 Package exposes an executable command (low/medium; structured)PKG-006 Package binary target escapes the package or embeds execution (high/high; structured)PKG-001 Package lifecycle script is present (medium/medium; structured)YARN-001 Project selects a local Yarn executable (medium/high; structured)YARN-002 Project loads a Yarn plugin (medium/high; structured)NPMRC-001 Package manager configuration contains a registry credential (high/high; raw)NPMRC-002 Custom package registry (medium/medium; raw)PKG-007 Package script downloads and executes content (high/medium; structured)PATH-001 Request-controlled path reaches a file operation (medium/medium; code)EXEC-004 Process-execution API is imported (low/medium; raw)EXEC-002 Operating-system command execution (high/medium; code)AGENT-002 Instruction attempts to override agent safety or expose secrets (high/medium; raw)OBFS-008 Constructor or prototype access can bypass direct-call signatures (medium/low; raw)PROTO-001 Write to JavaScript prototype internals (high/medium; code)EXEC-006 Windows system utility can proxy execution or download content (high/high; raw)PY-002 Python dependency is loaded from a URL or VCS source (high/medium; raw)PY-001 Python package defines installation-time command hooks (high/medium; raw)PY-003 pip configuration changes package lookup sources (medium/medium; structured)PY-004 Python .pth file contains a startup import line (medium/high; raw)PY-005 Python startup customization module contains content (medium/high; raw)NET-001 Remote content fetch (medium/low; raw)IMPORT-002 Code imported directly from a remote URL (critical/high; raw)FLOW-001 Axios response data reaches dynamic or process execution in the same function (critical/high; structured)FLOW-002 Python remote response may reach dynamic code execution or compilation (high/medium; structured)REPO-001 Repository has no top-level README (low/high; structured)REPO-002 Repository has no top-level license (low/high; structured)REVSHELL-001 Reverse or bind shell behavior (critical/high; raw)REVSHELL-002 Language one-liner creates a command shell over a socket (critical/high; raw)RUBY-001 Ruby dependency is loaded from a Git or path source (high/medium; raw)RUBY-002 Bundler package source is redirected (medium/medium; structured)RUST-001 Rust package declares a build script (medium/high; raw)RUST-002 Cargo automatically executes a package build.rs (medium/high; structured)RUST-004 Cargo dependency source override (high/medium; structured)RUST-005 Cargo dependency uses a non-default source (high/medium; structured)RUST-003 Cargo configuration redirects dependency resolution (high/high; structured)EVADE-001 Sandbox, VM, or CI evasion logic (high/medium; raw)SECRET-001 Private key material (high/high; raw)SECRET-002 Provider credential pattern (high/high; raw)SECRET-003 Generic API key, access token, or client secret assignment (high/medium; raw)SHELL-001 Shell profile or operating-system startup persistence (high/medium; raw)SOCIAL-001 Instructions pressure the reader to bypass security controls (medium/medium; raw)SOCIAL-002 Interview instructions combine urgency with execution pressure (low/medium; raw)CHAIN-004 Downloaded file is executed later in the same script (critical/high; structured)PERSIST-002 Repository contains an automatically started service, timer, or launchd job (medium/high; raw)OBFS-002 String decoding or character-code construction (medium/medium; raw)OBFS-003 Dense hexadecimal or Unicode escape sequence (medium/low; raw)OBFS-006 Runtime string reversal or computed global access (medium/medium; raw)OBFS-007 Character shuffler associated with generated obfuscators (medium/medium; raw)PKG-002 Dependency uses a non-registry source (high/medium; structured)PKG-003 Dependency uses a placeholder-like version (medium/medium; structured)NET-002 Known exfiltration or tunneling service endpoint (high/high; raw)INSTALL-001 Setup script installs host packages or global developer tools (medium/high; raw)PERSIST-001 Command creates a service, daemon, login item, or WMI event subscription (critical/high; raw)TYPOSQUAT-001 Dependency resembles a commonly targeted package name (high/medium; raw)UNICODE-001 Invisible or bidirectional Unicode control character (high/medium; raw)UNSERIALIZE-001 Unsafe deserialization primitive (high/medium; code)Supply-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. Executable .pth import lines use Python BOM and line-ending handling, andsitecustomize.py/usercustomize.py startup modules are review signals, including in locally present wheels.pip format· uv indexes· Python startupGemfile 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 orwrite-only cache mode. They prompt review of upstream trust and job behavior; see GitHub’ssecure-use guidanceandcache 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’srunner 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 code2 indicates an incomplete target, even if another target completed successfully. Seethe exit-code reference for automation behavior.
Package-manager options such as pip -r/-c are not followed, build configuration is not evaluated, and declared declarations are not fully reconciled with resolved lockfile content; npm lockfile versions are checked as separate package records. 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. Binary fonts are never rendered: container/table bounds, selected structural invariants, expansion claims, embedded executable signatures, TrueType program presence, and active OpenType SVG content are checked, with embedded SVG expansion capped at 8 MiB. The scanner does not execute or prove arbitrary glyph or shaping bytecode safe.
PDF and Office checks are static: explicit PDF actions, embedded macro projects, Office external relationships, and DDE fields are reported without opening the document. Encrypted content and arbitrary compressed PDF object streams are not evaluated. VSIX archives are inspected for activation and execution contributions, lifecycle scripts, and bundled executable signatures, but extension behavior is not executed.
Repyy does not inventory deployed runtimes or confirm runtime vulnerability exposure. Patch deployed runtimes independently of a source scan. A checkout cannot establish the contents of a future dependency download: inspect the exact locally available wheel or tarball and review archive-limit warnings. Disabling npm lifecycle scripts does not prevent later import-time execution.
Python response-flow review (FLOW-002) follows simple requests/httpx/urllib calls, assignments and response reads intoexec, eval or compile, retaining source and sink locations. Compilation alone is not execution. API identities and control flow are approximate; arbitrary transforms, cross-function or cross-file flows, downloaded files launched as subprocesses, and equivalent flows in every language require manual review.
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. Userepyy 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.
Browse the versioned behavioral rule reference or export it with repyy rules catalog --format json.
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. Readthe 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 andconfiguration guide.