Look at open-source scanning tools today and you'll see the same word stamped on every one of them: AI. AI-native reachability, AI exploitability, AI-assisted triage. If OSSScan also leans on AI to cut through the noise, it's fair to ask what actually makes it different. The honest answer is not that OSSScan has AI and the others don't. It's the reverse: everyone else supplies the AI, and OSSScan supplies none of its own.

If they all use AI, what does “whose AI” even change?

Quite a lot, as it turns out. Where the model lives decides who sees your code, who you're locked into, and who is accountable when a verdict is wrong. Those are not small things, and they split cleanly into two very different designs.

Two ways to put AI in a scanner

The common design is a closed system. The tool bundles a model of its own and runs the analysis in its own cloud. To do that, it has to ingest the very thing you might be most careful about: your source code and your full dependency graph, uploaded to a vendor so their model can reason over it. That makes the vendor a standing intermediary. Its value depends on you continuing to route your code and your findings through its service, using the model it chose for you, at the pace and price it sets.

OSSScan is the other design: a bridge. It makes zero AI calls of its own. Instead, it turns a scan into a structured investigation job, one clear request per finding with the dependency chain, where the package is actually imported, the severity, the real-world exploitation probability, and the version that fixes it, and hands that job to the AI coding agent you already run. Your agent, whether that's Claude Code, GitHub Copilot, or a local model, reads your repo on your machine, under its own trust boundary, and answers the question that matters. OSSScan orchestrates and governs the process. The intelligence is yours.

The closed system

Their model, their cloud

Bundles its own AI and runs it in the vendor's cloud, which means uploading your code and dependency graph. You use the model they picked, and your data leaves your machine to do it.

OSSScan: a bridge

Your AI, your machine

Makes zero AI calls. It packages each finding into an investigation job and hands it to the agent you already trust to write your code. The reasoning happens where your code already lives.

Why a bridge is a feature, not a shortcut

Handing the reasoning to your own agent isn't OSSScan doing less work. It's a deliberate bet, and three things fall out of it.

No lock-in, and no bet against your agent. A closed system's moat is its model, so it's quietly betting that its model stays ahead of the frontier agents you already pay for. That's a hard bet, and it gets harder every year. OSSScan makes the opposite bet. As the best agents get more capable, OSSScan simply inherits it, because the agent doing the reading is the one you brought. You're never stuck with a vendor's model that has fallen behind the one on your own desk.

Your data boundary stays yours. With a closed system there's a vendor cloud in the loop that has to be trusted with a precise map of where your software is weakest. With OSSScan there isn't. If the agent you bring runs locally, nothing leaves your machine at all; if it's a cloud agent like Claude Code or Copilot, your code context goes to the AI provider you already chose, on the terms you already accepted, never to a scanning vendor. For teams whose source code is the entire business, that's the difference between a conversation with the security team and a non-starter.

A human still owns the final call. The durable part of OSSScan isn't a clever prompt, it's the scaffolding around the agent: deterministic Syft and Grype scanning plus license detection as the evidence base, and a governed sign-off on top, who cleared a finding, when, and why, recorded as an audit trail. An agent's “not exploitable” always needs a human of record to accept or override it, and that layer only matters more as agents get more autonomous. Someone accountable still has to own each risk decision for auditors, regulators, and customers.

The key to a trustworthy AI scanner: show all the evidence

A verdict on its own is worth very little. A tool that prints a confident “not exploitable” with a percentage next to it, and no way to check whether it's right, is asking to be trusted rather than reviewed. And a human sign-off on top of that is only as good as what the reviewer can actually see. The key to an AI scanner you can rely on is that it puts the full evidence on the table: every fact behind the verdict, the reasoning that connects them, and the steps to re-check both. Oversight only means something when the reviewer can inspect the work.

That's why every OSSScan evaluation is built to be inspected, not trusted. Each finding comes back as a structured report that keeps what is known separate from what is concluded, and shows you how to verify both. A single verdict typically includes:

  1. What it is. A plain description of the actual flaw, not just an advisory ID.

  2. Reachability. Whether the vulnerable code is reachable in your deployed application, with the reasoning spelled out: is the function called, does it run at build time or in shipped code, is it exposed to end users.

  3. Key facts. The evidence, stated as facts and made reproducible: for example “present only as a transitive dependency,” “imported in 0 of 177 source files,” each with the exact command you can re-run to confirm it, like npm why path-to-regexp.

  4. Inferences. The conclusions drawn from those facts, labeled as inferences and kept separate from them, so you can see exactly where evidence ends and judgment begins.

  5. Suggested next checks. Concrete steps to confirm the call yourself, plus the remediation path, such as bumping the transitive version through an override.

  6. A verdict and a reviewer of record. Exploitable, not exploitable, or needs a closer look, which a human then accepts or overrides, with who decided and why recorded as an audit trail.

