AI Session Analysis Results 🆕¶
While a monitored session runs, each analysis agent attached to its safe stores what it found. The results are exposed at two levels: one row per agent summarising its work on the session, and one verdict per finding. An operator can adjudicate a verdict - confirm it or mark it a false positive - and that judgment is recorded as a separate feedback object.
Configuring the agents themselves is described in AI Session Analysis Agents 🆕.
Data Structures¶
Attribute |
Type |
Required |
Description |
|---|---|---|---|
|
string |
Read-only. |
|
|
string |
yes |
ID of the session this analysis belongs to. |
|
string |
Read-only; hidden; expensive to use. Virtual attribute that filters out sessions not granted to the subject. Requires |
|
|
string |
Read-only. Analysis agent this row describes. |
|
|
string |
Read-only; expensive to use. Name of the agent. Resolves even after the agent is removed, so old analyses stay attributed. |
|
|
string {live, finished, failed} |
Read-only; expensive to use. Whether the agent is still analyzing the session. |
|
|
string {unknown, low, medium, high} |
Read-only; expensive to use. Severity of the agent’s latest verdict. |
|
|
string {unknown, low, medium, high} |
Read-only; expensive to use. Highest severity the agent reported for the session. |
|
|
string |
Read-only. Summary of the agent’s latest verdict. |
|
|
number |
Read-only. Number of verdicts the agent stored for the session. |
|
|
string |
Read-only. Name the LLM provider had when the analysis started. |
|
|
string |
Read-only. Provider kind the analysis ran on. |
|
|
string |
Read-only. Endpoint the analysis was sent to. |
|
|
string |
Read-only. Model that produced the verdicts. |
|
|
number |
Read-only. Prompt tokens the agent consumed for the session. |
|
|
number |
Read-only. Completion tokens the agent consumed for the session. |
|
|
datetime |
Read-only. Timestamp of creation. |
|
|
datetime |
Read-only. Timestamp of modification. |
|
|
boolean |
Read-only. |
Attribute |
Type |
Required |
Description |
|---|---|---|---|
|
string |
Read-only. |
|
|
string |
yes |
ID of the session this verdict belongs to. |
|
string |
Read-only; hidden; expensive to use. Virtual attribute that filters out sessions not granted to the subject. Requires |
|
|
string {unknown, low, medium, high} |
Read-only; expensive to use. Severity reported by this verdict. |
|
|
string |
Read-only; expensive to use. Human readable summary of the verdict. |
|
|
string-array |
Read-only; expensive to use. Indicators backing the verdict. |
|
|
number |
Read-only. First session event covered by the verdict. |
|
|
number |
Read-only. Last session event covered by the verdict. |
|
|
number |
Read-only. Offset within the session, in milliseconds, where the analyzed batch ended - the moment to play, since the activity the verdict describes has happened by then. |
|
|
string |
Read-only; expensive to use. Agent that produced the verdict. |
|
|
string |
Read-only; expensive to use. Name of that agent. Resolves even after the agent is removed. |
|
|
string {confirmed, false_positive} |
Read-only; expensive to use. Operator judgment recorded for this verdict, if any. |
|
|
string {low, medium, high} |
Read-only; expensive to use. Severity the operator considers correct, overriding |
|
|
string |
Read-only; expensive to use. Operator who recorded the judgment. |
|
|
string |
Read-only; expensive to use. Identifier of the adjudication row, used to update or retract it. |
|
|
datetime |
Read-only. Timestamp of creation. |
|
|
datetime |
Read-only. Timestamp of modification. |
|
|
boolean |
Read-only. |
Attribute |
Type |
Required |
Description |
|---|---|---|---|
|
string |
Read-only. Uniqueness is required. |
|
|
string |
yes |
Immutable. Verdict this adjudication belongs to. |
|
string |
Read-only; hidden; expensive to use. Virtual attribute gating access to the session the verdict belongs to. Requires |
|
|
string {confirmed, false_positive} |
yes |
Operator judgment on the verdict. |
|
string {low, medium, high} |
Severity the operator considers correct, overriding the verdict severity. |
|
|
string |
Free-form operator note explaining the judgment. May be empty. |
|
|
string |
Immutable. Operator who recorded this judgment. |
|
|
datetime |
Read-only. Timestamp of creation. |
|
|
datetime |
Read-only. Timestamp of modification. |
|
|
boolean |
Read-only. |
Note
The session object carries the same results in aggregated form - analysis_status,
analysis_severity, analysis_peak_severity, analysis_summary and
analysis_verdict_count on the SessionModel. Use those when listing sessions, and the
endpoints below when you need the per-agent or per-verdict detail.
Retrieve Available Attributes¶
Request
Method |
|
Path |
|
GET /api/v2/objspec/session_analysis_verdict
Example Request
curl -s -k -X GET \
-H 'Authorization: <token>' \
'https://10.33.3.167/api/v2/objspec/session_analysis_verdict'
List Per-Agent Analyses¶
Request
Method |
|
Path |
|
GET /api/v2/session/analysis_agent
Restrict the result to one session with the filter parameter, for example
?filter=session_id.eq(<session_id>).
Example Request
curl -s -k -X GET \
-H 'Authorization: <token>' \
'https://10.33.3.167/api/v2/session/analysis_agent?filter=session_id.eq(549439154539200513)'
Response
{
"result": "success",
"session_analysis_agent": [
{
"id": "549439154539200513",
"session_id": "549439154539200513",
"agent_id": "549439154539200513",
"agent_name": "Agent_1",
"status": "live",
"current_severity": "medium",
"peak_severity": "medium",
"latest_summary": "The user attempts to list theirsudo permissions by running `sudo -l`, which requires a password. This action is part of administrative tasks and warrants human review.",
"verdict_count": 1,
"provider_name": "Fudo_AI",
"provider_kind": "ollama",
"provider_url": "http://10.0.240.10:11435/api/chat",
"provider_model": "qwen2.5",
"tokens_in": 2878,
"tokens_out": 105,
"created_at": "2026-08-18 11:15:17.903392-07",
"modified_at": "2026-08-18 11:17:09.995082-07"
}
]
}
Note
provider_name, provider_kind, provider_url and provider_model record what the
analysis actually ran on, so the values stay meaningful after the provider is reconfigured or
removed. tokens_in and tokens_out let you attribute model cost to a session.
List Verdicts¶
Request
Method |
|
Path |
|
GET /api/v2/session/analysis_verdict
Example Request
curl -s -k -X GET \
-H 'Authorization: <token>' \
'https://10.33.3.167/api/v2/session/analysis_verdict?filter=session_id.eq(549439154539200513)'
Response
{
"result": "success",
"session_analysis_verdict": [
{
"id": "549439154539200513",
"session_id": "549439154539200513",
"severity": "medium",
"summary": "The user attempts to list theirsudo permissions by running `sudo -l`, which requires a password. This action is part of administrative tasks and warrants human review.",
"first_event": 78,
"last_event": 95,
"time_offset_ms": 102850,
"agent_id": "549439154539200513",
"agent_name": "Agent_1",
"created_at": "2026-08-18 11:17:09.991808-07",
"modified_at": "2026-08-18 11:17:09.991808-07"
}
]
}
Note
Use time_offset_ms to position the session player - the activity the verdict describes has
already happened by that offset. first_event and last_event identify the same fragment in
terms of session events.
The adjudication attributes - judgment, override_severity, judged_by and
feedback_id - are absent until a verdict is adjudicated.
Adjudicate a Verdict¶
Request
Method |
|
Path |
|
Body |
|
POST /api/v2/session/analysis_verdict/feedback
Example Request
curl -s -k -X POST \
-H 'Authorization: <token>' \
-H 'Content-Type: application/json' \
-d '{"verdict_id":"549439154539200513","judgment":"confirmed","override_severity":"low","note":"Routine sudo -l by an administrator; recorded for completeness."}' \
'https://10.33.3.167/api/v2/session/analysis_verdict/feedback'
Response
{
"result": "success",
"session_analysis_verdict_feedback": {
"id": "549439154539200513"
}
}
Once the adjudication exists, the verdict reports it:
{
"id": "549439154539200513",
"severity": "medium",
"judgment": "confirmed",
"override_severity": "low",
"judged_by": "549439154539200513",
"feedback_id": "549439154539200513"
}
Note
severity keeps the value the agent reported. override_severity records what the operator
considers correct, so both the model’s answer and the human correction remain visible.
List Adjudications¶
Request
Method |
|
Path |
|
GET /api/v2/session/analysis_verdict/feedback
Example Request
curl -s -k -X GET \
-H 'Authorization: <token>' \
'https://10.33.3.167/api/v2/session/analysis_verdict/feedback'
Response
{
"result": "success",
"session_analysis_verdict_feedback": [
{
"id": "549439154539200513",
"verdict_id": "549439154539200513",
"judgment": "confirmed",
"override_severity": "low",
"note": "Routine sudo -l by an administrator; recorded for completeness.",
"judged_by": "549439154539200513",
"created_at": "2026-08-18 11:18:16.703842-07",
"modified_at": "2026-08-18 11:18:16.703842-07"
}
]
}
Modify an Adjudication¶
Request
Method |
|
Path |
|
Body |
|
PATCH /api/v2/session/analysis_verdict/feedback/<id>
Attributes left out of the body keep their current values.
Example Request
curl -s -k -X PATCH \
-H 'Authorization: <token>' \
-H 'Content-Type: application/json' \
-d '{"judgment":"false_positive","note":"Reclassified after review: the operator was authorised for this check."}' \
'https://10.33.3.167/api/v2/session/analysis_verdict/feedback/549439154539200513'
Response
{
"result": "success"
}
Retract an Adjudication¶
Request
Method |
|
Path |
|
DELETE /api/v2/session/analysis_verdict/feedback/<id>
Example Request
curl -s -k -X DELETE \
-H 'Authorization: <token>' \
'https://10.33.3.167/api/v2/session/analysis_verdict/feedback/549439154539200513'
Response
{
"result": "success"
}
Retracting the adjudication clears it from the verdict, which returns to reporting only what the agent found:
{
"id": "549439154539200513",
"severity": "medium",
"judgment": null,
"override_severity": null,
"feedback_id": null
}