For software teams with no security engineer

Every Advisory read. Only the ones that matter reach you.

agentprime is an always-on security engineer for teams that don’t have one. It reads every dependency Advisory the moment it appears, decides whether it affects your App, shows the evidence, and opens the pull request when it does. Quietly.

Dependabot tells you what’s out of date. agentprime tells you what matters, and opens the PR.

Laravel/PHP and Node/TypeScript Apps on GitHub.

Weekly digest Example
47 Advisories this month
Not affected, here’s why
44
Upgrades merged
3
  • league/commonmark · GHSA-3q6v-r5mr-hxv8 Not affected
    TableExtension is never added to any converter
  • league/commonmark · GHSA-3527-qv2q-pfvx Not affected
    Attributes extension only renders bundled docs, never user input
  • axios Reachable – unproven
    User-supplied URL reaches the affected request path · Upgrade merged
  • + 41 more Not affected, each with file:line evidence
Illustrative. Your digest shows your own Apps and Advisories.

The problem

“You have a vulnerable version” is a fact about versions, not about your App.

Dependency Advisories arrive every day, and more of them as automated discovery finds more. Most don’t apply to a given App: the vulnerable function is never called, the config is off, the code path can’t be reached. Telling which ones matter takes security expertise and time that small teams don’t have.

Today the loop runs on people

  1. 01Someone watches the feeds
  2. 02Tells the team
  3. 03An engineer investigates
  4. 04Someone opens a PR

Every Advisory, every time.

A Match

league/commonmark 2.5.3 is in the affected range >=2.0.0, <2.10.2.

True, and it tells you nothing about whether you’re affected.

A Verdict

Not affected

The Table extension is never added to any converter the App builds, so the vulnerable parser never runs.

Four pieces of file:line evidence attached. See them

From our own App

Twelve Advisories for one package. The first one, settled with evidence.

The first time we ran agentprime on our own Laravel App, one package, league/commonmark, had twelve open Advisories against the installed version. Dependabot would show twelve alerts.

The first one assessed came back Not affected, with six file:line pieces of evidence a developer can check in a minute. No meeting, no ticket, no guessing.

That’s the product in one story. Every Verdict says why, points at the lines, and links to them on GitHub under your own access.

GHSA-3q6v-r5mr-hxv8 · league/commonmark 2.5.3 Not affected

No converter the App builds registers the Table extension. GithubFlavoredMarkdownConverter and GithubFlavoredMarkdownExtension are never used, so TableStartParser never runs, even on the user Markdown that two controllers convert.

Evidence

  • app/Http/Controllers/DocsController.php:18 Converts user Markdown with a CommonMarkConverter, whose environment has the core extension only; no Table extension
  • app/Providers/AppServiceProvider.php:12 Registers a CommonMarkConverter singleton (core extension only)
  • app/Services/StaticDocs.php:25 Converts bundled documentation with the core-only singleton; the page name is restricted to a slug
  • app/Http/Controllers/PreviewController.php:23 Adds CommonMarkCoreExtension and AttributesExtension only; TableExtension and GithubFlavoredMarkdownExtension are never added, so TableStartParser is not registered
Example Verdict, from the test App in our labelled set. Read the Advisory profile

Verdicts

Every Advisory that touches your App ends in a Verdict.

Three possible outcomes, each with evidence. We say “Inconclusive” when we don’t know, because a guess would just be another alert.

  • Not affected

    Here’s why.

    The evidence shows the Advisory can’t be triggered in this App: the function is never called, the extension is never enabled, the input never reaches it.

    Nothing to do. We re-check it when the code the evidence points at changes.

  • Reachable – unproven

    Treated as affected.

    Untrusted input can reach the vulnerable code. We can’t prove it’s exploitable yet, so we don’t call it a Vulnerability, but we don’t wave it away either.

    We open the Upgrade, with the evidence in the PR body.

  • Inconclusive

    And why.

    Sometimes the answer depends on something we can’t see, like server config that isn’t in the repository. We say exactly what we couldn’t determine.

    You know the one thing to look at, instead of everything.

On the roadmap: a Sandbox that runs your App and proves exploitability, adding an Exploitable Verdict. Until it exists, nothing we report is called a Vulnerability.

How it works

