The agent only states what it checked. The rest is flagged.
A price nobody quoted. A deadline three days off. A promise with no action behind it. The claim check looks at every number, date and amount the agent is about to say and asks where it came from. It counts if it came from a state read, from a tool called in this turn or from a passage that cites its source. What has a source passes. What has none is annotated, counted or replaced by a caveat, as your company’s rule says. The check runs inside the agent’s process, with no extra AI, at the last point before the customer or before a document is saved. A signed document is never rewritten: it is checked and counted, and goes to a person when it does not stand. Niadra only receives the verdicts and adds them up.
How it works
The answer, checked before it goes out
exampleHi, Marina. The $40 credit is already applied to your August bill, and I rebooked the visit for Sep 23 in the morning. As an apology, your next bill comes with a 15% discount.
- $40 amount · credit state read: bill 0823, credit field, ERP 1 min ago verdict: matched action: none
- Sep 23 date · visit tool reschedule_visit, called in this turn verdict: matched action: none
- 15% percentage · discount none: no tool and no read in the turn carries a discount verdict: no origin action: the sentence gives way to the contract’s caveat
Hi, Marina. The $40 credit is already applied to your August bill, and I rebooked the visit for Sep 23 in the morning. About a discount, I will confirm with the team and get back to you.
Checked in the agent’s process, by word, role and anchor: no extra AI. The three verdicts go to the turn record; the text of your prompt never does.
- Three origins of a number: quoted, computed or said by the model. Only what has no source is handled as the rule says: annotate, count or replace with the caveat
- The proof is exactly one: a value with a source in the turn, a call to this tool, a call to any of these tools, or a passage that cites its source
- An old value comes with the date it was last updated and does not back a number
- A rewrite only when there is no doubt, in text that can still change, and never for a dose, a measurement, a size or an identifier
- A versioned list of phrases of the trade that never trigger, tested in your CI with niadra contract test
- The text of your own prompt never reaches the customer: the passage gives way to the rule’s line, and the record keeps the verdict, never the text
- How much each agent states without checking comes out in Measurement, per agent and per vendor
from niadra import Niadra, phone
def shown(product):
fields = {"price_sale": product["price_sale"]}
return [{"ref": f"product:store:{product['sku']}", "fields": fields}]
@Niadra.tool("check_price", provenance=shown)
def check_price(sku: str) -> dict:
return CATALOG[sku]
niadra = Niadra(channel="whatsapp")
# fingerprints of your own prompt, computed here; the text never leaves
niadra.internal_text.register("prompts@v16", PROMPT)
customer = phone(customer_phone)
with niadra.conversation(
thread_id, subject=customer, agent_id="store"
) as conversation:
build = Niadra.build(prompts={"store": "v16"}, model="gpt-4.1-mini")
with conversation.turn(build=build):
check_price("PX-4471") # recorded, with the price it showed
# the contract's actions, at the last point before the customer
guarded = conversation.claims.guard_text(draft)
conversation.agent(guarded.text)- Python
- TypeScript
From the SDK’s examples/claim_guard.py: the tool records what it showed, and the answer goes through the contract before it becomes what the agent says.
In the documentation
One memory, thirteen products
Any agent connects to the memory with three calls, in Python, TypeScript, HTTP or MCP, with a ready-made adapter for the most used voice and agent frameworks.
See the documentation(opens docs.niadra.com)- MemoryWhat was said and done, with a date, a source and evidence.
- IdentityPeople, companies and partners, recognized on any channel.
- PatternsWhat each customer repeats, computed from the history and delivered to every agent.
- StateWhat holds now for each customer, with the date of the last update and the source of every value.
- ContextWhat each agent needs to know before it starts.
- HistoryEverything that ever happened, for the agent to search.
- AlertsA signed webhook to your system the moment something happens.
- Claim checkYou are hereThe agent only states prices, dates and numbers it checked. What it did not check is flagged.
- CoordinationWho holds the customer now and what was already done, before an agent acts.