-
Notifications
You must be signed in to change notification settings - Fork 0
Home
lanekeep enforces the conventions that live in your team's heads and your reviewers' comments — the ones a language model cannot infer from the code it is shown. Every rule is a codified answer to "the agent keeps doing this wrong."
| Getting Started | Install it and catch something, in about a minute |
| Configuration |
lanekeep.json, every field |
| Writing Rules | Rule anatomy and the host API |
| CI and Editors | Pre-commit, GitHub Actions, LSP, MCP |
lanekeep checks six languages. Each guide covers installing it in that ecosystem, what to put in the config, which built-in rules apply, and a worked custom rule.
| Language | Guide | Extensions |
|---|---|---|
| Go | Go | .go |
| Python | Python |
.py, .pyi
|
| Rust | Rust | .rs |
| TypeScript / JavaScript | TypeScript and JavaScript |
.ts, .tsx, .mts, .cts, .js, .mjs, .cjs, .jsx
|
Rules are written in TypeScript, whatever language they check. A rule about Go code is a TypeScript program that matches a Go syntax tree.
That is a deliberate choice rather than a JavaScript bias. Rules need to be programs — loops, data structures, reading other files — because the conventions worth enforcing are too specific for any fixed vocabulary of predicates. One embedded language keeps the sandbox, the cache and the host API single-implementation, and TypeScript is the one most teams already have someone who writes.
You do not need Node, Python or Go installed to run lanekeep. It is a single static binary with the JavaScript engine compiled in. A runtime is needed only to install it from that ecosystem's index.
Configuration is not TypeScript — lanekeep.json is plain data, so a Go or Python team
never writes a .ts file except when authoring an actual rule.
Languages
In the repository