jevlint
Semantic lint rules as yes/no questions to Jev, for review issues like logged secrets or unbounded retries that ESLint cannot express.
Overview
This jevlint targets code-review questions that syntax-based linters cannot answer, such as whether a secret is being logged, whether a retry loop can run forever, or whether a handler leaks an internal error message. Each rule is a plain-English yes/no question phrased so that yes means violation, with criteria describing the true and false cases, a severity, a why and a suggested fix.
jevlint selects the code each rule applies to, optionally with a regex prefilter and an ast-grep candidate selector, sends it to Jev, and reports a calibrated probability. Results look like normal linter output with files, line ranges, rule ids and exit codes. Rules are tested against their own fixtures and answers are cached. Without a selector, a chunk is judged and then narrowed to the smaller window that fired. The README says to use it alongside ESLint, since deterministic rules are cheaper and exact when syntax suffices.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Yes / no | Does the code in `code` pass a password, API key, access token or other secret value to a logging call? | — |
| Yes / no | Can this retry loop run forever? | — |
How it works
- Define rules in jevlint.config.ts with question, criteria and file globs
- Prefilter and selectors pick candidate code
- Jev returns the probability that each candidate violates the rule
- Hits above the rule's threshold are reported with line range, why and fix
- jevlint test checks each rule against its fixtures
Strengths
- Catches semantic issues that syntax rules miss
- Fixture tests and caching make results repeatable
- Prefilters keep API calls down
- Familiar linter output and exit codes
Caveats
- Requires a TypeSafe or AI gateway key
- Line precision depends on chunking or selectors
- Not a replacement for deterministic linters
Getting started
npm install --save-dev @hazymoon/jevlint typescript, npx jevlint init, export TYPESAFE_API_KEY=..., npx jevlint test, then npx jevlint.At a glance
- Type
- Project
- Status
- beta
- Language
- TypeScript
- Runtime
- Node.js 22+ or Bun CLI
- Has code
- yes
- Has tests
- yes
- License
- MIT
Use cases and integrations
How curated lists describe it
Semantic lint rules for the code-review questions a deterministic linter can't express
logicrw/awesome-jev-projectsSemantic lint rules for review questions syntax can't answer, such as a logged secret or an unbounded retry loop, asked of Jev alongside ESLint.
MrJev/awesome-jev
Frequently asked questions
How is a rule written?
As a narrow yes/no question about the code, phrased so yes means violation, with criteria for each answer.
Should it replace ESLint?
No. The README recommends it alongside ESLint for questions syntax cannot decide.
Which keys does it accept?
A TypeSafe key or an AI gateway key, as described in its providers section.
Related projects
Advisor for coding agents: git and Stop hooks flag test tampering, secrets and skipped hooks, with optional Jev review findings.
HookbetaNode quality gate that scores each diff, commit message and doc set with three Jev Score lenses and a security Noul.
CLIbetaTypeScriptGitHub Action that compiles .jev.yml rules into Jev questions and fails, comments on or passes a PR based on the numbers.
ProjectbetaTypeScriptRust code-review gate asking Jev small typed questions about functions and tests, failing CI only on rules measured 80% right.
CLIproductionRustCoding-agent hook that asks Jev one yes/no per project rule on every edit or turn and makes the agent fix any violation.
HookbetaTypeScriptRead-only Go CLI that checks files against your plain-language code rules with Jev, locally or in CI.
CLIbetaGo