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

@earzbook/openclaw

v0.1.0

Published

Earzbook ↔ OpenClaw sidecar daemon. Bridges the Earzbook mobile app to a locally-running OpenClaw agent via a WebSocket relay.

Readme

@earzbook/openclaw

Sidecar daemon that bridges the Earzbook mobile app to a locally-running OpenClaw agent via a WebSocket relay.

Long-running Node process, installed once on the user's machine by the Earzbook pair flow. Registered as a per-user service (launchd LaunchAgent on macOS, systemd --user unit on Linux) so it auto-starts on login and survives crashes.

Install (user-facing — runs from the Earzbook pair script)

npm install -g @earzbook/openclaw

The Earzbook app's "Connect OpenClaw" flow prints a curl … | bash one-liner that runs the npm install above, writes ~/.earzbook/sidecar.json, drops the launchd plist / systemd unit, and starts the service. No manual setup required.

Usage

earzbook-openclaw --config ~/.earzbook/sidecar.json

Config file shape:

{
  "relayUrl": "wss://api.earzbook.app/openclaw/relay",
  "deviceToken": "<JWT issued by Earzbook backend at pair time>",
  "userId": "<Earzbook user id>",
  "agentId": "main",
  "versionEndpoint": "https://api.earzbook.app/openclaw/sidecar/version"
}

What it does

  1. Opens a WebSocket to the Earzbook relay with role: "plugin" and authenticates with the deviceToken JWT.
  2. On each inbound user_message, spawns openclaw agent --agent <agentId> --message <text> --json to get the local OpenClaw agent's reply.
  3. Sends the reply back as an agent_reply frame.
  4. Pings every 30s, reconnects with exponential backoff (3s → 5min cap), checks for updates on startup + every 24h.

See the architecture plan in /Users/earzbook/.claude/plans/users-earzbook-documents-github-recall-rippling-sphinx.md for the full design.

Why not the OpenClaw channel plugin?

We started with a channel plugin at ../earzbook-plugin/. OpenClaw 2026.5.22 doesn't import external channel plugin entry modules in its gateway daemon — the plugin's lifecycle.start and registerFull hooks only fire in CLI invocations. The plugin code stays in the repo for when OpenClaw fixes that, or when we fork them.

The sidecar lives alongside as a self-contained workaround. Same wire protocol as the plugin would have used.