{% extends "base.html" %} {% block title %}metrics · watchmen{% endblock %} {% block content %}

Aggregated metrics

Coding-agent activity across your corpus. Profile card and cross-agent panel below always show all activity; the daily breakdowns further down respect the All activity / Tracked only toggle.
{{ card_stats.rating }}
OVR
{{ card_stats.archetype[0] }}
{{ card_stats.archetype[1] }}
{{ "{:,}".format(card_stats.sessions) }} sessions {% if card_stats.first_seen and card_stats.last_seen %} · {{ card_stats.first_seen }} → {{ card_stats.last_seen }} {% endif %}
{% if tracked_only %}{% endif %}
{% for group in card_stats.attribute_groups %}
{{ group.label }}
{% for item in group.stats %}
{{ item.label }} {{ item.raw }}
{% endfor %}
{% endfor %}
What do these axes measure?
{% for a in card_axis_legend %}
{{ a.name }}
{{ a.desc }}
elite ≈ {{ a.elite }}
{% endfor %}
Agent mix
{% for row in card_donut_legend %}
{{ row.label }} {{ "{:,}".format(row.count) }} {{ "%.0f"|format(row.share * 100) }}%
{% else %}
No sessions in window.
{% endfor %}
Top tools
{% if card_top_tools_data %}
{% else %}
No tool calls recorded in window.
{% endif %}
Activity ({{ card_days }}d)
Sessions / day {{ "{:,}".format(card_stats.sessions) }}
Cost / day ${{ "%.2f"|format(card_stats.cost_usd) }}
Tool errors / day {{ "{:,}".format(card_stats.tool_errors) }}
Player traits {% for t in card_stats.traits %} {{ t }} {% endfor %} {% if card_stats.top_tool %} Top tool: {{ card_stats.top_tool[0] }} ({{ "{:,}".format(card_stats.top_tool[1]) }}) {% endif %}
{% if cmp_facts and cmp_facts.adapters and cmp_facts.adapters|length >= 2 %}

How you use each agent

Comparing {{ cmp_facts.adapters|length }} coding agents over the last {{ cmp_facts.window_days }} days (since {{ cmp_facts.since }}). {% if cmp_narrative_meta and cmp_narrative_meta.generated_at %} Narrative synthesized {{ cmp_narrative_meta.generated_at[:10] }} {% if cmp_narrative_meta.model %}· {{ cmp_narrative_meta.model }}{% endif %}. {% else %} Run watchmen insights to generate the LLM narrative below the facts table. {% endif %}
{% if cmp_narrative_html %}
{{ cmp_narrative_html|safe }}
{% endif %}
{% for a in cmp_facts.adapters %}
{{ a.label }} {% if a.dominant_model %} {{ a.dominant_model }} {% endif %}
sessions
{{ "{:,}".format(a.sessions) }}
active days
{{ a.active_days }}
projects
{{ a.projects }}
prompts
{{ "{:,}".format(a.prompts) }}
prompts / session
{{ a.prompts_per_session }}
tool calls / sess
{{ a.tool_calls_per_session }}
tool error rate
{{ "{:.1%}".format(a.tool_error_rate) }}
cache hit
{{ "{:.0%}".format(a.cache_hit_rate) }}
$ / prompt
${{ "%.4f"|format(a.cost_per_prompt) }}
$ / session
${{ "%.2f"|format(a.cost_per_session) }}
total $
${{ "%.2f"|format(a.cost_usd) }}
avg sess
{{ (a.avg_session_seconds / 60)|round|int }}m
{% if a.top_tools %}
Top tools {% for tname, tn in a.top_tools[:5] %} {{ tname }} {{ "{:,}".format(tn) }} {% endfor %}
{% endif %} {% if a.top_projects %}
Top projects {% for pdir, pn in a.top_projects[:3] %} {{ pdir.split("/")[-1] }} {{ pn }} {% endfor %}
{% endif %}
{% endfor %}
{% endif %}
Sessions / 7d
{{ last7.sessions }}
{{ last30.sessions }} in last 30d
Prompts / 7d
{{ last7.prompts }}
{{ "%.1f"|format(last7.prompts / last7.sessions if last7.sessions else 0) }} per session
Tool errors / 7d
{{ last7.tool_errors }}
{{ "%.2f"|format(last7.tool_errors / last7.sessions if last7.sessions else 0) }} per session
Cost / 7d
${{ "%.2f"|format(last7.cost_usd) }}
${{ "%.2f"|format(last30.cost_usd) }} in last 30d
Input tokens / 7d
{{ "{:,}".format(last7.input_tokens) }}
{{ "{:,}".format(last7.cache_read_tokens) }} from cache
Output tokens / 7d
{{ "{:,}".format(last7.output_tokens) }}
{{ "%.2f"|format(last7.output_tokens / last7.sessions if last7.sessions else 0) }}k per session avg
Skill suggestions / 7d
{{ last7.suggestions_fired }}
{% if last7.suggestions_fired %} {{ last7.uptake }} taken ({{ "%.0f"|format(100 * last7.uptake / last7.suggestions_fired) }}% uptake) {% else %} no fires yet {% endif %}
Cache hit ratio / 7d
{% set total_in = last7.input_tokens + last7.cache_creation_tokens + last7.cache_read_tokens %}
{{ "%.0f"|format(100 * last7.cache_read_tokens / total_in if total_in else 0) }}%
cache read / total input
{% if tracked_only %} Showing tracked watchmen projects only. {% else %} Showing every coding-agent session in your corpus, tracked + untracked. {% endif %} (applies to sections below)
All activity Tracked only
{% if adapters %}

