← Docs

How ThoughtProof behaves

A behavior reference for builders integrating verification into an agent.

Not a marketing page and not a full API spec — just the questions you actually ask before wiring a verifier into a loop: what the verdicts mean, what happens when the agent is unsure, what happens on a timeout, how long each product takes, and exactly what comes back.

Verdict semantics On UNCERTAIN Timeout & failure Latency per product What your agent gets back

Verdict semantics

Every product returns one of three verdicts. They are deliberately conservative: the verifier is judging whether the submitted package is defensible against mandate and evidence — not predicting an outcome, and not authorizing execution.

ALLOW

No blocking objection was found in the submitted decision package, within the scope of this check. Execution remains bound to the integrating system’s own controls and release rules. ALLOW is not a guarantee that the action is safe to execute.

UNCERTAIN

The verifier could not confirm the reasoning is sound — evidence is thin, the thesis is single-dimensional, or the verifiers disagree. UNCERTAIN is not a soft ALLOW. Treat it as "do not proceed as-is": re-plan, gather more context, or escalate (see below).

BLOCK

The reasoning is indefensible — a material flaw, an unmanaged risk, a contradiction. The action should not execute. The response carries the objections that drove the block.

Conservative merge. When a request runs through more than one engine (e.g. Sentinel pre-check then RV), the worst verdict wins: BLOCK > UNCERTAIN > ALLOW. A clean ALLOW from one layer never overrides a BLOCK from another.

What the verdict is NOT

The verdict is about the defensibility of the reasoning, not the direction of the world. A trade can be blocked for accepting unbounded risk and still, by luck, have been profitable. The point of verification is to stop the catastrophically-reasoned action, not to forecast the market.

On UNCERTAIN — re-plan, don't just halt

The naive integration treats anything other than ALLOW as a hard stop. That's safe but wasteful: the agent learns nothing and simply idles. A better pattern, and the one we recommend, is to feed the verifier's objections back to the agent and let it decide once more:

const v = await verify(decision);
if (v.verdict !== "ALLOW") {
  // Hand the objections back to the agent for ONE revision.
  const revised = await agent.replan(decision, v.objections);
  const v2 = await verify(revised);        // independently re-verified
  return v2.verdict === "ALLOW" ? execute(revised) : standDown();
}

In practice the revision is usually one of: size down / add an explicit invalidation, gather the missing evidence the objections named, or stand down entirely when the objections show there's no defensible action. All three are good outcomes — standing down is a correct answer, not a failure.

Bound the loop. Re-plan at most once (or a small fixed N) per decision, and always re-verify the revision through the same independent pipeline. There is no way to "argue past" the verifier — a revised decision earns ALLOW only by being genuinely more defensible, not by being re-submitted. Without a bound, an agent that keeps failing can loop and burn calls.

Timeout & failure handling

Verification sits in front of an irreversible action, so the failure posture is fail-closed: if the verifier cannot return a confident result, the safe default is to not act.

Latency per product

These figures are integrator guidance (how to size timeouts and loop frequency), not an SLA and not a percentile from a named public measurement run. None of the products is sub-second — verification is a deliberate step. Fail closed if the call exceeds your timeout.

ProductTierIntegrator guidanceUse it for
SentinelCheckpointtypically a few secondsHigh-frequency pre-execution gate on every agent step
SentinelStandardtypically longer than Checkpoint; size timeout in the tens of secondsHeavier lifecycle checks
PLVStandard / Thoroughmulti-second to tens of seconds depending on cascade depthPlan/trace faithfulness (compliance, audit)
RVStandardtypically tens of seconds — do not put inside a tight loopAdversarial reasoning at decision points with consequences
DQLStandard (only tier)See noteFive-axis verify (intent · scope · risk · consistency · reversibility) via single cascade
DQL latency (honest stub). DQL exposes one production path: nano→swift cascade (no cheaper checkpoint tier). Public “typical p50/p90” numbers are not published here until a named measurement run is linked. Client guidance today: treat verification as multi-second to tens-of-seconds work; set a fail-closed client timeout; do not assume sub-second. Platform ceiling and provider incidents have historically reached the ~60s function budget — size retries carefully and never execute on timeout. Axes + aggregate semantics: dql.thoughtproof.ai · stop-case FAR evidence lives in internal ADSB reports (to be linked from the validation-evidence page).
Pattern: gate every step with Sentinel; escalate only the consequential decisions to RV. Don't put an RV call inside a tight loop — reserve it for the moments where a wrong ALLOW actually costs something. Use DQL when you need which axis failed, not only a single gate verdict.

What your agent gets back

A verification response is built to be acted on programmatically and audited later. The exact fields vary per product; the shape below is RV's /v1/check, which is the most detailed:

{
  "verdict": "BLOCK",            // ALLOW | BLOCK | UNCERTAIN
  "confidence": 0.95,            // certainty in the verdict (never 1.0/0.0)
  "objections": [                // the reasons — what your agent acts on
    "Trading against a confirmed multi-timeframe downtrend with 5x
     leverage violates basic risk management...",
    "No stop-loss specified; a 20% adverse move wipes the account..."
  ],
  "modelCount": 3,               // independent providers in the panel
  "verificationProfile": "standard",
  "durationMs": 52107
}

The three things to wire into your agent:

Want to see this end to end? The docs walk through a first API call, and our verified trading agent publishes a live block-log of decisions it blocked — each with the objections and the signed verdict.