<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marcelo</title>
    <description>The latest articles on DEV Community by Marcelo (@marcelo_pr).</description>
    <link>https://dev.to/marcelo_pr</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4092719%2F11b10424-a733-449b-9bca-d72cb803a4c1.png</url>
      <title>DEV Community: Marcelo</title>
      <link>https://dev.to/marcelo_pr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marcelo_pr"/>
    <language>en</language>
    <item>
      <title>Your AI agent doesn't read READMEs — we scored 95,000 packages to see what it's installing anyway</title>
      <dc:creator>Marcelo</dc:creator>
      <pubDate>Tue, 25 Aug 2026 14:33:47 +0000</pubDate>
      <link>https://dev.to/marcelo_pr/your-ai-agent-doesnt-read-readmes-we-scored-95000-packages-to-see-what-its-installing-anyway-dl1</link>
      <guid>https://dev.to/marcelo_pr/your-ai-agent-doesnt-read-readmes-we-scored-95000-packages-to-see-what-its-installing-anyway-dl1</guid>
      <description>&lt;p&gt;&lt;em&gt;By Marcelo, builder of &lt;a href="https://packagerating.com" rel="noopener noreferrer"&gt;Package Rating&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Over the past few months I've been crawling npm, PyPI, crates.io, and RubyGems — pulling real&lt;br&gt;
GitHub activity, dependency health, and known vulnerability data for every package I can find —&lt;br&gt;
and scoring each one on a 0-100 scale. The goal was simple: before you &lt;code&gt;npm install&lt;/code&gt; something,&lt;br&gt;
you should be able to see, in one number, whether it's actually worth trusting.&lt;/p&gt;

&lt;p&gt;95,338 packages in, here's what the data actually shows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Almost nothing scores well
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Band&lt;/th&gt;
&lt;th&gt;Packages&lt;/th&gt;
&lt;th&gt;Share&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Excellent (90–100)&lt;/td&gt;
&lt;td&gt;34&lt;/td&gt;
&lt;td&gt;0.04%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Good (70–89)&lt;/td&gt;
&lt;td&gt;1,893&lt;/td&gt;
&lt;td&gt;2.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fair (50–69)&lt;/td&gt;
&lt;td&gt;49,707&lt;/td&gt;
&lt;td&gt;52.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Poor (25–49)&lt;/td&gt;
&lt;td&gt;43,717&lt;/td&gt;
&lt;td&gt;45.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Critical (0–24)&lt;/td&gt;
&lt;td&gt;36&lt;/td&gt;
&lt;td&gt;0.04%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Almost half the open-source ecosystem sits in "Poor." Barely 2% clears "Good." This isn't a&lt;br&gt;
judgment on any individual maintainer — most of these projects are unpaid, unfunded, and doing&lt;br&gt;
fine by the standards their authors set for themselves. But it does mean the median package you&lt;br&gt;
depend on is, by objective signals (maintenance activity, dependency health, versioning&lt;br&gt;
discipline, known vulnerabilities), mediocre — not because open source is bad, but because most&lt;br&gt;
of it was never resourced to be excellent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Popularity doesn't buy you much safety
&lt;/h2&gt;

&lt;p&gt;I expected the most-downloaded packages to score meaningfully better than obscure ones — more&lt;br&gt;
users, more scrutiny, more pressure to keep things solid. The data doesn't really back that up:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Weekly downloads&lt;/th&gt;
&lt;th&gt;Avg. score&lt;/th&gt;
&lt;th&gt;Sample size&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;gt;1M&lt;/td&gt;
&lt;td&gt;54.6&lt;/td&gt;
&lt;td&gt;11,148&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100k–1M&lt;/td&gt;
&lt;td&gt;54.3&lt;/td&gt;
&lt;td&gt;9,983&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10k–100k&lt;/td&gt;
&lt;td&gt;52.6&lt;/td&gt;
&lt;td&gt;11,610&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;lt;10k&lt;/td&gt;
&lt;td&gt;48.4&lt;/td&gt;
&lt;td&gt;62,646&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A 6-point spread on a 100-point scale, between the most- and least-downloaded tiers. Heavy usage&lt;br&gt;
correlates with &lt;em&gt;slightly&lt;/em&gt; better scores, not dramatically better ones. The package with 40&lt;br&gt;
million weekly downloads sitting in your &lt;code&gt;node_modules&lt;/code&gt; right now is not obviously safer than one&lt;br&gt;
with 4,000 — you have to actually check.&lt;/p&gt;

&lt;h2&gt;
  
  
  412 popular packages carry a known critical vulnerability right now
&lt;/h2&gt;

