This is the operations manual for the whole Agent Trust & Assurance stack. It is the single place an administrator comes to understand why the assurance capabilities exist, what each one is, and how to operate them together as one process — Grounding, Guardrails, Evaluation, Observability/Ops, the Ontology and its Governance, the Trust Membrane, Agent Authority, and Data-Product Governance.
This document is self-contained in its Why, What, and How. You can read it end to end and fully understand the mission, every capability, and how to operate the whole process — without opening anything else. The architecture documents linked throughout are optional deeper reading on internals (data models, code seams); they are never required to understand what a capability is, why it exists, or how to run it. If you administer a production Uderia deployment, this is your runbook.
Version: last updated 18 July 2026. This manual tracks a fast-moving platform; verify capability status against the linked architecture and roadmap documents for anything time-sensitive.
Part 1 — WHY: the mission
1.1 The trust problem
An LLM agent is powerful and, by default, untrustworthy for enterprise use. Left ungoverned it will:
- Hallucinate — answer confidently from parametric memory instead of your data.
- Drift out of scope — reach for data it was never meant to touch. (Uderia's own documented failure mode: an agent received a complete, scope-correct 21 KB knowledge enrichment, ignored it, brute-forced 19 calls across unrelated databases, and produced a confident, wrong 230-day answer.)
- Act with borrowed authority — a scheduled task or a sub-agent runs as you, with your full permissions, unattributed.
- Consume unvalidated ingredients — ground on a knowledge graph, skill, or pack nobody checked, shared from who-knows-where.
- Leak or absorb harm — leak personal data, or be steered by a hidden instruction buried in a document.
- Degrade silently — quality erodes turn over turn with nothing measuring it.
Enterprises cannot deploy what they cannot trust. Every one of these is a trust failure, not a security failure — the platform can be perfectly secure and still produce a confidently wrong, out-of-scope, unattributable answer.
1.2 The mission
Make agents trusted. Turn an AI agent from an opaque generator into a grounded, guarded, measured, attributable, and verifiable participant in the enterprise — without sacrificing the openness that makes the platform useful.
Trust is not one feature. It is a stack of independent, composable layers, each closing one failure mode, each safe to run on its own, and each strongest when run together.
1.3 The two pillars — and where this manual sits
Uderia separates two concerns that are often conflated:
| Pillar | Question it answers | Covered by |
|---|---|---|
| Platform Security | Is the platform itself secure? (authN/Z, secrets, encryption, audit) | SECURITY_ARCHITECTURE.md |
| Agent Trust & Assurance | Is the AI's behaviour truthful, in-scope, safe, attributable, and verifiably good? | This manual |
Security keeps the doors locked. Assurance makes the thing inside the doors trustworthy. Both map onto external frameworks (EU AI Act, NIST AI RMF, GDPR) — see §5.
1.4 The design principles (why the stack behaves the way it does)
Every capability in this manual was built to the same principles. Knowing them tells you how the whole system will behave under your hand:
- Safe by default. Every capability ships off, or observe-only. A fresh deployment behaves exactly like an ungoverned one until you turn something on. You are never surprised; you opt into rigor deliberately.
- Show, don't block (for sharing). Trust is visible and verifiable, and by default it informs rather than blocks. Sharing stays open; enforcement is a choice you make.
- When in doubt, refuse (for enforcement). Where a capability does enforce (grounding, guardrails, agent-identity limits), any internal error denies — it never quietly permits.
- Applies to every kind of agent. Assurance works the same for all five kinds of agent (Ideate, Focus, Optimize, Coordinate, Conversation) — not just the tool-using ones.
- Trust ≠ access. A checked thing is not an authorised one. Signing proves an agent and its parts are intact and unchanged; it grants no permissions. Authority is a separate concern (Agent Authority).
- Defence in layers. No single control is the whole answer. A turn passes through several independent checks; each catches what the others miss.
- Honest about limits. Where a capability is the attainable form of a larger goal, this
manual says so plainly (e.g. Agent Authority limits what an agent can do today; limiting
what data it can see is the
OBDA future— of which the observable governed-data lane (§2.10) is already live, while structural data-slice grounding remains the future part).
Part 2 — WHAT: the assurance stack
2.0 The trust lifecycle of a single turn
The capabilities are not a menu — they are a pipeline. One agent turn passes through them in order, and that ordering is the assurance process:
┌─────────────────────── one agent turn ───────────────────────┐
user / trigger → │ ① INBOUND GUARDRAIL → ② IDENTITY (who is acting, scope set) │
│ → ③ GROUNDING trusted-scope stamped │
│ → engine runs: every tool call ④ IDENTITY-ENFORCED │
│ → answer drafted │
│ → ⑤ OUTBOUND GUARD (personal data/toxicity) → ⑥ GROUNDING │
│ → ⑦ EVAL scores the turn → ⑧ PROVENANCE sealed (signed) │ → answer
└───────────────────────────────────────────────────────────────┘
everything grounds on ⓪ THE ONTOLOGY; the agent + its ingredients carry a ⑨ TRUST BADGE;
the whole flow is watched in ⑩ OBSERVABILITY (Agents / Sessions lenses)
Each numbered stage is a capability below. Read Part 2 to know what each is; read Part 3 to know how to operate them.
2.1 ⓪ The Ontology — the knowledge foundation
Everything trustworthy an agent says is anchored to a knowledge model of your business — the ontology. It captures both the business view (the entities that matter and their attributes) and how that maps to the real data (the tables and columns behind them), plus business concepts, metrics, and domain terms.
- Why it matters for trust: the ontology is the boundary grounding holds the agent to, and its concepts are what the agent should reason over instead of guessing. No ontology → nothing for grounding to check against.
- The Platform Ontology ("Ontology" view) is the whole-deployment map, centred on your agents — showing agents, their memory, sessions, knowledge, components, and configuration — so you can see what grounds what.
- Deeper reading (internals, optional):
ONTOLOGY_ARCHITECTURE.md·PLATFORM_ONTOLOGY_ARCHITECTURE.md·KG_INSPECTOR_ARCHITECTURE.md
2.2 ③⑥ Grounding — anti-hallucination, enforced
Grounding checks every answer against the knowledge the agent was actually given, and can pass · annotate · block confident-but-wrong drift. It closes the failure mode in §1.1.
- What "declared scope" is: the specific data the agent's knowledge model says it is allowed to draw on — for example, the sales databases and their tables. An answer that reaches for anything outside that (a different database, an invented table) is drift.
- Process (how it runs): a quick check flags any answer that references data outside the declared scope; a second opinion then confirms whether it is genuine drift — an honest "that isn't in my scope" refusal is allowed through, a confident answer built on out-of-scope data is caught. If the second opinion can't run, the turn is only flagged, never wrongly withheld.
- Modes (set per agent): observe (measure only, changes nothing) · annotate (deliver the answer with a note) · review (withhold exactly as enforce, but park the original for the owner's disposition — human oversight, nothing lost) · enforce (withhold a confirmed out-of-scope answer).
- Proof it works: a published test showed it went from catching none of the drift to catching all of it, with no false alarms — out-of-scope answers reaching users dropped to zero.
- Deeper reading (internals, optional): AGENT_OPS_EVAL_ARCHITECTURE.md §6a/§6b ·
TIER_1.1_GROUNDING_GATE.md·TIER_1.4_BENCHMARK.md
2.3 ①⑤ Guardrails — protection on both edges
Fast, free protection at both ends of the conversation (it adds no cost — no extra model call):
- Incoming — catches a hidden instruction planted in a request or document trying to hijack the agent. When enforcing, that request is refused before the agent ever reads it.
- Outgoing — catches personal data (email addresses, national ID numbers, card numbers, phone numbers, access keys, bank account numbers, IP addresses) and toxic content. When enforcing, personal data is masked and toxic answers are withheld.
- Process (how it runs): the incoming request is screened before the agent sees it, and the drafted answer is screened before it's delivered; either way a note records what was caught.
- Privacy promise: the note names the category found — never the actual value.
- Modes: observe · annotate · review (enforce with retention — the original is parked in the Assurance Inbox for the owner's disposition) · enforce. The outgoing mode (personal data, toxic content) and the incoming mode (prompt-injection: observe / annotate / enforce — refuse before the model ever reads it) are both chosen per agent on its Guardrails card, under the overall guardrails switch.
- Deeper reading (internals, optional):
TIER_1.3_GUARDRAILS.md
2.4 ②④ Agent Authority — the agent as a governed principal
When an agent acts on its own — a coordinator's expert, a scheduled task, a step in a flow, a call from another system — it takes on a limited identity derived from its owner: a strict subset of what the owner could do. Every attempted action is checked against that limit before it happens (and refused if it fails, safely), and every such action is recorded as done by the agent, not the person who owns it.
- Scope (set per profile): may it act unattended at all · read-only (no writes) · specific tools it may never use · which connectors it may reach · a spending cap per run. A scope can only ever remove authority, never add — an agent is always a subset of its owner.
- Process (how it runs): the moment an agent starts an unattended run it takes on this limited identity; every time it tries to use a tool, that attempt is checked against the limit before it happens, and refused if it's outside scope. The refusal is recorded, and the whole run is attributed to the agent rather than the owner.
- Honest scope: this limits what the agent can do. Limiting what data it can see
("cannot query outside its slice of the business model") is the next step — see the
OBDA vision. - Deeper reading (internals, optional): AGENT_AUTHORITY_ARCHITECTURE.md
2.5 ⑦ Evaluation — measuring every turn
Every turn is measured, for all five kinds of agent (not just the tool-using ones):
- Automatic scoring (free, always on): a suite of quick, rule-based checks grades each turn on cost, speed, tool success, whether it stayed in scope, how much work it took, whether it ended cleanly, how much of its data came from a governed data product (vs the agent free-forming its own query), and more. Each is banded Healthy / Review / Danger.
- Independent judging (optional, sampled): for the open-ended questions rules can't answer ("is this answer actually supported by the data?"), a panel of independent models judges the turn. Kept to a sample so it stays cheap.
- Process (how it runs): the instant a turn finishes it is scored automatically, off to the side so it never slows the answer; a fraction of turns is also judged. The result is recorded against that exact turn so it can be reviewed later.
- The Quality card appears on every turn (live and on reload), grouped into plain sections (Core · Resource · Tasks · Tools · Knowledge · Planning · Coordination · Quality). A turn might read speed 3.2 s (green), tool-success 100 % (green), stayed-in-scope: 3 out-of-scope calls (red), work 5 steps (amber) — each banded, so a degraded turn is legible at a glance. Nothing here alters the answer; evaluation measures, it does not gate.
- Deeper reading (internals, optional): AGENT_OPS_EVAL_ARCHITECTURE.md
2.6 ⑩ Observability & Ops — the two lenses
Assurance you can watch. Two views onto the same tamper-evident record of what happened:
- Sessions ("Session Performance") — the per-conversation view: cost, speed, the full trajectory of a past turn, and its Quality card.
- Agents ("Agent Performance") — the per-agent view: a colour-coded health roster (each agent's pass-rate, cost, speed, failing checks), a history of its runs, coordination trees for multi-agent work, and side-by-side comparison. Admins can switch between my agents and the whole system.
- Process (how it runs): every turn is sealed into a tamper-evident record as it completes; both views — and the quality scores and trust checks — read from that same unforgeable record, so what you see is what actually happened.
2.7 ⑨ The Trust Membrane — verifiable trust for agents & artefacts
A tamper-evident signed badge on every agent and every shareable thing, on one principle: an agent is trusted exactly when everything it is built from is — its knowledge model and every skill, extension, and repository it uses must each be signed.
- Three states: ⚪ unsigned · 🟢 trusted (signed and unchanged) · 🟠 changed (signed, but the content has since moved — so trust is honestly withdrawn until re-signed).
- Compositional: the consumer reads one badge — on the agent — and the whole catalogue of parts hides behind it. Signing an agent is a single act that vouches for its whole make-up; if any part is unsigned, the agent can't be signed and you're shown exactly which part is blocking.
- Verifiable by anyone, even offline, with nothing but the signer's public identity; trust ≠ access (a signed thing is checked, not authorised); badge, not gate — nothing is ever blocked from being shared.
Every kind of thing that can be exposed — what gets signed, and what "trusted" means for it. Anything that can be shared (published to the marketplace) or built into an agent can be signed. There are ten kinds, and sign-off runs the right check for that kind — so "trusted" is transparent and means something specific each time (a signed skill was screened for hidden instructions; a signed extension had its code inspected for unsafe actions; a signed knowledge model was checked for validity). This table is the whole surface — nothing exposable is left uncovered:
| # | Kind of artefact | What gets signed | What "trusted" checks |
|---|---|---|---|
| 1 | Ontology (knowledge model) | the business model itself | Validity — checked against the correct shape of an ontology; an invalid one cannot be signed, a partial one can be signed with a noted caveat |
| 2 | Skill | the skill's written instructions | Content safety — screened for hidden / manipulative instructions |
| 3 | Extension | the extension's package and code | Code + content safety — the code is inspected for unsafe actions; the text screened for hidden instructions |
| 4 | Knowledge repository | its documents | Integrity + content safety — the documents are intact and unchanged, and screened for unsafe content |
| 5 | Planner repository | its saved query patterns | Integrity + query + content safety — the patterns are intact, and their queries and text are checked for unsafe statements |
| 6 | Flow | the flow's steps and logic | Logic + query + content safety — the step logic, any embedded queries, and step text are checked |
| 7 | Dashboard | its tiles and their queries | Query + content safety — the tile queries, and the request that generated them, are checked |
| 8 | Canvas | its content and blocks | Display + content safety — the rendered content is checked for unsafe markup, and its text screened |
| 9 | Agent | its whole make-up — its knowledge model and every skill it uses | Everything together — trusted only when every part is trusted; this is the one badge a consumer reads |
| 10 | Agent pack | its whole bundle — the agents and knowledge it packages | Everything together — trusted only when every packaged part matches what was signed |
Kinds 1–8 are individual things (signed on their own content); kinds 9–10 are bundles (signed only when all their parts are). Every check returns a plain verdict — clean (ready to sign), caveat (sign, with a note), or blocked (fix it first) — so sign-off is never a rubber stamp: it tells you exactly what, if anything, is wrong. A shared copy shows 🟢 only if it is an exact, unmodified copy of what was signed — which is why trust survives the marketplace: publish it, and whoever installs, subscribes to, or forks it sees the same honest badge.
- Deeper reading (internals, optional): TRUST_MEMBRANE_ARCHITECTURE.md · the full validator-per-class reference:
TIER_5.2_VALIDATORS.md
2.8 Governance of products — ontology, packs, metrics
Trust's governance face — turning knowledge assets into governed data products with a release lifecycle:
- Ontology governance: a draft → propose → approve → release → retire lifecycle for the knowledge model, gated by a validity check — a thing can't be a governed ontology unless it's a valid one. Releasing fixes a version and signs a verifiable record of it.
- Agent-pack governance: the same lifecycle for a bundled agent (a "pack"), plus a service tier; you can require that a pack be trusted before it's published, so a distributed data product is always a governed one. Retiring a pack archives its conversations and stops new copies.
- Governed metrics: a business metric is defined once in the ontology and consumed by both the AI and business-intelligence tools from that one definition; each answer shows whether the metric comes from a governed, trusted ontology.
- Deeper reading (internals, optional):
PACK_GOVERNANCE_ARCHITECTURE.md
2.9 Operational trust — consumption & cost
An agent you cannot bound is not operationally trustworthy. Per-user consumption limits (requests per hour, usage per month, configuration changes) and consumption tiers (Free / Pro / Enterprise / Unlimited) stop runaway cost; when a limit is reached, the request is refused rather than quietly allowed. Configured under Administration → App Config → Security. (Full detail lives with the platform-security pillar — noted here so the assurance stack is complete.)
2.10 Every trust process at a glance
Every trust-related process in one view — what value it delivers, how the process runs in plain terms, where you operate it, and how you see it working. Nothing in the stack is a black box.
| Trust process | The value (what it protects) | How the process runs | Where you operate it | How you see it working |
|---|---|---|---|---|
| Grounding | answers stay inside the knowledge you gave the agent — no confident-but-wrong | flags any answer reaching outside declared scope; a second opinion confirms real drift; passes honest "not in my scope" refusals; can annotate or withhold | master switch + per-profile mode | a grounding note on the turn: pass / annotate / block |
| Incoming guard | a hidden instruction in a document can't hijack the agent | the incoming request is screened before the agent reads it; a hostile one is refused | overall switch (default posture) | a refusal turn; a guardrail note listing what was caught |
| Outgoing guard | no personal data or toxic content leaves the agent | the drafted answer is screened; personal data is masked, toxic answers withheld | overall switch + per-agent mode | a guardrail note with the categories found (labels only) |
| Agent authority | an agent acting on its own can't exceed the authority you gave it, and every such action is attributable | when an agent runs unattended it takes on a limited version of its owner; each attempted action is checked against that limit before it happens | per-profile Agent Authority card | actions marked as done by the agent; blocked attempts recorded |
| Evaluation | quality is measured, so decline is visible before users complain | every turn is scored the moment it finishes; a sample is also judged by an independent model. Deterministic scoring is free; the independent-model judging is a real model call whose tokens are metered against your consumption exactly like a normal turn (visible in the live counters and the turn's cost) | on/off + judge sampling | the Quality card on every turn; the Agents roster |
| Governed-data lane | you can tell whether an answer's figures came from a governed data product or the agent free-forming its own query | every data operation is tagged governed-and-deterministic (a metric compiled to correct SQL) or free-formed-and-advisory; both lanes are shown | always on (observability); rewarded by evaluation | a Governed Data Operations note on the turn + a governed-data-ratio on the Quality card |
| Provenance | an unforgeable record of what actually happened, verifiable later | every turn is sealed into a tamper-evident record | always on | the trajectory trace on any past turn |
| Trust sign-off | you know an agent and everything it's built from was checked and is unchanged | each artefact is validated for its class, then signed; an agent is signed only when all its parts are | each artefact's trust badge | 🟢 / 🟠 / ⚪ badges; the agent shield |
| Trust verify | anyone can independently confirm a shared thing is genuine | re-checking the signature against the published content | the badge, or on hand-off | a verified / not-verified result, checkable even offline |
| Ontology governance | the shared knowledge model is valid and versioned, not ad-hoc | check validity, then walk it through draft → release → retire, with optional approval | the ontology's Govern dialog + admin policy | validity report + lifecycle badges |
| Pack governance | a distributed agent bundle is approved, trusted, and service-rated | the same lifecycle for a pack, with a service tier and a "must be trusted to publish" gate | the pack's Govern dialog + admin policy | lifecycle stepper, trust hero, SLA pills |
| Consumption | no agent can run up unbounded cost | usage is metered against per-user limits and refused past them | admin security settings | quota state; refusals when exceeded |
| Honesty check | a confident "that doesn't exist" built on failed queries never reaches the user unflagged | when an answer asserts non-existence and every data query that turn actually errored, the claim is flagged (or, in enforce, rewritten to an honest retrieval-failure); a legitimate empty result is never touched | per-profile honesty mode | an honesty note on the turn |
| Preflight schema grounding | a hallucinated database name is caught before the query runs | a SQL call's database references are validated against the authoritative catalog cached in the session; a provably-absent reference is logged (observe) or short-circuited into deterministic recovery (enforce) | global preflight mode | preflight log lines; recovered turns |
| Behavioral trust | a signed-but-misbehaving agent cannot keep reading as fully trusted | every agent's recent conduct (recency-weighted pass rate + trust-critical checks, volume-gated, stale-decayed) fuses with its integrity badge into one composite state: Provisional / At-risk / Watch / Proven / Trusted; integrity can only cap the state, never promote it | Config → App Config (trust_behavior block) |
the ring around the seal on the Agents roster; the Trust Posture matrix |
| Circuit breaker | sustained bad conduct triggers a response instead of waiting for the weekly review | when an agent's trailing record enters At-risk (its trust budget is exhausted), the owner is alerted — and in freeze_autonomy mode the agent's unattended use is suspended (Agent Authority) until a human reviews; interactive use is never touched |
trust_behavior.breaker_mode (off / notify / freeze_autonomy) |
the breaker alert; the frozen flag on the Agent Authority card |
| Policy backtest | the observe → enforce climb is decided on evidence, not anxiety | a proposed grounding/guardrail policy is replayed over your recent persisted turns — deterministically, at zero token cost — showing exactly what it would have done (masked, refused, escalated) with the affected turns listed | Agents → Trust Posture → Policy backtest | counts + per-turn samples; "nothing would change" is an explicit result |
| Memory firewall | a planted instruction can't become a persistent compromise via Agent Memory | every memory write (explicit, learned, or manual) is screened for injection patterns; a match is stored quarantined — preserved and inspectable, never recalled | rides the overall guardrails switch | the paused item in the Memory manager; a firewall log line |
| Retrieval firewall | a poisoned document can't steer the agent through retrieval | every retrieved knowledge chunk is screened; a match is defused — kept (never silently dropped) but explicitly labelled untrusted data the model must not follow | rides the overall guardrails switch | the firewall label in the context; a log line |
| Trust-aware routing | a coordinator only consults experts you have actually signed | with requireTrustedExperts on a coordinator, routing excludes any expert whose badge is not 🟢 (fail-closed per expert); if none qualify the turn refuses with the exact blockers listed |
coordinator profile genieConfig.requireTrustedExperts |
excluded experts in the log; an honest refusal when none qualify |
| Answer receipts | the answer's consumer can see — and export — why to trust it | every assistant answer carries a "Why trust this answer?" capsule: the turn's trust journey, scope, data lane, guard findings (labels only), and provenance seal, exportable as a portable JSON receipt containing the Ed25519-signed chain | always available under each answer | the capsule; the downloaded receipt |
| Assurance inbox | trust incidents are worked items, not dashboard archaeology | breaker trips and memory quarantines are recorded as ack-able items; grounding blocks, guardrail actions, honesty rewrites, and the multi-turn session sentinel are derived live from the persisted trace (no ack — they are the record) | Agents view → Assurance Inbox | the incident list; the unacknowledged badge |
| Session sentinel | a multi-turn probing campaign the per-turn guards each miss is caught | across one session, injection-flagged inbound requests are counted; crossing a threshold surfaces one session-level danger item | always on (derived) | a session-sentinel item in the inbox |
| Resilience self-test | the deterministic guards' recall is measured, not assumed | a curated attack corpus is run straight through the real injection/PII/toxicity detectors; per-category recall + benign false-positive rate + a headline score are reported (0 tokens, no live model) | Agents → Trust Posture → Run resilience self-test | the recall chips + score |
| Audit pack | an auditor gets a portable, verifiable evidence bundle | posture + eval aggregates + incidents + the resilience test + a compliance-control map (EU AI Act / NIST AI RMF / GDPR), Ed25519-signed with the deployment provenance key | Agents → Trust Posture → Export audit pack | the downloaded, offline-verifiable file |
| Human review (HITL) | a human dispositions withheld answers — nothing lost, nothing silently delivered | the review mode (grounding + outbound guardrail) = enforce with retention: the answer is withheld/redacted exactly as enforce, but the original is parked in the review queue; the owner approves or upholds. Release is append-only — delivered history is never rewritten. Two release scopes: Approve (record only — the original becomes readable from the turn's "Why trust this answer?" capsule, labelled released after human review) and Approve + release (the owner explicitly releases the original into the conversation: subsequent turns receive it via the review_release context module, clearly labelled as a human decision, and its exact PII values join a session-scoped outbound allowlist so the agent can state what was released — forward-only, the sealed turn is never rewritten). Either way the owner is notified and the choice is a recorded trust event |
per-profile mode: Review (Grounding / Guardrails cards); release scope chosen per item at decision time | pending items in the Assurance Inbox (Approve / Approve + release / Uphold); the decision + release scope on the turn's trace; the released original in the answer capsule; released content visible in the context-window snapshot of subsequent turns |
| RAG grounding (corpus family) | answers grounded in retrieved knowledge don't assert unsupported specifics | the grounding gate's second trigger family: unsupported numbers / verbatim quotes / identifiers vs the retrieved chunks, with a second-chance targeted retrieval before anything is flagged; escalation to the groundedness judge; same observe/annotate/review/enforce ladder | groundingConfig.mode (+ optional .corpus.mode) |
the Grounding Gate card's corpus rows (unsupported claims named verbatim, second-chance cleared); dotted-underline marks on the unsupported spans in the answer itself (annotate) |
| Retrieval-sufficiency honesty | weak retrieval never becomes a confident specific answer | the honesty gate's RAG branch: retrieval ran, found (near-)nothing, yet the answer asserts specifics → flag / honest "the knowledge base does not cover this" (enforce); opt-in per-profile sufficiencyThreshold |
honestyConfig.mode |
the Honesty card's "not covered — honest refusal" wording |
| Ingest firewall + earned corpus signature | documents are screened at ingest; the corpus signature attests screened, not just unchanged | every ingestion path screens for injection / PII categories / exfil URLs (observe-only — never blocks an upload); signing then REQUIRES 100% screening and resolved critical findings (quarantine or an acknowledged reason — a recorded human judgement frozen into the signature) | guardrails master switch | the Corpus Health panel in the repository inspection modal (coverage, PII manifest, findings, quarantine); the sign-off verdict wording |
| Document quarantine | a poisoned document can be excluded from retrieval in one click, reversibly | retrieval_defuse/ingest/anomaly inbox events carry the doc ref → Quarantine doc; excluded at the shared retrieval seam, still visible in the manager, reversible; flips the corpus signature until re-signed |
owner action | the Assurance Inbox action; Corpus Health quarantine list |
| Suspicious-chunk browser | a document-level finding can be traced to the exact chunks that trip the detectors | the repository Inspect view's chunk browser screens every displayed chunk live with the SAME detectors as the ingest firewall and stamps flagged chunks with problem tags (injection label · pii:<category> ×n · exfil_url); a Suspicious only toggle filters the whole corpus to its flagged chunks; Export findings downloads them (tags + full text) as a JSON report |
guardrails master switch (controls the whole screening surface) | the Inspect view chunk table (tags + severity edge marker), the chunk detail window's Screening row |
| Exfil-URL guard | a poisoned chunk can't exfiltrate via a rendered link | outbound category exfil_url: novel AND exfil-shaped URLs (parameters / data-URI / IP host / userinfo) are defanged in enforce — text preserved, link dead, never silently deleted |
guardrailConfig.outbound (+ .exfil boolean) |
the Guardrail card's findings (defanged form only) |
| Source provenance | every answer shows where its knowledge came from and how trustworthy the source is | retrieved chunks carry the corpus integrity-signature state (🟢/🟠/⚪ — a SOURCE guarantee, never a consumption guarantee), CDC staleness ("verified N d ago" / "sync off"), and sensitivity | always-on (read-side) | the answer capsule's Sources row; retrieval events |
| Sensitivity levels | confidential repositories are governed per agent | per-collection sensitivity (public/internal/confidential); per-agent knowledgeConfig.maxSensitivity retrieval ceiling; answers drawing on a confidential repo carry a themed annotation |
collection PATCH + profile config | the sensitivity note under the answer; capsule source chips |
| Retrieval-anomaly monitoring | an index-poisoning "hub" document is detectable statistically | per-doc retrieval frequency × query diversity over persisted turns (honestly labelled statistical detection; never auto-quarantine) | on-demand (Trust Posture) | "Scan retrieval patterns"; flagged hubs in the Assurance Inbox with one-click quarantine |
| Corpus red-team lane | the retrieval firewall + outbound guard are proven end-to-end with REAL planted documents | live probes plant payload docs in a caller-designated TEST collection, ask the retrieving question, score deterministically, and delete the payloads (cleanup status reported) | opt-in per run | the live-probe row's corpus input + cleanup status |
2.11 The closed trust loop — how the new layers compose
The stack above no longer just measures and reports — it closes the loop:
- Every turn renders its Trust Journey (the §2.0 pipeline as a live strip in the turn's trace) and offers the consumer an answer receipt.
- Every agent's measured conduct feeds its behavioral trust state; the seal (integrity) and the ring (conduct) are one glyph on the roster.
- Exhausting the trust budget trips the circuit breaker — alerting, and optionally freezing autonomy, instead of waiting for a human to notice.
- Before tightening any policy, the backtest replays it over sealed history so enforcement decisions are made on evidence.
- The two firewalls (memory, retrieval) close the indirect-injection paths the edge guardrails cannot see; trust-aware routing makes compositional trust operative at coordination time, not just visible on a badge.
Nothing in this loop weakens the founding principles: everything ships off or observe-only, every enforcement fails closed, every action is attributable and visible, and computing any of it costs zero tokens.
Part 3 — HOW: operating the assurance process
This is the runbook. It assumes an admin-tier account.
3.1 The operating posture — a maturity ladder
Do not switch everything to enforce on day one. The stack is designed for a graduated rollout: observe → measure → tighten. Every capability starts safe (baseline), so you climb the ladder deliberately.
| Stage | Posture | What you do |
|---|---|---|
| 0 · Baseline | everything off/observe | Fresh install. Nothing changes agent behaviour. |
| 1 · Illuminate | turn on eval + set grounding/guardrails to observe | You now measure quality, drift, and personal-data exposure without altering a single answer. Watch the Agents roster. |
| 2 · Build the foundation | build/curate the ontology; run its validity check | Give grounding something true to check against; fix any validity issues it reports. |
| 3 · Tighten where it matters | move critical profiles to grounding enforce + guardrails enforce | Enforce on the profiles that touch sensitive data or answer externally; leave exploratory profiles at observe. |
| 4 · Govern & attest | sign production agents; release ontologies/packs via lifecycle; require approval | Make trust visible and versioned. Optionally require approval + block-untrusted-publish. |
| 5 · Constrain autonomy | set Agent Authority scopes on autonomous profiles | Scope scheduled tasks / genie experts / flows to a subset of their owner's authority. |
You can stop at any rung; each is stable. Most production deployments live at stage 3–4.
3.2 The control map — where every switch lives
| Capability | Where you set it | The choices | Recommended default |
|---|---|---|---|
| Evaluation (scoring) | Config → Operations → Agent Evaluation & Grounding | on/off · include independent judging · how often to judge · the healthy/danger bands | on, judging sampled |
| Grounding — overall | the same card → Grounding Enforcement | on/off | on once the ontology is ready |
| Grounding — per agent | Profile editor → Grounding card | observe / annotate / enforce | observe → enforce for data-facing agents |
| Guardrails — overall | the same card → Guardrails | on/off | on |
| Guardrails — per agent | Profile editor → Guardrails card | outgoing mode: observe / annotate / enforce, for personal data and toxicity (incoming protection follows the overall switch) | enforce outgoing for anything external-facing |
| Agent Authority | Profile editor → Agent Authority card | unattended on/off · read-only · tools it can't use · allowed connectors · spending cap | unrestricted by default; scope any agent used unattended |
| Trust sign-off | each thing's trust badge (skills, extensions, knowledge models, repositories, packs) + the shield on the agents list | sign · re-sign · verify | sign your production agents |
| Ontology Governance | Config → Features → System Feature Availability → Ontology Governance | require approval · who may approve · block invalid ontologies from release | off by default |
| Agent Pack Governance | Config → Features → System Feature Availability → Agent Pack Governance | require approval · require trust to publish | off by default |
| Consumption / cost | Administration → App Config → Security | per-user limits · consumption tiers | disabled for single-user |
| Behavioral trust | admin app-config trust_behavior block (API; UI card planned) |
enabled · evidence window · state floors · staleness | off (compute-on-read; ring hidden until enabled) |
| Circuit breaker | trust_behavior.breaker_mode |
off / notify / freeze_autonomy | off |
| Policy backtest | Agents → Trust Posture → Policy backtest | grounding / outbound / inbound modes to simulate | on demand (read-only, 0 tokens) |
| Memory + retrieval firewalls | ride the overall Guardrails switch | — | inherit guardrails master (off = baseline) |
| Trust-aware routing | coordinator profile genieConfig.requireTrustedExperts |
true / false | false |
Persistence note: the Agent Evaluation & Grounding card has its own Save button; its settings (eval, grounding master, guardrails master, thresholds) persist across restart. Per-profile cards save with the profile.
3.3 Runbook — standing up assurance on a new deployment
- Turn on measurement. Config → Operations → Agent Evaluation & Grounding → enable online eval → Save. Leave judges sampled (or off to start). Nothing changes for users; you now have data.
- Set grounding + guardrails to observe (switches on; the grounding and outgoing-guardrail modes at observe). Run real traffic for a few days.
- Read the Agents roster. Left nav → Agents. Look for red/amber health, out-of-scope drift, personal-data exposure, cost outliers. This tells you which agents need enforcement.
- Curate the ontology for the profiles that need grounding. Build/refine the KG; run the validity check; fix issues.
- Tighten. Move the data-touching / externally-answering profiles to grounding enforce and guardrails enforce. Leave exploratory profiles at observe.
- Attest. Sign your production agents (§3.5). Optionally enable Ontology/Pack governance approval.
- Constrain autonomy. For any profile used by a scheduler, genie coordinator, or flow, set an Agent Authority scope (§3.8).
- Establish a monitoring cadence (§3.9).
3.4 How the layers compose on one turn (defense in depth)
Understanding the ordering tells you what catches what, so you know which control to reach for when something slips through:
- Inbound guardrail — a prompt-injection is refused before the model sees it.
- Agent Authority — if autonomous, the principal + scope are set for this turn.
- Grounding trusted-scope — the profile's bound-ontology scope is stamped onto the turn.
- Tool calls — each MCP/component/connector call is identity-enforced (denied if out of scope).
- Outgoing guard — personal data masked, toxic answers withheld.
- Grounding gate — a confident out-of-scope answer is annotated or withheld.
- Eval — the turn is scored; drift/cost/quality banded.
- Provenance — the whole turn is sealed into the signed chain; the agent's trust badge reflects its (unchanged) composition.
A hallucination that slips past grounding may still be caught by evaluation; a personal-data leak the model generates is caught outbound; an injection is stopped inbound. No single layer is load-bearing.
3.5 Workflow — signing an agent (bottom-up trust)
- Open the agent — its shield shows ⚪ unsigned and what is blocking it (unsigned parts).
- Sign each blocking part from its own badge (the knowledge model, the skills, …). The screen walks you through it — "to sign this agent, these parts need signing first."
- Sign the agent — its badge turns 🟢. That one act vouches for the whole make-up.
- If any part later changes, the badge honestly flips 🟠; re-sign to re-affirm.
- Anyone can verify the badge is genuine — including offline, on hand-off.
3.6 Workflow — governing an ontology (validity → release)
- Open the ontology's Govern dialog. Read its validity report: valid / partial / invalid, with the specific issues listed.
- Fix what's invalid (the report is specific). A partial ontology can still be released, with a noted caveat.
- Walk it through the lifecycle: draft → propose → approve → release. Releasing fixes a version and signs a verifiable record of it. If approval is required, the approver must be authorised and (by policy) not the owner.
- Retire it when it's no longer current — a recorded, auditable act.
Honest note: "release" here means marking this version as the official one, which is a different act from sharing it on the marketplace. Today, releasing does not yet change which knowledge the agents actually use — they use the live model. Making release govern what agents ground on is a planned next step.
3.7 Workflow — governing an agent pack / data product
Open the pack's Govern dialog: a lifecycle stepper, a trust hero (affirms or nudges you to sign off), one primary CTA (the recommended next action), instant SLA pills, an activity timeline. Enable require-approval / require-trust in the admin Agent Pack Governance policy to enforce that a published pack is approved and trusted. Deprecation archives the pack's sessions and blocks new forks.
3.8 Workflow — scoping an agent that acts on its own
For any agent used unattended (scheduled tasks, a coordinator's experts, flow steps, calls from other systems):
- Profile editor → Agent Authority card.
- Decide the limits: keep it read-only? bar it from specific tools? restrict which connectors it may reach? cap its spend per run? Or switch off unattended use entirely.
- Save. From then on, unattended runs act under those limits; the owner's own interactive use is unaffected.
- Confirm in the audit trail: unattended actions show as done by the agent, and any blocked attempt is recorded.
3.9 Monitoring & triage
| You want to… | Go to | Look for |
|---|---|---|
| See overall agent health | Agents (Agent Performance) | red/amber cards, failing checks, cost/speed outliers |
| Investigate one bad answer | Sessions → the turn → Quality card | which checks turned red; the grounding and guardrail notes on the trace |
| Confirm drift is being caught | a turn's live status → grounding note | its decision: pass / annotate / block, and the scope it checked |
| Confirm personal-data / attack handling | a turn's live status → guardrail note | the categories caught (labels only, never the raw value) |
| Confirm an agent is trusted | the agent's shield badge | 🟢 / 🟠 / ⚪ and, if not green, what's blocking it |
| Confirm who did an unattended action | the audit trail | whether it was done by the agent or by the user, and any blocked attempts |
3.10 Recommended production posture (checklist)
- ☑ Online eval on; judges sampled (raise the rate for high-stakes deployments).
- ☑ Grounding enforce on every profile that answers from data or answers externally; observe on exploratory profiles.
- ☑ Guardrails on: enforce the outgoing mode on every externally-facing agent; incoming protection on via the overall switch.
- ☑ Production ontologies conformant and released; production agents signed (🟢).
- ☑ Every autonomously-used profile carries an Agent Authority scope (least privilege).
- ☑ Agent Pack Governance requires approval + trust for published packs (if you distribute).
- ☑ A weekly cadence on the Agents roster; triage any profile trending amber/red.
Part 4 — the capability & control reference
| Layer | Capability | Default | Can it enforce? | Where you set it | Deeper reading (optional) |
|---|---|---|---|---|---|
| Foundation | Ontology (knowledge model) | — | — | KG inspector, Ontology view | ONTOLOGY |
| Grounding | anti-hallucination | observe / overall off | yes | Ops card + agent card | TIER_1.1 |
| Guardrails | incoming + outgoing | observe / overall off | yes | Ops card + agent card | TIER_1.3 |
| Identity | scoped autonomous agent | unrestricted | yes (safely) | agent card | AGENT_AUTHORITY |
| Evaluation | scoring + judging | on (scoring) | no (measures only) | Ops card | AGENT_OPS_EVAL |
| Observability | Sessions + Agents views | on | no | left navigation | AGENT_OPS_EVAL |
| Trust | signed badges | unsigned | badge (optional gate) | each thing's badge | TRUST_MEMBRANE |
| Governance | ontology lifecycle | off | opt-in | Features → System Feature Availability | TIER_4.3 |
| Governance | pack lifecycle + service tier | off | opt-in | Features → System Feature Availability | PACK_GOVERNANCE |
| Governance | governed metrics | — | — | metric node, admin | TIER_4.2 |
| Operational | consumption / cost | disabled | yes | App Config → Security | SECURITY |
Part 5 — compliance mapping
Agent Trust & Assurance is how a Uderia deployment evidences AI-governance obligations:
- EU AI Act / NIST AI RMF — grounding (accuracy), guardrails (safety/robustness), evaluation (measurement/monitoring), provenance (traceability), agent identity (accountability), governance lifecycle (risk management).
- GDPR — personal-data detection and masking on the way out (categories only, never the raw value); consumption and data-product governance; the ability to erase what an agent remembers.
- The tamper-evident record of every turn, plus the signed quality and trust verdicts, give an auditor evidence they can verify independently — even offline.
Related documents
- Architecture (internals): AGENT_OPS_EVAL_ARCHITECTURE.md ·
TRUST_MEMBRANE_ARCHITECTURE.md ·
AGENT_AUTHORITY_ARCHITECTURE.md ·
ONTOLOGY_ARCHITECTURE.md·PLATFORM_ONTOLOGY_ARCHITECTURE.md·PACK_GOVERNANCE_ARCHITECTURE.md - Roadmap / tier docs:
TIER_1.1·TIER_1.3·TIER_1.4·TIER_4.2·TIER_4.3·TIER_5.2 Trust Membrane·LEAPFROG_ROADMAP - The future:
OBDA_VISION— where grounding and identity become structural. - The other pillar:
SECURITY_ARCHITECTURE.md