For the complete documentation index, see llms.txt. This page is also available as Markdown.

Verifiers overview

Use verifiers to check committed files against repository-specific invariants that a linter cannot express.

Takeaway Use a verifier for a binary, observable fact about committed files when a deterministic check cannot express the standard.

You can select and fix a specific judge with tessl change verify --model; use openai/gpt-6-luna to prioritize reasoning or Jev (--model jev) for cost and speed. Jev returns one pass/fail verdict and a confidence per rule with no written reasoning, so it is cheaper and faster to run than a reasoning judge. As with any judge, a run sends the files it checks to your configured LLM gateway. Jev's availability depends on that gateway's configuration and region, and it is not offered for bring-your-own-model organizations.

A verifier is an LLM-as-judge check that compares committed files with an invariant stored as JSON. For example, a verifier can check that every user-facing error includes a next step or that every FastAPI route uses your typed response helpers.

Verifiers belong in your repository. A verifier file describes what to judge, while the verify block in tessl.json selects the files it covers and sets the severity of its findings. This separation lets teams reuse the same verifier with different scopes and enforcement levels.

When to use a verifier

Use a verifier when all of these are true:

  • The standard has a pass or fail answer.

  • The evidence is visible in committed files or a diff.

  • A reviewer can apply the standard consistently from the supplied context.

  • A deterministic tool cannot check it reliably.

Do not use a verifier for subjective preferences such as whether code is elegant. Narrow the invariant until its checklist has observable evidence.

Choose the right mechanism

Mechanism
Use it for
Example

Rule

Guidance an agent must follow on every relevant task

Use the shared response helper for API routes

Skill

A workflow an agent should activate for a specific task

Create and register a new API route

Linter or test

A fact code can check deterministically

Every route file imports an approved symbol

Verifier

A binary invariant that needs judgment over code or prose

Every user-facing error explains the next action

Prefer a linter or test when one can enforce the invariant. A rule or skill guides an agent before and during a change; a verifier checks the result after the change. You can pair them: a rule teaches the expected pattern, and a verifier catches changes that do not follow it.

Verifiers are separate from Tessl Code Review. Code Review looks for general problems across a pull request. Verifiers enforce the specific invariants your repository names and configures.

How verification works

Each verifier JSON file contains the instruction, applicability criteria, evaluation scope, and a checklist of binary rules. The repository's tessl.json groups verifier files, targets source files with include and exclude globs, and assigns an info, warn, or error level.

tessl change verify resolves the configured scope and judges applicable targets. In CI, warn findings remain advisory and error findings exit non-zero, so they can block a pull request.

By default, tessl change verify is change-aware: it checks the files a change touches against every applicable verifier, and re-checks a changed verifier or tessl.json rule against its full configured scope. Run tessl change verify --all to audit every file in the current project's configured scopes (include and exclude filters still apply); add --recursive to include linked child manifests in a monorepo.

For the complete configuration fields, see the verify block reference.

Next

Last updated