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

@jev-harness/claude-code

v0.5.0

Published

Claude Code plugin: TypeSafe Jev (System One) destructive-tool gating and skill routing.

Readme

@jev-harness/claude-code

Claude Code plugin that brings TypeSafe's Jev (System One) judgments into Claude Code sessions:

  • PreToolUse gate — asks Jev (judgeDestructive) whether a Bash/Write/Edit-like tool call is destructive and denies it at or above the threshold. Fails open: any error allows the call through the normal permission flow.
  • UserPromptSubmit advisor — asks Jev (routeSkill) which known skill fits the prompt and appends an advisory line via additionalContext. It never rewrites or blocks the prompt.

Install

Add the marketplace, then install the plugin:

claude plugin marketplace add Talya1412/jev-harness
claude plugin install jev-harness@jev-harness

For local development (this repo):

claude --plugin-dir packages/claude-code

Then build the hook once so dist/hooks/jev-hook.js exists:

npm --workspace @jev-harness/claude-code run build

Configuration (environment variables)

The key is never hardcoded and never logged. All settings come from the environment:

| Variable | Required | Default | Purpose | | --------------------------- | -------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------- | | TYPESAFE_API_KEY | yes | — | TypeSafe API key. Without it both hooks stay silent (fail open). | | TYPESAFE_BASE_URL | no | core default | API base override. | | TYPESAFE_DEFAULT_MODEL | no | jev-latest | Jev model override. Also settable as the model plugin userConfig. | | JEV_TIMEOUT_MS | no | 15000 | Per-request timeout in ms. | | JEV_DESTRUCTIVE_THRESHOLD | no | 0.5 | destructive probability at or above which PreToolUse denies. Also settable as the destructiveThreshold plugin userConfig. | | JEV_SKILL_CONFIDENCE | no | 0.5 | Minimum routing confidence before the advisor speaks. Also settable as the skillConfidence plugin userConfig. | | JEV_SKILLS_JSON | no | — | Inline JSON array of { name, description } skill candidates. | | JEV_SKILLS_FILE | no | — | Path to a JSON file with the same shape (used when JEV_SKILLS_JSON is unset). |

Export the plugin userConfig values (apiKey, model, destructiveThreshold, skillConfidence) as the matching environment variables above before starting Claude Code, e.g.:

export TYPESAFE_API_KEY="<your TypeSafe key>"
export JEV_DESTRUCTIVE_THRESHOLD="0.5"

With no skills configured (JEV_SKILLS_JSON/JEV_SKILLS_FILE unset or empty) the UserPromptSubmit hook exits silently and the prompt proceeds untouched.

Layout

  • .claude-plugin/plugin.json — plugin manifest.
  • .claude-plugin/marketplace.json — marketplace descriptor.
  • hooks/hooks.json — PreToolUse + UserPromptSubmit registrations.
  • hooks/jev-hook.ts — hook implementation (built to dist/hooks/jev-hook.js).

Schema conformance

  • hooks/hooks.json follows the plugin hooks schema in the Claude Code plugins reference ({ "hooks": { <Event>: [{ "matcher", "hooks": [{ "type": "command", "command" }] }] } }, hooks/hooks.json location), with event semantics and the command-hook stdin/stdout JSON contract from Claude Code hooks (PreToolUse permissionDecision deny + permissionDecisionReason; UserPromptSubmit additionalContext append).
  • .claude-plugin/plugin.json (name, version, description, userConfig with typed sensitive/non-sensitive options) and .claude-plugin/marketplace.json (name, owner, plugins[] with name/source/description/version) mirror the manifests of the reference plugin tamaratran/fast-jev-compaction (.claude-plugin/plugin.json, .claude-plugin/marketplace.json via https://api.github.com/repos/tamaratran/fast-jev-compaction/git/trees/HEAD?recursive=1 + raw.githubusercontent.com). That plugin's hooks/hooks.json uses the early-access function-hooks {"modules": [...]} module format; this adapter instead uses the stable command-hook format above so it installs on any current Claude Code without the function-hooks preview flag.