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

@hermes-tools/hermes-echo

v0.3.6

Published

Discover what your CLI actually does. Catch behavioral changes your tests missed.

Readme

Hermes Echo

npm version GitHub release

Discover what your CLI actually does. Catch behavioral changes your tests missed.

What it does

Hermes Echo finds your CLI’s console scripts from setup.py / pyproject.toml, including nested subcommands, and runs them like a user would. You accept the observed exit code, stdout, and stderr as Echo Contracts and commit them. On every pull request it re-runs those probes and comments when behavior drifts — it caught a version string change on hermes-relay PR #10 that tests missed.

Quick start (GitHub Actions)

Add this to .github/workflows/hermes-echo.yml:

name: Hermes Echo
on:
  pull_request:

permissions:
  contents: read
  pull-requests: write

jobs:
  echo:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: actions/setup-python@v5
        with:
          python-version: '3.12'
      # Zero-config (auto-detects your console script):
      - uses: g1n0mag1k/[email protected]
      # Explicit:
      # - uses: g1n0mag1k/[email protected]
      #   with:
      #     command: myapp

pull-requests: write is required to post the drift comment on your PR.

fetch-depth: 0 is required because Hermes Echo executes probes against both the PR branch and its base revision.

Accept contracts locally, commit .hermes/contracts/, and PR comments will show contract drift.

Real comment from hermes-relay PR #10:

🔬 Hermes Echo · ECHO DETECTED A CHANGE

7 probes executed · 6 unchanged · 1 possible changes · 0 skipped

Echo Contracts

4 of 5 accepted contracts verified

| Probe | Contract | Status | |-------|----------|--------| | export-receipts | exit 2, stderr present | ✓ HOLDS | | help | exit 0, stderr empty | ✓ HOLDS | | keystore-init | exit 2, stderr present | ✓ HOLDS | | keystore-public-key | exit 2, stderr present | ✓ HOLDS | | version | exit 0, stderr empty | ✗ DRIFTED | | | Stdout drifted: 1 line(s) changed | |

Stdout diff (version):

-Hermes Relay v1.0.0
+Hermes Relay v1.0.1

Handling nondeterministic output

Hermes Echo normalizes timestamps, UUIDs, and absolute paths before comparing observations. Commands that produce different output on every run (daemons, servers, interactive prompts) are automatically skipped.

Does behavioral drift fail CI?

No. Hermes Echo always exits 0. It reports drift as a PR comment but does not block merging. You decide what to do with the information.

Local CLI usage

npm install -g @hermes-tools/hermes-echo
hermes-echo doctor --command myapp
hermes-echo accept
hermes-echo accept validate

How contracts work

  • Accepted probes are stored as .hermes/contracts/*.yml (names like env-show, fmt-check)
  • Each contract locks exit code, full stdout, and full stderr
  • On PRs, Hermes Echo verifies those contracts and posts a drift table plus a git-style stdout/stderr diff

Compliance

Accepted Echo Contracts are version-controlled records of observed CLI behavior — what exited, what printed, and when you accepted it. Teams with formal software validation requirements may find version-controlled behavioral contracts useful as supporting evidence.

Built by Hermes Relay