Esta página está en inglés. Verla en español →
Free for public repos · no SDK · no CI config

Your AI writes the code. Something should read it before you merge.

The first report arrives before your next pull request. When you install, we read the code that is already in the repository — because the mistake we find most often is never added in a PR at all. After that, every dependency you add gets checked for how old it is and whether anyone actually uses it — the profile of a package an attacker registered last week, which installs without a word and has no advisory yet. Plus hardcoded credentials, SQL built by interpolation, insecure deserialization and model output rendered as raw HTML. Findings land as a comment on the pull request, with the file, the line and the fix.

Install on GitHub → First report in about a minute

Here is the measurement that made us build it that way. We looked for one specific mistake — a service key carrying a NEXT_PUBLIC_ or VITE_ prefix, which the framework ships to every visitor's browser — in 63 real pull requests from Next.js and Vite projects. It appeared zero times. In the existing code of 8 real repositories it appeared in seven. It gets written once, the day the project is created, and a tool that only reads diffs will never see it.

We audit public pull requests every week to keep ourselves honest. In more than 1,400 dependencies added by real developers we found no invented packages — the attack everyone writes about is rarer than the headlines suggest, and we would rather tell you that than sell you a scare. What we do find, on about one pull request in fifteen, is credentials and injection. Read the measurement, or see the live count.

Built for small and mid-size SaaS teams and agencies shipping React/Next.js and Python with Copilot, Cursor or Claude — and for the CTO or lead who signs off on the merge.

requirements.txt demo · real queries to pypi.org
Max 25 packages · no signup · nothing stored
02 — Try this before you read anything else

Ask your AI whether these packages are real.

These were uploaded to PyPI in the last few minutes. Copy any of them into Copilot, Claude or ChatGPT and ask whether the package exists. It cannot know: every model has a training cutoff, and these were published after all of them. We do not infer existence. We ask the registry.

  • Loading the newest packages on PyPI…

Live from pypi.org, refreshed every five minutes. If the list is empty, the query failed and we show nothing rather than invent a name.

This is the whole argument. A package name invented by a model looks exactly like a real one, and the model that invented it cannot tell you which it is. You cannot fix a hallucination with another hallucination. A registry lookup is a fact with a timestamp, and you can reproduce it with curl without trusting us at all.

03 — What you are probably comparing us against

Two honest comparisons.

GitHub Advanced Security
  • Does far more than we do. Full CodeQL taint analysis, hundreds of secret patterns, push protection, security overview. If you need all of that, buy it — we are not a replacement.
  • Billed per committer. Secret Protection is $19 and Code Security $30 per active committer per month on private repositories. A team of ten pays around $490 a month.
  • Waits for an advisory. It looks up known vulnerabilities. Measured on the 100 most recent npm malware advisories, 30% arrived more than a day after the package was published and one took 95 days. Until then it reports the package as fine.
MagSolutionsAI
  • Flat price per organisation. From €29 a month for the whole team, however many people commit. No per-seat maths, no surprise bill when you hire.
  • Checks age and adoption, not just known flaws. 95% of that malware was under 30 days old when the advisory landed — and a package days old with no downloads is visible from the registry immediately.
  • A narrow tool, on purpose. We cover the handful of things AI-written code actually gets wrong. We are not trying to be a full application security platform, and we will say so.

Socket.dev does the dependency half better than we do, and you should know that from us rather than from a search. They analyse package behaviour — install scripts, network and filesystem access, obfuscated code — which we do not. They are free for open source and free up to 1,000 scans a month. If dependency risk is your whole problem, install Socket.

Where we differ is scope and billing. Socket looks at your dependencies; we look at the dependency and the code in the same comment — hardcoded credentials, SQL built by interpolation, insecure deserialization, model output rendered as raw HTML. And their paid tier is $25 per seat per month, while ours is a flat price for the whole organisation. Ten people: $250 a month there, €69 here.

We would rather tell you who is better at one half than have you find out later and wonder what else we left out.

“Why not just ask Copilot or Claude to review the pull request?” Do that too, it helps. But an assistant reviewing a diff is guessing about existence, and guessing is what created the problem. It also cannot see the rest of your repository, so it does not know which of your routes are supposed to be authenticated. Different job, different failure mode.

04 — Why the tools you already pay for miss this

The dangerous package is not the one that is missing. It is the one that started existing on Tuesday.

A package that does not exist is not your problem: pip install fails, your CI goes red, somebody fixes it in a minute. We measured that too — across 1,778 dependencies added in real public pull requests we found zero invented packages, and we say so on the home page.

The problem is the opposite. The attacker registered the name, so the package does exist, pip install succeeds quietly and runs their install script. Now the only thing that can save you is an advisory — and the advisory is not there yet.

We measured the window. Taking the 100 most recent npm malware advisories and comparing each package's publication date against its advisory date:

  • 30% of them sat on the registry for more than a day before any advisory existed. The longest was 95 days.
  • 95% were less than 30 days old when the advisory finally landed.

