Show HN: Jev-lint – semantic linter with plain English rules Developer zdenham released jev-lint, an open-source semantic linter that checks JavaScript and TypeScript code against project conventions written in plain English, using Jev models through Vercel AI Gateway. The tool requires Node.js 22.22+ and Git, defaults to a 20-finding and 16 KiB output limit, and is an early release whose findings should be reviewed before being made to block CI. Rules are defined in jev.config.json or referenced from Markdown files, and live checks consume the user's Vercel AI Gateway credits via an AI_GATEWAY_API_KEY. Check JavaScript and TypeScript code against project conventions written in plain English. Write a rule or point to a Markdown file with examples; Jev https://typesafe.ai/blog/introducing-system-one-models-and-jev evaluates the relevant code and reports possible violations. Built for coding agents, with compact output by default and optional pretty or JSON output. Early release; review findings before making them block CI. Define your conventions in jev.config.json . Each rule has a name and a plain-English instruction, with optional file patterns: { "files": "src/ / .{ts,tsx}" , "ignore": "src/generated/ " , "rules": { "preserve-error-cause": { "instruction": "When rethrowing an unexpected error, preserve the original error as its cause.", "severity": "error" }, "user-facing-errors": { "files": "src/ui/ " , "instruction": { "file": "docs/conventions.md user-facing-errors" } } } } Paths are relative to the config file. Rule-specific patterns narrow the top-level files selection. Severity defaults to warning ; use error to fail the check. For Markdown rules, include the convention, examples, and exceptions: User-facing errors Explain what went wrong and what the user can do next. Good: "We couldn't save your changes. Check your connection and try again." Bad: "Mutation failed: ERR UPSTREAM 502." This applies to messages shown to users, not internal logs. A heading reference includes its subsections and code examples. Omit the fragment to use the whole file as one rule. Markdown files must be inside the config directory or its descendants. Examples guide the judgment; they are never executed. Requires Node.js 22.22+ and Git. Clone the repo, build it, and register the global command: git clone https://github.com/zdenham/jev-lint.git cd jev-lint npm ci npm run build npm link jev-lint --help You can now run jev-lint from any project directory. Keep this checkout in place: the global command links to it. If your shell cannot find the command, ensure npm's global executable directory is on your PATH $ npm prefix --global /bin on macOS/Linux . To update, run git pull , npm ci , and npm run build inside the checkout. To remove the global command, run npm uninstall --global jev-lint . cd /path/to/your-project jev-lint init This creates jev.config.json without installing anything in your project. Edit its rules, then run jev-lint --dry-run to preview the scope and jev-lint to check it. For live checks, get a Vercel AI Gateway API key https://vercel.com/docs/ai-gateway/authentication-and-byok . Set it in the environment, or put it in .env.local beside jev.config.json : export AI GATEWAY API KEY="your-key" Selected source code and rules are sent to Jev through Vercel AI Gateway, using your account's credits. No Vercel deployment is needed. Add these to your project's .gitignore : .env.local .jev/reports/ jev-lint --dry-run Preview files and rules; no API calls jev-lint Check configured files jev-lint src/ui Narrow to a file or directory jev-lint --changed main Check whole tracked files changed from main's merge-base jev-lint --format pretty Human-readable code frames jev-lint --format json Programmatic output Agent output includes file locations, rule references, usage, and a saved report. Large results are truncated explicitly; defaults are 20 findings and 16 KiB of output. f 1 ERROR preserve-error-cause src/save.ts:1:1 Possible violation of preserve-error-cause; compare the code with the rule and its examples. ... Rule: jev.config.json /rules/preserve-error-cause/instruction Report: /your-project/.jev/reports/