offbeat beta
Guides / the CLI

Prose quality as an exit code.

The CLI turns the analyzer into an exit code. Every scan is scored by the hosted premium analyzer. Its one design idea: writing quality should be checkable the way tests are.

Getting it

Like the MCP server, the CLI ships to beta testers on request through the feedback form, and lands on a registry after the beta. It needs Node 20 or newer.

Scan: the prose gate

offbeat scan draft.md offbeat scan - < draft.md # stdin works too offbeat scan draft.md --json # full report as JSON

The scan prints the score, every failing check, and the findings with their exact evidence. It exits 0 when all hard checks pass and 1 otherwise, which makes it a CI gate in one line:

# fail the pipeline when marketing copy drifts machine-ward offbeat scan content/launch-post.md || exit 1

Language is auto-detected per text; force it with --lang en or --lang ar, and pick the strictness profile with --mode full or --mode light.

Scores come from the hosted premium analyzer; there is no offline analysis mode. When the analyzer cannot be reached, or the account has no premium access, the command exits with code 2 and a clear error instead of a weaker local result. Set OFFBEAT_API_KEY (a key from your account page) once accounts gate premium; CI runs carry the same variable.

Humanize: the closed loop, your model

offbeat humanize draft.md --provider claude-cli --diff offbeat humanize draft.md --provider ollama --model llama3.3 offbeat humanize draft.md --out final.md --report report.json

The loop analyzes, briefs the model on the exact findings, rewrites, and re-analyzes. Providers cover local models, your existing editor login, and keyed APIs; run offbeat providers for the live list. Exit code 0 means the final text measurably beat the baseline; 2 means it did not, and the tool says so rather than shipping a sideways rewrite.

Reading the output