GOAL & RULES
Goal: {{ report.goal }}
{% if report.rules and report.rules|length > 0 %}
Security rules:
{% for r in report.rules %}
- {{ r }}
{% endfor %}
{% else %}
Rules: built-in checks (prompt leakage, secret exposure, unauthorized tool use)
{% endif %}
{% if report.vulnerabilities %}
🚨 FINDINGS — TRACE-VERIFIED
{% for vuln in report.vulnerabilities %}
{% set sev_icon = '🔴' if vuln.severity.value == 'critical' else ('🟠' if vuln.severity.value == 'high' else ('🟡' if vuln.severity.value == 'medium' else '🔵')) %}
{% set sev_class = 'text-red' if vuln.severity.value in ['critical', 'high'] else 'text-yellow' %}
{% set conf = "%.0f"|format(vuln.confidence * 100) if vuln.confidence else "n/a" %}
{{ sev_icon }} FINDING #{{ loop.index }}: {{ vuln.behavior_name }}
{{ vuln.severity.value.upper() }} · {{ conf }} ({{ vuln.verification_type }})
Behavior: {{ vuln.behavior }} ({{ vuln.behavior_name }})
Rule: {{ vuln.violated_rule or report.goal }}
Severity: {{ vuln.severity.value.upper() }} Confidence: {{ conf }} ({{ vuln.verification_type }})
Violation: {{ vuln.violation }}
{% set repro = vuln.minimal_attack_path if vuln.minimal_attack_path and vuln.minimal_attack_path|length > 0 else vuln.attack_path %}
{% if repro and repro|length > 0 %}
{% set first_step = repro[0] %}
{% set last_step = repro[-1] %}
Attack strategy: {{ last_step.strategy }} ({{ repro|length }} steps, minimal)
Exact attack (minimal):
"{{ first_step.attacker_message }}"
Exact trace output:
"{{ last_step.target_response }}"
{% if last_step.tool_calls and last_step.tool_calls|length > 0 %}
Violating tool call: {{ last_step.tool_calls[0] }}
{% endif %}
{% if vuln.trace_evidence and vuln.trace_evidence.tool_calls %}
Trace tool calls: {{ vuln.trace_evidence.tool_calls }}
{% endif %}
{% endif %}
Impact:
{{ vuln.impact }}
{% if vuln.evidence %}
Evidence (observable):
"{{ vuln.evidence }}"
{% endif %}
{% if vuln.recommended_mitigation %}
✓ Recommended Mitigation:
{{ vuln.recommended_mitigation }}
{% endif %}
Minimal Reproduction ({{ repro|length }} steps):
{% for step in repro %}
Turn {{ step.turn_number }} [{{ step.strategy }}]
Attacker: "{{ step.attacker_message[:80] }}..."
Target: "{{ step.target_response[:80] }}..."
{% if step.tool_calls and step.tool_calls|length > 0 %}
tool: {{ step.tool_calls[0] }}
{% endif %}
{% endfor %}
{% if vuln.attack_path|length > repro|length %}
Full exploit was {{ vuln.attack_path|length }} steps → minimized to {{ repro|length }}.
{% endif %}
Why vulnerable: {{ vuln.violation }}
{% if vuln.regression_test_path %}
Regression test: {{ vuln.regression_test_path }}
{% endif %}
{% endfor %}
{% endif %}
EXECUTION TIMELINE
{% set global_turn = namespace(count=0) %}
{% for transcript in report.transcripts %}
{% for i in range(0, transcript.turns|length - 1, 2) %}
{% set global_turn.count = global_turn.count + 1 %}
{% set attacker_turn = transcript.turns[i] %}
{% set target_turn = transcript.turns[i+1] if (i+1) < transcript.turns|length else none %}
{% set plan = attacker_turn.metadata.get('plan', {}) %}
{% set behavior = plan.get('behavior', transcript.behavior) %}
{% set strategy = plan.get('strategy', 'direct') %}
{% set escalation = plan.get('escalation', 1) %}
{% set reason_summary = plan.get('reason_summary', '') %}
{% set eval_data = target_turn.metadata.get('evaluation', {}) if target_turn else {} %}
{% set turn_progress = eval_data.get('progress', 'no_progress') %}
{% set icon = '✅' if turn_progress == 'success' else ('⚠️' if turn_progress == 'partial_progress' else '❌') %}
{% set border_class = 'green' if turn_progress == 'success' else ('yellow' if turn_progress == 'partial_progress' else 'red') %}
{% set text_class = 'text-green' if turn_progress == 'success' else ('text-yellow' if turn_progress == 'partial_progress' else 'text-red') %}
Turn {{ global_turn.count }}
{{ icon }}
Behavior: {{ behavior.split('.')[-1].replace('_', ' ').title() }}
Strategy: {{ strategy }} (escalation: {{ escalation }}/5)
Attacker:
"{{ attacker_turn.content }}"
{% if target_turn %}
Target:
"{{ target_turn.content }}"
{% endif %}
Result: {{ icon }} {{ turn_progress.replace('_', ' ').upper() }}
{% if reason_summary or eval_data.get('reasoning') %}
Planner:
{{ eval_data.get('reasoning', reason_summary) }}
{% endif %}
{% endfor %}
{% endfor %}
ATTACK GRAPH
Goal: {{ report.goal }}
{% for transcript in report.transcripts %}
{% for i in range(0, transcript.turns|length - 1, 2) %}
{% set attacker_t = transcript.turns[i] %}
{% set plan = attacker_t.metadata.get("plan", {}) %}
{% set b_id = plan.get("behavior", transcript.behavior) %}
{% set strategy = plan.get("strategy", "direct") %}
{% set target_t = transcript.turns[i+1] if (i+1) < transcript.turns|length else none %}
{% set eval_data = target_t.metadata.get("evaluation", {}) if target_t else {} %}
{% set progress = eval_data.get("progress", "no_progress") %}
{% set icon = '✅' if progress == 'success' else ('⚠️' if progress == 'partial_progress' else '❌') %}
{% set text_class = 'text-green' if progress == 'success' else ('text-yellow' if progress == 'partial_progress' else 'text-red') %}
{{ icon }} {{ b_id.split('.')[-1].replace('_', ' ').title() }}
({{ strategy }})
{% endfor %}
{% endfor %}
{% if report.root_cause %}
ROOT CAUSE ANALYSIS
Why did this succeed?
{{ report.root_cause.why_succeeded }}
{% if report.root_cause.root_causes %}
Root Causes:
{% for cause in report.root_cause.root_causes %}
- {{ cause }}
{% endfor %}
{% endif %}
IMPACT
{% set sev = report.root_cause.impact_severity.lower() %}
{% set sev_class = 'text-red' if sev == 'critical' else ('text-red' if sev == 'high' else ('text-yellow' if sev == 'medium' else 'text-green')) %}
Severity: {{ report.root_cause.impact_severity.upper() }}
Risk: {{ report.root_cause.impact_description }}
{% if report.root_cause.recommendations %}
RECOMMENDATIONS
{% for rec in report.root_cause.recommendations %}
- {{ rec }}
{% endfor %}
{% endif %}
{% else %}
SCOPED RESULT — NO VIOLATION OBSERVED
No vulnerability was observed within the tested scope.
No violation was observed for the tested behaviors and attack attempts in this session ({{ report.total_behaviors }} behavior(s), {{ report.total_turns // 2 }} attack(s)). This does NOT mean the system is secure — only that these specific attacks did not succeed. For deeper coverage, test broader behavior sets and higher escalation levels.
{% endif %}
{% if report.hypothesis_evolution %}
HYPOTHESIS EVOLUTION
| Turn |
Hypothesis Tested |
Result |
Hypotheses Confidence |
{% for snapshot in report.hypothesis_evolution %}
{% set progress = snapshot.get('result', 'no_progress') %}
{% set icon = '✅' if progress == 'success' else ('⚠️' if progress == 'partial_progress' else '❌') %}
{% set text_class = 'text-green' if progress == 'success' else ('text-yellow' if progress == 'partial_progress' else 'text-red') %}
| {{ snapshot.turn }} |
{{ snapshot.get('tested', '')[:60] }} |
{{ icon }} |
{% for h in snapshot.get('hypotheses', []) %}
{% if h.status == 'rejected' %}
✗ {{ h.text[:25] }}...
{% elif h.confidence > 0.7 %}
{{ "%.0f"|format(h.confidence * 100) }}%
{% elif h.confidence > 0.3 %}
{{ "%.0f"|format(h.confidence * 100) }}%
{% else %}
{{ "%.0f"|format(h.confidence * 100) }}%
{% endif %}
{% if not loop.last %} · {% endif %}
{% endfor %}
|
{% endfor %}
{% set final = report.hypothesis_evolution[-1] %}
Final Hypotheses:
{% for h in final.get('hypotheses', []) %}
{% if h.status == 'rejected' %}
✗ {{ h.text }} (rejected)
{% elif h.confidence > 0.7 %}
● {{ h.text }} ({{ "%.0f"|format(h.confidence * 100) }}%)
{% elif h.confidence > 0.3 %}
● {{ h.text }} ({{ "%.0f"|format(h.confidence * 100) }}%)
{% else %}
● {{ h.text }} ({{ "%.0f"|format(h.confidence * 100) }}%)
{% endif %}
{% endfor %}
{% endif %}
ATTACK STATISTICS
| Behavior |
Attempts |
Result |
Strategy |
{% for b in report.behaviors_tested %}
{% set name = b.behavior_name or b.behavior.split('.')[-1].replace('_', ' ').title() %}
{% set strategy = 'direct' %}
{% for t in report.transcripts %}
{% if t.behavior == b.behavior %}
{% set strategy = t.strategy or 'direct' %}
{% endif %}
{% endfor %}
| {{ name }} |
{{ b.attempts }} |
{% if b.successes > 0 %}
✅ {{ b.successes }}/{{ b.attempts }}
{% else %}
❌ 0/{{ b.attempts }}
{% endif %}
|
{{ strategy }} |
{% endfor %}
Total Turns: {{ report.total_turns }}
Behaviors Tested: {{ report.total_behaviors }}
Vulnerabilities: {{ report.vulnerabilities|length }}/{{ report.total_behaviors }}
{% set crit = namespace(count=0) %}
{% set high = namespace(count=0) %}
{% set med = namespace(count=0) %}
{% for v in report.vulnerabilities %}
{% if v.severity.value == 'critical' %}{% set crit.count = crit.count + 1 %}{% endif %}
{% if v.severity.value == 'high' %}{% set high.count = high.count + 1 %}{% endif %}
{% if v.severity.value == 'medium' %}{% set med.count = med.count + 1 %}{% endif %}
{% endfor %}
🔴 Critical: {{ crit.count }}
🟠 High: {{ high.count }}
🟡 Medium: {{ med.count }}
Duration: {{ "%.1f"|format(report.duration_seconds) }}s
{% if report.regression_paths %}
REGRESSION TESTS
{% for path in report.regression_paths %}
- Saved: {{ path }}
{% endfor %}
{% endif %}