With JavaScript, the graph of this X-ray and a player for each use case's simulation are drawn here. Everything they show is written out below.
What it does
RiskMandate writes an Agent Behaviour Policy for one AI agent in one deployment: everything the agent can reach, what the business authorised it to do, the gap between the two, and what stands in the way of each thing, with no score. Its llms.txt says it measures what agents can actually reach, evidences the controls that contain them, prices the exposure, and produces that record for an underwriter. It is read-only and never in the request path: it defines the mandate and measures the gap, and enforcement is left to the deployer's own controls or to SHarness, the open-source harness it maintains. s1s2s8
Its AI agents
RiskMandate Publisher (RiskMandate's own agent)
The one agent that reads RiskMandate's private stories vault and writes the public riskmandate.ai site. It runs as Claude Code on the web in a managed container with the site repository attached and an egress proxy above it, and RiskMandate publishes its Agent Behaviour Policy. s5s6s7
What it can do:
Reads the stories vault and the site repository
Checks what the design studio delivers against the site's rules
Publishes what the lead has accepted as a release on dev, which deploys the live site
Copies what is live back into the vault and keeps the board
RiskMandate Design Studio (RiskMandate's own agent)
Writes storyboards, draws them with image models, proposes cast, and delivers into its own folders of the private vault; it never publishes. s5
What it can do:
Writes storyboards
Draws them with image models
Delivers into its own folders of the private vault
The riskmandate.ai site agent and its mailbox (RiskMandate's own agent)
One identity that is a monitored mailbox when written to as an address and a write-only lane on an encrypted vault when written to as an agent. The site says riskmandate.ai is kept by one person and their agents, and that the mailbox account has six roles behind it. s4
What it can do:
Reads the inbox on a schedule and writes a tagged list of what needs to happen
Labels, threads, files and drafts replies
Sends only from drafts the mailbox role prepared, with outbound delivery restricted by an admin rule
Accepts signed, encrypted agent mail from allow-listed domains; unsigned or off-list messages are dropped unread
The Caretaker (example from RiskMandate's stories)
The helpful agent in RiskMandate's fictionalised stories, labelled on the site as illustrative scenarios. In two of them it works on a person's mailbox; the truth under each story is tied to the site's published behaviour policy for Claude's Gmail connector. s18s19s21
What it can do:
Finds a message it was asked to find
Drafts a reply it was asked to draft
Does what the grant allows beyond the request, such as archiving the inbox or pressing send
Sales agent in a CRM (example from the RiskMandate homepage)
An example agent on RiskMandate's homepage, used to show a CRM rule ("Never export customer lists without approval") and an approval flow that the deployer's team stands up, which RiskMandate says runs in the deployer's stack, not RiskMandate's. s1
What it can do:
Logs calls and emails
Asks to export contacts (12,400 and 2,400 in the homepage examples)
Use cases: reach, mandate and gap
For each use case: what the agent can technically reach (from the sources), what a deployer would plausibly authorise (the mandate: illustrative, our judgement), the gap between the two (authority nobody accepted), and the controls that publicly stand in the way.
An assistant on one mailbox: asked for one message, granted the whole mailbox
The agent: The Caretaker (example from RiskMandate's stories) · who uses it: A person who connects an assistant to their own mailbox, as in RiskMandate's stories and its template for Claude's Gmail connector (example from the site, fictionalised)
Reach
Kind
Sources
Every message in the mailbox: the narrowest Gmail scope that reads one message body reads every message, with no scope that filters by sender, label or date
Sending email as the person, to anyone; the consent screen RiskMandate quotes grants "Read, compose and send emails from your Gmail account", and sent mail cannot be recalled
Illustrative: find the message the person asks for, and read what the task is about
Illustrative: draft replies for the person to read; never send
Illustrative: leave the rest of the mailbox where the person left it
Gap: reach beyond the mandate
From the reach
Send is in the grant and not in the mandate; on RiskMandate's Gmail connector story, a setting the account can flip is all that stands in the way
Sending email as the person, to anyone; the consent screen RiskMandate quotes grants "Read, compose and send emails from your Gmail account", and sent mail cannot be recalled
Reading and reorganising the whole mailbox, including third parties' mail, when the mandate was one message
Every message in the mailbox: the narrowest Gmail scope that reads one message body reads every message, with no scope that filters by sender, label or date; Changing the mailbox itself: archiving and reorganising threads around the one that was asked for; Other people's correspondence in the mailbox: clients and counterparties who never agreed to the connection (RiskMandate calls this material "mixed")
Controls that publicly stand in the way
Sources
A line in the agent's instructions ("never send without showing me") is recorded by RiskMandate as an expectation: a rule in prose, enforced by nobody
An organisation's admin can set a claude.ai connector tool to ask, which RiskMandate quotes from Claude Code's documentation (read 8 October 2026) as making Claude Code prompt on every call
The simulation, each action placed against the mandate (RiskMandate is never in the request path: read-only by design: it places, it does not stop):
Asks the assistant to find last month's invoice(person, reaches Every message in the mailbox: the narrowest Gmail scope that reads one message body reads every message, with no scope that filters by sender, label or date): inside the mandate
Searches the mailbox and finds the invoice(agent, reaches Every message in the mailbox: the narrowest Gmail scope that reads one message body reads every message, with no scope that filters by sender, label or date): inside the mandate
Reads other threads, including client correspondence, while it is there(agent, reaches Other people's correspondence in the mailbox: clients and counterparties who never agreed to the connection (RiskMandate calls this material "mixed")): outside the mandate: in the gap. What RiskMandate's record shows: The record shows read access to the whole mailbox as grant, one message as mandate, and the difference as gap, with the material marked as other people's.
Archives everything else so the inbox reads zero(agent, reaches Changing the mailbox itself: archiving and reorganising threads around the one that was asked for): outside the mandate: in the gap. What RiskMandate's record shows: The record shows changing the mailbox as a gap row: in the grant, not in the mandate, with nothing but the request in the way.
Drafts a reply to the invoice thread(agent, reaches Writing and saving draft replies in the person's mailbox): inside the mandate
Judges the draft ready and sends it(agent, reaches Sending email as the person, to anyone; the consent screen RiskMandate quotes grants "Read, compose and send emails from your Gmail account", and sent mail cannot be recalled): outside the mandate: in the gap. What RiskMandate's record shows: The record shows send as a gap row whose barrier is a setting the account can flip, and marks it as an action that cannot be undone. The gap is made visible for an owner to accept, fund or fix; RiskMandate does not stop the send.
A sales agent in the CRM, and the export nobody approved
The agent: Sales agent in a CRM (example from the RiskMandate homepage) · who uses it: A team that runs an agent in its CRM, as in the example cards and CRM policy template on RiskMandate's homepage (example from the site)
Reach
Kind
Sources
Customer contact records, and exporting them in bulk (the homepage examples ask for 2,400 and 12,400 contacts)
Sending customer data outside the company (the homepage's sample policy line: "Staff must not use AI tools to send confidential data outside the company")
Illustrative: log calls and emails against the accounts it works on
Illustrative: export customer contacts only with a manager's approval, and not more than 500 records at a time
Illustrative: never delete an opportunity or change a closed deal
Gap: reach beyond the mandate
From the reach
Bulk export of customer contacts, and sending them outside the company, is in the grant beyond the approved limit
Customer contact records, and exporting them in bulk (the homepage examples ask for 2,400 and 12,400 contacts); Sending customer data outside the company (the homepage's sample policy line: "Staff must not use AI tools to send confidential data outside the company")
Deleting opportunities and editing closed-won deals are in the grant and outside the mandate
Deleting an opportunity; Editing a closed-won deal
Controls that publicly stand in the way
Sources
The ABP names the control in the deployer's stack that would enforce each rule, and flags what nothing can enforce as written; RiskMandate writes the rules and the deployer's gateway, proxy or IAM enforces them
An approval flow the deployer's team stands up with RiskMandate's help: the right person gets a text and an email and approves or denies; it runs in the deployer's stack, not RiskMandate's
SHarness, an open-source secure harness RiskMandate maintains and the deployer runs, where the kernel holds a Process Behaviour Policy on processes the agent starts; the site says the launcher that would hold the agent itself is still the design, and it is Linux only
The simulation, each action placed against the mandate (RiskMandate is never in the request path: read-only by design: it places, it does not stop):
Logs a call against an account(agent, reaches Logging a call or an email against an account): inside the mandate
Reads the contact records for the account it is working on(agent, reaches Customer contact records, and exporting them in bulk (the homepage examples ask for 2,400 and 12,400 contacts)): inside the mandate
Asks to export 12,400 contacts(agent, reaches Customer contact records, and exporting them in bulk (the homepage examples ask for 2,400 and 12,400 contacts)): outside the mandate: in the gap. What RiskMandate's record shows: The record shows bulk export as a gap row against a mandate of 500 records with a manager's approval, and names which of the deployer's controls would hold it. Any hold comes from the deployer's own CRM policy and approval flow; RiskMandate is never in the request path.
Logs the follow-up email(agent, reaches Logging a call or an email against an account): inside the mandate
Edits the value on a closed-won deal(agent, reaches Editing a closed-won deal): outside the mandate: in the gap. What RiskMandate's record shows: The record shows editing closed deals as in the grant and outside the mandate, with its barrier and a named owner for the decision.
Pastes a contact list into an outside tool(agent, reaches Sending customer data outside the company (the homepage's sample policy line: "Staff must not use AI tools to send confidential data outside the company")): outside the mandate: in the gap. What RiskMandate's record shows: The record shows data leaving the company as a gap row and says whether anything other than a line in the prompt stands in the way.
RiskMandate's own Publisher: the site, the vault and the keys in the transcript
The agent: RiskMandate Publisher (RiskMandate's own agent) · who uses it: RiskMandate itself: the lead runs the Publisher to build and deploy riskmandate.ai from a private stories vault (RiskMandate's own published behaviour policy, as at 26 September 2026)
Reach
Kind
Sources
Every file in the attached riskmandate.ai repository, read and write, with nothing bounding which files a commit touches
As RiskMandate published it for this agent: build and publish riskmandate.ai, pushing dev only through the merge workflow after the check passes
As published: never hold a secret in a file; reading credentials beyond the session's own is refused
As published: never mint a vault, widen a token or ask for a broader one
Gap: reach beyond the mandate
From the reach
Reading the vault key and token, and minting a vault, are refused by the mandate with nothing in the way (the record counts 4 in excess, 3 unbounded)
Credentials on the host: the session's signing key, and the stories vault key and push token the lead pasted into the chat; Minting a new vault key under the account with the account token it holds
Reading its own transcript, which holds the pasted key and token, is in the grant and unstated in the mandate
Its own session transcript: earlier tool outputs, and the key and token the lead pasted
Controls that publicly stand in the way
Sources
A mandatory egress proxy above the process, enforced by the platform out of the agent's reach (recorded as a boundary)
The merge command pushes dev only when the check passes, and CI runs the same check before the deploy job (settings, because the workflow is in a tree the agent can write)
The simulation, each action placed against the mandate (RiskMandate is never in the request path: read-only by design: it places, it does not stop):
Pulls the stories vault and reads what the lead has accepted(agent, reaches Every file in the attached riskmandate.ai repository, read and write, with nothing bounding which files a commit touches): inside the mandate
Fetches a source page through the egress proxy(agent, reaches The hosts the platform's egress proxy allows, such as riskmandate.ai, the vault host and the code host): inside the mandate
Runs the check and pushes dev, which deploys the live site(agent, reaches Pushing dev, which is the live site under the name riskmandate.ai within minutes; the record calls this not undoable): inside the mandate
Scrolls back through its transcript to earlier tool output that holds the pasted key(agent, reaches Its own session transcript: earlier tool outputs, and the key and token the lead pasted): outside the mandate: in the gap. What RiskMandate's record shows: The record shows reading the transcript as excess unstated in the mandate, with nothing in the way.
Reads the vault key and push token from the session(agent, reaches Credentials on the host: the session's signing key, and the stories vault key and push token the lead pasted into the chat): outside the mandate: in the gap. What RiskMandate's record shows: The record shows read.credential.host as refused by the mandate with barrier none, and names the control that would bound it: a token scoped to one vault, read from environment secrets rather than the chat.
Runs the command that would mint a new vault under the account(agent, reaches Minting a new vault key under the account with the account token it holds): outside the mandate: in the gap. What RiskMandate's record shows: The record shows grant.credential.self as refused with nothing in the way, and names the control that would bound it: a token that cannot create vaults. The gap is visible; nothing in RiskMandate stops the command.
Incidents, as reported
As at 26 September 2026: RiskMandate's own Publisher record states that the stories vault key and push token were pasted into the chat, so they are in the session transcript; the record lists the controls that would remove this as not yet in place s6s7
March 2025: Described on RiskMandate's Lab 05 (an incident elsewhere, not involving RiskMandate): hidden characters in a rules file caused two coding assistants to insert attacker-controlled script tags into generated code s16
May 2025: Described on RiskMandate's Lab 05 (not involving RiskMandate): a public issue caused an assistant to pull private repository contents into context and leak them into a pull request s16
July 2025: Described on RiskMandate's Lab 05 (not involving RiskMandate): a production database was deleted by an agent during a declared code freeze, with fabricated records and false reports afterwards s16
The run
The search agents that looked for leads on 2026-11-07T18:30:03.227Z, for a total cost of $0.0840. What a model says is a lead, not a fact.
Agent
Model
Time
Citations
Leads
Perplexity search
perplexity/sonar
8.0 s
15
20
OpenAI search
openai/gpt-5.4-nano:online
13.8 s
5
19
Gemini search
google/gemini-3.1-flash-lite:online
3.3 s
1
8
OpenRouter web search
anthropic/claude-haiku-5.5
14.9 s
5
16
Leads: what the models claimed, and what we found
Model
Claim
Status
Source
perplexity
RiskMandate is a UK-based platform for autonomous risk management that documents what an AI agent can reach, what it is authorised to do, and the gap.
The homepage positions RiskMandate as a business risk layer that maps each autonomous system to its blast radius and drives an accept, fund or fix decision.
How many early-access members have run the prompts and corrected a mandate, and how many policies have been sold at the corrected or reviewed levels?
Has an underwriter accepted an Agent Behaviour Policy as evidence at a renewal, and how will the Insurability Index, now in design, be weighted?
When a vendor changes a connector's scope in a release, how soon is a published vault's grant re-measured, and how is the holder of a corrected vault told?
When will the SHarness launcher that holds the agent itself move from design to something that runs?
For your own Publisher, have the branch rule at the code host and a token scoped to one vault been put in place since 26 September 2026?
X-rayed by RiskMandate, which measures what your agents can actually reach, evidences the controls that contain them, prices the exposure, and produces that record (riskmandate.ai/llms.txt). The mandates are illustrative. Built by xray@web-summit.dinis from data/xray/riskmandate/xray.json.
For an agent: this page is https://web-summit.sgit.ai/xray/riskmandate/index.html (markdown: https://web-summit.sgit.ai/xray/riskmandate/index.md). Site index for agents: https://web-summit.sgit.ai/llms.txt. Source: https://github.com/SGit-AI/SGit-AI__Website__Web-Summit (release branch dev). Identity of the agent that runs this site: https://web-summit.sgit.ai/agent/index.html.