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

sentinel-verify

v1.1.0

Published

A fully local, open-source verification layer for AI coding agents. Plugs into any MCP-compatible agent and lets it self-check its work before a human sees it.

Readme

Sentinel

A fully local verification layer for AI coding agents. Sentinel plugs into any MCP-compatible agent (Claude Code, Cursor, Copilot, OpenCode, …) and lets it self-check its own work — does the diff actually do the task, does the code it references exist, did it leak a secret, does it match your codebase's style — before a human ever sees it. Everything runs on your machine: no cloud backend, no telemetry, no account.

License: MIT

Quickstart

# Requires Node.js 24+ (Sentinel uses Node's built-in SQLite — nothing to compile)
npm install -g sentinel-verify

cd your-project
sentinel init                              # creates the local .sentinel/ data folder

# Connect your agent — one command, no config editing:
sentinel connect claude-code     # or: cursor, antigravity

That's it. Your agent now has four verification tools it can call after making changes. In agent mode Sentinel needs no API key and no local model — see the two modes below.

Connecting an agent

Recommended: sentinel connect <agent> — run it from your project's root directory and it writes the correct MCP entry (absolute paths, project root pinned via SENTINEL_PROJECT_ROOT) into that agent's config, merging safely with any MCP servers already configured there. Malformed config files are never touched — you get an error instead.

| Agent | Command | Config it writes | |---|---|---| | Claude Code | sentinel connect claude-code | <project>/.mcp.json | | Cursor | sentinel connect cursor | <project>/.cursor/mcp.json | | Antigravity | sentinel connect antigravity | ~/.gemini/antigravity/mcp_config.json (global — pinned to the project you ran it from) |

sentinel connect --list shows this table in the terminal. After connecting, restart/reload the agent so it picks up the new server. Re-run connect any time (e.g. after updating Node or Sentinel) — it refreshes the entry in place. Supporting a new agent is one entry in the AGENTS table in src/cli/commands/connect.ts — PRs welcome.

Any MCP client works — configure it to launch sentinel mcp as a stdio server. For clients configured via JSON:

{
  "mcpServers": {
    "sentinel": {
      "command": "sentinel",
      "args": ["mcp"],
      "env": { "SENTINEL_PROJECT_ROOT": "/absolute/path/to/your-project" }
    }
  }
}

If the agent launches servers without your shell's PATH, use the absolute path to the sentinel binary (find it with which sentinel) or node /path/to/dist/cli/index.js as the command. Claude Code users can equivalently run claude mcp add sentinel -e SENTINEL_PROJECT_ROOT="$(pwd)" -- sentinel mcp.

