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

@nx-devkit/skill

v0.1.19

Published

Nx plugin for agent skills: any SKILL.md becomes a project with build, lint, validate, os-check, and size-check targets — no project.json required.

Readme

@nx-devkit/skill

Nx plugin for agent skills: any directory containing SKILL.md becomes a project with a full skill lifecycle — build, lint, validate, os-check, size-check. No project.json needed.

Part of nx-devkit.

Install

bun add -D @nx-devkit/skill

Depends on @nx/devkit ^22 || ^23 — installed automatically. The inferred targets also need their tools available: build invokes skills-compiler (resolved from node_modules/.bin, falling back to PATH) and lint runs markdownlint-cli2 — add whichever you use. validate/os-check/size-check ship as executors inside this package — nothing extra to install:

bun add -D markdownlint-cli2   # plus the skills-compiler tool for `build`

Register

nx add @nx-devkit/skill   # runs the init generator — registers the plugin in nx.json

Or manually:

// nx.json
{ "plugins": ["@nx-devkit/skill"] }

What it infers

| Target | Runs | Purpose | |---|---|---| | build | @nx-devkit/skill:build executor — skills-compiler via execFile, no shell | Compiles the skill to a distribution target. | | lint | markdownlint-cli2 '{projectRoot}/**/*.md' --config .markdownlint.json (--config only when the file exists at workspace root) | Lints all skill Markdown. | | validate | @nx-devkit/skill:validate executor | Validates SKILL.md frontmatter and structure. | | os-check | @nx-devkit/skill:os-check executor | Flags OS-specific commands/paths that break cross-platform portability. | | size-check | @nx-devkit/skill:size-check executor | Enforces size budgets on the skill directory. |

The build target's inputs are an explicit list — SKILL.md, **/*.md, scripts/, references/, assets/, agents/ under the project root, plus ^production — extended by any skillInputs you add. The lint target runs with cwd = workspace root; {projectRoot} in the command is the Nx macro, expanded by Nx before the shell runs it — the quotes keep the path literal. The executor targets receive the skill directory via the path option.

Inspect

npx nx show projects
npx nx show project <name>
npx nx run <name>:build

Project naming

Project names are derived from the skill directory slug plus a 12-hex-char SHA-256 suffix of the project root — collision-resistant in practice (birthday bound applies, it's not a guarantee), so two SKILL.md files whose directory names collapse to the same slug still get distinct project names.

Options

{
  "plugins": [
    ["@nx-devkit/skill", {
      "buildTargetName": "build",
      "lintTargetName": "lint",
      "validateTargetName": "validate",
      "osCheckTargetName": "os-check",
      "sizeCheckTargetName": "size-check",
      "skillInputs": []
    }]
  ]
}

| Option | Default | Effect | |---|---|---| | buildTargetName | build | Name of the build target. | | lintTargetName | lint | Name of the lint target. | | validateTargetName | validate | Name of the validate target. | | osCheckTargetName | os-check | Name of the OS-independence check target. | | sizeCheckTargetName | size-check | Name of the size-check target. | | skillInputs | [] | Extra input globs merged into the build target's inputs. |

All five target names must be non-empty and unique — on an empty or duplicate name the plugin logs a warning and skips that skill's project (other skills are unaffected).

Skip rules

  • SKILL.md inside node_modules is skipped.
  • SKILL.md at the workspace root is skipped — skills live in nested directories.
  • SKILL.md escaping the workspace root is skipped.

Pairing with skillspector

For security scanning of skills, add @nx-devkit/skillspector alongside — it infers a scan target from the same SKILL.md trigger.

License

MIT