0385GitHub
perch
Semantic code linter that evaluates code units against configurable Jev questions.
lakeday-org/perchREADME ↗
perchscan.com</a> ·
<a href="https://docs.perchscan.com">docs</a>
</p>
Semantic code linting with Jev.
## Getting started
```sh
npm install -g @lakeday/perch
export PERCH_API_KEY=...
```
```console
$ perch scan
checkout.py
ID Line Severity Type Confidence Problem Method
bdc67421 14 P1 (0.8) defect 81% wrong_order place_order
ddc5c917 24 P1 (0.8) defect 92% inverted_condition can_fulfil
cart.py
ID Line Severity Type Confidence Problem Method
287bfb9d 9 P1 (1.0) defect 90% off_by_one subtotal
80d6ebbb 29 P1 (1.4) defect 89% unhandled_null cheapest
✖ 20 problems in 5 files, all failing
```
`perch issues` lists them worst first. `perch issues <id>` opens one up. `perch check
<id>` asks again after a fix, and records what it finds nowhere.
## Agent skills
```sh
perch setup claude-code # .claude/skills/perch/SKILL.md
perch setup codex # .codex/skills/perch/SKILL.md
perch setup pi # .pi/skills/perch/SKILL.md
perch setup cursor # .cursor/rules/perch.mdc
```
## Semantic linting
Extend perch with custom rules, in `perch.yaml`:
```yaml
- name: env-read-once
where: "src/**/*.js"
each: method
min: 70
ensure: >
This method takes its configuration as arguments. Reading process.env is the
command line's job.
```
## Documentation
| | |
| --- | --- |
| [Getting started](https://docs.perchscan.com/install/) | Install, the key, the first scan. |
| [Reading issues](https://docs.perchscan.com/issues/) | The list, the filters, closing what does not matter. |
| [Semantic linting](https://docs.perchscan.com/rules/) | `where`, `each`, `sees`, `min`, `ga