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

@askverb/skill

v0.1.2

Published

Teach your coding agent to define what a Verb assistant may do in your product.

Readme

@askverb/skill

MIT. Teach your coding agent to define what a Verb assistant may do in your product.

npx @askverb/skill install

Then ask your agent:

add Verb to this app

It reads your codebase and writes a verb.md listing the actions your users' assistant will be allowed to perform, classified, described, and checked.

Why this exists

The hard part of setting up an in-product assistant is not pasting a script tag. It is writing good tool definitions. The descriptions in them load into the model's context and steer its calling behaviour, so they are the difference between an assistant that picks the right action and one that picks a plausible one.

You cannot reasonably be expected to know that. But your coding agent already knows your codebase, which is the one thing Verb never will. So rather than asking you to describe your API to us, this teaches your agent to do it.

Local first, network optional

The skill writes a file on your disk. It does not call our API, needs no key, and works offline. You read the verb.md before anything reaches Verb.

That ordering is deliberate. The file decides what an AI may do inside your product, so it should arrive as a diff a second person can read, not as a row somebody edited in a dashboard at midnight.

What is in it

verb/
├── SKILL.md                  the entry point, kept short
├── references/
│   ├── format.md             the complete verb.md specification
│   ├── descriptions.md       how to write a description that works
│   ├── stacks.md             where to look, per framework
│   └── safety.md             classification, and the BaaS problem
└── scripts/
    ├── validate.mjs          check a verb.md, offline
    ├── scaffold.mjs          write a starter verb.md
    └── lib/                  a copy of the server's own rules

Skills load progressively: your agent reads the description and pulls the full instructions only when a task matches, so leaving it installed costs almost nothing.

The validator

node verb/scripts/validate.mjs verb.md
node verb/scripts/validate.mjs verb.md --json

lib/ is a byte-for-byte copy of @askverb/authoring, which the Verb server also runs. A file that passes here is a file that imports. Exit code 0 means clean or warnings only, 1 means errors or safety blocks, 2 means the file could not be read.

It refuses some things outright, and the refusals are the interesting part:

  • a destructive Supabase or Firebase tool that touches the table directly rather than going through a database function
  • a filter appended inside an if, one missing argument from an unfiltered write
  • a table or collection name taken from the model's arguments
  • a write tool with no required arguments
  • a cancel_* tool classified as read-only, which would skip the confirmation gate entirely

Each refusal comes with the fix, and there is no override, because the server applies the same rules.

Other agents

npx @askverb/skill install --dir .claude/skills   # somewhere specific
npx @askverb/skill install --global               # every project
npx @askverb/skill --print                        # the whole skill to stdout

Development

pnpm --filter @askverb/skill sync    # re-copy the rules from packages/authoring
pnpm --filter @askverb/skill test    # checks sync, then runs the suite

Never edit verb/scripts/lib/ by hand. Change packages/authoring/src and sync.