Ambiguous tools
Descriptions that are empty, vague, overlapping, or missing the words that distinguish neighboring tools.
Static analysis for agent language
LintLang catches ambiguous tools, missing limits, conflicting directives, and schema mismatches in AGENTS.md, prompts, configuration, and Python source—before a model runs.
$ uvx --from lintlang==0.6.0 lintlang scan AGENTS.md
REVIEW — 2 MEDIUM
H1.6 tool:search_docs ↔ tool:search_guides
Descriptions do not state how these tools differ.Browser playground · LintLang 0.6.0
Run the example below, or paste your own prompt, tool definition, or configuration. The actual LintLang engine runs locally in your browser.
H1.2 · H2 · H1.6Compare the original and improved examples by running a scan on each.The first scan downloads the Python runtime and LintLang, so it may take a moment. Later scans reuse the loaded engine.
Run the loaded example to see its findings. Then load the improved example and scan again to compare.
No model · no upload · no accountDescriptions that are empty, vague, overlapping, or missing the words that distinguish neighboring tools.
Retry loops, tool-using instructions, and workflows that omit limits, stop conditions, or progress checks.
Tool descriptions that disagree with schemas, conflicting output requirements, and malformed message roles.
Prompt text and uncalibrated thresholds extracted from Python source without executing the application.
uvx --from lintlang==0.6.0 lintlang scan AGENTS.mdFix findings or record why the language is intentional.
lintlang scan AGENTS.md --fail-on failA normal scan reports findings without failing the process. --fail-on failblocks only HIGH and CRITICAL findings; --fail-on review also blocks MEDIUM findings. Missing or malformed requested inputs remain errors either way.
Scan a chosen instruction path on every push or pull request. lintlang init --github writes a pinned Code Scanning workflow instead.
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: hermes-labs-ai/lintlang@v0.6.0
with:
path: AGENTS.mdAction setup ↗Scan the configured paths before each commit. Findings stay advisory until you add --fail-on fail.
repos:
- repo: https://github.com/hermes-labs-ai/lintlang
rev: v0.6.0
hooks:
- id: lintlang
args: [AGENTS.md]pre-commit setup ↗A non-blocking PostToolUse hook returns repair guidance after Write or Edit changes a supported file.
$ pipx install lintlang==0.6.0
# then, inside Claude Code
/plugin marketplace add hermes-labs-ai/lintlang
/plugin install lintlang@lintlangPlugin guide ↗A non-blocking AfterTool hook returns repair guidance after write_file or replace changes a supported file. Requires uv; the current guide remains pinned to the upstream-verified 0.5.3 source.
Extension guide ↗Opt-in external plugin AI_LINTLANG for repositories that already run MegaLinter.
MegaLinter setup ↓SARIF 2.1.0 output places instruction findings beside code findings.
SARIF setup ↓Replace AGENTS.md with the instruction paths your repository owns. The editor hooks never block or rewrite a file. These integration points are maintained by Hermes Labs in the LintLang repository; they are not endorsements by GitHub, Anthropic, Google, or MegaLinter.
GitHub Code Scanning
Since 0.4.1, LintLang emits deterministic SARIF 2.1.0 with stable rule IDs, repository-relative paths, and evidence-supported line spans where the parser can justify them. Structured inputs remain file-level rather than inventing precision.
Copy the least-privilege workflow ↗$ lintlang scan AGENTS.md \
--format sarif \
--fail-on fail \
> lintlang.sarifMegaLinter · opt-in external plugin
Start with MegaLinter already installed and running in your repository. Merge these entries into .mega-linter.yml, preserving your existing plugins and linter selections. If you do not already use ENABLE_LINTERS, list the other linters you want to keep too: this setting limits which linters run.
AI_LINTLANG selects conventional instruction files such as AGENTS.md, CLAUDE.md, and prompt or tool files by name. The guide explains how to adjust that scope. It runs lintlang scan --fail-on fail: FAIL exits nonzero; REVIEW stays advisory.
PLUGINS:
- https://raw.githubusercontent.com/hermes-labs-ai/lintlang/main/mega-linter-plugin-lintlang/lintlang.megalinter-descriptor.yml
ENABLE_LINTERS:
- AI_LINTLANGExplore the linked public ecosystem evidence: recurring CI execution, independent Gentoo packaging, and product ideas credited by the Agent Lint maintainer.
The boundary
LintLang does not run models, evaluate runtime behavior, prove semantic correctness, or establish that an agent is safe in production.
Use it before prompt tests, guardrails, and production monitoring—not instead of them.
LintLang 0.6.0 is published and maintained by Hermes Labs. Canonical repository: https://github.com/hermes-labs-ai/lintlang.
See where static linting fits in the stack →Compare LintLang with adjacent tools →Start with one real instruction file
$ uvx --from lintlang==0.6.0 lintlang scan AGENTS.md