How it stands

How an answer is held to the record.

The model can say anything. This page shows where its claims get compared, who decides, what happens next, and what we cannot show.

Honest, here, means a claim stays within its evidence. It does not mean the claim is true.

The STAND pattern, letter by letter

ReAct, the reason-and-act loop, is how an agent works. STAND is how its claims are held to the record.

Trace the run Record · Trace

A record the model did not write, kept by the flowchart as it runs.

Assess the claims Compare · Walker

Code compares. No model judges. It catches what the record can contradict.

1 Calling a tool

The model picks a tool and fills in its inputs.

CheckComparesWho decidesWhat happens
Argument schemainputSchemaThe arguments against the tool’s schemaCodeRejected, with the reason.
Permission policyPermissionPolicyThe call against your policyCodeDenied or halted.
Check incheckInThe call against your rule, then a personCode, then a personPauses for approval.
Ask or assumeaskOrAssumeA missing value against the tool’s ruleCodeAsks once before anything runs, or fills it in and says so.
Where a value came fromargumentSourcesThe source the model cites against the person’s words or a resultCode, when the model declaresRuns, asks or flags.
Made-up tool inputsargumentsFromAn ID the model passes against what it was shownCodeRecorded only. The tool still runs.

Which tool to call stays the model’s choice, and this is the thinnest part. An unknown tool is refused. The rest is recorded.

2 Reading a result

A tool returns something, and the model decides what it means.

CheckComparesWho decidesWhat happens
Declared limitsabsent(), coverage()What the tool says it checked and skippedThe tool declares, and code reads itA reason on the standing.
Empty resultAn empty result with nothing declaredCodeA reason on the standing.
Time windowperiodThe period asked against the period heldCodeA reason on the standing.
Column typesresultColumnsRows against the declared columnsCodeOff by default. Warns, or refuses the rows.
Conflicting readings.findings()Two readings the model stood on for one factCode, when the model declaresA reason on the standing.
A judge on tool results.findings({ judge })The result against the model’s propositionA classifierFiled apart. It never sets the standing.

3 Giving the answer

The model says what it found.

CheckComparesWho decidesWhat happens
Answer shape.outputSchema()The answer against your parserCodeNo retry by default. { retries: N } gives N corrective turns.
Invented values.namesAndNumbersFromEvidence()Long numbers and IDs against tool results. Small numbers are skippedCodeFlags it, gives one more turn, or refuses, by posture.
Contradiction.claims()A structured field against a fact the tool markedCodeRecorded on its own. Withheld when an enforcing check lists it.
Did it run at allcontext.toolCallsThe answer against the tools that ranYour codeThrough your check.
Code shownTool.scriptCode in the answer against the program submittedCodeMarked unmatched.
Steps left undoneskill stepsThe answer against a skill’s declared stepsCodeA reason on the standing.
“Not found” stretched too far.negativeClaims()“None” against what the search coveredCodeOpt-in and unmeasured. Not recommended yet.
Your own rule.answerValidation()Anything you writeYour codeEnforce withholds. Observe records. The only path to known.

Name the standing Conclude · Fold

One of five words, with its reason. Not a percentage.

  • KnownA check you wrote passed for this answer. The library cannot see how your check decided.Needs a passed enforcing answerValidation report. Never known from silence.
  • ConsistentChecks ran and found nothing wrong. The library says this is not a verification.unrefuted. A membership pass keeps a reason from firing and supports nothing.
  • Not sureA check found a problem, and the reason is shown.Each reason names its source: specific calls, the answer or the run.
  • AskThe run is waiting on a person.Any pause reads ask, from the recording alone.
  • Not assessedNothing could be checked.not-applicable. A different state from a clean result.

Recorded only means the check files what it found and does not move the answer’s standing today.

What the model is told

Most checks add nothing to what the model is sent. Here is what each setting adds.

SettingAdded to the promptSent back to the model
.answerLayer()NothingNo. The line is added to the delivered answer.
.namesAndNumbersFromEvidence()Nothing, until guard or rails firesUnder guard and rails, one repair turn with a recovery instruction.
.outputSchema()One fixed JSON-format sentenceOnly with { retries: N }.
.claims(), .answerValidation()Nothing beyond that sentenceNever. Re-asking would invite the model to change the claim, not the facts.
.findings()A fixed instruction on how to declare, and _findings on every toolNo.

After an answer exists, the model is asked again in four cases: an invented value under guard or rails, a bad shape with retries on, unfinished steps, and a bad citation on a “not found” claim. A run that hits its limit gets one separate wrap-up call.

When the answer leaves

PathWhen streamed text leavesIf a check finds a problem
Structured answer, enforcing checkAfter the checksWithheld. Nothing streamed.
Structured answer, observing checkAfter the checks and the standingDelivered, with its standing.
Prose with the answer layerBefore the standing is worked outDelivered, and the standing arrives right after.
Prose with railsBefore the checks finishBoth drafts streamed, then run() throws.

So “checked before anyone sees it” holds only for structured answers with a check, or when nothing streams. Prose can never reach known.

Where it stops

  • A silent model. Checks on what the model declares run only when it declares. A model that says nothing reads consistent.
  • Trusted tools. A tool’s declarations are trusted. A tool that misstates what it searched gets an honest-looking standing.
  • Your own check. It can call a model, and the library cannot see how it decided. A stub that always passes still reads known.
  • Rewrites. Under guard or a schema retry the new answer is the model’s. Only the re-check is code.
  • Findings that do not move the word yet. A contradiction on its own, a made-up tool input and evidence from an earlier turn are recorded, and the word can still read consistent or not assessed.
  • Opt-in. Almost every check is opt-in, and a tool that marks nothing gets compared with nothing.
  • The world. A false sentence built from real values can pass. The record is not the world.

What we have not measured

  • The results on this page come from a scripted model. That shows how the checks behave. It does not show how often a real model trips them.
  • We have no measured rate for how many wrong answers this catches.
  • Does serving the record back to the model make it more honest? We cannot say yet. In one ten-run test it made no difference to citing junk records, and answers kept fewer real facts. In a later one, citing junk fell from 7 runs in 10 to between 2 and 5, and answers again kept fewer real facts. Ten runs swing by a run or two.
  • More honest, or just more silent? The record alone cannot answer that. It needs blind hand labels, and that study has not reported.