{% set grade_color = {'A': '#2ec27e', 'B': '#0770E3', 'C': '#f59e0b', 'D': '#fb923c', 'F': '#ef4444'} %} {% set gc = grade_color.get(session.grade, '#6b7280') %}
{{ session.grade }}
{{ session.score }} {{ session.project_label }}

{{ session.prompt or 'No prompt captured' }}

{% if session.session_cost %}

Session cost ${{ "%.2f"|format(session.session_cost) }} {% if session.wasted_cost and session.wasted_cost > 0 %} · ≈ ${{ "%.2f"|format(session.wasted_cost) }} wasted {% endif %}

{% endif %} {% if session.low_activity %}

Not enough activity to grade reliably (fewer than 3 tool calls).

{% endif %}
{% if session.tuning_report %}
{% endif %}
{% set m = session.metrics %}
{% for label, value in [ ('Turns', m.assistant_turns), ('Tool calls', m.total_tool_calls), ('Bash calls', m.bash_calls), ('Errors', m.tool_errors), ('Rejections', m.user_rejections), ('Subagents', m.subagent_count), ] %}
{{ label }}
{{ value }}
{% endfor %}
{% set subs = session.subscores %} {% set wts = session.weights %} {% set rates = session.rates %} {% set cat_labels = [ ('errors', 'Tool errors'), ('rejections', 'User rejections'), ('duplicate_commands', 'Duplicate commands'), ('repeated_reads', 'Repeated reads'), ('scriptability', 'Scriptability'), ] %} {% set rate_contexts = { 'errors': 'errors / tool calls', 'rejections': 'rejections / tool calls', 'duplicate_commands': 'extra dups / bash calls', 'repeated_reads': 'extra re-reads / read calls', 'scriptability': 'over-hammered binaries / unique binaries', } %}
Category scores
{% if not session.low_activity %}
{% for cat, label in cat_labels %} {% set sub = subs.get(cat, 100) %} {% set wt = wts.get(cat, 0) %} {% set rate_pair = rates.get(cat, (0, 1)) %} {% set bar_color = '#2ec27e' if sub >= 80 else ('#f59e0b' if sub >= 60 else '#ef4444') %}
{{ label }}
{{ sub | round | int }}
{{ rate_pair[0] }}/{{ rate_pair[1] }} {{ rate_contexts.get(cat, '') }} {{ (wt * 100) | round | int }}% of score
{% endfor %}
{% else %}

Subscores not computed — insufficient activity.

{% endif %}
{% if session.suggestions %}
Tuning suggestions
{% endif %} {% set d = session.detail %} {% if d.errors or d.rejections %}
{% if d.errors %}
Tool errors
    {% for e in d.errors[:5] %}
  • {{ e.label }} {% if e.snippet %} {{ e.snippet }} {% endif %}
  • {% endfor %} {% if d.errors | length > 5 %}
  • +{{ d.errors | length - 5 }} more
  • {% endif %}
{% endif %} {% if d.rejections %}
User rejections
    {% for r in d.rejections[:5] %}
  • {{ r.label }}
  • {% endfor %} {% if d.rejections | length > 5 %}
  • +{{ d.rejections | length - 5 }} more
  • {% endif %}
{% endif %}
{% endif %}