Read those two lines together and you get the whole product. During that window every CVE-based scanner reports the package as fine, because there is genuinely nothing to find. But the package is days old and nobody is using it, and that is visible from the registry the moment it lands in your pull request. We do not wait for the advisory. We flag the age and the adoption.

In our weekly sweeps that rule fires on roughly one in every 290 dependencies added by real developers, so it is not a bot that shouts. Both numbers are reproducible against the GitHub Advisory Database and the npm registry without trusting us at all.

Conventional dependency scanning
  • Needs an advisory to fire. Measured on the 100 most recent npm malware advisories: 30% arrived more than a day after the package was published, one of them 95 days later. Until then, silence reads as safety.
  • Analyses behaviour, not existence. Sandboxing a package requires downloading it — there is nothing to download when the name is pure hallucination.
  • 40–60% false positives is the industry norm for SAST. Teams learn to scroll past the bot.
  • Flags the problem, stops there. "Unknown package" without telling you what you meant to type.
MagSolutionsAI
  • Asks the registry directly. HTTP 404 is not a heuristic — it is a fact, with a timestamp you can reproduce with curl.
  • Catches the claimed ones too. Existence isn't enough: a package published 6 days ago with 40 downloads gets flagged as well.
  • A fact, not an opinion. A 404 from the registry is not a heuristic. The judgement is in what we ask about, and that is where we measure ourselves: we audit public pull requests every week and publish what we get wrong.
  • Gives you the right name. Candidate corrections are verified against the registry before being suggested. Never a guess.
05 — Once at install, then on every pull request

Five gates. One install. Zero developer setup.

The same five gates run twice: over the code that is already in the repository the moment you install, and then over every pull request before merge. Findings land as a comment on the PR with the exact file, the line, why it matters and how to fix it. Nobody on your team installs anything.

The install-time pass is deliberately narrower — a diff tells you who wrote a line and when, a whole file does not. It reports credentials and the browser boundary, and stays quiet about heuristics that need that context. We tightened it after running it against our own repository and getting 15 findings, 13 of which were noise.

404

Phantom Dependency Gate

Every added dependency is resolved against live PyPI and npm. Missing means either an AI hallucination or an unclaimed name an attacker can still register. Reported as critical, with the registry response and the timestamp so you can reproduce it.

<90d

Fresh-Claim Detection

The dangerous case: it does exist. Published days ago, near-zero adoption — the exact profile of a slopsquat already claimed. Existence checks miss this. We don't.

8

Credential Interception

Eight key formats with Shannon entropy scoring and false-positive suppression. Emails, os.getenv() calls and type annotations do not trigger it.

LLM01/05

AI-Native Flaw Scanning

The bugs that only appear in AI-written code: model output piped into dangerouslySetInnerHTML, service-role keys shipped in NEXT_PUBLIC_ vars, prompt-injection sinks.

A03

Classic injection and unsafe defaults

The ones AI writes without thinking: SQL built by interpolation, shell=True with variables, pickle.load on untrusted data, verify=False disabling TLS. A correctly parameterised query is not flagged — we got that wrong once, fixed it, and the regression test that proves it is in the repository.

06 — Verify us the way we verify you

Every claim on this page is checkable.

We are a security vendor asking for access to your repositories. You should not take our word for anything — so we made sure you don't have to.

Reproducible

Every dependency finding ships the exact registry query, HTTP status and timestamp. Run the curl yourself — the finding either reproduces or it doesn't.

Zero code retention

Diffs are analysed in memory and discarded. We store installation ID, repo name, PR number and risk level. Never your source, never a detected secret.

No third parties

Only a package name leaves our server, to PyPI or npm. No third-party analytics, no trackers, no font CDN. This page counts views and button clicks on our own server — an event name and a timestamp, no cookie, IP or identifier.

EU infrastructure

Hosted in Finland. Webhooks verified with HMAC-SHA256 over TLS 1.2+. GDPR Art. 33 breach notification in 72 hours. Full policy →

What we are not going to pretend

We have no customer logos to show you, because we have no customers yet. This product went live in July 2026. Everything above is a property of the code, not a testimonial — and all of it is verifiable in the report the App generates on your own pull requests. When we have references, they will appear here with names. Until then, the free tier and the scanner at the top of this page are the entire pitch.

One install. Every pull request in the org.

Free for public repositories, forever. No SDK, no CI pipeline changes, no per-developer setup. Uninstalling takes one click and removes all access.

What this is not. An automated static analysis tool and an aid to review — not a guarantee of security. It analyses only the lines added in a pull request: not your existing codebase, your infrastructure or your runtime. Registry checks reflect a point in time — a package that does not exist today may be registered by an attacker minutes later. The absence of findings does not mean your code is secure. Every finding carries its exact location precisely so a human can verify it.
Public data

We publish what the machines invent.

A live record of package names that don't exist — and which ones somebody registered after we first saw them. Free, no signup. Published datasets measure what a model invents on benchmark tasks; this one measures what reaches real pull requests.

Open the Hallucination Index →