LLM-oriented CLI linter — catch quality drift before it hardens (Rust binary).
Project description
llm-lint
Static checks for “LLM slop” and related drift: oversized files/functions, duplicate bodies, noisy helpers, risky env fallbacks, and secret-shaped strings. Implemented in Rust; configuration lives in llm-lint.toml or llm-lint.json at the root of the tree you scan.
Python environments
The CLI is published to PyPI as llm-lint (pre-built wheels for common platforms via Maturin).
pip / virtualenv
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install llm-lint
llm-lint scan .
uv (recommended)
uv tool install llm-lint
llm-lint scan .
Or run without a global install:
uv tool run --from llm-lint llm-lint scan .
pipx
pipx install llm-lint
llm-lint scan .
JavaScript / Node environments
The npm package llm-lint-cli is a thin wrapper: it runs the same binary via uv tool run --from llm-lint, so the real executable comes from PyPI.
Prerequisites
- uv must be available. On macOS/Linux the package’s install flow can bootstrap uv; on Windows install uv yourself if needed.
Install in a project
npm install -D llm-lint-cli
npx llm-lint scan .
package.json scripts:
{
"scripts": {
"lint:llm": "llm-lint scan ."
}
}
Postinstall config
On a normal (non-global) npm install, if llm-lint.toml is missing in the project root, a starter file is copied from the package template. Existing files are left unchanged.
Other install options
| Channel | Command |
|---|---|
| Cargo (from source / crates.io) | cargo install llm-lint |
Usage
llm-lint scan .
llm-lint scan . -f json --fail-threshold 20
llm-lint scan . -v --max-file-lines 300
See llm-lint.toml in this repo for configuration keys (include rules, thresholds, exclude-dirs, etc.).
Release & publishing
See RELEASING.md for PyPI trusted publishing, npm token, and scripts/release.py.
Repo layout
docs/logo.png— project logo (README header)Cargo.toml/src/— CLI and librarypyproject.toml— PyPI metadata + maturin (bindings = "bin")npm/—llm-lint-cliwrapper +templates/llm-lint.toml.github/workflows/— CI + publish on GitHub Release
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file llm_lint-0.1.3.tar.gz.
File metadata
- Download URL: llm_lint-0.1.3.tar.gz
- Upload date:
- Size: 104.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e6c56abb8eb4f2390e44cda6adba2b80f7d2608803a9640ab248492e8f37f34d
|
|
| MD5 |
4137b5c905cd84bc526ecf0273b0a666
|
|
| BLAKE2b-256 |
17839fa5c0a58dfa9c6d16cae2efd7e3b362f3572d94af7014451ca08d3a0058
|
Provenance
The following attestation bundles were made for llm_lint-0.1.3.tar.gz:
Publisher:
publish.yml on joshuagilley/llm-lint
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
llm_lint-0.1.3.tar.gz -
Subject digest:
e6c56abb8eb4f2390e44cda6adba2b80f7d2608803a9640ab248492e8f37f34d - Sigstore transparency entry: 1177909457
- Sigstore integration time:
-
Permalink:
joshuagilley/llm-lint@26cfd7e77c466f16e3a42c3eff04e2c2d851d82c -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/joshuagilley
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@26cfd7e77c466f16e3a42c3eff04e2c2d851d82c -
Trigger Event:
release
-
Statement type:
File details
Details for the file llm_lint-0.1.3-py3-none-win_amd64.whl.
File metadata
- Download URL: llm_lint-0.1.3-py3-none-win_amd64.whl
- Upload date:
- Size: 1.5 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c3e6375c035f2b420bcd749ffd4196158fe241fca21cc71c31cc8b74c0163f0
|
|
| MD5 |
e6e9a5e3d60603c1cf3901347b7433f2
|
|
| BLAKE2b-256 |
7baef905739f6a998b1b17d77a0747b5861c424bb1e69e80dd331cd337e2d33c
|
Provenance
The following attestation bundles were made for llm_lint-0.1.3-py3-none-win_amd64.whl:
Publisher:
publish.yml on joshuagilley/llm-lint
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
llm_lint-0.1.3-py3-none-win_amd64.whl -
Subject digest:
8c3e6375c035f2b420bcd749ffd4196158fe241fca21cc71c31cc8b74c0163f0 - Sigstore transparency entry: 1177909465
- Sigstore integration time:
-
Permalink:
joshuagilley/llm-lint@26cfd7e77c466f16e3a42c3eff04e2c2d851d82c -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/joshuagilley
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@26cfd7e77c466f16e3a42c3eff04e2c2d851d82c -
Trigger Event:
release
-
Statement type:
File details
Details for the file llm_lint-0.1.3-py3-none-manylinux_2_39_x86_64.whl.
File metadata
- Download URL: llm_lint-0.1.3-py3-none-manylinux_2_39_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: Python 3, manylinux: glibc 2.39+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
50e03f56d356b160ce58d987fbd99cdbe2cc35350654cbd6bd83ff13a561ca92
|
|
| MD5 |
f4a60183c761209c6456a14aa702ca77
|
|
| BLAKE2b-256 |
22b526c9cac3fcb4d70a518630b049c6db84f76cde8b8eca0c02885105b0d097
|
Provenance
The following attestation bundles were made for llm_lint-0.1.3-py3-none-manylinux_2_39_x86_64.whl:
Publisher:
publish.yml on joshuagilley/llm-lint
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
llm_lint-0.1.3-py3-none-manylinux_2_39_x86_64.whl -
Subject digest:
50e03f56d356b160ce58d987fbd99cdbe2cc35350654cbd6bd83ff13a561ca92 - Sigstore transparency entry: 1177909463
- Sigstore integration time:
-
Permalink:
joshuagilley/llm-lint@26cfd7e77c466f16e3a42c3eff04e2c2d851d82c -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/joshuagilley
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@26cfd7e77c466f16e3a42c3eff04e2c2d851d82c -
Trigger Event:
release
-
Statement type:
File details
Details for the file llm_lint-0.1.3-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: llm_lint-0.1.3-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.4 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a6fc944ae082740888f26cde450d75e1f812cddcce8f26515f2b86660646bcb
|
|
| MD5 |
6db7a212e806aa69be4a50bf8c45ddf5
|
|
| BLAKE2b-256 |
67ba57ea42e131ab9da2d8607d9c4ac5edf2949dfed502d5d74584df32fbf2f0
|
Provenance
The following attestation bundles were made for llm_lint-0.1.3-py3-none-macosx_11_0_arm64.whl:
Publisher:
publish.yml on joshuagilley/llm-lint
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
llm_lint-0.1.3-py3-none-macosx_11_0_arm64.whl -
Subject digest:
2a6fc944ae082740888f26cde450d75e1f812cddcce8f26515f2b86660646bcb - Sigstore transparency entry: 1177909467
- Sigstore integration time:
-
Permalink:
joshuagilley/llm-lint@26cfd7e77c466f16e3a42c3eff04e2c2d851d82c -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/joshuagilley
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@26cfd7e77c466f16e3a42c3eff04e2c2d851d82c -
Trigger Event:
release
-
Statement type: