Skip to content
Fred Souza edited this page Aug 3, 2026 · 3 revisions

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."

Start here

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

By language

lanekeep checks five 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
TypeScript / JavaScript TypeScript and JavaScript .ts, .tsx, .mts, .cts, .js, .mjs, .cjs, .jsx

One thing worth knowing up front

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.

Clone this wiki locally