Perch
Semantic code linter that reads each method with its callers and callees and asks decision models about defects, kind, line and severity.
Overview
Perch is an open-source CLI that parses a repository into a method-level call graph and asks a decision model about each method with its callers and callees in view. Per the list summaries, it asks a Noul for whether the method has a bug, a Choice for which kind and which line, and a Score for severity, plus language-filtered CWE checks and custom rules written as sentences at repository, file or method level, failing CI when any answer exceeds its floor. Output lists problems such as wrong order, inverted condition, off-by-one or unhandled null with line, severity and confidence.
It runs through Perch Cloud by default, which routes questions to a suitable model, with $5 free and cached decisions making re-runs on unchanged code free, and can scan pull requests without workflow files. You can instead point it directly at Jev, Liquid AI d1, OpenAI gpt-6-luna or an open DiffusionGemma Jev endpoint. Agent skills can be installed for Claude Code, Codex, Pi and Cursor.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Yes / no | Does this method have a bug? | yes · no |
| Choice | Which kind of defect, and on which line? | wrong_order · inverted_condition · off_by_one · unhandled_null |
| Score | How severe is it? | — |
| Yes / no | Does this method follow the custom rule (e.g. keep passwords and tokens out of logs)? | yes · no |
How it works
- Parse the repository into a method-level call graph.
- Ask defect, kind, line and severity questions per method in context.
- Check CWE and custom sentence rules.
- Report findings and fail CI above floors; cache answers.
Strengths
- Call-graph context for each judgment.
- Rules written as sentences in YAML.
- Swappable decision-model providers.
Caveats
- Cloud is the default path; direct providers need your own keys.
- Sends code to the chosen provider.
Getting started
npm install -g @lakeday/perch && perch login && perch scanAt a glance
- Type
- CLI
- Status
- beta
- Language
- TypeScript
- Runtime
- Node CLI, cloud service
- Has code
- yes
Use cases and integrations
How curated lists describe it
Code linting: semantic code linter that asks Jev about each method with its callers and callees in view, a `Noul` for whether it has a bug, a `Choice` for which kind and which line, and a `Score` for severity, plus language-filtered CWE `Noul` checks and custom rules written as sentences at repository, file or method level, failing CI on any answer over its floor.
yibie/awesome-jevSemantic code linter that evaluates code units against configurable Jev questions.
cobanov/awesome-jevOpen-source CLI that parses a repository into a method-level call graph, then asks Jev to flag likely defects and check project rules written in plain English.
hellogumbo/awesome-jevSemantic linter that reads each method together with its callers and callees before asking about it. Rules are sentences in a YAML file.
MrJev/awesome-jev
Frequently asked questions
What does Perch ask about each method?
Whether it has a bug, what kind and where, and how severe, plus custom and CWE rules.
Can I use Jev directly?
Yes, set PERCH_BASE_URL, PERCH_API_KEY and PERCH_MODEL_ID to the TypeSafe endpoint.
Is re-scanning expensive?
Decisions are cached, so unchanged code is free to re-scan.
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.
HookbetaCLI 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.
HookbetaTypeScriptFuzzy linter CLI that checks a code tree against plain-language rules in one markdown file, judged by Jev via a swappable interface.
ProjectbetaTypeScriptCheap Jev checks beside a Claude coding session: per-function code rules, doc contradiction checks and context retrieval.
ProjectbetaPython