patdown
Fuzzy linter CLI that checks a code tree against plain-language rules in one markdown file, judged by Jev via a swappable interface.
Overview
patdown is a standalone CLI that lints a file tree against fuzzy rules kept in one markdown file, and can be wrapped as a hook, plugin or extension. Rules and commands use a provider-neutral interface so the judge can be swapped; the default backend uses Effect's Decision and DecisionModel with TypeSafe Jev. Commands include linting with a yes-threshold, listing loaded rules, a doctor check that verifies the key without calling the judge, and an ask command for ad hoc yes/no questions.
Options cover file selection by path, glob or a list, a cap on the number of judgments, verbose output and GitHub annotations. A composite GitHub Action runs the published CLI in CI. Optional packages add Pi write steering and Claude Code Write/Edit hooks. A list summary notes its LICENSE is not a recognised open-source licence.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Yes / no | Does this file violate the fuzzy rule (e.g. is this heading title case)? | yes · no |
How it works
- Write fuzzy rules in a markdown file.
- Run patdown over files or changed files.
- Jev answers yes/no per rule and file.
- Report findings above the yes-threshold, optionally as GitHub annotations.
Strengths
- Rules in plain language, not AST code.
- Swappable judge backend.
- CI action and agent hooks for Pi and Claude Code.
Caveats
- Licence not a recognised open-source licence per the list summary.
- Each judgment is an API call; use max-judgments.
Getting started
npx patdown --help, or pnpm add -D patdown and set TYPESAFE_API_KEY.At a glance
- Type
- Project
- Status
- beta
- Language
- TypeScript
- Runtime
- CLI, GitHub Action
- Has code
- yes
- Has tests
- yes
Use cases and integrations
How curated lists describe it
Typesafe's jev as a "fuzzy linter". give your code an ocular patdown.
hellogumbo/awesome-jevLints a tree against fuzzy rules kept in one markdown file, behind a provider-neutral interface so the judge can be swapped. Its LICENSE is not a recognised open-source license.
MrJev/awesome-jev
Frequently asked questions
Where do rules live?
In a single markdown file.
Can I use a different judge?
Yes, the interface is provider-neutral; TypeSafe is the default.
Does it integrate with agents?
Optional packages add Pi write steering and Claude Code Write/Edit hooks.
Related projects
Coding-agent hook that asks Jev one yes/no per project rule on every edit or turn and makes the agent fix any violation.
HookbetaTypeScriptAdvisor for coding agents: git and Stop hooks flag test tampering, secrets and skipped hooks, with optional Jev review findings.
HookbetaSemantic code linter that reads each method with its callers and callees and asks decision models about defects, kind, line and severity.
CLIbetaTypeScriptCLI and agent commands auditing a git diff against YAML standards packs, scoring each hunk with Jev so agents fix only flags.
Agent skillbetaTypeScriptFuzzy linter hook for Claude Code and Codex where Jev checks each written file against team rules and reports violations at edit time.
HookbetaTypeScriptCheap Jev checks beside a Claude coding session: per-function code rules, doc contradiction checks and context retrieval.
ProjectbetaPython