An electric fence for LLMs (and humans too). Written in Rust,
loq enforces file line limits: fast, works out of the box, and language agnostic.
- 🔒 Hard limits to prevent oversized files and context rot
- 📏 One metric: line counts (
wc -lstyle) - 🧩 Works everywhere - no language-specific setup
- 🤖 Designed specifically with coding agents in mind
- 🦀 Lightning fast Rust core
# With uv (recommended)
uv tool install loq
# With pip
pip install loq
# With cargo
cargo install loq# Check current directory for violations (default: 500 lines)
loq check
# Check specific paths
loq check src/ lib/
# Check files from stdin
git diff --name-only | loq check - # Creates, updates or removes exact-path rules
# to match the current state of your files.
loq baseline
# Creates or updates exact-path rules for current violations
loq relax
loq relax src/legacy.rs # specific file
loq relax --extra 50 # custom buffer
# Ratchets down or removes existing exact-path rules
# as your file sizes become compliant over time
loq tightenAll three commands manage exact-path rules in loq.toml. baseline and
relax can add new rules; tighten only updates or removes existing ones.
loq works zero-config. Run loq init to create a loq.toml file to customize:
# default, for files not matching any rule
default_max_lines = 500
# skip .gitignore'd files
respect_gitignore = true
# ignore files or paths
exclude = [".git/**", "**/generated/**", "*.lock"]
# Add fix_guidance to include project-specific instructions
# with each violation when piping output to an LLM:
fix_guidance = "Split large files: helpers → src/utils/, types → src/types/"
# Last match wins
# * stays within a path segment
# ** matches across directories
[[rules]]
path = "**/*.tsx"
max_lines = 300# Detailed output
loq check -v
# JSON format
loq check --output-format jsonrepos:
- repo: https://github.com/jakekaplan/loq
rev: v0.1.0-alpha.7
hooks:
- id: loqContributions are welcome! See CONTRIBUTING.md for development setup and guidelines.
This project is licensed under the MIT License.