None of that is abstract. Here is one real evaluation, exactly as it comes out of a scan of a React application, for a path-to-regexp advisory that a plain scanner would leave sitting on your board as an unqualified High:

The raw alert

path-to-regexp 0.1.12, flagged High. A regular-expression denial-of-service (ReDoS) advisory. On a plain list, a red row demanding a response.

AI — What it is

path-to-regexp generates a regex vulnerable to ReDoS on crafted route strings.

AI — Reachability

Not reachable in production. path-to-regexp is a dependency of express inside webpack-dev-server, used for dev-server route matching only. The vulnerable code executes only on a developer's machine on localhost during development; it is not deployed and end users never reach it. Residual risk is limited to a developer running the dev server while exposed to a malicious origin or network.

AI — Key facts

  • Present only as a transitive dependency (is_direct_dependency=false, imported_in_total=0).
  • A dependency of express inside webpack-dev-server, used for dev-server route matching only (npm why path-to-regexp).
  • A grep for path-to-regexp across src/ (177 source files) returns zero import or require statements.
  • package.json declares react-scripts 5.0.1; the deployed artifact is a static browser bundle from react-scripts build, and webpack-dev-server is excluded from that output.

AI — Inferences

  • The deployed application does not ship this component, so production users cannot trigger the vulnerability.
  • A residual, low-likelihood dev-time risk exists if a developer runs the dev server and visits a malicious website, or exposes localhost to a hostile network.

AI — Suggested next checks

  • Confirm the dev server binds to localhost only and is not exposed to untrusted networks.
  • Optionally override path-to-regexp to 0.1.13 to clear the advisory.

Verdict

Not exploitable, then handed to a human to accept or override, with who decided and why recorded.

Look at what that buys a reviewer. Every factual claim is re-runnable on their own machine, so they can confirm rather than believe. The facts are kept apart from the inferences drawn from them, so they can see exactly where evidence ends and judgment begins. And the tool didn't simply stamp “safe” and move on: it flagged the one residual condition under which the flaw could still bite (a dev running the server against a hostile network) and told the reviewer what to check. That honesty is the tell of a real evaluation rather than a reassuring guess.

That structure is the whole point, and it's why this is a strength worth demanding rather than a nicety. You cannot accountably accept a conclusion you can't inspect, and an auditor, a regulator, or a customer will eventually ask a human why a given risk was cleared. “The tool said so” is not an answer; “here are the facts, here's the inference, and here's how to reproduce it” is. And notice the quiet irony: a cloud platform that reasons over your uploaded code hands you its conclusion, while OSSScan hands you a re-runnable trail on your own machine. On the actual test of “is this a black box,” the local, bring-your-own-agent tool is the transparent one.

OSSScan isn't trying to replace an enterprise scanner

It's worth saying plainly, because pretending otherwise would be the same overselling this article pushes back on. Purpose-built commercial platforms carry things a general-purpose agent doesn't guarantee: an always-on engine that inspects every pull request, validated deep dataflow and taint reachability, org-scale dashboards, and one-click remediation. If your organization needs that, those tools earn their place.

But standing up an always-on, check-every-PR platform is a real commitment in both directions. There's the cost of an enterprise subscription, and there's the effort: wiring it into every pipeline, tuning the noise, and staffing a program around it. Plenty of teams can't make that commitment, or simply don't want to, and they shouldn't have to in order to take their open-source risk seriously.

OSSScan was written for them. Instead of an always-on program, it offers an OSS test pass: a deep, AI-assisted review you run deliberately, at a cadence you choose, to get the most out of the engineering bandwidth you actually have. And it isn't either/or with real-time coverage. Between passes, a free tool like GitHub's Dependabot handles the continuous scanning and alerting, and OSSScan can quiet the alerts it has already investigated so that stream stays manageable. We wrote a companion piece on pairing the two: Dependabot and OSSScan: Better Together.

So OSSScan's play is not to out-engineer a vendor's platform or match its scale. It's to be the neutral, non-lock-in bridge that pairs the agent you already trust with deterministic scanning and governed, auditable evidence, at a commitment level a leaner team can actually say yes to, and without your code ever leaving your control.

Whose AI, running where?

So yes: other open-source scanners use AI. Almost all of them. The box is ticked everywhere, which is exactly why ticking it settles nothing. The questions that actually matter are the next three: whose model is reading your code, whose cloud is it running in, and who signs off on the final call?

A closed system answers all three with “ours.” OSSScan answers them with “yours.” A model-supplying scanner keeps your code flowing through its cloud; OSSScan hands the investigation to the AI you already trust, on your machine, and stays the human control point that owns the final call, with the full working laid out so that sign-off is real rather than a rubber stamp. That's the whole difference.

← Back to the OSSScan Blog