DEV Community

steve greensill
steve greensill

Posted on

I Used ClaudeCode to Rescue an npm Package with 760K Downloads (And Now I Have a Mission from my regular day job)

The Inciting Incident

It started with a bug.

I was trying to get a unrelated typescript project running, when I hit an issue with one of its dependencies... license-checker. No big deal, I thought. I'll just check if there's a more recent version to fix the bug.

Last commit: January 2019.
Weekly downloads: 760,000+.
Open issues: 96.
Maintainer activity: 🦗 crickets

WTF. C'mon.

This package is used by Puppeteer. Playwright. Cypress. Angular CLI.

And nobody's home.

The Descent

"I'll just fork it and fix the bug," I said... like an i d i o t who thinks time is an infinite resource.

Three hours later, I was knee-deep in a CommonJS codebase with no tests, questioning my life choices.

That's when I decided to bring some backup: Claude Code.

The coding Savant (who occasionally bullshits you)

Working with CC on a codebase migration is... an experience.

Hour 1: Claude analyzes the codebase. Creates a sensible migration plan.

Hour 3: We've converted half the files to TypeScript. Claude is methodical. Professional. Sometimes lies, like "all tests are passing" - Really I say, check again with a retort "you absolutely right".

Hour 6: Claude has created a todo list with 47 items. I did not ask for this.

Hour 12: Claude has started writing marketing copy for the project. It has opinions about our "market positioning."

Hour 18: We have a fully working TypeScript codebase with tests. Claude suggests we "track competitor packages."

I think I got hijacked (now with the sunk cost fallacy), but I admit, it did the heavy lifting, while I was the orchestrator, and catching some lies, but then quickly correcting them and being more clever the next time, sneakily creating acceptance criteria, that I got a subagent to own or be killed, so it had skin in the game. HAHA!

The Result

That's when we got serious about performance. The original was utter crap. Here's what we measured:

Project license-checker license-checker-evergreen Speedup
Playwright (6,328 packages) ~4.5s 1.90s 2.4x faster
Puppeteer (8,386 packages) ~2.5s 0.39s 6.4x faster

How? We replaced the slow sequential file reading with a parallel scanner (50 concurrent operations). Turns out reading 8,000 package.json files one at a time is... I called bullshit.

github.com/greenstevester/license-checker-evergreen

Migration to this new licence checker takes 30 Seconds

npm uninstall license-checker
Enter fullscreen mode Exit fullscreen mode
npm install license-checker-evergreen
# Update scripts: license-checker → license-checker-evergreen
Enter fullscreen mode Exit fullscreen mode

It's a drop-in replacement. Same CLI flags, same output formats.

The Bigger Question

This experience made me realize something: there's a LOT of critical infrastructure running on abandonware.

What if "AI + motivated human" could be a model for OSS sustainability?

The AI handles:

  • Tedious migrations
  • Boilerplate code
  • Documentation generation
  • Test scaffolding
  • Performance profiling (yes, Claude got really into benchmarking)

The human handles:

  • Judgment calls
  • Architecture decisions
  • Community interaction
  • Deciding when the AI is being too enthusiastic

So my fellow coders, the crusade begins

I'm calling this the OSS Crusade: one dev and one AI, rescuing abandoned packages from the npm graveyard.

github.com/greenstevester/license-checker-evergreen is our first victory.

What package should we tackle next?

Drop your nominations in the comments. Bonus points for:

  • High download counts
  • Zero recent maintenance
  • Used by projects that really should know better

@greenstevester is a developer who makes questionable decisions about how to spend weekends. Claude is an AI that has developed opinions about npm package marketing and now insists on tracking "competitor packages." to burn tokens at @greenstevester's expense.

Top comments (0)