From Advisory to pull request, without the triage meeting.

  1. 01

    Connect your App

    Install the GitHub App and pick the repository. We find each App in it, like a Laravel API and a Next.js front end, with its own dependencies.

  2. 02

    Every Advisory, read once

    We read each new Advisory from OSV and the GitHub Advisory Database, or from a link when a disclosure is still a blog post, and write an Advisory profile: what’s vulnerable and what must be true for you to be affected.

  3. 03

    Assessed against your App

    When an Advisory matches a package you have installed, we check the profile’s conditions against your code and return a Verdict with file:line evidence.

  4. 04

    An Upgrade, when it matters

    When the Verdict can’t rule the Advisory out, we open the Upgrade pull request with the evidence in the body. A person on your team reviews and merges it.

Then it stays quiet. One weekly digest: “31 Advisories handled, 29 don’t affect you, 2 Upgrades waiting for review.” Real-time alerts only for a confirmed exploit or an installed malicious package.

The full pipeline

Dependabot

Keep Dependabot. Add agentprime.

Dependabot is free, built in, and already on every repository. It’s good at telling you what’s out of date. It can’t tell you what matters, so most teams end up ignoring it. We fill that gap.

Capability Dependabot agentprime
Knows you have an affected version Yes Yes
Says whether it affects your App No Yes, as a Verdict with file:line evidence
“Not affected”, with the reason No. Dismissing alerts is your job Yes, and re-checked when that code changes
Pull request A version bump for every alert An Upgrade only when the Verdict can’t rule it out, with the evidence in the body
“You’re only affected if…” in plain language Advisory text only A public Advisory profile for every Advisory
Disclosures with no GHSA yet No alert until there is one Provisional profiles, from a link
Who merges You You

Snyk, Endor Labs and Semgrep Supply Chain also do reachability, for larger security teams, and end in a dashboard. agentprime is for teams with no security team, and ends in a pull request.

Covered at launch

Two stacks, done properly.

  • Laravel / PHPComposer
  • Node / TypeScriptnpm
  • Source controlGitHub

Rails and Python come next, and only once Verdicts hold up on real repositories in each. We won’t list a stack we don’t cover well.

Your code

We read it. We don’t keep it.

  • We keep no copy of your code. Each Assessment clones into a single-use worker that’s destroyed when it ends.
  • Evidence is a file, a line, a commit and our note. You see the code through GitHub, under your own access.
  • This public site never holds code, keys, or which Apps match which Advisory.
How we handle your code

FAQ

Questions engineers ask us.

  • .01 Do we have to replace Dependabot?
    No. Keep it. Dependabot tells you what’s out of date and alerts on malicious packages. agentprime tells you which of its alerts actually affect your App, and why.
  • .02 Does agentprime merge anything?
    No. It opens the Upgrade pull request with the evidence in the body. A person on your team reviews it, your CI runs, and you merge it.
  • .03 Do you prove that something is exploitable?
    Not yet. Today’s Verdicts come from reading your code against the Advisory profile. Proving exploitability in a Sandbox that runs your App is on the roadmap. Until then we never call anything a Vulnerability.
  • .04 What does “Reachable – unproven” mean?
    Untrusted input can reach the vulnerable code, but there’s no proof it can be exploited. We treat it as affected and open the Upgrade, but we don’t call it a Vulnerability.
  • .05 What happens to our code?
    Each Assessment clones your repository into a single-use worker with a short-lived token, and the clone is deleted when the Assessment ends. We keep the Verdict (file, line, commit and our note), never the code.
  • .06 Which stacks do you support?
    Laravel/PHP with Composer, and Node/TypeScript with npm, on GitHub. Rails and Python come next.
  • .07 What does it cost?
    Pricing will be per App per month. We’re setting the numbers once we’ve measured what an Assessment really costs. For now we’re working with a handful of design partners.

Design partners

Connect your App.

We’re starting with a handful of teams we work with closely. You connect an App, we assess every open Advisory against it, and you get a Verdict with evidence for each one, plus the Upgrades worth merging.

  • 10 to 200 engineers, no security team
  • Code on GitHub
  • Laravel/PHP (Composer) or Node/TypeScript (npm)

We reply to every request ourselves. Nothing here gives us access to your code.