A linter for agent instructions

Catch ambiguous agent instructions before a model runs.

LintLang checks tool descriptions, system prompts, AGENTS.md, YAML, JSON, and supported Python prompt sources for bounded language and contract defects. Local, deterministic, zero-LLM.

Free and open source · Built by Hermes Labs

agent-config.md

lintlang

Illustrative rendering of an exercised LintLang 0.4.1 scan

1Keep trying until it works.
!
CRITICAL · H2 Missing Constraint Scaffolding Unbounded retry loop needs an explicit limit.
2Respond in JSON and Markdown.
!
MEDIUM · H6 Template Format Contract Violation References multiple output formats and may produce hybrid output.
Clear instructionsBetter reviewFewer surprisesClear instructionsBetter reviewFewer surprises

Natural language is a beautiful interface. It is also a very loose one.

Agent configurations are becoming application code, but they are still written and reviewed like prose. LintLang gives your instructions the same disciplined feedback loop as the rest of your stack.

Explore the approach
01

Flag mixed output-format instructions

Surface references to multiple output formats that may lead to hybrid output.

02

Expose bounded risks

Spot vague tool descriptions and qualifiers, missing operational limits, and context-boundary risks.

03

Set a baseline

Bring repeatable checks to every change, from a local prompt edit to a CI pull request.

Write. Check. Ship with intent.

  1. 1

    Point at supported instructions

    Scan recognized JSON/YAML agent-config shapes, .txt, .md, and .prompt files, or Python files with extractable prompts.

  2. 2

    Read findings in context

    Each finding reports a detected pattern, severity, logical location, and suggested review action. Findings may remain at file or logical-location level.

  3. 3

    Keep the standard in CI

    Turn configuration review from a heroic habit into a dependable part of your delivery flow.

Put a check between the draft and the deploy.

Run LintLang against the instruction file in front of you, then bring the same check into CI.

Working with a coding agent? Tell it: “Run LintLang against our agent instructions before changing them.”

Run once, no install · LintLang 0.6.0 · Python 3.10+

$ uvx --from lintlang==0.6.0 lintlang scan AGENTS.md

View the package on PyPI

Run the check where instructions change.

Each entry point ships in the LintLang repository and is pinned to the 0.6.0 release. Replace AGENTS.md with the instruction paths your repository owns.

GitHub Action

Scan a chosen path on every push or pull request, or run lintlang init --github to write a pinned Code Scanning workflow.

- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
  with:
    persist-credentials: false
- uses: hermes-labs-ai/lintlang@v0.6.0
  with:
    path: AGENTS.md
Action setup ↗

pre-commit

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 ↗

Claude Code plugin

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@lintlang
Plugin guide ↗

Gemini CLI extension

A non-blocking AfterTool hook returns repair guidance after write_file or replace changes a supported file. Requires uv; the guide carries the commit-pinned install command.

Extension guide ↗

MegaLinter

Opt-in external plugin AI_LINTLANG for repositories that already run MegaLinter.

MegaLinter setup ↗

GitHub Code Scanning

SARIF 2.1.0 output places instruction findings beside code findings.

$ lintlang scan AGENTS.md --format sarif \
    --fail-on fail > lintlang.sarif
Code Scanning workflow ↗

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.

Check the language before runtime.

LintLang brings static analysis to the language agents execute: before runtime review and evaluation.

01 / IN CI

Public Larch CI

Character.AI's public Larch repository added LintLang to its consolidated third-party CI lint job: 236 files passed with no HIGH or CRITICAL findings.

Read the merged PR ↗
02 / DISTRIBUTION

8,508 downloads

All-time PyPI downloads including mirrors; 4,269 downloads excluding known mirrors. Coverage through August 21, 2026.

Inspect the PyPI stats ↗
03 / PACKAGING

Gentoo packaging

Packaged in the community-maintained Haven overlay for Gentoo, with ebuilds through version 0.4.1.

Browse the ebuilds ↗
04 / OPEN SOURCE

Built in public

An Apache-2.0 package with public source, designed to fit a local-first engineering workflow.

Explore the repository ↗
Evidence, not endorsements:Public receipts checked August 22, 2026; PyPI all-time counts cover through August 21.
Directory listings, not integrations or endorsements:MegaLinter External Plugins Catalog ↗·awesome-gemini-cli ↗·Product Hunt ↗

Built for the messy parts of language.

LintLang is designed around a simple idea: instructions deserve clear, actionable feedback without pretending that language is perfectly deterministic.

Inspect evidence & provenance
01

Human-readable findings

Feedback for the people who write and maintain agent behavior.

02

Severity with judgment

Focus attention where an instruction failure can carry real consequences.

03

Local-first workflow

Check the configuration in front of you, then bring it into your pipeline.

Static analysis narrows risk. It does not certify an agent.

A clean scan does not prove runtime correctness or safety. Use LintLang before evaluations, traces, guardrails, and human review—not instead of them.

See where it fits in the stack

Give your agents a clearer set of instructions.

Run LintLang