How Sentinel finds your project: some MCP clients launch servers from an unexpected working directory (even /), so Sentinel resolves the project root defensively, in this order: the SENTINEL_PROJECT_ROOT environment variable → a plausible launch directory → the workspace roots your MCP client declares (the protocol's roots capability). If none of those work, tool calls fail with a clear message instead of writing anywhere wrong. sentinel connect sets the env var for you, which is why it's the recommended path.

Optional extras:

sentinel install-hook       # block bad commits at git pre-commit time
sentinel dashboard          # local-only web UI over your verification history

The four checks

| Tool | Question it answers | |---|---| | verify_task_match | Does the diff functionally accomplish the stated task — not just superficially? | | check_hallucination | Do the packages, files, and symbols the diff references actually exist? (verified against package.json, node_modules, and the real filesystem) | | check_security | Any leaked secrets (AWS/GitHub/Slack/Stripe/… keys, private keys, connection strings — detected and masked), eval, shell injection, disabled TLS, hardcoded credentials? | | check_style_consistency | Does the diff write code the way this project already does? (indentation, quotes, semicolons, naming, module style — measured from your real files) |

Every check combines deterministic evidence (filesystem checks, pattern rules, style measurement — authoritative) with model judgment (for what rules can't prove). Every result is stored locally in .sentinel/sentinel.db.

Two modes, one important idea

Agent mode (MCP) — when an AI agent calls Sentinel's tools, Sentinel does not run a model of its own. The calling agent is already a powerful, already-paid-for model; a second, weaker judge adds cost and noise. Instead each tool returns structured evidence — the deterministic findings, the measured style profile, your project rules — plus an instruction telling the agent how to judge. Requires nothing: no key, no Ollama.

Standalone mode (CLI) — running checks yourself in a terminal, there's no agent to judge, so Sentinel uses its own model layer: free local Ollama by default (recommended model: ollama pull qwen2.5-coder), or your own Anthropic API key if you set one.

git diff | sentinel test-security                       # standalone check, judged locally
git diff | sentinel test-hallucination
git diff | sentinel test-style
sentinel test-verify --task "Add rate limiting" --diff-file change.diff

All test-* commands exit non-zero on findings, so they compose into scripts.

| | Agent mode (MCP) | Standalone mode (CLI) | |---|---|---| | Who judges | The calling agent | Sentinel's configured model | | Requirements | Nothing | Ollama running, or ANTHROPIC_API_KEY | | Result | Evidence + judgment instruction | Final verdict (exit code) |

Standalone settings: SENTINEL_PROVIDER (ollama/anthropic; default auto — Anthropic if a key is set, else Ollama), SENTINEL_MODEL (model override), OLLAMA_HOST, ANTHROPIC_API_KEY (env or a git-ignored .env in your project root).

The pre-commit hook

sentinel install-hook      # sentinel uninstall-hook to remove

Every git commit checks the staged diff — check_security by default. Findings block the commit with a printed summary; bypass one commit with git commit --no-verify. Fail-closed: if the model layer is unavailable the commit is blocked with setup instructions — a broken setup never silently waves commits through. Install refuses to overwrite a hook Sentinel didn't create, and uninstall refuses to delete one.

The local dashboard

sentinel dashboard              # http://127.0.0.1:4747   (--port to change)

Totals, per-tool flag rates, and full history with click-to-expand details, served from one self-contained page bound to 127.0.0.1 — no external assets, no analytics. Secrets are masked before storage, so the dashboard can never display one.

Configuration: .sentinelrc (optional)

Zero config is the default. An optional .sentinelrc (JSON, strictly validated — typos fail loudly) in your project root adds team standards:

{
  "context": "React + TypeScript SPA using GSAP for animations. Modern browsers only.",
  "style": { "indent": 2, "quotes": "single", "semicolons": "always", "naming": "camelCase", "moduleStyle": "esm" },
  "tools": { "check_style_consistency": false },
  "rules": [
    "Never suggest React class components — function components and hooks only.",
    "No new npm dependencies without discussion."
  ],
  "hook": { "tools": ["check_security", "check_hallucination"] }
}

| Field | Effect | |---|---| | context | Free-text project description fed to all model prompts (max 2000 chars). | | style | Convention overrides that replace inference — enforced even in brand-new projects. indent is "tabs" or a number of spaces. | | tools | Disable any tool: it leaves the MCP server and its CLI command prints a skip notice. | | rules | Plain-language policies (max 20 × 500 chars) the model layer flags violations of. Short and concrete works best. | | hook.tools | What the pre-commit hook runs (default ["check_security"]; verify_task_match can't run in a hook). |

Show you're covered

Integrated Sentinel in your project? Add the badge to your README:

[![Sentinel Verified ✅](https://img.shields.io/badge/Sentinel-Verified%20%E2%9C%85-2a78d6)](https://www.npmjs.com/package/sentinel-verify)

Sentinel Verified ✅

Design principles

  • 100% local — no Sentinel-owned backend, no telemetry; nothing leaves your machine except your own optional API calls to your own provider.
  • Free by default — agent mode needs no model at all; standalone mode runs on local Ollama.
  • Deterministic first — filesystem checks, pattern rules, and measurements are authoritative; model judgment fills the gaps and never overrides them.
  • Agent-agnostic — plain MCP; not locked to any vendor.

Language coverage

The deterministic halves of check_hallucination and check_style_consistency cover JavaScript/TypeScript; check_security's rules cover Node, Python, Go, and shell patterns. Other languages get the model-judgment half of every tool.

Contributing

Issues and PRs welcome. The codebase is deliberately small and readable: src/verify/ holds the four tools plus shared diff/combine logic, src/providers/ the model layer (Ollama, Anthropic — an OpenAI provider is a welcome contribution), src/mcp/ the server, src/cli/ the commands, src/dashboard/ the UI. Keep dependencies minimal (currently three), keep secrets masked, and keep everything local. Licensed MIT.