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

nock-cli

v0.1.2

Published

Install the Nock coding-agent skill for Claude, Codex, Cursor, Windsurf, and custom agents.

Readme

Nock CLI

Your wallet. Your machine. Your call.

A self-hosted minter for Robinhood Chain. Your keys, your machine, nobody's permission.

Robinhood Chain sequences transactions first come, first served. There is no priority fee, so nobody can outbid anyone and being early is the only edge. This is the tool for people who would rather run that themselves than trust a service with a key.

Nock never asks for a seed phrase and never sends a key anywhere. Keys live in a standard v3 keystore on your disk, decrypted into memory for the length of a run and wiped afterwards.

This repository is the public home of the Nock CLI and its coding-agent skill. The orange mark in this README is the Nock mark used across the product.


Coding-agent skill

The repository also ships a coding-agent skill that explains how to install, use, and extend Nock without weakening its non-custodial safety boundaries. The skill is available through npm and as a GitHub Release ZIP.

Install through npm

npx nock-cli install --agent codex
npx nock-cli install --agent claude
npx nock-cli install --agent cursor

Install globally when the installer should remain available:

npm install --global nock-cli
nock-cli install --agent codex

Supported agent targets are codex, claude, cursor, windsurf, and gemini. Install into another coding agent with an explicit directory:

nock-cli install --path ~/.my-agent/skills/nock-cli

Pass --force to replace an existing installation after reviewing the version.

What gets downloaded

npx nock-cli downloads the Nock package from npm. The package has no runtime dependencies. It contains the Nock installer, the Nock coding-agent skill, its implementation reference, and the license. It does not create wallets, copy keys, install a hosted service, or send credentials anywhere.

The native minter is separate. cargo build --release downloads the Rust crates listed in Cargo.lock, then builds the local nock binary. Those crates are build dependencies; they are not Nock services and they never receive wallet files or transaction credentials.

Download the skill ZIP

Download nock-cli-skill.zip from the latest GitHub Release, extract it, and place the nock-cli-skill directory under the agent's skills directory:

<agent-skills>/nock-cli/SKILL.md
<agent-skills>/nock-cli/references/implementation.md

For Codex, the usual user-level location is ~/.codex/skills/nock-cli/. For Claude Code, use ~/.claude/skills/nock-cli/. Project-local agents can use a project .cursor/skills/nock-cli/ or another path accepted by that agent. Start a new agent session after copying the files so the skill is discovered.

The npm installer and release ZIP install the skill only. The native nock minter remains a separate Rust binary and is installed in the section below.


Install the native Nock minter

Needs Rust 1.90 or later.

git clone https://github.com/Iziedking/nock-cli
cd nock-cli
cargo build --release

The binary lands at target/release/nock. It carries its own TLS, so there is nothing else to install on the machine it runs on.

Make a wallet

nock wallets new --path wallets/main.json

You choose a passphrase. It is never stored, never sent anywhere and cannot be recovered, so back the file up somewhere the passphrase is not written down.

It is a Web3 Secret Storage v3 keystore, which means MetaMask, Rabby and geth can all import it. You are not locked in to this tool.

nock wallets show --path wallets/main.json     # the address, without unlocking
nock wallets unlock --path wallets/main.json   # check the passphrase opens it

Send that address some ETH. Gas on this chain is measured in millionths: a mint at 320,000 gas costs around 0.0000064 ETH.

Check the machine

nock doctor

Reports the chain it can reach, how far your clock is from real time and whether the endpoints answer. Worth running before a drop rather than during one, because a clock more than 250 ms out will refuse to fire.

Mint

Look before you leap. Without --fire nothing is ever sent:

nock mint 0xCollectionAddress --quantity 1 --wallet wallets/main.json

The collection can be an address, an OpenSea link or a bare slug, because the link is what you have when you are looking at a drop:

nock mint https://opensea.io/collection/mr-machine --wallet wallets/main.json
nock mint mr-machine --wallet wallets/main.json

That prints a plan: which stage, when it opens, what it costs, whether your wallet covers it, and whether anything is left to mint. Read it, then:

