8.6%
of contract value is eroded on average by poor contract management; the best a little over 3%, the worst more than 20%
8.6 of every 100 of a contract’s value
Criterio CLO
Contracts and compliance
Evidence before the decision
Fidel puts every contract next to what is actually happening: what is expiring, who signed with what authority, what was paid and what is guaranteed. Constanza puts every obligation in the organisation’s matrix next to its evidence. Both process every document, calculate what does not match and prepare the report; neither gives an opinion on whether a contract is valid or says what a rule requires.
What it costs, measured by third parties
8.6%
of contract value is eroded on average by poor contract management; the best a little over 3%, the worst more than 20%
8.6 of every 100 of a contract’s value
90%
of organisations report difficulty locating their own contracts
90 of every 100 organisations
19,000
contracts a year are managed on average by a large organisation's contracting team
EY Law y Harvard Law School Center on the Legal Profession, 2021 · Sample: 1,000 contracting leaders, January 2021 ↗46%
of the reports to the ethics channel are substantiated: the highest median rate ever recorded
46 of every 100 reports
Third-party figures, each with its source, year and sample, verified against the publisher’s own text. The agents’ own figures are further down, in the test evidence.
Criterio is open source. If it creates value for you, help fund testing, documentation and the next capabilities.
Fidel and Constanza are Criterio’s CLO family, an open platform of agent families. See the families
Industries
The engine and the agents are tested on all 43 entities of the material, in 11 countries: 32 industry entities —5 industries— and 11 control entities. The engine, also, on every change to the repository. On the map, each country with its evolution.
11 countries tested, in the order they came in · signals and fields from each entity’s latest run
| Since | Country | Material entities | Its rounds | Signals · fields |
|---|---|---|---|---|
| Round 1 | Colombia | Banking, Retail, Public entity, Control entity | Rounds 1–3, 7 | 24 of 24 signals · 545 of 548 fields |
| Round 2 | Ecuador | Cooperatives, Mining, Public entity, Control entity | Rounds 2–3, 7 | 20 of 20 signals · 569 of 571 fields |
| Round 4 | Peru | Banking, Mining, Public entity, Control entity | Rounds 4, 7 | 21 of 21 signals · 568 of 569 fields |
| Round 4 | Chile | Retail, Mining, Public entity, Control entity | Rounds 4, 7 | 21 of 21 signals · 548 of 548 fields |
| Round 5 | Mexico | Banking, Retail, Public entity, Control entity | Rounds 5, 7 | 23 of 23 signals · 547 of 548 fields |
| Round 6 | Brazil | Banking, Retail, Public entity, Control entity | Rounds 6–7 | 24 of 24 signals · 548 of 548 fields |
| Round 8 | Argentina | Banking, Retail, Public entity, Control entity | Round 8 | 25 of 25 signals · 548 of 548 fields |
| Round 9 | Panama | Banking, Retail, Public entity, Control entity | Round 9 | 24 of 24 signals · 569 of 569 fields |
| Round 10 | Guatemala | Banking, Retail, Control entity | Round 10 | 20 of 20 signals · 396 of 396 fields |
| Round 11 | Costa Rica | Banking, Retail, Public entity, Control entity | Round 11 | 23 of 23 signals · 569 of 569 fields |
| Round 12 | Honduras | Banking, Retail, Public entity, Control entity | Round 12 | 22 of 22 signals · 569 of 569 fields |
The progress map
11 countries tested
Borders: Natural Earth, public domain.
What was tested here
The RTN of the entity and of each counterparty, in its country’s form · HNL
The regulations in the regulatory register are synthetic: what is tested is the process —a regulation that arrives by bulletin, an overdue assessment, an obligation without evidence—, not the text of a real regulation.
Fidel · 10
Constanza · 10
Latest round: 12
64 documents · 1 defects seeded on purpose
60 documents · 10 defects seeded on purpose
66 documents · 10 defects seeded on purpose
57 documents and no defects: any signal would be a failure
Evolution
The entities and their defects are written in the repository, in tests/criterio-clo/generar.py.
Criterio · CLO family
They process what the company signed and what it committed to comply with, and tell you what is expiring, what does not match and what has no evidence.
CRITERIO · CLO FAMILY
Where the family stands: built and tested on synthetic material from six countries —Colombia, Ecuador, Peru, Chile, Mexico and Brazil, the latter with its documents in Portuguese—. The engine passes its deterministic test against the eighteen entities in the material, and the two agents passed their rounds with a key they never see.
Where each name comes from
The three, one at a time
Each tab stands on its own: you can install one agent without the other. The screenshots are Rostrum, the portal for every family, publishing what the agents found in the banking test data of the first round with the agent.
criterio-legal
From fides: the word given; what was signed is kept.
Processes what the company signed: the contract register against its documents, expiries and notice periods, every obligation with its evidence, who signed with what authority, and what was paid against what was agreed and its guarantees. You decide to renew or terminate.
What only he does
An auto-renewing contract nobody decides on renews itself, and he says so before the notice deadline passes. He processes every contract, not a sample, with its amendments.
What he answers
Never
Interprets clauses, rules on a contract’s validity or decides to renew or terminate.

Its commands, by group
legal-setuplegal-wakecontract-scancontract-registerobligations-calendarauthority-checkcontract-execution7 commands · 5 skills
Fidel and Constanza have no portal of their own: they enter Rostrum, the portal for every family, like any other. What Rostrum shows is what their engine already wrote, with the date it was written; it recalculates nothing and never writes to their state.
How it enters the portal
/criterio-legal:legal-setup, leaves its configuration in .criterio/legal/<entity or case>/ and marks its root folder with _CRITERIO_LEGAL.txt./criterio-compliance:compliance-setup, leaves its configuration in .criterio/cumplimiento/<entity or case>/ and marks its root folder with _CRITERIO_LEGAL.txt.Then Rostrum adds it to the map and raises the portal:
/plugin install criterio-server@criterio /criterio-server:server-setup /criterio-server:server-start
What it has in Rostrum

