{"schema":"hermes-labs/lintlang-comparison-faq/v1","url":"https://hermes-labs.ai/lintlang/faq","jsonUrl":"https://hermes-labs.ai/lintlang/faq.json","checkedOn":"2026-09-07","title":"LintLang FAQ: Why Use It and How It Compares","description":"Why use LintLang, how it compares with Agent Lint, promptfoo, Giskard, and NVIDIA NeMo Guardrails, and which check fits each failure, with sources.","product":{"name":"LintLang","version":"0.5.3","id":"https://hermes-labs.ai/lintlang#software","url":"https://hermes-labs.ai/lintlang","website":"https://lintlang.ai","repository":"https://github.com/hermes-labs-ai/lintlang","pypi":"https://pypi.org/project/lintlang/0.5.3/","python":"Python 3.10+","license":"Apache-2.0","quickStart":"uvx --from lintlang==0.5.3 lintlang scan AGENTS.md","category":"Deterministic static analysis of AI agent instructions and configuration","inputs":["JSON and YAML objects using recognized top-level agent fields such as system_prompt, instructions, tools, functions, messages, and selected response-schema fields",".txt, .md, and .prompt instruction files, including AGENTS.md, CLAUDE.md, GEMINI.md, and Copilot instructions","Python files, using AST extraction for prompt-like strings and threshold assignments"],"outputs":["Terminal","JSON","SARIF 2.1.0 for GitHub Code Scanning"],"verdicts":["PASS","REVIEW","FAIL","ERROR"],"integrations":["GitHub Action hermes-labs-ai/lintlang@v0.5.3 and lintlang init --github","pre-commit hook","MegaLinter plugin","Gemini CLI extension"],"runs":"Before any model call, on files, directories, or stdin","boundary":{"analysisPath":"LintLang's default static checks are deterministic and local. They make no LLM, API, telemetry, or network calls.","cleanScan":"A clean LintLang scan is not evidence that an agent is safe or runtime-correct.","doesNot":["determine whether an instruction is factually or semantically correct","observe an agent selecting or executing tools","prove that a finding causes a runtime failure","certify an agent as safe or production-ready","replace runtime evaluation or human review"]},"sources":[{"label":"LintLang README: what it inspects","url":"https://github.com/hermes-labs-ai/lintlang#what-it-inspects","checkedOn":"2026-09-07"},{"label":"LintLang README: verdicts and CI behavior","url":"https://github.com/hermes-labs-ai/lintlang#verdicts-and-ci-behavior","checkedOn":"2026-09-07"},{"label":"LintLang README: where it fits","url":"https://github.com/hermes-labs-ai/lintlang#where-it-fits","checkedOn":"2026-09-07"},{"label":"LintLang 0.5.3 on PyPI","url":"https://pypi.org/project/lintlang/0.5.3/","checkedOn":"2026-09-07"}]},"comparisonPrinciple":"Jobs and boundaries, not superiority. Each comparison states what a tool checks, when it runs, and when to choose it, from its own official documentation.","comparisons":[{"id":"agent-lint","name":"Agent Lint","vendor":"zhupanov","category":"static-configuration-linter","categoryLabel":"Static configuration linter","entityUrl":"https://github.com/zhupanov/agent-lint","selfDescription":"A linter for Claude Code, Cursor, and Codex configuration.","checks":"Repository configuration and documentation for Claude Code, Cursor, Codex, and MCP: .claude/, .claude-plugin/, .cursor/, .cursorrules, .codex/, .codex-plugin/, AGENTS.md, .agents/skills/, and MCP configuration. Deterministic static validation with JSON output, a GitHub Action, and a pre-commit hook.","runs":"Before runtime, on the repository configuration tree","ownBoundary":"Its README states that a clean lint result is not a safety or correctness proof for an agent, model, tool, command, or deployment.","chooseLintLang":"Choose LintLang when the defect is in the wording of instructions and tool descriptions: vague or overlapping tools, missing stop conditions, contradictory directives, or schema and description mismatches, across prompt files, YAML or JSON agent configs, and prompts embedded in Python, with SARIF for GitHub Code Scanning.","chooseAlternative":"Choose Agent Lint when you want to validate the structure of harness-specific configuration trees for Claude Code, Cursor, Codex, and MCP, including skills, plugin manifests, and marketplace files, as one repository-wide check.","combine":"Both are deterministic pre-runtime linters that run in CI and pre-commit. Run Agent Lint over the configuration tree and LintLang over the instruction text. The projects are independent; the Agent Lint maintainer has publicly recorded ideas carried from LintLang.","sources":[{"label":"Agent Lint README","url":"https://github.com/zhupanov/agent-lint#readme","checkedOn":"2026-09-07"},{"label":"Agent Lint issue #192 (attribution)","url":"https://github.com/zhupanov/agent-lint/issues/192","checkedOn":"2026-09-07"}]},{"id":"promptfoo","name":"promptfoo","vendor":"promptfoo","category":"prompt-evaluation-and-red-teaming","categoryLabel":"Prompt evaluation and red teaming","entityUrl":"https://github.com/promptfoo/promptfoo","selfDescription":"A CLI and library for evaluating and red-teaming LLM apps.","checks":"How prompts, models, and LLM applications behave on test cases: it runs them against configured model providers, scores outputs with assertions, compares models side by side, and runs red-team and vulnerability scans, from the CLI, as a library, or in CI/CD.","runs":"Against live model providers, in development and CI","chooseLintLang":"Choose LintLang when you want a deterministic check of the instruction text itself, with no model call, that can gate a commit or pull request before any evaluation run.","chooseAlternative":"Choose promptfoo when the question is how the model behaves: regressions after a prompt change, model comparisons, assertion-based test cases, or red-team probes against the running application.","combine":"Lint first, then evaluate. A LintLang PASS does not predict evaluation results, and a passing evaluation does not repair vague or contradictory instruction text. Running both catches text defects for free and behavioral defects where they show.","sources":[{"label":"promptfoo documentation: introduction","url":"https://www.promptfoo.dev/docs/intro/","checkedOn":"2026-09-07"},{"label":"promptfoo repository README","url":"https://github.com/promptfoo/promptfoo#readme","checkedOn":"2026-09-07"}]},{"id":"giskard","name":"Giskard","vendor":"Giskard AI","category":"agent-testing-and-evaluation","categoryLabel":"Agent testing, evaluation, and red teaming","entityUrl":"https://github.com/Giskard-AI/giskard","selfDescription":"Open-source Python library for testing and evaluating agentic systems.","checks":"Agent and RAG behavior: it defines scenario-based tests and checks, generates test cases, runs a vulnerability scan that probes the agent with hostile inputs across categories such as prompt injection and harmful content, and runs a quality scan over a RAG knowledge base.","runs":"Against the running agent or model, before and after deployment","chooseLintLang":"Choose LintLang when you want to catch instruction and tool-description defects as text, before any agent run, in a CI step that needs only Python and PyYAML and emits SARIF.","chooseAlternative":"Choose Giskard when you need behavioral test suites for an agent or RAG pipeline, generated test sets, or vulnerability scans that require the agent to answer.","combine":"Lint the instruction files in CI, then test behavior with Giskard. Neither substitutes for the other: LintLang sees text, Giskard sees answers.","sources":[{"label":"Giskard documentation","url":"https://docs.giskard.ai/","checkedOn":"2026-09-07"},{"label":"Giskard repository README","url":"https://github.com/Giskard-AI/giskard#readme","checkedOn":"2026-09-07"}]},{"id":"nemo-guardrails","name":"NVIDIA NeMo Guardrails","vendor":"NVIDIA","category":"runtime-guardrails","categoryLabel":"Runtime guardrails","entityUrl":"https://github.com/NVIDIA-NeMo/Guardrails","selfDescription":"An open-source toolkit for easily adding programmable guardrails to LLM-based conversational applications.","checks":"Live interactions: input, dialog, retrieval, execution, and output rails, defined in Colang flows and configuration, that can block, alter, or validate user inputs, retrieved chunks, custom actions, and model responses.","runs":"Around every live model call, inside the application","ownBoundary":"Its README notes that the built-in guardrails may or may not be suitable for a given production use case.","chooseLintLang":"Choose LintLang when the defect is in the written instructions and you want it caught before deployment, with no runtime component and no model call.","chooseAlternative":"Choose NVIDIA NeMo Guardrails when you must check or alter inputs, retrieved content, tool actions, or outputs while the application is running.","combine":"LintLang cannot block a bad action at runtime, and guardrails cannot fix the instructions that keep causing it. Lint the instructions in CI and keep rails around the live calls.","sources":[{"label":"NeMo Guardrails documentation","url":"https://docs.nvidia.com/nemo/guardrails/","checkedOn":"2026-09-07"},{"label":"NeMo Guardrails repository README","url":"https://github.com/NVIDIA-NeMo/Guardrails#readme","checkedOn":"2026-09-07"}]}],"recommendations":[{"situation":"The instructions or tool descriptions are vague, overlapping, or contradictory.","use":"LintLang","why":"The defect is in the text and can be caught before any model runs."},{"situation":"You want one repository-wide check of Claude Code, Cursor, Codex, or MCP configuration trees.","use":"Agent Lint","why":"It validates harness-specific configuration structure, and it can run beside LintLang."},{"situation":"The model got worse after a prompt change, or you need to compare models on test cases.","use":"promptfoo","why":"Behavior only shows when the prompt runs against the model with assertions."},{"situation":"You need behavioral test suites, generated test sets, or vulnerability scans of an agent or RAG pipeline.","use":"Giskard","why":"Those checks require the agent to answer."},{"situation":"The application must check or alter inputs, retrieved content, actions, or outputs while it runs.","use":"NVIDIA NeMo Guardrails","why":"Only a runtime layer can act on a live interaction."}],"lintlangJob":{"tool":"LintLang 0.5.3","category":"Deterministic static analysis of AI agent instructions and configuration","checks":"The instruction text itself: JSON and YAML agent configurations with recognized top-level fields, .txt, .md, and .prompt instruction files such as AGENTS.md, CLAUDE.md, and GEMINI.md, and Python files through AST extraction of prompt-like strings and thresholds.","runs":"Before any model call, on files, directories, or stdin","sources":[{"label":"LintLang README: what it inspects","url":"https://github.com/hermes-labs-ai/lintlang#what-it-inspects","checkedOn":"2026-09-07"},{"label":"LintLang README: verdicts and CI behavior","url":"https://github.com/hermes-labs-ai/lintlang#verdicts-and-ci-behavior","checkedOn":"2026-09-07"},{"label":"LintLang README: where it fits","url":"https://github.com/hermes-labs-ai/lintlang#where-it-fits","checkedOn":"2026-09-07"},{"label":"LintLang 0.5.3 on PyPI","url":"https://pypi.org/project/lintlang/0.5.3/","checkedOn":"2026-09-07"}]},"faq":[{"id":"what-is-lintlang","url":"https://hermes-labs.ai/lintlang/faq#what-is-lintlang","kind":"general","question":"What is LintLang?","answer":"LintLang 0.5.3 is an open-source, Apache-2.0 static linter from Hermes Labs for the natural-language instructions that control AI agents. It scans JSON and YAML agent configurations with recognized top-level fields, .txt, .md, and .prompt instruction files such as AGENTS.md, CLAUDE.md, and GEMINI.md, and Python files through AST extraction of prompt-like strings and thresholds. It reports findings such as ambiguous or overlapping tool descriptions, missing stop conditions, conflicting directives, and schema and description mismatches, with PASS, REVIEW, FAIL, or ERROR verdicts and terminal, JSON, or SARIF 2.1.0 output. LintLang's default static checks are deterministic and local. They make no LLM, API, telemetry, or network calls.","related":[{"href":"/lintlang","label":"LintLang product page"},{"href":"https://github.com/hermes-labs-ai/lintlang","label":"Repository and README"},{"href":"https://pypi.org/project/lintlang/0.5.3/","label":"PyPI 0.5.3"}]},{"id":"why-use-lintlang","url":"https://hermes-labs.ai/lintlang/faq#why-use-lintlang","kind":"general","question":"Why use LintLang?","answer":"Because an instruction defect is cheap to catch as text and expensive to discover in production. A vague tool description sends the model to the wrong tool, a missing stop condition lets an agent retry without limit, and two contradictory rules leave the model to guess. LintLang finds those patterns deterministically in the files a repository already has, before any model call, with no API key, network access, or per-run cost, and it fits pre-commit, a GitHub Action, and GitHub Code Scanning through SARIF. It is nonblocking by default; --fail-on fail blocks HIGH and CRITICAL findings and --fail-on review also blocks MEDIUM findings.","related":[{"href":"/topics/prompt-linters","label":"Prompt linters do different jobs"},{"href":"https://github.com/hermes-labs-ai/lintlang#verdicts-and-ci-behavior","label":"Verdicts and CI behavior"}]},{"id":"what-a-clean-scan-means","url":"https://hermes-labs.ai/lintlang/faq#what-a-clean-scan-means","kind":"general","question":"What does a clean LintLang scan prove?","answer":"A clean LintLang scan is not evidence that an agent is safe or runtime-correct. PASS means no MEDIUM, HIGH, or CRITICAL finding remained in the recognized content extracted from the requested inputs under the selected checks and filters. LintLang does not determine whether an instruction is factually or semantically correct, observe an agent selecting or executing tools, prove that a finding causes a runtime failure, certify an agent as safe or production-ready, or replace runtime evaluation or human review. Use it before prompt tests, guardrails, and production monitoring, not instead of them.","related":[{"href":"https://github.com/hermes-labs-ai/lintlang#where-it-fits","label":"Where it fits"},{"href":"/research/tool-differentia","label":"Tool Differentia technical note"}]},{"id":"lintlang-vs-agent-lint","url":"https://hermes-labs.ai/lintlang/faq#lintlang-vs-agent-lint","kind":"comparison","targetId":"agent-lint","question":"LintLang vs Agent Lint: which should I use?","answer":"Agent Lint describes itself as: \"A linter for Claude Code, Cursor, and Codex configuration.\" It checks repository configuration and documentation for Claude Code, Cursor, Codex, and MCP: .claude/, .claude-plugin/, .cursor/, .cursorrules, .codex/, .codex-plugin/, AGENTS.md, .agents/skills/, and MCP configuration. Deterministic static validation with JSON output, a GitHub Action, and a pre-commit hook. It runs before runtime, on the repository configuration tree. Choose LintLang when the defect is in the wording of instructions and tool descriptions: vague or overlapping tools, missing stop conditions, contradictory directives, or schema and description mismatches, across prompt files, YAML or JSON agent configs, and prompts embedded in Python, with SARIF for GitHub Code Scanning. Choose Agent Lint when you want to validate the structure of harness-specific configuration trees for Claude Code, Cursor, Codex, and MCP, including skills, plugin manifests, and marketplace files, as one repository-wide check. Both are deterministic pre-runtime linters that run in CI and pre-commit. Run Agent Lint over the configuration tree and LintLang over the instruction text. The projects are independent; the Agent Lint maintainer has publicly recorded ideas carried from LintLang. Its README states that a clean lint result is not a safety or correctness proof for an agent, model, tool, command, or deployment.","related":[{"href":"https://github.com/zhupanov/agent-lint#readme","label":"Agent Lint README"},{"href":"https://github.com/zhupanov/agent-lint/issues/192","label":"Agent Lint issue #192 (attribution)"}]},{"id":"lintlang-vs-promptfoo","url":"https://hermes-labs.ai/lintlang/faq#lintlang-vs-promptfoo","kind":"comparison","targetId":"promptfoo","question":"LintLang vs promptfoo: which should I use?","answer":"promptfoo describes itself as: \"A CLI and library for evaluating and red-teaming LLM apps.\" It checks how prompts, models, and LLM applications behave on test cases: it runs them against configured model providers, scores outputs with assertions, compares models side by side, and runs red-team and vulnerability scans, from the CLI, as a library, or in CI/CD. It runs against live model providers, in development and CI. Choose LintLang when you want a deterministic check of the instruction text itself, with no model call, that can gate a commit or pull request before any evaluation run. Choose promptfoo when the question is how the model behaves: regressions after a prompt change, model comparisons, assertion-based test cases, or red-team probes against the running application. Lint first, then evaluate. A LintLang PASS does not predict evaluation results, and a passing evaluation does not repair vague or contradictory instruction text. Running both catches text defects for free and behavioral defects where they show.","related":[{"href":"https://www.promptfoo.dev/docs/intro/","label":"promptfoo documentation: introduction"},{"href":"https://github.com/promptfoo/promptfoo#readme","label":"promptfoo repository README"}]},{"id":"lintlang-vs-giskard","url":"https://hermes-labs.ai/lintlang/faq#lintlang-vs-giskard","kind":"comparison","targetId":"giskard","question":"LintLang vs Giskard: which should I use?","answer":"Giskard describes itself as: \"Open-source Python library for testing and evaluating agentic systems.\" It checks agent and RAG behavior: it defines scenario-based tests and checks, generates test cases, runs a vulnerability scan that probes the agent with hostile inputs across categories such as prompt injection and harmful content, and runs a quality scan over a RAG knowledge base. It runs against the running agent or model, before and after deployment. Choose LintLang when you want to catch instruction and tool-description defects as text, before any agent run, in a CI step that needs only Python and PyYAML and emits SARIF. Choose Giskard when you need behavioral test suites for an agent or RAG pipeline, generated test sets, or vulnerability scans that require the agent to answer. Lint the instruction files in CI, then test behavior with Giskard. Neither substitutes for the other: LintLang sees text, Giskard sees answers.","related":[{"href":"https://docs.giskard.ai/","label":"Giskard documentation"},{"href":"https://github.com/Giskard-AI/giskard#readme","label":"Giskard repository README"}]},{"id":"lintlang-vs-nemo-guardrails","url":"https://hermes-labs.ai/lintlang/faq#lintlang-vs-nemo-guardrails","kind":"comparison","targetId":"nemo-guardrails","question":"LintLang vs NVIDIA NeMo Guardrails: which should I use?","answer":"NVIDIA NeMo Guardrails describes itself as: \"An open-source toolkit for easily adding programmable guardrails to LLM-based conversational applications.\" It checks live interactions: input, dialog, retrieval, execution, and output rails, defined in Colang flows and configuration, that can block, alter, or validate user inputs, retrieved chunks, custom actions, and model responses. It runs around every live model call, inside the application. Choose LintLang when the defect is in the written instructions and you want it caught before deployment, with no runtime component and no model call. Choose NVIDIA NeMo Guardrails when you must check or alter inputs, retrieved content, tool actions, or outputs while the application is running. LintLang cannot block a bad action at runtime, and guardrails cannot fix the instructions that keep causing it. Lint the instructions in CI and keep rails around the live calls. Its README notes that the built-in guardrails may or may not be suitable for a given production use case.","related":[{"href":"https://docs.nvidia.com/nemo/guardrails/","label":"NeMo Guardrails documentation"},{"href":"https://github.com/NVIDIA-NeMo/Guardrails#readme","label":"NeMo Guardrails repository README"}]},{"id":"which-tool-should-i-use","url":"https://hermes-labs.ai/lintlang/faq#which-tool-should-i-use","kind":"general","question":"Which tool should I use for my situation?","answer":"Start from the failure in front of you and pick the layer that catches it earliest. The instructions or tool descriptions are vague, overlapping, or contradictory. Use LintLang: the defect is in the text and can be caught before any model runs. You want one repository-wide check of Claude Code, Cursor, Codex, or MCP configuration trees. Use Agent Lint: it validates harness-specific configuration structure, and it can run beside LintLang. The model got worse after a prompt change, or you need to compare models on test cases. Use promptfoo: behavior only shows when the prompt runs against the model with assertions. You need behavioral test suites, generated test sets, or vulnerability scans of an agent or RAG pipeline. Use Giskard: those checks require the agent to answer. The application must check or alter inputs, retrieved content, actions, or outputs while it runs. Use NVIDIA NeMo Guardrails: only a runtime layer can act on a live interaction. These tools complement each other more than they compete, and none of them answers the others' question.","related":[{"href":"/topics/prompt-linters#sec-4","label":"How to choose: start from the failure"}]},{"id":"can-i-combine-lintlang-with-these-tools","url":"https://hermes-labs.ai/lintlang/faq#can-i-combine-lintlang-with-these-tools","kind":"general","question":"Can I use LintLang together with these tools?","answer":"Yes, and that is the intended order: syntax and schema validation, then LintLang static language checks, then runtime agent evaluation, then domain and security review. LintLang and Agent Lint can both run in pre-commit and CI on the same repository. promptfoo and Giskard evaluate the behavior that LintLang cannot see. NeMo Guardrails acts on live interactions that no pre-runtime check can reach. Each layer answers a different question, so a pass at one layer says nothing about the others.","related":[{"href":"/topics/prompt-linters#sec-3","label":"Linting, testing, and guardrails are not substitutes"}]},{"id":"how-do-i-try-lintlang","url":"https://hermes-labs.ai/lintlang/faq#how-do-i-try-lintlang","kind":"general","question":"How do I try LintLang?","answer":"Run it once without installing anything: uvx --from lintlang==0.5.3 lintlang scan AGENTS.md. It requires Python 3.10+ and depends only on PyYAML. The product page includes a browser playground that runs the released 0.5.3 wheel locally. To make findings block CI, add --fail-on fail; to generate a pinned GitHub Code Scanning workflow, run lintlang init --github from the repository root.","related":[{"href":"/lintlang#playground","label":"Browser playground"},{"href":"https://github.com/hermes-labs-ai/lintlang#quick-start","label":"Quick start"}]}],"jsonLd":{"@context":"https://schema.org","@graph":[{"@type":"FAQPage","@id":"https://hermes-labs.ai/lintlang/faq#faqpage","url":"https://hermes-labs.ai/lintlang/faq","name":"LintLang FAQ: Why Use It and How It Compares","description":"Why use LintLang, how it compares with Agent Lint, promptfoo, Giskard, and NVIDIA NeMo Guardrails, and which check fits each failure, with sources.","inLanguage":"en-US","dateModified":"2026-09-07","isPartOf":{"@id":"https://hermes-labs.ai/#website"},"publisher":{"@id":"https://hermes-labs.ai/#organization"},"about":{"@id":"https://hermes-labs.ai/lintlang#software"},"breadcrumb":{"@id":"https://hermes-labs.ai/lintlang/faq#breadcrumb"},"mentions":[{"@id":"https://github.com/zhupanov/agent-lint"},{"@id":"https://github.com/promptfoo/promptfoo"},{"@id":"https://github.com/Giskard-AI/giskard"},{"@id":"https://github.com/NVIDIA-NeMo/Guardrails"}],"mainEntity":[{"@type":"Question","@id":"https://hermes-labs.ai/lintlang/faq#what-is-lintlang","name":"What is LintLang?","acceptedAnswer":{"@type":"Answer","text":"LintLang 0.5.3 is an open-source, Apache-2.0 static linter from Hermes Labs for the natural-language instructions that control AI agents. It scans JSON and YAML agent configurations with recognized top-level fields, .txt, .md, and .prompt instruction files such as AGENTS.md, CLAUDE.md, and GEMINI.md, and Python files through AST extraction of prompt-like strings and thresholds. It reports findings such as ambiguous or overlapping tool descriptions, missing stop conditions, conflicting directives, and schema and description mismatches, with PASS, REVIEW, FAIL, or ERROR verdicts and terminal, JSON, or SARIF 2.1.0 output. LintLang's default static checks are deterministic and local. They make no LLM, API, telemetry, or network calls."}},{"@type":"Question","@id":"https://hermes-labs.ai/lintlang/faq#why-use-lintlang","name":"Why use LintLang?","acceptedAnswer":{"@type":"Answer","text":"Because an instruction defect is cheap to catch as text and expensive to discover in production. A vague tool description sends the model to the wrong tool, a missing stop condition lets an agent retry without limit, and two contradictory rules leave the model to guess. LintLang finds those patterns deterministically in the files a repository already has, before any model call, with no API key, network access, or per-run cost, and it fits pre-commit, a GitHub Action, and GitHub Code Scanning through SARIF. It is nonblocking by default; --fail-on fail blocks HIGH and CRITICAL findings and --fail-on review also blocks MEDIUM findings."}},{"@type":"Question","@id":"https://hermes-labs.ai/lintlang/faq#what-a-clean-scan-means","name":"What does a clean LintLang scan prove?","acceptedAnswer":{"@type":"Answer","text":"A clean LintLang scan is not evidence that an agent is safe or runtime-correct. PASS means no MEDIUM, HIGH, or CRITICAL finding remained in the recognized content extracted from the requested inputs under the selected checks and filters. LintLang does not determine whether an instruction is factually or semantically correct, observe an agent selecting or executing tools, prove that a finding causes a runtime failure, certify an agent as safe or production-ready, or replace runtime evaluation or human review. Use it before prompt tests, guardrails, and production monitoring, not instead of them."}},{"@type":"Question","@id":"https://hermes-labs.ai/lintlang/faq#lintlang-vs-agent-lint","name":"LintLang vs Agent Lint: which should I use?","acceptedAnswer":{"@type":"Answer","text":"Agent Lint describes itself as: \"A linter for Claude Code, Cursor, and Codex configuration.\" It checks repository configuration and documentation for Claude Code, Cursor, Codex, and MCP: .claude/, .claude-plugin/, .cursor/, .cursorrules, .codex/, .codex-plugin/, AGENTS.md, .agents/skills/, and MCP configuration. Deterministic static validation with JSON output, a GitHub Action, and a pre-commit hook. It runs before runtime, on the repository configuration tree. Choose LintLang when the defect is in the wording of instructions and tool descriptions: vague or overlapping tools, missing stop conditions, contradictory directives, or schema and description mismatches, across prompt files, YAML or JSON agent configs, and prompts embedded in Python, with SARIF for GitHub Code Scanning. Choose Agent Lint when you want to validate the structure of harness-specific configuration trees for Claude Code, Cursor, Codex, and MCP, including skills, plugin manifests, and marketplace files, as one repository-wide check. Both are deterministic pre-runtime linters that run in CI and pre-commit. Run Agent Lint over the configuration tree and LintLang over the instruction text. The projects are independent; the Agent Lint maintainer has publicly recorded ideas carried from LintLang. Its README states that a clean lint result is not a safety or correctness proof for an agent, model, tool, command, or deployment."}},{"@type":"Question","@id":"https://hermes-labs.ai/lintlang/faq#lintlang-vs-promptfoo","name":"LintLang vs promptfoo: which should I use?","acceptedAnswer":{"@type":"Answer","text":"promptfoo describes itself as: \"A CLI and library for evaluating and red-teaming LLM apps.\" It checks how prompts, models, and LLM applications behave on test cases: it runs them against configured model providers, scores outputs with assertions, compares models side by side, and runs red-team and vulnerability scans, from the CLI, as a library, or in CI/CD. It runs against live model providers, in development and CI. Choose LintLang when you want a deterministic check of the instruction text itself, with no model call, that can gate a commit or pull request before any evaluation run. Choose promptfoo when the question is how the model behaves: regressions after a prompt change, model comparisons, assertion-based test cases, or red-team probes against the running application. Lint first, then evaluate. A LintLang PASS does not predict evaluation results, and a passing evaluation does not repair vague or contradictory instruction text. Running both catches text defects for free and behavioral defects where they show."}},{"@type":"Question","@id":"https://hermes-labs.ai/lintlang/faq#lintlang-vs-giskard","name":"LintLang vs Giskard: which should I use?","acceptedAnswer":{"@type":"Answer","text":"Giskard describes itself as: \"Open-source Python library for testing and evaluating agentic systems.\" It checks agent and RAG behavior: it defines scenario-based tests and checks, generates test cases, runs a vulnerability scan that probes the agent with hostile inputs across categories such as prompt injection and harmful content, and runs a quality scan over a RAG knowledge base. It runs against the running agent or model, before and after deployment. Choose LintLang when you want to catch instruction and tool-description defects as text, before any agent run, in a CI step that needs only Python and PyYAML and emits SARIF. Choose Giskard when you need behavioral test suites for an agent or RAG pipeline, generated test sets, or vulnerability scans that require the agent to answer. Lint the instruction files in CI, then test behavior with Giskard. Neither substitutes for the other: LintLang sees text, Giskard sees answers."}},{"@type":"Question","@id":"https://hermes-labs.ai/lintlang/faq#lintlang-vs-nemo-guardrails","name":"LintLang vs NVIDIA NeMo Guardrails: which should I use?","acceptedAnswer":{"@type":"Answer","text":"NVIDIA NeMo Guardrails describes itself as: \"An open-source toolkit for easily adding programmable guardrails to LLM-based conversational applications.\" It checks live interactions: input, dialog, retrieval, execution, and output rails, defined in Colang flows and configuration, that can block, alter, or validate user inputs, retrieved chunks, custom actions, and model responses. It runs around every live model call, inside the application. Choose LintLang when the defect is in the written instructions and you want it caught before deployment, with no runtime component and no model call. Choose NVIDIA NeMo Guardrails when you must check or alter inputs, retrieved content, tool actions, or outputs while the application is running. LintLang cannot block a bad action at runtime, and guardrails cannot fix the instructions that keep causing it. Lint the instructions in CI and keep rails around the live calls. Its README notes that the built-in guardrails may or may not be suitable for a given production use case."}},{"@type":"Question","@id":"https://hermes-labs.ai/lintlang/faq#which-tool-should-i-use","name":"Which tool should I use for my situation?","acceptedAnswer":{"@type":"Answer","text":"Start from the failure in front of you and pick the layer that catches it earliest. The instructions or tool descriptions are vague, overlapping, or contradictory. Use LintLang: the defect is in the text and can be caught before any model runs. You want one repository-wide check of Claude Code, Cursor, Codex, or MCP configuration trees. Use Agent Lint: it validates harness-specific configuration structure, and it can run beside LintLang. The model got worse after a prompt change, or you need to compare models on test cases. Use promptfoo: behavior only shows when the prompt runs against the model with assertions. You need behavioral test suites, generated test sets, or vulnerability scans of an agent or RAG pipeline. Use Giskard: those checks require the agent to answer. The application must check or alter inputs, retrieved content, actions, or outputs while it runs. Use NVIDIA NeMo Guardrails: only a runtime layer can act on a live interaction. These tools complement each other more than they compete, and none of them answers the others' question."}},{"@type":"Question","@id":"https://hermes-labs.ai/lintlang/faq#can-i-combine-lintlang-with-these-tools","name":"Can I use LintLang together with these tools?","acceptedAnswer":{"@type":"Answer","text":"Yes, and that is the intended order: syntax and schema validation, then LintLang static language checks, then runtime agent evaluation, then domain and security review. LintLang and Agent Lint can both run in pre-commit and CI on the same repository. promptfoo and Giskard evaluate the behavior that LintLang cannot see. NeMo Guardrails acts on live interactions that no pre-runtime check can reach. Each layer answers a different question, so a pass at one layer says nothing about the others."}},{"@type":"Question","@id":"https://hermes-labs.ai/lintlang/faq#how-do-i-try-lintlang","name":"How do I try LintLang?","acceptedAnswer":{"@type":"Answer","text":"Run it once without installing anything: uvx --from lintlang==0.5.3 lintlang scan AGENTS.md. It requires Python 3.10+ and depends only on PyYAML. The product page includes a browser playground that runs the released 0.5.3 wheel locally. To make findings block CI, add --fail-on fail; to generate a pinned GitHub Code Scanning workflow, run lintlang init --github from the repository root."}}]},{"@type":"BreadcrumbList","@id":"https://hermes-labs.ai/lintlang/faq#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://hermes-labs.ai"},{"@type":"ListItem","position":2,"name":"LintLang","item":"https://hermes-labs.ai/lintlang"},{"@type":"ListItem","position":3,"name":"FAQ","item":"https://hermes-labs.ai/lintlang/faq"}]},{"@type":"SoftwareApplication","@id":"https://hermes-labs.ai/lintlang#software","name":"LintLang","softwareVersion":"0.5.3","applicationCategory":"DeveloperApplication","url":"https://hermes-labs.ai/lintlang","codeRepository":"https://github.com/hermes-labs-ai/lintlang","downloadUrl":"https://pypi.org/project/lintlang/0.5.3/","license":"https://www.apache.org/licenses/LICENSE-2.0","author":{"@id":"https://hermes-labs.ai/#organization"},"sameAs":["https://lintlang.ai","https://github.com/hermes-labs-ai/lintlang"],"subjectOf":{"@id":"https://hermes-labs.ai/lintlang/faq#faqpage"}},{"@type":"SoftwareApplication","@id":"https://github.com/zhupanov/agent-lint","name":"Agent Lint","applicationCategory":"DeveloperApplication","url":"https://github.com/zhupanov/agent-lint#readme","codeRepository":"https://github.com/zhupanov/agent-lint","description":"A linter for Claude Code, Cursor, and Codex configuration.","sameAs":["https://github.com/zhupanov/agent-lint#readme","https://github.com/zhupanov/agent-lint/issues/192"]},{"@type":"SoftwareApplication","@id":"https://github.com/promptfoo/promptfoo","name":"promptfoo","applicationCategory":"DeveloperApplication","url":"https://www.promptfoo.dev/docs/intro/","codeRepository":"https://github.com/promptfoo/promptfoo","description":"A CLI and library for evaluating and red-teaming LLM apps.","sameAs":["https://www.promptfoo.dev/docs/intro/","https://github.com/promptfoo/promptfoo#readme"]},{"@type":"SoftwareApplication","@id":"https://github.com/Giskard-AI/giskard","name":"Giskard","applicationCategory":"DeveloperApplication","url":"https://docs.giskard.ai/","codeRepository":"https://github.com/Giskard-AI/giskard","description":"Open-source Python library for testing and evaluating agentic systems.","sameAs":["https://docs.giskard.ai/","https://github.com/Giskard-AI/giskard#readme"]},{"@type":"SoftwareApplication","@id":"https://github.com/NVIDIA-NeMo/Guardrails","name":"NVIDIA NeMo Guardrails","applicationCategory":"DeveloperApplication","url":"https://docs.nvidia.com/nemo/guardrails/","codeRepository":"https://github.com/NVIDIA-NeMo/Guardrails","description":"An open-source toolkit for easily adding programmable guardrails to LLM-based conversational applications.","sameAs":["https://docs.nvidia.com/nemo/guardrails/","https://github.com/NVIDIA-NeMo/Guardrails#readme"]}]}}