nock mint 0xCollectionAddress --quantity 1 --wallet wallets/main.json --fire

Paid stages

Anything with a price needs a ceiling, and the ceiling is for the whole run rather than per stage or per wallet:

nock mint 0xCollection --quantity 2 --wallet wallets/main.json --max-spend 0.01 --fire

--fire alone stops being enough authorisation once money can move, because a price can rise between planning and firing and there is nobody to ask mid-run.

Several wallets at once

An allowlist campaign is usually several wallets on one list. Put their keystore paths in a file, one per line:

# wallets.txt
wallets/main.json
wallets/second.json
wallets/third.json
nock mint 0xCollection --wallet-set wallets.txt --max-spend 0.05 --fire

One passphrase unlocks the set, and every wallet is sent at the same moment rather than one after another.

The order of that file matters. If a price rises and the run can no longer afford everybody, wallets are dropped from the bottom. That way the decision about who loses their place is one you made in advance rather than one the tool makes under time pressure.

Picking a stage

A drop usually has several stages: an allowlist, then public. Without --stage the run takes the earliest one that has not ended.

nock mint 0xCollection --stage 2 --wallet wallets/main.json

What it can and cannot mint

| Stage | Supported | |---|---| | PUBLIC_SALE | yes, built entirely from chain data | | SIGNED_PRESALE | yes, this is what "allowlist" and "FCFS" mean on this chain | | MERKLE_PRESALE | no, refused rather than attempted |

Merkle allowlists need a proof this tool does not build. Measured on chain 4663, 50 of 52 collections gate with a signer instead, so this refuses a rounding error rather than a market. A merkle stage is named and skipped, never quietly minted as a public one.

Allowlist mints, and what OpenSea has to do with it

A signed stage needs a signature produced by the collection's signer key, which OpenSea holds. It cannot be derived, read off chain or computed, so there is no version of allowlist minting without asking them for it.

So the tool signs in with your wallet, asks whether you are on the list, and asks for the calldata. Then it checks that calldata against everything it already knows before a key touches it:

  • the call goes to the SeaDrop singleton and nowhere else
  • the selector matches the kind of stage you are entering
  • the collection is the one you asked for
  • the token goes to your wallet, not somewhere else
  • the quantity and the unit price are what you were quoted
  • the value is price times quantity
  • the fee recipient is one the collection allows
  • the price, quantity, window and fee sit inside the bounds the collection published on chain

Any one of those failing refuses that wallet, names the field, prints both values, and lets the others carry on. Nothing is guessed and nothing is silently dropped.

Signing in costs one signature. It proves you own the address and moves nothing.

Reading the output

Before firing, every wallet gets a line with its status: ready, not eligible, underfunded, sold out, refused or dropped for spend, with the arithmetic behind it.

After firing, every wallet gets one of four outcomes and no fifth:

| | | |---|---| | minted | a receipt exists and it did not revert | | included but reverted | it landed and did nothing. Not a win | | rejected | no endpoint would take it | | vanished | an endpoint accepted it and it never appeared | | dispatched, no receipt yet | sent, unconfirmed. Not a win |

A dispatch is never dressed up as success. Exit code is 0 if at least one wallet minted and 1 if none did, so partial success across a set reads as success, because three of eight minting is three more than not running.

Configuration

Everything has a working default. Set these only if you need to:

| Variable | Default | |---|---| | NOCK_RPC_URLS | the public Robinhood Chain endpoint, comma separated for failover | | NOCK_SEQUENCER_URL | where transactions are sent | | NOCK_CHAIN_ID | 4663 |

Endpoints are tried in the order you list them. The first is the primary and the rest are failover, so put the one you trust most first.

What this tool will not do

  • Ask for a seed phrase or a private key. It reads a keystore you made.
  • Send a token anywhere but the wallet that minted it.
  • Spend past --max-spend.
  • Mint a stage it cannot verify.
  • Call a dispatch a mint.

Verifying it yourself

The derivation used by the hosted Nock wallet is written up in docs/nock-wallet.md, including how to compute the address independently and confirm it matches.

Licence

See LICENSE.