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

conformly-scan

v0.1.1

Published

Read-only AI discovery agent for Conformly. Finds the AI systems in your codebase and reports them to your compliance inventory. Never reads secret values or source code.

Readme

conformly-scan

Find the AI systems in your codebase and report them to your Conformly inventory.

npx conformly-scan --dry-run          # see what it finds, send nothing
npx conformly-scan --key=conf_xxx     # report findings to your workspace

Why an agent instead of integrations

Compliance platforms normally collect evidence through dozens of OAuth integrations, which means handing them credentials to your cloud, your code host and your identity provider — and getting that reviewed by your security team before you can even start.

This agent inverts it. It runs where your code already is, reads only what it needs to identify AI systems, and posts a list of findings. No OAuth app, no credentials leave your machine, nothing to review.

What is sent

| Type | Example | What it is | |---|---|---| | ai.dependency | npm:openai | An AI library in a manifest, with its version range | | ai.model | openai:gpt-4o | A model id quoted in your code | | ai.service | aws:bedrock | A managed AI service your code actually calls | | env.key | OPENAI_API_KEY | The name of an AI-provider env var | | repo.doc | acme/api:MODEL_CARD.md | Path, size and SHA-256 of a governance doc | | repo.meta | acme/api | Commit count and merge ratio over 90 days |

What is never sent

  • Secret values. Not from .env, not from anywhere. The env scanner splits each line at the first = and discards the right-hand side immediately — the value never reaches a variable that outlives the loop iteration.
  • File contents. Governance documents are reported as path + size + SHA-256. The hash proves a document existed and detects that it changed; it cannot be turned back into your text.
  • Source code. Files are read to match patterns. Only which file matched is reported, never a line of it.
  • Customer data. Never touched.

Two independent guards enforce this: no scanner collects a secret in the first place, and redact.ts drops any finding that looks credential-shaped before the request is built. The server runs the same check on arrival — neither side trusts the other to be the only guard.

Run --dry-run first. Everything printed is everything that would be sent.

Mentions are not usage

A file that talks about Bedrock — a docs page, a provider dropdown, a vendor list — is not a file that uses Bedrock. A discovery report full of false positives is worse than no report: you stop trusting every finding, including the true ones.

So the patterns demand shapes that only real usage produces. A model id must sit inside a string literal, the way you actually pass one to an SDK. A service must show an SDK import path or an API hostname, never a bare word. In practice:

client = boto3.client("bedrock-runtime")   # reported
# we evaluated bedrock and sagemaker       # not reported

Findings carry a confidence: high for dependencies and service wiring (nobody installs openai by accident), medium for a quoted model id (a test fixture quotes one too).

Options

| Flag | Meaning | |---|---| | --key=conf_xxx | Your API key — Settings → Integrations → API keys | | --path=. | Directory to scan. Default: current directory | | --dry-run | Print findings and exit. Nothing transmitted. No key needed | | --json[=file] | Write the exact payload to a file (default conformly-scan.json) | | --api=URL | Self-hosted instance. Default https://getconformly.com | | --help / --version | |

Exit codes: 0 success · 1 transient failure (network, rate limit) · 2 your input was wrong (missing/invalid key, read-only org).

Keeping it continuous

A scan is a snapshot. Your inventory drifts the moment someone adds a dependency, so run it in CI:

# .github/workflows/conformly.yml
name: Conformly AI discovery
on:
  push:
    branches: [main]
  schedule:
    - cron: "0 6 * * 1" # Mondays, 06:00 UTC

jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0 # repo.meta needs history for the 90-day signals
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npx conformly-scan --key=${{ secrets.CONFORMLY_API_KEY }}

The discovery.scan-recent control turns green when a scan has run in the last 30 days, and discovery.no-shadow-ai stays green only while every finding is reconciled with a declared system.

What it does not do

It reads the repository you point it at. It does not enumerate your cloud account, your SaaS estate, or employee devices — AI reached through a browser leaves no trace in your code. Connect an integration for those.