By coding agent (last 30 days)

{% set max_sessions = adapters[0].sessions or 1 %} {% set max_cost = adapters|map(attribute='cost_usd')|max %} {% for a in adapters %} {% endfor %}
Coding agent Sessions Sessions Projects Prompts Tool errors Cost (USD)
{{ a.label }} {{ a.agent }}
{{ "{:,}".format(a.sessions) }} {{ a.projects }} {{ "{:,}".format(a.prompts) }} {{ "{:,}".format(a.tool_errors) }} ${{ "%.2f"|format(a.cost_usd) }}
{% endif %}

When you work

Last 26 weeks{% if tracked_only %} (tracked){% else %} (all projects){% endif %}
Prompt activity per day
{% if streak.current or streak.longest %}
🔥 {{ streak.current }}-day current streak Longest: {{ streak.longest }} days{% if streak.longest_end %} (ended {{ streak.longest_end }}){% endif %}
{% endif %}
Day × hour (last 90 days)
{% if peaks %} Peak: {{ peaks[0] }} {{ peaks[1] }} ({{ peaks[2] }} prompts) {% else %} not enough data yet {% endif %}
{% if tool_usage %}

Tool usage (last 30 days)

{% set top_count = tool_usage[0].count %} {% for t in tool_usage %} {% endfor %}
{{ t.tool }}
{% if t.errors %}
{% endif %}
{{ "{:,}".format(t.count) }} {% if t.errors %}{{ t.errors }} err{% endif %}
{% endif %}

By tracked project (last 30 days)

{% for p in per_project %} {% endfor %}
Project Sessions Prompts Errors Input tok Output tok Cost Suggestions Uptake
{{ p.project_key }} {{ p.sessions or "" }} {{ p.prompts or "" }} {{ p.tool_errors or "" }} {{ "{:,}".format(p.input_tokens) if p.input_tokens else "" }} {{ "{:,}".format(p.output_tokens) if p.output_tokens else "" }} {{ "${:.2f}".format(p.cost_usd) if p.cost_usd > 0 else "" }} {{ p.suggestions_fired or "" }} {% if p.suggestions_fired %}{{ p.uptake }}/{{ p.suggestions_fired }}{% endif %}

Daily breakdown (all activity)

{% for r in rows %} {% endfor %}
Date Sessions Prompts Errors Input tok Output tok Cost Suggestions Uptake
{{ r.date }} {{ r.sessions or "" }} {{ r.prompts or "" }} {{ r.tool_errors or "" }} {{ "{:,}".format(r.input_tokens) if r.input_tokens else "" }} {{ "{:,}".format(r.output_tokens) if r.output_tokens else "" }} {{ "${:.2f}".format(r.cost_usd) if r.cost_usd > 0 else "" }} {{ r.suggestions_fired or "" }} {% if r.suggestions_fired %}{{ r.uptake }}/{{ r.suggestions_fired }}{% endif %}
{% endblock %}