> ## Documentation Index
> Fetch the complete documentation index at: https://docs.platform.nora.my/llms.txt
> Use this file to discover all available pages before exploring further.

# Verify agent answers

> Cross-check every agent output against your causal graph before it reaches the user.

Once you've built a causal graph, you can use it as a **safety net** — every answer the Agent produces is checked against the graph, and contradictions are caught before the user sees them.

## What gets checked

Nora extracts factual claims from the Agent's response and compares them to the graph:

* **Directional claims** — "A causes B" (checked against the edge structure).
* **Sign claims** — "increasing A increases B" (checked against the edge's sign).
* **Magnitude claims** — "A is around 200" (checked against the variable's known range).
* **Value claims** — "the status is 'error'" (checked against the discrete variable's allowed values).

## Setup

1. Publish a causal graph (see [Overview](/build/causal-graph/overview)).
2. Attach it to the Agent: Agent Inspector → **Verification → Add graph**.
3. Pick actions per severity:
   * **Warn** — annotate the answer with a warning field; user still sees it.
   * **Block** — hold the answer, don't send.
   * **Rewrite** — the Agent gets one more chance to answer, with the contradiction pointed out.

Defaults are conservative: `warn` on soft contradictions, `block` on hard ones.

## Severity levels

* **Hard contradiction** — the Agent says A→B; the graph says B→A. Or the Agent asserts a value outside a variable's range.
* **Soft contradiction** — the Agent asserts a sign the graph doesn't confirm (but doesn't refute either).
* **Consistent** — everything checks out.
* **Uncheckable** — no claims in the response matched anything in the graph.

## Verification in a Trace

Every run with verification enabled shows a **Verification** panel in the Trace:

* Each claim extracted from the answer.
* Whether it matched, contradicted, or wasn't found in the graph.
* The specific graph edge or variable used to check.
* The action taken (warn / block / rewrite).

Useful for tuning: if verification is flagging too many false positives, look at the failing claims and either add missing edges or adjust the severity threshold.

## Rewrite loop

When set to **rewrite**, the Agent gets a follow-up turn with a system message like:

> Your previous answer said A→B. According to the domain graph, B→A. Please re-answer.

The Agent produces a new response; verification runs again. Up to 3 rewrite attempts (configurable) before falling back to block.

## Verification vs. retrieval grounding

* **Grounding** ([Retrieval grounding](/build/retrieval/grounding)) checks *retrieved chunks* before they hit the Agent.
* **Verification** checks the *Agent's final answer* before it reaches the user.

Both use the causal graph; they're complementary. Turning on both catches both "the Agent read bad context" and "the Agent hallucinated despite good context."

## Performance

Verification adds 100-400ms per run depending on how many claims the answer contains. For high-throughput Agents, consider verification only on high-stakes intents (routed via a Router block).

## When verification is off

Some Agents genuinely shouldn't be verified — creative writing, brainstorming, opinion prompts. Leave the graph unattached, or attach with all actions set to `warn` (never blocks, always visible in Trace).
