Risk analysis and LLM reviews
Tune when a repeated jailbreak attempt opens a deep review, read the verdicts, and decide the locks and unlock requests they produce.
- Version: 0.4
- Feature: risk.llm_review
- Role: admin_user, viewer
- Type: task
The per-message detectors score one prompt at a time. Risk Analysis is the tier that reasons across a person: when the same user trips jailbreak or prompt-injection detection often enough inside a window, a local LLM analyst reads their detections across sessions and reaches a verdict that can warn them or take their AI access away. This page holds those verdicts, the locks, the unlock queue, the knowledge the analyst reasons with, and the trigger that starts it all.
What do I need?
- Licence
- Enterprise
- Role
admin_userviewer
Prerequisites
- The analyst stack is running — see Ask the AI Analyst for what the llm-analyst compose profile needs.
- RISK_ANALYST_SERVICE_ENABLED is 'true'. Anything else fails every dispatch as analyst_disabled.
- Redis is reachable: the sliding window and the cooldown live there.
- You are signed in as an admin_user or the superadmin. A viewer may read every tab and decide nothing.
Everything on this page is scoped to what you may read. An admin_user sees their own tenant and
the members of the groups they own; an id outside that answers 404, never 403, so the endpoint
cannot be used to discover another team's locked users.
Warning
The trigger ships off. With no analyst reachable an enabled trigger only accumulates reviews that nothing will complete, so turning it on is a deliberate step after the analyst answers.
/assets/screenshots/llm-review@0.4.pngHow a review starts
Every detection the gateway writes — dashboard chat, /chat/completions, image analysis — passes
through one funnel. A detection counts toward the window when its entity type is a jailbreak or
prompt-injection label and its confidence is at or above the floor.
The floor is deliberately below the level that blocks a single message: the signal this feature acts on is repetition of attempts that individually were not enough. When the window fills, one review is opened, the window is emptied, and a cooldown starts so the next review needs fresh attempts rather than inheriting the ones already reviewed.
Tune the trigger
Open the settings
Select Security & Compliance → Risk Analysis, then the Trigger settings tab.
While the trigger is off the tab opens on The analyst is not running — Repeated jailbreak attempts are still detected and recorded, but no deep review is dispatched and nobody is locked.
Set when a review fires
Under When a review fires, set Attempts, Window (minutes), Confidence floor and Cooldown (minutes).
The defaults are 2 attempts in 10 minutes at a floor of 0.7, then a 15-minute cooldown. The
floor is the detectors' own flag tier; 0.85 is what blocks a message outright.
Decide what happens when the analyst does not answer
Under Analysis, set Timeout (ms), On timeout and Report language.
On timeout takes Warn, Lock or Clear and is applied when no verdict arrives — a verdict with no reasoning behind it. Warn is the default: the attempts are real, but locking on silence is a false-positive landmine.
Turn it on
Switch Dispatch deep reviews on and select Save changes.
A Trigger settings saved. toast confirms it. The configuration is deployment-wide — there are no per-tenant overrides — and a save patches only the fields you changed.
Danger
Choosing Lock on timeout means an unreviewable user loses AI access with nothing analysed.
The gateway stands that policy down automatically after three consecutive analyst failures,
warning instead and writing LLM_REVIEW_ANALYST_UNAVAILABLE, so one outage cannot lock everyone
who trips the trigger.
Read a verdict
Open a review
On the Reviews tab, filter by Status, Verdict or group, and select a row.
The drawer adds the analyst's reasoning, the evidence it cited and the model it ran on. A notification can link straight at one verdict, and that link survives a refresh.
Read status and verdict together
Check the Status column before believing the Verdict column.
On a Completed review the verdict is the analyst's decision. On a Failed or Timed out review it is the fallback that was applied, with no reasoning, no evidence and no score behind it.
| Status | What Verdict means |
|---|---|
| Pending / Analysing | Nothing yet |
| Completed | The analyst decided this |
| Failed | The configured fallback, applied. Nothing was analysed |
| Timed out | The same, after the watchdog fired |
Warning
A Lock verdict that did not pass the analyst's own verification is downgraded to a warn. The raw result is archived either way, so a review can read Unverified with a warn verdict and reasoning that argues for a lock. That is the rule working: a lock costs a user their access with no human in the loop, and an analyst that did not verify has not verified anything.
Restore someone's access
A lock stops AI access wherever CID can identify the person. Sign-in keeps working on purpose, so the user can see the notice and ask for it to be lifted.
Work the queue
Open Unlock requests and read What they said.
Approving clears the lock and re-arms the trigger clean. Denying leaves the lock and records why. A user may file one request at a time, at most three per hour.
Approve or deny
Select the approve action, or the deny action and write an optional Note of up to 500 characters.
Approving reports Approved — {user} has AI access again. Denying restates the effect:
{user} stays locked. The note is recorded on the decision and is visible in the audit
trail.
Or unlock directly
On Locked users, select Unlock on an active row and confirm Restore AI access?
{user} regains AI access immediately, and the repeated-attempt window is re-armed clean.
Both the window and the cooldown are cleared — an unlock means start over, not resume.
Note
A cleared lock stays in the table as history. Switch the segmented control to Cleared to see it, with Cleared naming when and by which path. A lock lifted from the dashboard and one lifted by approving a request leave the same trail.
Curate what the analyst knows
The Attack knowledge tab holds the cards every review reasons against — techniques, and the benign shapes that look like them. Nothing here is written from any user's data.
Withdraw a card that over-fires
Find the card and switch Enabled off.
It leaves the analyst's prompt on the next refresh. This is a toggle rather than a delete because withdrawing a card is a statement about this deployment's data, not an edit of the published source — and it is allowed for every origin, official cards included.
Add your own
Select New entry, or Import JSON for a list of them.
An import answers with created, updated, skipped and refused counts. It never walks over a card a person wrote here: an id collision is skipped and named, never fatal.
Warning
Cards marked Official restate MITRE ATLAS, OWASP or deepteam. They cannot be edited or
removed here — a 409 — and a correction ships as a new payload. Cards that arrived in a payload
(bootstrap) also refuse deletion, because the next import would recreate them, enabled.
Sign off on a set analysis
The Analyses tab is a different object from a review: one report over a whole filtered slice of All detections, started with Analyse on that page rather than by a trigger. A review is about a person; an analysis is about a filter.
Open a report
Filter by Risk, Review, Detection type or Status, and select a row.
The drawer shows what filter it covered, how much of it the analyst read, the reasoning, the cited detections and the recommendations. A running report can be cancelled there.
Record the decision
Select Review, write optional Reviewer notes (optional), then Approve or Reject.
A Report approved or Report rejected toast confirms it, and the decision records who decided and when. Selecting Reopen on a decided report returns it to Pending.
Warning
The Review filter offers In review, but nothing in the product ever sets that state. It is reserved for a future ITSM sync, so the option matches no rows today. The states that exist are Pending, Approved and Rejected.
Fields reference
Trigger settings
| Field | Default | What it does |
|---|---|---|
| Dispatch deep reviews | off | Whether the window opens reviews at all |
| Attempts | 2 | Qualifying detections inside the window before a review fires |
| Window (minutes) | 10 | How far back the count reaches |
| Confidence floor | 0.7 | The detectors' flag tier. Below the 0.85 that blocks a message |
| Cooldown (minutes) | 15 | How long the window stays quiet after a review |
| Timeout (ms) | 120000 | After this the review is marked timed out |
| On timeout | Warn | Warn, Lock or Clear, applied when no verdict arrives |
| Report language | English | The language the analyst writes reasoning in. The assistant always answers in the language of the question |
Tabs
| Tab | What it holds |
|---|---|
| Reviews | One row per deep analysis of a person: status, verdict, score, checks, attempts, duration |
| Analyses | Set-based reports over an All Detections filter, with their sign-off state |
| Locked users | Active and cleared locks, with the review that placed each one |
| Unlock requests | The queue, with what the user said and the decision |
| Attack knowledge | The cards the analyst reasons with, by kind, id, topic, source, origin and version |
| MITRE ATLAS / OWASP | The loaded reference releases the analyst cites by id |
| Trigger settings | The table above |
Stat tiles
| Tile | What it counts |
|---|---|
| Unlock requests | Requests waiting on a human decision |
| Locked users | Locks active right now |
| Reviews today | Deep analyses dispatched since midnight |
| Verdicts | Lock / warn / clear, all time |
Verify
- With the trigger on, send the same user's account past the attempt threshold inside the window. A row appears on Reviews at Pending, then Analysing, then Completed.
- Open Event logs. The trigger writes
LLM_REVIEW_TRIGGERED, the verdict writesLLM_REVIEW_COMPLETED, and a failure writesLLM_REVIEW_FAILED. A lock the analyst asked for writesUSER_AI_LOCKED_PENDINGand the applied lock writesUSER_AI_LOCKED. - Approve an unlock request. The lock's Status becomes Cleared, and
USER_AI_UNLOCKEDappears in the audit trail — as doesUNLOCK_REQUESTEDfor the user's own request andUNLOCK_DENIEDfor a refusal. - Approve or reject a report on Analyses and confirm the Review column changes. The decision is written to the audit trail as a resource update.
- No event metadata ever carries the analyst's reasoning or evidence. What leaves for SIEM is the review id, verdict, score, confidence, verification flag, status and counts.
If it fails
- This feature (risk.llm_review) is not included in the installed license tier. Contact your CID
representative to upgrade. — a 403 with the code
FEATURE_NOT_LICENSED. An Enterprise key. An already-applied lock keeps enforcing regardless, and the page a locked user sees keeps working. - Could not save settings — the trigger config was rejected. Every field is range-checked; attempts above 50, a window above 1440 minutes or a confidence outside 0–1 are refused.
- Reviews pile up at Pending and nothing completes — the analyst is not reachable, or
RISK_ANALYST_SERVICE_ENABLEDis not the stringtrue. A disabled integration fails a review terminally rather than leaving it pending forever, so persistent Pending points at the queue, not at the flag. - Reviews complete as Failed with a timeout and users are being warned instead of locked —
the circuit breaker has stood the Lock fallback down after three consecutive failures. Look
for
LLM_REVIEW_ANALYST_UNAVAILABLE; the problem is infrastructure, and detections are going unreviewed. - That lock was already cleared. — somebody decided it elsewhere. Not an error.
- Approving or denying returns a
409— the request was already decided. The row refreshes itself. - A review, lock or request you expect is missing — it belongs to a tenant outside your scope, and is deliberately indistinguishable from one that does not exist.
- Could not change the entry or Import refused on Attack knowledge — most often a
409on an official or bootstrap card. Disabling it is always allowed. - Nothing ever triggers although jailbreak detections are recorded — check the confidence floor against the detections' own confidence, and check that Redis is up. A Redis failure loses the window silently rather than failing the user's chat turn.
Next steps
- Ask the AI Analyst — the same analyst, answering your questions instead of judging users, and where its infrastructure requirements are written down.
- My team — what a group leader sees of these verdicts about their own members.
- All detections — the detections that fill the window, and where a set analysis is started.
Last updated on