lintlang · git:20260915.b6a845d · 2026-09-15 · sha256 1ddb808e971eb96b

lintlang git:20260915.b6a845dA

Immutable. This exact content is served forever at /api/v1/blob/1ddb808e971eb96b.

---
name: lintlang
description: Use when writing or reviewing AI agent configs, system prompts, or tool definitions (JSON/YAML/Python) and you need to catch ambiguous tool descriptions, missing stop conditions, schema/description mismatches, or embedded prompts before they reach runtime. Deterministic static analysis, no LLM or network calls.
license: MIT
compatibility: Requires Python 3.9+; installs via pip or runs standalone via `uvx lintlang`. No network access needed.
---

# LintLang

LintLang statically analyzes the natural-language instructions that control AI
agents — system prompts, tool descriptions, and configs — catching ambiguous
tools, missing limits, and conflicting directives before they reach an agent
at runtime. It is zero-LLM: deterministic pattern and structural checks only,
no model calls, no telemetry, no network access.

## Use it for

- Linting tool descriptions before agents start choosing between them
  (detects pairs like `get_user_info` / `fetch_user_data` with no
  distinguishing term — check `H1.6`)
- Checking prompts and configs for missing stop conditions, unbounded
  retries, and schema/description mismatches
- Running a zero-LLM CI gate over YAML, JSON, prompt text, and Python source
- Scanning `.py` files for embedded prompts and uncalibrated thresholds
  (detectors `P1`/`P2`)
- Preflighting one present instruction plus explicit typed context before a
  host sends it to a model

## Do not use it for

- Runtime evaluation of a live agent
- Dynamic agent testing or behavioral benchmarking
- Proving an agent is safe in production
- Retrieving preferences from history, deciding truth, or rewriting/sending
  prompts on the agent's behalf

## Quickstart

```bash
python -m pip install lintlang
lintlang scan AGENTS.md
```

Or without installing, via [uv](https://docs.astral.sh/uv/):

```bash
uvx lintlang scan AGENTS.md
```

Scan a fixture with a known finding:

```bash
uvx lintlang scan samples/bad_tool_descriptions.yaml
```

## Output shape

- Repository scan outcomes: `ERROR`, `PASS`, `REVIEW`, or `FAIL`
- Structural findings by pattern `H1` through `H7`, plus Python pipeline
  findings `P1` and `P2`
- JSON output for CI via `--format json`
- Preflight states: `ALLOW`, `NOTICE`, `HOLD`, `UNAVAILABLE`, or `ERROR`
- Preflight evidence uses exact code-point spans and stable `PF001`-`PF005`
  IDs

## Common gotchas

- LintLang judges structure, not runtime model behavior — a config can pass
  every LintLang check and still fail at inference time.
- Configs can be syntactically valid YAML/JSON while still under-specified
  for their intended use; LintLang flags this as `REVIEW`, not `FAIL`.
- Preflight heuristic findings are notice-only; only exact contract/conflict
  rules may hold (`HOLD`).

## More

Full docs, CLI reference, and CI integration:
https://github.com/hermes-labs-ai/lintlang