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

dravoice

v0.1.4

Published

Compile article voice profiles into reusable LLM writing context, evidence-first briefs, and deterministic draft review notes.

Readme

Dravoice

Dravoice is a local-first CLI for compiling Markdown, MDX, and plain-text writing corpora into reusable voice guidance and deterministic draft review notes.

It is not an AI-authorship detector, grammar checker, prose linter, or third-party author imitation tool. It helps a writer inspect and reuse their own measurable rhythm, register, evidence habits, discourse shape, and structure.

First Successful Run

Start with your own writing, not a blank prompt. Create an articles directory in the folder where you want to run Dravoice, then copy in at least 3 representative long-form Markdown, MDX, or plain-text pieces.

mkdir -p articles

Your first folder should look like this:

your-writing-folder/
  articles/
    first-piece.md
    second-piece.mdx
    third-piece.txt

./articles means "the articles directory inside my current terminal folder." Five to ten pieces gives Dravoice a stronger profile. If ./articles is missing, interactive init can look for common writing folders such as ./content, ./posts, ./blog, and ./essays, then preview the files before it learns from them.

If your writing is already somewhere else, point Dravoice at that directory:

npx dravoice doctor --examples ~/writing
npx dravoice init --examples ~/writing

1. Check, Initialize, and Inspect

npx dravoice doctor
npx dravoice init
npx dravoice inspect

Run doctor before learning so missing folders, unsupported files, weak corpora, duplicate-looking files, and length-imbalanced source sets get clear next steps. Inspect the profile before trusting it. If the feature-family summaries do not look recognizable, improve the source corpus first.

2. Generate Guidance and a Brief

npx dravoice prompt --out AGENTS.md
npx dravoice brief "A new article topic" --evidence notes.md --out brief.md

Use the generated guidance and evidence-first brief to draft from claims you can actually support.

3. Revise and Review

npx dravoice revise-plan draft.md
npx dravoice review draft.md

doctor checks corpus readiness, init reads your source pieces, writes a local profile in ./dravoice-voice, and writes .dravoice.yml project defaults. inspect makes the learned feature families visible, prompt turns high-confidence observations into drafting guidance, brief creates an evidence-first article plan, revise-plan ranks calibrated stylometric revision actions, and review reports family-level drift with calibration confidence.

Run drav help init or drav help review for command-specific help.

Advanced Automation

Use strict JSON output when CI or local automation should fail on drift:

npx dravoice review draft.md --mode strict --format json

Benchmark commands are for validating Dravoice itself, not for a first writer workflow:

npx dravoice benchmark prepare --examples ./articles --topic "A new article topic" --out ./bench-run --seed 42
npx dravoice benchmark prepare-many --examples ./articles --topic "A new article topic" --out ./bench-runs --runs 3 --seed 42
npx dravoice benchmark score --run ./bench-run --judge ./bench-run/judge/judgment.json

Benchmark reports include deterministic margins and repeat-run cautions. A single run is directional evidence only. Score output includes suggested follow-up seeds for repeated validation runs.

Trust Boundaries

Dravoice profiles include per-family calibration diagnostics: threshold observations, stability, minimum-evidence checks, and whether a family is usable for findings. Weak corpora produce cautious guidance. Strict review can surface document-level discourse, lexical, register, and structure drift, but the findings remain revision guidance, not authorship proof.

V2 profiles expose marker-set register metadata, mixed-register warnings, heading-depth and section-order structure signals, paragraph-localized revision actions, expanded MDX scaffold filtering before analysis, and library-level custom register marker sets for project-specific scoring.

Fresh Install Smoke Test

From a packed tarball:

npm pack --json
node -e "const { execFileSync } = require('node:child_process'); const pack = require('./package.json'); const tarball = './' + pack.name + '-' + pack.version + '.tgz'; execFileSync('npm', ['exec', '--package', tarball, '--', 'drav', '--help'], { stdio: 'inherit' });"