PluginWorld
Li

lintlang

Claude Code✓ SPEC VERIFIED

Static analysis for AI agent configs, tool descriptions, and system prompts — catches vague tool descriptions, missing stop conditions, and schema gaps before they reach runtime. Zero-LLM, deterministic checks, built for CI.

@hermes-labs-ai · Apache-2.0 · updated yesterday

SECURITY

A

SCORE

88

STARS

▲ 130

PLUG IN

/plugin marketplace add hermes-labs-ai/lintlang

Then run /plugin install <name> for any plugin it lists

README

LintLang

LintLang — catch agent failures before your agent runs

Catch agent failures before your agent runs.

CI PyPI Downloads Python License OpenSSF Scorecard

Product page · Playground · PyPI · Docs · 简体中文

LintLang is a local, deterministic static linter for the instructions and tool interfaces an AI agent is given. It flags ambiguous tool choices, mixed output formats, schema gaps, missing bounds, and other setup defects before the agent runs.

Point it at a project directory. LintLang finds supported agent-facing content inside the files you already use: MCP and function-tool definitions nested in JSON/YAML, parameter schemas, system prompts, messages, output contracts, AGENTS.md, CLAUDE.md, GEMINI.md, SKILL.md, and supported Python prompt code.

uvx lintlang scan .

See LintLang in action. A stylized view of the real DeerFlow finding behind merged PR #5656.

Stylized LintLang terminal showing an H1.9 finding in ByteDance DeerFlow's Vercel skill

LintLang is developed by Hermes Labs.

What LintLang catches

Agent configuration can be valid YAML, JSON, Markdown, or Python and still give a model bad instructions, bad choices, or an interface it cannot reliably use.

LintLang catches problems like:

  • Ambiguous tools — sibling tools that overlap without a clear reason for the model to choose one over another.
  • Missing bounds — retries, loops, or tool use without explicit stopping or progress conditions.
  • Schema mismatches — missing required fields, unclear parameters, and schemas that do not communicate enough intent.
  • Mixed output formats and missing priorities — a prompt that names more than one output format (H6 flags any two recognized formats, even when each is scoped to a case), and long instruction lists with no stated priority order (H5). LintLang does not detect semantic contradictions between two instructions, for example "always do X" next to "never do X".
  • SKILL.md defects — missing or invalid metadata, unclear usage criteria, and skill names that do not match their directory.
  • Context and message errors — stale project references, unbounded persistence, malformed roles, and broken tool-message sequences.
  • Embedded agent logic — supported Python prompts, literal tool definitions, and selected pipeline thresholds.

Each result says what LintLang inspected. Content with no recognized agent-facing structures is reported as SKIPPED, never PASS. Tool comparisons are within one parsed input; a directory scan does not combine tools from separate files into one selection namespace.

For exact extraction rules and detector behavior, see the technical reference.

Quickstart

Requires Python 3.10+.

Run once without installing:

uvx lintlang scan .

Or name a specific configuration source:

uvx lintlang scan AGENTS.md
uvx lintlang scan SKILL.md
uvx lintlang scan agent.yaml

Install with pip:

pip install lintlang
lintlang scan .

Or with Homebrew on macOS:

brew install hermes-labs-ai/tap/lintlang
lintlang scan .

Findings are advisory by default.

Block on HIGH or CRITICAL findings:

lintlang scan . --fail-on fail

Include MEDIUM findings in the gate:

lintlang scan . --fail-on review

LintLang also emits JSON, SARIF, and GitLab Code Quality reports for automation. See the GitLab CI guide for a copyable Code Quality job.

Put it in CI

Generate a pinned GitHub Actions workflow that scans the repository directory:

lintlang init --github --path .

The generated Action gates HIGH or CRITICAL findings by default. Use a narrower path when CI should check only one configuration source.

For an existing repository with known findings, record a reviewed baseline:

lintlang scan . --write-baseline .lintlang-baseline.json

Then gate new or changed findings:

lintlang scan . \
  --baseline .lintlang-baseline.json \
  --fail-on review

See GitHub CI and Code Scanning and baseline adoption.

Integrations

LintLang works with GitHub Actions, GitHub Code Scanning, pre-commit, Claude Code, Cursor, GitHub Copilot CLI, Gemini CLI, Pi, OpenCode, Hermes Agent, and MegaLinter.

See the integration guide for setup and compatibility.

LintLang does not run models, observe runtime tool choices, or establish that an agent is production-safe. A clean scan means only that the selected static checks found no covered defects in the recognized content.

Documentation

Contributing

Bug reports, disputed findings, reproducible false positives, documentation corrections, and focused contributions are welcome.

See CONTRIBUTING.md and SECURITY.md.

License

Apache License 2.0

SIMILAR PLUGINS