&lt;p&gt;This is the number that should make you go check your own lockfile. Across the packages we've&lt;br&gt;
scored, 412 currently carry at least one &lt;strong&gt;critical&lt;/strong&gt;-severity finding, and another 942 carry a&lt;br&gt;
&lt;strong&gt;high&lt;/strong&gt;-severity one — not hypothetical risk, but flagged, known issues in versions people are&lt;br&gt;
installing today. Some examples, picked from packages with over 100 million weekly downloads:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;pyyaml&lt;/code&gt;&lt;/strong&gt; — 279M weekly downloads, 4 critical findings, score 33.5&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;litellm&lt;/code&gt;&lt;/strong&gt; — 190M weekly downloads, 6 critical / 17 high findings, score 56.3&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;pillow&lt;/code&gt;&lt;/strong&gt; — 125M weekly downloads, 10 critical / 50 high findings, score 38&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;numpy&lt;/code&gt;&lt;/strong&gt; — 260M weekly downloads, 1 critical / 4 high findings, score 38&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;js-yaml&lt;/code&gt;&lt;/strong&gt; — 279M weekly downloads, 1 critical / 3 high findings, score 37.5&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these are obscure. All five are foundational, near-universal dependencies across their&lt;br&gt;
respective ecosystems — the kind of package nobody thinks to double-check because "everyone uses&lt;br&gt;
it." That's exactly the assumption worth re-examining.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your AI agent doesn't read READMEs
&lt;/h2&gt;

&lt;p&gt;Here's the part that changes the calculus on all of the above: a growing share of the packages&lt;br&gt;
landing in &lt;code&gt;package.json&lt;/code&gt; and &lt;code&gt;requirements.txt&lt;/code&gt; today were never chosen by a person. An AI coding&lt;br&gt;
agent hit a missing-import error, picked the first plausible package, and installed it — no&lt;br&gt;
README, no GitHub tab, no "huh, last commit was three years ago" gut check. That gut check was&lt;br&gt;
never a great safety net to begin with, but at least it existed. For agent-driven installs, it&lt;br&gt;
usually doesn't.&lt;/p&gt;

&lt;p&gt;That's not a hypothetical shift — it's already how a lot of code gets written. And it means the&lt;br&gt;
412-critical-finding numbers above aren't just a "read more carefully" problem anymore; they're a&lt;br&gt;
"the thing choosing your dependencies can't read at all" problem. The fix isn't asking agents to&lt;br&gt;
be more careful — it's giving the &lt;em&gt;build&lt;/em&gt; a signal an agent (or its CI pipeline) can act on&lt;br&gt;
without human judgment in the loop. That's the actual reason we built this as a score and an&lt;br&gt;
API, not a blog post: &lt;a href="https://github.com/marketplace/actions/audit-dependencies" rel="noopener noreferrer"&gt;&lt;code&gt;audit-dependencies&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
can fail a build the moment an agent adds something with a critical finding, before it ever&lt;br&gt;
reaches a PR a human skims and approves.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check yours
&lt;/h2&gt;

&lt;p&gt;Every score above comes from data anyone can pull for free: &lt;a href="https://packagerating.com" rel="noopener noreferrer"&gt;packagerating.com&lt;/a&gt;&lt;br&gt;
scores any npm, PyPI, crates.io, or RubyGems package on demand, and the&lt;br&gt;
&lt;a href="https://github.com/marketplace/actions/audit-dependencies" rel="noopener noreferrer"&gt;&lt;code&gt;audit-dependencies&lt;/code&gt; GitHub Action&lt;/a&gt;&lt;br&gt;
drops the same scoring straight into your CI, with an optional threshold gate if you want your&lt;br&gt;
build to fail on packages below a bar you set.&lt;/p&gt;

&lt;p&gt;I'll be publishing this as a recurring monthly report as the dataset grows — if there's a specific&lt;br&gt;
ecosystem or angle (governance/compliance, a particular language, "most improved" packages) you'd&lt;br&gt;
want to see next, drop a comment and let me know.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Methodology note: scores are computed from six weighted signals — liveness (recent commit&lt;br&gt;
activity), community health, dependency risk, known-vulnerability findings, versioning discipline,&lt;br&gt;
and general dependency hygiene. Full breakdown at&lt;br&gt;
&lt;a href="https://packagerating.com/github-action" rel="noopener noreferrer"&gt;packagerating.com/github-action&lt;/a&gt;. Figures in this post&lt;br&gt;
reflect the catalog as of August 2026; the "abandoned popular packages" angle we originally&lt;br&gt;
scoped for this piece is being held back for a follow-up — a recent bug-fix recrawl of a subset of&lt;br&gt;
the catalog is still working through GitHub's API rate limits, and we didn't want to publish&lt;br&gt;
maintenance-activity claims about specific packages before that backlog fully clears.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>opensource</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
