Provely adds one check to each model answer and tool call, and it makes the fix itself. The grid below shows what is measured and what is not.
What does Provely do by default?
Add two lines. Provely finds your framework and loads its plugin. You write no guard code.
import { Provely } from '@provely/sdk';
new Provely();
from provely import Provely
Provely()
Rules are optional. With the two lines and no rules file, Provely builds the checks for each agent at run time (just in time), from the tools it finds. Read rules to audit, share or make an exception.
- Repair in place (
repair_in_place): A lossless syntax fix, for example single quotes or a code fence around the JSON. The tool gets the arguments that the model meant. - Return the exact error (
return_error_to_model): The model gets one exact sentence about what is wrong, and it tries again. The tool does not run. - Retry (
retry): Only where the frozen retry table permits it, and always with the key of the first attempt. - Refuse (
refuse): The call never reaches the tool. Examples: a duplicate call, or a write that repeats a completed write in the same agent call. - Record (
record): The call runs, and the line states what the check found.
Every fix writes one decision-log line. The line holds ids and codes only, never a value. No language model takes part in any decision.
guard_mode: observe is the default. Provely makes every fix and records an invented value. Read how it works.
How much is measured?
| Measure | Count |
|---|---|
| Failure modes in the checklist | 267 |
| Failure modes with a measured cell | 204 |
| Fixed on every path where they apply | 85 |
| Fail on at least one path | 63 |
| Measured cells that Provely fixed | 1519 of 2278 |
What does each cell mean?
| Cell | Meaning |
|---|---|
| Fixed by Provely | Provely made the fix, and a decision-log line proves it. |
| Fails | The case fails on this path, with the two lines. |
| Not counted | The framework coped alone, or Provely made no fix. It is never counted as a fix. |
| Recorded or out of reach | Provely records the failure and makes no fix, or the failure is inside the app code, where Provely cannot reach. |
| Pending | No measurement yet. |
| Does not apply | The failure cannot happen on this path. |
Where do the cells come from?
Each cell comes from measurement merges of the newest commits, on 15 paths: TypeScript and Python, frameworks and plain SDKs. The newest measurement wins for a case and a path. The grid was built on 2026-10-18 00:24 from 74 measured files.
How far is each layer?
| Layer | Fixed everywhere | Measured | Total |
|---|---|---|---|
| Model output syntax | 24 | 31 | 33 |
| Model output shape | 14 | 25 | 29 |
| Tool selection | 5 | 12 | 13 |
| Call structure | 4 | 14 | 16 |
| Streaming | 3 | 10 | 10 |
| Provider protocol | 1 | 30 | 31 |
| Argument hallucination | 7 | 12 | 19 |
| Claim hallucination | 3 | 4 | 8 |
| Framework orchestration | 6 | 12 | 41 |
| Tool invocation | 1 | 11 | 23 |
| Tool result | 6 | 15 | 16 |
| Outcome | 0 | 2 | 2 |
| Coexistence | 11 | 26 | 26 |