npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

side-eye-cli

v0.1.0

Published

Giving agent quirks the side-eye. Flags habits of AI-written code in uncommitted changes, on your own machine, with calibrated confidence.

Readme

side-eye

Giving agent quirks the side-eye.

side-eye watches your uncommitted source changes and flags habits of AI-written code as you save. The default rules catch five of them:

  • comments that say what the code does instead of why
  • fallbacks and guards that hide missing data instead of failing loudly
  • debug leftovers: stray prints, commented-out code, stale TODOs, unused imports
  • type system bypasses: any, unknown casts, type-ignore comments
  • vague names: data, result, tmp, obj, single letters

Each flag comes with a calibrated confidence, not a verdict. It buys attention, not judgment. Rules are plain yes/no questions in a file, so add your own: network calls, secrets, schema changes, whatever your team side-eyes.

Only source code files are ever sent (.py, .ts, .java, ...). Config, env, data and lock files never leave the machine. That list lives in .side-eye and is the whole rule.

Setup

npm install -g side-eye-cli      # or: npx side-eye-cli
cd your-repo
side-eye init                    # writes .side-eye, commit it
echo "TYPESAFE_API_KEY=..." > .env

Use

side-eye check                   # every changed source file
side-eye check src/a.ts          # just these
side-eye watch                   # re-check on save, plus a live page at http://127.0.0.1:4242
side-eye watch --port 5000 --interval 2000 --no-server

The .side-eye file

Committed in the target repo so the team shares one set of rules.

{
  "extensions": [".py", ".ts", "..."],
  "sure": 0.8,
  "maybe": 0.5,
  "rules": [
    { "key": "leftovers", "label": "Debug leftovers",
      "question": "Does this code change leave debug prints, commented-out code, stale TODO notes or unused imports behind?" }
  ]
}

Each rule is one yes/no question Jev answers per diff hunk. label is what you see, question is what Jev is asked. Keep them saying the same thing, and keep the question to one sentence: explanation around it dilutes the answer. Flags at or above sure print loud, between maybe and sure print dim, the rest stay silent.

Edit rules in the Rules tab of the page, or in the file by hand. Either way a running side-eye watch notices the change, reloads the rules and re-checks every changed file.

Rules for one folder

Put a second .side-eye inside a folder and its rules apply only to files under that folder, on top of the root rules. It holds just a rules list:

{
  "rules": [
    { "key": "inline_style", "label": "Inline styles used",
      "question": "Does this code change add inline style attributes instead of using a stylesheet or class?" }
  ]
}

Rules merge by key and the nearest file wins, so reusing a root key inside frontend/.side-eye replaces that rule for front-end files only. Thresholds and the extension whitelist stay in the root file. Create one with side-eye init frontend, or from the Rules tab, which also shows which rules apply to any given path. A flag from a nested rule says so, both in the terminal and on the page.

Development

npm install
npm test                         # vitest with coverage, report in coverage/
npm run build                    # tsc to dist/
node dist/cli.js watch