Canonical, language-specific lint / complexity / formatting / type-check configs, coalesced from several production projects into one place so bootstrapping a new project's quality bar is a single command.
Each language directory contains the canonical config files plus an init.sh
installer that copies them into a target project and fills in the
non-portable bits (project name, paths).
| Language | Location | Sources coalesced |
|---|---|---|
| Rust | rust/ |
jefe, luther, personal-agent |
| TypeScript | typescript/ |
llxprt-code (production codebase, Node 24+) |
| Bun | bun/ |
Derived from TypeScript template; uses Biome toolchain |
| Deno | deno/ |
Derived from TypeScript template; uses Deno built-in tools |
| Python | python/ |
aesop (production codebase) |
The universal launcher delegates to the per-language installer:
# From anywhere:
project-setup/setup.sh <language> [target-dir] [package-name]
# Examples — run from your project root:
project-setup/setup.sh rust .
project-setup/setup.sh typescript .
project-setup/setup.sh bun .
project-setup/setup.sh deno .
project-setup/setup.sh python . my_packageOr call a language installer directly:
project-setup/rust/init.sh .
project-setup/typescript/init.sh .
project-setup/python/init.sh . my_packageEach installer prints the exact next steps (install deps, run linters).
These configs follow one rule: pick the strictest option; never loosen.
- Wherever two source projects disagree on a threshold, the lower / stricter value wins.
- No suppression directives in any canonical config — no
eslint-disable, no#[allow(...)], nonoqa, nots-ignore, notype: ignore. Fix the underlying issue instead. - Complexity/size thresholds are never raised.
The Rust setup is the clearest example of coalescing: three projects with
drifting, slightly-different clippy configs merged into one, taking the
strictest of each. See rust/README.md for the full
rule-by-rule rationale.
The planning/templates/ language RULES docs
reference these configs as the concrete quality bar. When you set up a new
project:
- Plan — copy
planning/templates/<language>/+_base/docs. - Configure — run
project-setup/setup.sh <language> .to install lint/complexity gates. - Build — follow the plan with the quality bar already in place.
To have an AI agent set up linting for a new project:
Copy the lint/complexity config from
vibetools/project-setup/<language>/into this project by running itsinit.sh, then verify the linters pass before writing any code.