What it costs you today
Each agent extends one person: Fidel the contracts lawyers, Constanza the compliance team. Enter how many people you have, what they cost and how many hours a week each task takes them. Nothing you type leaves your browser.
Write the costs in the currency you choose. There is no conversion: changing the currency clears the costs, because an exchange rate written into a page is wrong within weeks.
The people
Hours per week on each task
Hours are per person, per week. The starting people and hours are examples: replace them with yours. The cost is yours to write: we do not print one we cannot source.
Your numbers · per year
Fidel
Contracts lawyers · 9 h a week each (23% of the week)
828 ha year
—a year
Constanza
Compliance team · 8.5 h a week each (21% of the week)
782 ha year
—a year
Write the monthly cost of each group to see what it costs.
What this number is and what it is not
It is the cost of the hours your team spends today on tasks the agents prepare: matching, reconciling, consolidating, drafting. It is not a saving. The person still reviews, decides and declares the status.
How many of those hours come back we will publish in the evidence section, with each round’s tests. Until that figure is measured, we do not put it here.
Test evidence · updated with every round
Every figure comes from a real run of the repository, with its count and its 95% confidence margin. The engine is tested on every change to the repository; the agents, in rounds on one entity’s material.
How it is tested
5 industries and 11 controls
The engine, on all of them. The agents, so far on all 43 entities of the material, in 11 countries. The control entities carry no defects at all: any signal is a failure.
14 commands per entity
Fidel and Constanza run each agent’s setup and processing —the commands that process the documents and write the records—, with a token cap set before starting. The rest calculate on those records with the engine, which is tested on every change to the repository.
2,612 documents
What the material of the measured entities holds, in text and CSV. The key is not counted: the agents do not have it.
168.8 million tokens
The work of the language model (LLM) in each entity’s latest run —rounds 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 and 12—, with its verifications. No command was repeated.
A key they never see
What is expected is written in each entity’s key before the run: every seeded signal and every data point the written documents carry.
95% margin
Every figure comes with its confidence margin: it says how much the sample supports, which a percentage alone does not.
What they wrote is graded against the key they never saw: every signal by its name and its key, and every data point in the records against what the written documents carry. Each entity counts with its latest run, whatever round it came from; if a defect was fixed, the one that verified it. The first runs, with what they missed, are in the chart and in the detail.
Record data
99.8% or higher
Measured: 99.94%. The headline is the floor of the 95% confidence margin: what the test supports.
5968 of 5971 data points extracted from the written documents match the key.
Measured
Verification of CLO-7, CLO-8: Fidel on mining · Ecuador, 128 of 128 data points.
Verification of CLO-6: Constanza, Fidel on control entity · Colombia, 131 of 132 data points.
Verification of CLO-10: Fidel on control entity · Peru, 128 of 128 data points.
Verification of CLO-11: Fidel on control entity · Mexico, 128 of 128 data points.
Verification of CLO-14: Fidel on publica · Brazil, 152 of 152 data points.
95% confidence margin (Wilson): 99.8–99.98%
Signals found
98.4% or higher
Measured: 100%. The headline is the floor of the 95% confidence margin: what the test supports.
242 of 242 signals the key expected.
Measured
95% confidence margin (Wilson): 98.4–100%
Correct signals
98.4% or higher
Measured: 100%. The headline is the floor of the 95% confidence margin: what the test supports.
242 of 242 signals raised were correct.
Measured
95% confidence margin (Wilson): 98.4–100%
Controls without false alarms
11 of 11
11 of 11 control entities without a single extra signal.
Measured
With a defect on a control in this round: CLO-12. Its row is in the defects.
201 commands run on 43 entities, each with its output, its cost and its grade published.
How the family moves from one round to the next
Each dot is one entity in its first run of the round; the line is its 95% confidence margin. Verifications are shown apart: they repeat what was fixed. The axis starts at the lowest value published.
Round 11
Round 1 · verification2
Round 23
Round 3 · verification4
Round 45
Round 4 · verification6
Round 57
Round 5 · verification8
Round 69
Round 710
Round 7 · verification11
Round 812
Round 913
Round 1014
Round 1115
Round 1216
Results by country · each country’s latest run
Each country with its entities in their latest run with the agent. The margin is the 95% Wilson interval.
| Country | Entities | Round | Record data | Signals found | Correct signals | Controls without false alarms |
|---|---|---|---|---|---|---|
| Colombia | 4 | 2, 3 and 7 | 545 of 548 · 99.5%95% CI 98.4–99.9% | 24 of 24 · 100%95% CI 86.2–100% | 24 of 24 · 100%95% CI 86.2–100% | 1 of 1 |
| Ecuador | 4 | 2, 3 and 7 | 567 of 567 · 100%95% CI 99.3–100% | 15 of 15 · 100%95% CI 79.6–100% | 15 of 15 · 100%95% CI 79.6–100% | 1 of 1 |
| Peru | 4 | 4 and 7 | 565 of 565 · 100%95% CI 99.3–100% | 21 of 21 · 100%95% CI 84.5–100% | 21 of 21 · 100%95% CI 84.5–100% | 1 of 1 |
| Chile | 4 | 4 and 7 | 548 of 548 · 100%95% CI 99.3–100% | 21 of 21 · 100%95% CI 84.5–100% | 21 of 21 · 100%95% CI 84.5–100% | 1 of 1 |
| Mexico | 4 | 5 and 7 | 544 of 544 · 100%95% CI 99.2–100% | 23 of 23 · 100%95% CI 85.6–100% | 23 of 23 · 100%95% CI 85.6–100% | 1 of 1 |
| Brazil | 4 | 6 and 7 | 548 of 548 · 100%95% CI 99.3–100% | 24 of 24 · 100%95% CI 86.2–100% | 24 of 24 · 100%95% CI 86.2–100% | 1 of 1 |
| Argentina | 4 | 8 | 548 of 548 · 100%95% CI 99.3–100% | 25 of 25 · 100%95% CI 86.6–100% | 25 of 25 · 100%95% CI 86.6–100% | 1 of 1 |
| Panama | 4 | 9 | 569 of 569 · 100%95% CI 99.3–100% | 24 of 24 · 100%95% CI 86.2–100% | 24 of 24 · 100%95% CI 86.2–100% | 1 of 1 |
| Guatemala | 3 | 10 | 396 of 396 · 100%95% CI 99–100% | 20 of 20 · 100%95% CI 83.8–100% | 20 of 20 · 100%95% CI 83.8–100% | 1 of 1 |
| Costa Rica | 4 | 11 | 569 of 569 · 100%95% CI 99.3–100% | 23 of 23 · 100%95% CI 85.6–100% | 23 of 23 · 100%95% CI 85.6–100% | 1 of 1 |
| Honduras | 4 | 12 | 569 of 569 · 100%95% CI 99.3–100% | 22 of 22 · 100%95% CI 85.1–100% | 22 of 22 · 100%95% CI 85.1–100% | 1 of 1 |
Defects the rounds found · 14
Every error is logged with its origin and the commit that fixes it. It counts as verified only when a run after the fix gives the expected result.
Where they came from
For auditing
The full detail of every run. Each block opens on its own.
The agents ran their commands on each entity’s material, with a token cap set before starting. What they wrote was graded against the key they never saw: every signal by its name, and every data point in the records against what the written documents carry.
| Test material | Agents · commands | Signals | Record data | Tokens |
|---|---|---|---|---|
| bankingRound 1 · Colombia | Constanza, Fidel · 14 | 10 / 10 | 132 / 132 | 7.5 M + 0.4 M repeated |
| control entityRound 1 · Colombia | Constanza, Fidel · 14 | 0 / 0 | 126 / 132 | 7.9 M + 2.1 M repeated |
| control entityRound 1 · Colombia · verification | Fidel · 7 | 0 / 0 | 128 / 128 | 3.7 M |
| bankingRound 10 · Guatemala | Constanza, Fidel · 4 | 10 / 10 | 132 / 132 | 3 M |
| control entityRound 10 · Guatemala | Constanza, Fidel · 4 | 0 / 0 | 132 / 132 | 3.6 M |
| retailRound 10 · Guatemala | Constanza, Fidel · 4 | 10 / 10 | 132 / 132 | 3.3 M |
| bankingRound 11 · Costa Rica | Constanza, Fidel · 4 | 10 / 10 | 132 / 132 | 3.3 M |
| control entityRound 11 · Costa Rica | Constanza, Fidel · 4 | 0 / 0 | 132 / 132 | 3.6 M |
| publicaRound 11 · Costa Rica | Fidel · 2 | 3 / 3 | 152 / 152 | 2 M |
| retailRound 11 · Costa Rica | Constanza, Fidel · 4 | 10 / 10 | 153 / 153 | 3.6 M |
| bankingRound 12 · Honduras | Constanza, Fidel · 4 | 10 / 10 | 132 / 132 | 3 M |
| control entityRound 12 · Honduras | Constanza, Fidel · 4 | 0 / 0 | 132 / 132 | 3.5 M |
| publicaRound 12 · Honduras | Fidel · 2 | 2 / 2 | 152 / 152 | 1.9 M |
| retailRound 12 · Honduras | Constanza, Fidel · 4 | 10 / 10 | 153 / 153 | 3.3 M |
| bankingRound 2 · Colombia | Constanza, Fidel · 14 | 10 / 10 | 131 / 132 | 7.9 M |
| control entityRound 2 · Colombia | Constanza, Fidel · 14 | 0 / 0 | 128 / 132 | 5.3 M |
| control entityRound 2 · Ecuador | Constanza, Fidel · 14 | 0 / 0 | 134 / 134 | 7.7 M |
| cooperativesRound 2 · Ecuador | Constanza, Fidel · 14 | 9 / 9 | 153 / 153 | 7.8 M |
| miningRound 2 · Ecuador | Constanza, Fidel · 14 | 9 / 9 | 130 / 132 | 7.7 M |
| retailRound 2 · Colombia | Constanza, Fidel · 14 | 9 / 9 | 132 / 132 | 7.2 M |
| control entityRound 3 · Colombia · verification | Constanza, Fidel · 14 | 0 / 0 | 131 / 132 | 7.5 M |
| miningRound 3 · Ecuador · verification | Fidel · 7 | 4 / 4 | 128 / 128 | 3.5 M |
| bankingRound 4 · Peru | Constanza, Fidel · 4 | 10 / 10 | 132 / 132 | 3.2 M |
| control entityRound 4 · Chile | Constanza, Fidel · 4 | 0 / 0 | 132 / 132 | 3.3 M |
| control entityRound 4 · Peru | Constanza, Fidel · 4 | 0 / 0 | 131 / 132 | 3.2 M |
| control entityRound 4 · Peru · verification | Fidel · 2 | 0 / 0 | 128 / 128 | 1.8 M |
| miningRound 4 · Chile | Constanza, Fidel · 4 | 9 / 9 | 132 / 132 | 3.1 M |
| miningRound 4 · Peru | Constanza, Fidel · 4 | 9 / 9 | 153 / 153 | 3.6 M |
| retailRound 4 · Chile | Constanza, Fidel · 4 | 9 / 9 | 132 / 132 | 3.5 M |
| bankingRound 5 · Mexico | Constanza, Fidel · 4 | 10 / 10 | 132 / 132 | 3.6 M |
| control entityRound 5 · Mexico | Constanza, Fidel · 4 | 0 / 0 | 131 / 132 | 3.1 M |
| control entityRound 5 · Mexico · verification | Fidel · 2 | 0 / 0 | 128 / 128 | 2 M |
| retailRound 5 · Mexico | Constanza, Fidel · 4 | 10 / 10 | 132 / 132 | 3.3 M |
| bankingRound 6 · Brazil | Constanza, Fidel · 4 | 10 / 10 | 132 / 132 | 3.3 M |
| control entityRound 6 · Brazil | Constanza, Fidel · 4 | 0 / 0 | 132 / 132 | 3.1 M |
| retailRound 6 · Brazil | Constanza, Fidel · 4 | 10 / 10 | 132 / 132 | 2.9 M |
| publicaRound 7 · Brazil | Fidel · 2 | 4 / 4 | 150 / 152 | 1.9 M |
| publicaRound 7 · Brazil · verification | Fidel · 2 | 4 / 4 | 152 / 152 | 1.8 M |
| publicaRound 7 · Chile | Fidel · 2 | 3 / 3 | 152 / 152 | 1.8 M |
| publicaRound 7 · Colombia | Fidel · 2 | 5 / 5 | 151 / 152 | 1.9 M |
| publicaRound 7 · Ecuador | Fidel · 2 | 2 / 2 | 152 / 152 | 2.2 M |
| publicaRound 7 · Mexico | Fidel · 2 | 3 / 3 | 152 / 152 | 2.1 M |
| publicaRound 7 · Peru | Fidel · 2 | 2 / 2 | 152 / 152 | 1.9 M |
| bankingRound 8 · Argentina | Constanza, Fidel · 4 | 10 / 10 | 132 / 132 | 3.1 M |
| control entityRound 8 · Argentina | Constanza, Fidel · 4 | 0 / 0 | 132 / 132 | 3 M |
| publicaRound 8 · Argentina | Fidel · 2 | 5 / 5 | 152 / 152 | 2.1 M |
| retailRound 8 · Argentina | Constanza, Fidel · 4 | 10 / 10 | 132 / 132 | 3.3 M |
| bankingRound 9 · Panama | Constanza, Fidel · 4 | 10 / 10 | 132 / 132 | 3.4 M |
| control entityRound 9 · Panama | Constanza, Fidel · 4 | 0 / 0 | 132 / 132 | 3.2 M |
| publicaRound 9 · Panama | Fidel · 2 | 4 / 4 | 152 / 152 | 1.7 M |
| retailRound 9 · Panama | Constanza, Fidel · 4 | 10 / 10 | 153 / 153 | 3.5 M |
CLO-1Fixed and verified
Constanza did not take Fidel’s records from the shared state when the configuration did not name them, and record paths were not resolved from the .criterio folder.
Constanza takes them from the shared state and paths are resolved from .criterio. Compliance status was rerun on banking: 10 of 10 signals.
the code · banking · Colombia · f80f39f
CLO-2Fixed and verified
Grading counted signals from a period other than the key’s and the questions the agent writes on its own.
The round grades only the key’s period, not the agent’s own questions. Verified in round 2: no extra signals across the six entities.
the test harness · f80f39f
CLO-3Fixed and verified
Constanza used Fidel’s configuration: the engine did not reject another agent’s configuration.
The engine rejects another agent’s configuration and familias.py checks each folder against familia.json. Verified in round 2: Constanza worked with her own on five entities.
the code · control entity · Colombia · 4df0442
CLO-4Fixed and verified
Fidel left out of the record the obligations due at the end of the contract, such as the final report or the settlement minutes: one was missing in each of the five contracts.
The record skill asks for every dated obligation, in clause order. Fidel was rerun on the control: 128 of 128 data points; in round 2, every obligation across the six materials is in the records.
the agent’s instructions · control entity · Colombia · df6a04b
CLO-5Fixed and verified
Grading compares the citation as text: Constanza cited “line 5” and the key “item 1”, which are the same line of the bulletin. That is why the control scores 126 of 132 and not 127.
Grading accepts a citation that points to the same line of the same file as the key. Verified by re-grading the original round 1 output of the Colombian control with the corrected grading: the “line 5” citation counts as correct and the result goes from 126 to 127 of 132. In round 3, Constanza cited “item 1”.
the test harness · control entity · Colombia · db293b9
CLO-6Fixed and verified
On the Colombian control, Constanza did not write her configuration: setup said “leave the configuration written” without saying the agent writes it, and she stopped because no engine command creates it. Without a configuration her commands computed nothing: the 4 data points of the period record are missing, and that control does not test her false alarms in this round.
All four setups (Clara, Tomás, Fidel and Constanza) say the agent writes the configuration in the shape of config.example.json, that init prepares the state and config validates it. Verified in round 3: Constanza wrote her configuration on the Colombian control and her period record carries the 4 data points.
the agent’s instructions · control entity · Colombia · f075160
CLO-7Fixed and verified
The key of a contract without the counterparty’s signature still listed the counterparty as a signatory. Fidel, rightly, listed only who signed.
The generator keeps only who signed in the key; only the mining key changes. Verified in round 3: Fidel on mining, 128 of 128 data points.
the answer key · mining · Ecuador · f075160
CLO-8Fixed and verified
On that same contract, Fidel left the signing date empty: the skill did not say which date applies when only one party signed.
The record skill says the date is that of the signature the document carries, even if only one party signed, and that signed_by_both says the other is missing. Verified in round 3: Fidel on mining, 128 of 128 data points.
the agent’s instructions · mining · Ecuador · f075160
CLO-9Fixed and verified
The same case as CFO-4: the key says “Reporte de operaciones al oficial de cumplimiento” and Fidel wrote “Reporte de operaciones del periodo al oficial de cumplimiento”. Grading counts it as an error because it compares contained text, not meaning. It recurred in round 3, on the Colombian control: the only data point that failed there (131 of 132).
The same fix as CFO-4. Verified by re-grading the original outputs: round 2 banking, 132 of 132, and round 3 Colombian control, 132 of 132; the other entities do not change.
the test harness · banking · Colombia · 96935cc
CLO-10Fixed and verified
In a contract whose amendment moved the end date from 2027-06-30 to 2027-12-31, Fidel left the final report and the settlement minutes on the original date. The end date itself was right: only the obligation tied to it did not follow.
The record skill says an obligation tied to termination falls due on the current end date, the one in the latest amendment. Fidel was rerun on the Peruvian control: 128 of 128 data points; the Chilean entities, already run with the fix, give 132 of 132.
the agent’s instructions · control entity · Peru · 9a616a3
CLO-11Fixed and verified
The same failure as CLO-10 in the Mexican control: the amendment moved the end date from 2027-06-30 to 2027-12-31 and Fidel left the final report on the original date. The cause was in the record skill: it said that date is «the same as `end`», and `end` is the original end date.
The skill now says the date is the latest amendment's `new_end`, not `end`; the engine reports as a record issue an obligation falling due on the original end date when an amendment moved it, and `contract-scan` corrects it before calculating. Fidel was rerun on the Mexican control: 128 of 128 data points.
the agent’s instructions · control entity · Mexico · c482f137
CLO-12Fixed and verified
Constanza cited the rule in the bulletin by its line, and the key cites it by its «item 1», as a document in Portuguese numbers it. The harness knew how to resolve a numbered «punto», not an «item», and graded the citation as different.
A citation to a numbered «item» points to the same line as its «punto». The Brazilian control's run was regraded, with no commands repeated: 132 of 132 data points.
the test harness · control entity · Brazil · ebe223e1
CLO-13Fixed and verified
The key stored each public contract's modality as the publication record words it, «licitación pública», and the skill defines it as «licitación» or «directa»: Fidel wrote it as the skill says and it was graded wrong in the twelve contracts of Colombia and Ecuador. Also, in the contract without a publication record, the key carried the system and the modality, which no document of that contract states.
The key stores the modality as the skill defines it and, without a record, nothing public. The harness accepts the modality as each country words it —licitação, trato directo, contratação direta—. The round's six runs were regraded with the fixed key, with no commands repeated.
the answer key · publica · Colombia · eb3f4f4e
CLO-14Fixed and verified
In Brazil, in the contract without a comprovante de divulgação, Fidel took the portal —PNCP— from the procurement policy and cited it as the publication's source. The policy says where the entity publishes, not that it published that contract. The skill only said the date went null.
The skill says that, without a record, the system, the date, the modality and the citation go null, and are not taken from the policy. Fidel's setup and processing were repeated on Brazil's public entity: the four items of the contract without a record stayed null, and the run gave 4 of 4 signals and 152 of 152 data items.
the agent’s instructions · publica · Brazil · eb3f4f4e
Synthetic material from banking (Colombia), banking (Argentina), banking (Brazil), banking (Costa Rica), banking (Guatemala), banking (Honduras), banking (Mexico), banking (Panama), banking (Peru), cooperatives (Ecuador), mining (Ecuador), mining (Chile), mining (Peru), publica (Argentina), publica (Brazil), publica (Chile), publica (Colombia), publica (Costa Rica), publica (Ecuador), publica (Honduras), publica (Mexico), publica (Panama), publica (Peru), retail (Colombia), retail (Argentina), retail (Brazil), retail (Chile), retail (Costa Rica), retail (Guatemala), retail (Honduras), retail (Mexico), retail (Panama), plus 11 control entities with no defects at all: 43 entities with their contracts and three compliance periods, and a key the engine never sees.
247
signals planted on purpose, each with its key
29 of 29
family signals planted at least once
11
control entities, where any signal is a failure
The engine raises every expected signal and none extra, and the gate that checks it runs on every change to the repository. The agents’ extraction was tested in the rounds with the agent on every entity in the material: they are above, with their margin.
What comes next
A results page that only says what passed is advertising. What makes it auditable is what it says is not known yet.
Roadmap
Each increment is a version with its full test and its statistical analysis published, with the same metrics, so the evolution can be compared. Versions add up: the latest released one carries everything before it and the fixes for what its tests found.
StableIts evidence says so, not its number: in the latest run of each entity in its material, the lower bound of the 95% margin is 95% or more for signals and for data, and no control raised a signal. Each whole number has ten versions, from x.0 to x.9; then comes x+1.0.
0.8.0
ReleasedReleased on 2026-10-22
Built, with the engine tested and a first round with the agent
Test
The engine, against 4 industries and 2 control entities; the agent, on banking and the Colombian control
0.9.0
ReleasedReleased on 2026-10-23
The full round with the agent
Test
4 industries and 2 control entities, with the key the agent never sees
0.11.0
ReleasedReleased on 2026-10-27
Peru and Chile
Test
Round 4: Fidel and Constanza on the six entities of Peru and Chile, 37 of 37 signals, none extra and 812 of 813 data points; the one missed, fixed and verified
0.12.0
ReleasedReleased on 2026-10-27
Mexico
Test
Round 5: Fidel and Constanza on the three Mexican entities, 20 of 20 signals, none extra and 395 of 396 data points; the one missed, fixed and verified
1.0.0
ReleasedReleased on 2026-10-29
Brazil
Test
Round 6 with both agents in Brazil, with the documents in Portuguese: 20 of 20 signals, none extra, and 395 of 396 data points; the defect it found, in the harness, with its fix
1.1.0
ReleasedReleased on 2026-10-30
Public contracts
Test
Round 7 with Fidel on the six public entities, one per country: 19 of 19 signals, none extra, and 909 of 912 data items; the two defects it found, in the key and in the instructions, with their fix and their verification
1.2.0
ReleasedReleased on 2026-10-30
Argentina, Panama, Guatemala and Costa Rica
Test
Rounds 8 to 11 with Fidel and Constanza, one per country
Latest released
1.3.0
ReleasedReleased on 2026-10-30
Carries everything before it, with its fixes
Honduras
Test
Round 12 with Fidel and Constanza
The same roadmap lives in the repository, in families/criterio-clo/hoja-de-ruta.json.
How they work
Five steps and one boundary. The language model (LLM) extracts what only a written document carries; the code computes everything else. It is generative AI plus a deterministic engine, applied to contracts and compliance.
Your documents
The contract register, the payments, the matrices, each contract with its amendments and guarantees, the policies, the regulatory register and the case register. However they are, wherever they are.
It does not need the folder to be tidy.
The model extractsText and tables
The engine processes the tables directly; written documents are turned into text: Word, Excel, PowerPoint, PDF and email. Whatever it cannot process, it declares, with the reason.
Only what changed is processed again.
The model extractsThe record
One per contract and one per compliance period. Every data point with a citation to the document it came from and its date. Declared and evidenced go in separate fields.
"Not found" is a valid answer.
The model extractsThe engine
Expiries, notice deadlines, authority against the matrix, paid against agreed, guarantees and each obligation against its evidence within its frequency window.
Deterministic and tested.
The code computesSignals
Only what crossed a threshold: what falls due, what has no evidence, who signed without authority and what was paid outside what was agreed. If nothing crossed one, nothing is said.
Silence is the feature.
The code computesNo deadline or amount in a report comes from an estimate. And what is stated nowhere is declared, not filled in.
Why this boundary matters →Seven invariants that hold them up
The agents never talk to each other
They talk through their records. Constanza takes from Fidel's the compliance obligations of the contracts.
Rostrum does not write
The portal publishes what the engine already wrote and says so with its date. It recalculates nothing.
Each contract has one place
Its folder. Fidel processes it and Constanza takes from its record what concerns her, with no copies.
Declared and evidenced never merge
What the report declares and what the documents support live in separate fields. The gap is usually the most valuable finding.
The model extracts, the code computes
Every amount, deadline or count in a report comes from the engine. If the engine does not give it, it is not written.
No agent declares or decides
The compliance status is declared by the compliance officer; renewing or terminating is decided by a person. Fidel records it when a document takes it.
No legal opinion
What an obligation requires is defined by the organisation in its matrix, with its source. No agent adds, removes or rewrites an obligation.
The detail
The commands with their input, process and report; the signals the code calculates; the folder structure; the sources, and the links to the repository.
In order of importance. The first one sets up the configuration the others need.
legal-setupThe configuration, the inventory and the first contract records
00-referencia/, how many days ahead an expiry or a notice period is flagged, the maximum age of the counterparty's certificate, who decides to renew and whether the entity is publiccontratos/ against those in the register; the first recordscontract-scanThe contract records up to date, with what changed and the new signals
contratos/ and 10-registro/contract-registerThe contract register against what the documents say
10-registro/registro-contratos and the recordsobligations-calendarExpiries, notices and obligations, with what is overdue without evidence
40-ejecucion/40-ejecucion/, with its id at the start of the nameauthority-checkWho signed each contract and with what authority
00-referencia/matriz-atribuciones and 30-contraparte/contract-executionPayments against the agreed value, and guarantees against what was required
10-registro/pagos, the records and 20-garantias/legal-wakeWhat the contracts need today; silent when nothing does
share-findingsA summary with no data to share, only if you say yes
.criterio/corridas/In order of importance. The first one sets up the configuration the others need.
compliance-setupThe configuration, the reviewed matrix and the first compliance status
00-referencia/ in the defined model (F-01), the period, the channel's response deadline, the days to assess a new regulation and, if the organisation uses Fidel, where his records arecompliance-scanThe compliance record up to date, with what changed and the new signals
20-reportes/ declares and the new regulations in the bulletins in 30-normativa/, with their citationcompliance-statusCompliance status: declared against evidenced, obligation by obligation
00-referencia/matriz-obligaciones, 10-evidencias/ for the period and earlier ones, and Fidel's records if there are anypolicy-reviewEvery policy with its next review, and the overdue ones
20-politicas/indice-politicasregulatory-watchNew rules with their assessment, and the applicable ones without an obligation
30-normativa/registro-normativo and the new regulations in the recordreports-casesWhistleblowing cases against their deadline
40-canal/casoscompliance-wakeWhat compliance needs today; silent when nothing does
share-findingsA summary with no data to share, only if you say yes
.criterio/corridas/29 signals. Each one is raised with its date or amount, its owner and the document citation; warning periods are each organisation’s configuration.
Fidel · 18
contract_expiringA contract expires within the configured days with no recorded decision to renew or terminate
notice_deadline_nearThe non-renewal notice deadline of an auto-renewing contract falls within the configured days
renewal_notice_missedThe notice deadline of an auto-renewing contract passed with no recorded decision
contract_expired_activeThe register reports as active a contract whose end date has passed
register_mismatchA contract in the folder is not in the register, or a register row has no document
register_differs_from_contractThe register's value or dates differ from the document's
contract_obligation_overdueA contract obligation is past its date with no evidence
signed_without_authorityThe entity's signatory had no authority for the type or amount under the authority matrix
unsigned_contractThe document lacks both parties' signatures and the contract has already started
counterparty_certificate_staleThe counterparty's certificate was older than the configured days at signing
payments_over_valuePayments exceed the contract value plus its amendments
payment_after_terminationThere are payments dated after the contract's end
guarantee_missingThe contract requires a guarantee and none was provided
guarantee_expires_earlyThe policy provided expires earlier than the contract requires
public_contract_not_publishedA public entity's contract was not published in the national system within its country's legal deadline
public_guarantee_below_lawA public contract's performance guarantee is below its country's legal minimum
public_guarantee_over_capThe guarantee required in a public contract exceeds its country's legal cap
public_guarantee_lateA public contract's performance guarantee was delivered after its country's legal deadline
Constanza · 11
compliance_obligation_overdueA matrix obligation is past its deadline with no evidence
compliance_done_without_evidenceAn obligation is marked done and no evidence supports it
compliance_evidence_staleThe latest evidence of a periodic obligation predates its window
obligation_without_ownerA matrix obligation has no owner
obligation_without_sourceA matrix obligation cites no rule, contract or policy it comes from
declared_compliance_vs_evidenceThe report declares the period compliant and there are open signals that status does not explain
policy_review_overdueA policy is past its review date
regulatory_change_unassessedA registered rule has gone longer than the configured days without an impact assessment
applicable_norm_not_in_matrixAn applicable rule has no obligation in the matrix
report_case_overdueA whistleblowing case is past the configured response time
contract_obligation_not_in_matrixA contract's compliance obligation is not in the matrix
Recommended, not required: the agents process the folder as it is. The setup commands say which file is out of place and where it would go, without creating, moving or renaming anything. Setup searches for the entity’s root folder, offers it with the reason and, if you say yes, marks it with a visible file, _CRITERIO_LEGAL.txt: the only thing it writes among your documents. Every contract has one place, its folder under contratos/: Fidel processes it and Constanza takes the compliance obligations from its record.
One folder per entity, with its tax id at the start of the name. Inside it, what the organisation keeps for the whole entity, one folder per contract and one per compliance period.
legal/
└── <entidad>/
├── 00-referencia/
├── 10-registro/
├── 20-politicas/
├── 30-normativa/
├── 40-canal/
├── contratos/<código>/
│ ├── 10-contrato/
│ ├── 20-garantias/
│ ├── 30-contraparte/
│ └── 40-ejecucion/
└── cumplimiento-<AAAA-MM>/
├── 10-evidencias/
└── 20-reportes/
estado-legal/<entidad>/ · What the organisation keeps for the whole entity
| Folder | What goes in it | Agent |
|---|---|---|
00-referencia/ | The authority matrix —who signs what and up to what amount— and the compliance obligations matrix | Fidel, Constanza |
10-registro/ | The organisation's contract register and the ERP export of payments by contract, with the cut-off date in the name | Fidel |
20-politicas/ | The policy index with each version and next review, and every policy | Constanza |
30-normativa/ | The regulatory register, the bulletins and the impact assessment of every new rule | Constanza |
40-canal/ | The whistleblowing channel case log, with received and answered dates | Constanza |
contratos/<código>/ · One contract, with its code at the start of the folder name
| Folder | What goes in it | Agent |
|---|---|---|
10-contrato/ | The signed contract and every amendment | Fidel |
20-garantias/ | The insurance policies and guarantees provided | Fidel |
30-contraparte/ | The counterparty's certificate of existence and representation and its documents | Fidel |
40-ejecucion/ | Delivery records, reports and the evidence of every obligation, with its id at the start of the name | Fidel, Constanza |
cumplimiento-<AAAA-MM>/ · One compliance period
| Folder | What goes in it | Agent |
|---|---|---|
10-evidencias/ | The evidence of every obligation in the period, with its id at the start of the name | Constanza |
20-reportes/ | The period's compliance report | Constanza |
estado-legal/ · What Fidel and Constanza write: the configuration, each contract's record, the reports and the indexes. No person edits it, and no agent writes anywhere else.
No obligation comes from a Criterio source: the organisation defines them. What is used is the model for the matrix, cited to its issuer, and nothing is built on a source still to be verified.
ISO 37301:2021 · Sistemas de gestión del cumplimiento — Requisitos con orientación para su uso
Edición 1, abril de 2021; confirmada en su revisión sistemática de 2026 · iso.org ↗
NCMA y World Commerce & Contracting · Contract Management Standard
Cuarta edición, 19 de junio de 2025 · worldcc.com ↗
Colombia · Decreto 1082 de 2015, artículo 2.2.1.1.1.7.1 · Publicidad en el SECOP
La compilación del decreto publicada por la CRA, consultada el 30 de octubre de 2026 · normas.cra.gov.co ↗
Colombia Compra Eficiente · ¿Cuál debe ser el valor de las garantías? · y concepto C-1270 de 2025
La página del 7 de febrero de 2017 y el concepto del 9 de octubre de 2025 · operaciones.colombiacompra.gov.co ↗ · relatoria.colombiacompra.gov.co ↗
Ecuador · Procuraduría General del Estado · Boletín «Reflexiones sobre contratación pública»
El boletín publicado en agosto de 2022 · biblioteca.pge.gob.ec ↗
Perú · OECE · Opinión sobre la garantía de fiel cumplimiento, Reglamento de la Ley 32069 (DS 009-2025-EF)
La opinión del 14 de septiembre de 2026 (expediente 112712) · lpderecho.pe ↗
Chile · Decreto 661 de 2024, Hacienda · Reglamento de la Ley 19.886, artículos 39 y 77
El texto publicado el 12 de diciembre de 2024, el que trajo José Francisco Ñáñez desde la BCN y una copia de la Asociación Chilena de Municipalidades · bcn.cl ↗ · achm.cl ↗
ChileCompra · Garantías
La página actualizada el 25 de marzo de 2026 · chilecompra.cl ↗
México · Ley de Adquisiciones, Arrendamientos y Servicios del Sector Público, artículo 69
La ley nueva publicada en el DOF el 16 de abril de 2025, el texto vigente de la Cámara de Diputados que trajo José Francisco Ñáñez · diputados.gob.mx ↗
TCU · Licitações e Contratos: Orientações e Jurisprudência · Lei 14.133/2021, artigos 94 e 98
El manual actualizado el 29 de agosto de 2025 · licitacoesecontratos.tcu.gov.br ↗ · licitacoesecontratos.tcu.gov.br ↗
Argentina · Decreto 1030/2016 · Reglamento del Régimen de Contrataciones de la Administración Nacional, artículos 3, 77 y 78
El texto original publicado en el Boletín Oficial el 16 de septiembre de 2016, el mismo del PDF que trajo José Francisco Ñáñez · argentina.gob.ar ↗
Panamá · Ley 22 de 2006 de contratación pública, texto único ordenado por la Ley 153 de 2020, artículo 123
Gaceta Oficial Digital 29107-A, 7 de septiembre de 2020, el PDF que trajo José Francisco Ñáñez · gacetaoficial.gob.pa ↗
Costa Rica · Ley 9986, Ley General de Contratación Pública, artículos 44 y 100
El texto publicado que trajo José Francisco Ñáñez · pgrweb.go.cr ↗
Honduras · Decreto 74-2001, Ley de Contratación del Estado, artículos 99 y 100; y la Política de publicación EDCA de la ONCAE
El texto del decreto que trajo José Francisco Ñáñez; la política de publicación de la ONCAE, sin fecha propia, consultada en oncae.gob.hn · oncae.gob.hn ↗
Installation, setup and terms
Three steps, and none of them asks you to edit a file. You install only the agent for the role you have; if you install several, they find each other through the entity’s state: there is nothing to connect.
To receive every new version, turn on auto-update once: in /plugin, Marketplaces → criterio → Enable auto-update. Without it, the installed version does not change on its own.
What it needs from you
Each agent comes with its own setup command. It looks at your folders, asks a few questions and shows you a first result on your own documents.
/criterio-legal:legal-setup
How it asks
None of them schedules itself. Each comes with the command a clock calls (legal-wake, compliance-wake), and someone sets it once as a scheduled task. If your organisation does not want unattended runs, they are run by hand.
Nobody reads a disclaimer in a repository. So the warning reaches the person who runs the agent and the person who later receives the document, in four layers that every agent implements.
One acceptance per version
Every version of the family is accepted again and leaves on your machine a receipt in Markdown and PDF, with the SHA-256 fingerprint of the terms and of the receipt itself. Until the one for the installed version is recorded, the agent answers questions but produces no full analysis. It never assumes it or infers it from you continuing to talk.
On every report
Every report carries a footer saying it is a draft, based on which documents, how many fields had no data and how many contradictions remain open. The document travels by email and reaches a committee: the warning travels with it.
At the start of every run
Before the first finding it says which records it loaded, when they were refreshed, and whether any is stale or missing.
In the legal notice
The full terms, the legal notice and the version register —what changed in each version, which terms govern it and their fingerprint— are published on this site, and every receipt points to them.
What you agree to, in plain words
Terms version 1.3, of 2026-10-28, for version 1.3.0 of the family. Every new version of the family asks for acceptance again.
Legal notice and version register →Apache 2.0
The method, the record schema, the code that computes and the acceptance criteria, in full and with no conditions. Use it inside your organisation without asking, adapt it, and build the capability you are missing: the agent for a function should be written by someone who knows the work.
What it does not do
Frequently asked questions
What it is
They process what the company signed and what it committed to comply with. Fidel keeps the contract register against its documents, expiries and renewal notice periods, obligations with their evidence, who signed with what authority, and what was paid against what was agreed and its guarantees. Constanza keeps the organisation's obligations matrix against its evidence, the policy review, new regulations with their assessment and the whistleblowing channel with its deadlines.
No. They prepare the work and check it against all of its evidence: what falls due, what has no evidence, who signed without authority and what was paid outside what was agreed. The decision —to renew, to terminate, how a clause or a regulation is read— is always made by a person.
No. Neither of them interprets a clause, rules on the validity of a contract or a signature, or says what a regulation requires. What an obligation requires is defined by the organisation in its matrix, citing its source.
They do not decide to renew or terminate, do not draft, negotiate, sign or send contracts, amendments or notices, and do not declare the compliance status. They do not answer whistleblowing cases or process data about who reported.
How it is used
The ones the area already has, as they are: the contract register, each contract with its amendments, insurance policies and guarantees, counterparty certificates, payments, the signing-authority matrix, the obligations matrix, the policy index, the regulatory register and the whistleblowing case register.
As it is: the agents process it that way. When starting from scratch, the family recommends one folder per entity with its register, its policies, regulations and the channel; one per contract, with the contract, guarantees, counterparty and execution; and one per compliance period. Setup searches for the entity's root folder, offers it and, if you say yes, marks it with a visible file, _CRITERIO_LEGAL.txt. It is the only thing it writes among your documents.
In the first fifteen minutes, legal-setup shows the contract calendar: what falls due, notice periods coming up or already past without a decision, and overdue obligations without evidence, with the signals the engine raised in the register, the signatures and the payments.
In each command's report and in Rostrum, the portal for every family. It shows the latest each engine wrote, what falls due with a date —the notice period of an auto-renewing contract, the obligation that falls due— and the full path of the folder each agent works in.
How it is tested
On synthetic material from five countries —Colombia, Ecuador, Peru, Chile and Mexico—: four industries and one control entity per country, with no defects at all, where any signal is a failure. Every family signal is planted at least once.
The material carries a key with what was planted, and the engine never sees it. The test compares every signal by its name and its key: an extra one counts the same as a missing one. The gate that checks it runs on every change to the repository.
The engine is, and Fidel and Constanza ran on all fifteen entities in the material: round 2 on the six of Colombia and Ecuador —37 of 37 signals with none extra and 808 of 815 record data points—, round 4 on Peru and Chile —37 of 37 and 812 of 813— and round 5 on Mexico —20 of 20 and 395 of 396—. Every data point missed has its defect, fixed and verified. The family is declared tested; nothing has run yet on an organisation's documents.
Data and privacy
They are processed on the AI platform where the agent runs, like any conversation with it. The plugins do not connect to the internet or send us anything.
On your machine: the contract and compliance records, the reports, the log of each run and the receipt for accepting the terms, which every version of the family asks for again.
The same answers live in the repository, in families/criterio-clo/PREGUNTAS.md.
Support the work
Criterio remains open source. A voluntary contribution helps fund testing, documentation and the next capabilities without changing access to the software.
This is a voluntary contribution. It does not unlock features, purchase consulting services or create an advisory relationship.
Support Criterio
Choose an amount and how you want to contribute.
Choose your country to see the payment methods available to you.
dLocal Go currently covers Latin America, Indonesia, Malaysia, Kenya and Nigeria. Global coverage will be added separately.
The point
What was signed was always written down. Nobody had put it next to what is happening.
An agent that processes your contracts will not hand you a control you never built. It will show you, in an afternoon, what falls due, what has no evidence and who signed without authority, and that is the only honest place to start.
Principles
José Ñáñez