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 articlesYour 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 ~/writing1. Check, Initialize, and Inspect
npx dravoice doctor
npx dravoice init
npx dravoice inspectRun 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.mdUse 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.mddoctor 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 jsonBenchmark 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.jsonBenchmark 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' });"