{% extends "base.html" %} {% block title %}{{ task.task_key }} × {{ variant.variant_key }} · Harness Lab{% endblock %} {% block content %}

{{ task.name }} × {{ variant.variant_key }} {{ run.outcome }} {{ run.status }}

task {{ task.task_key }} · harness {{ run.runner }} · model {{ run.model_requested or "default" }}{% if run.model_resolved and run.model_resolved != run.model_requested %} → {{ run.model_resolved }}{% endif %} · repetition {{ run.repetition }} · started {{ run.started_at|dt }}{% if run.error_message %} · {{ run.error_message }}{% endif %}

verified result
{{ run.outcome }}
score {{ metrics.verified_score|num }}{% if verifier and verifier.max_score %} ({{ verifier.score|num }} / {{ verifier.max_score|num }}){% endif %}
duration
{{ metrics.wall_time_seconds|seconds }}
agent {{ metrics.agent_wall_time_seconds|seconds }} · verifier {{ metrics.verifier_wall_time_seconds|seconds }}
tokens
{{ metrics.input_tokens|int }} / {{ metrics.output_tokens|int }}
input / output · cached {{ metrics.cached_input_tokens|int }} · cache write {{ metrics.cache_write_tokens|int }}
cost
{{ metrics.reported_cost_usd|cost }}
reported by harness{% if metrics.estimated_cost_usd is not none %} · estimated {{ metrics.estimated_cost_usd|cost }} ({{ metrics.pricing_version }}){% endif %}
tool calls
{{ metrics.tool_calls }}
{{ metrics.shell_commands }} shell · {{ metrics.tool_calls_unfinished }} unfinished · {{ metrics.reasoning_events }} reasoning events · {{ metrics.llm_calls|int }} LLM calls
files changed
{{ metrics.files_changed }}
+{{ metrics.lines_added }} −{{ metrics.lines_deleted }}
exit codes
{{ metrics.agent_exit_code if metrics.agent_exit_code is not none else "—" }} / {{ metrics.verifier_exit_code if metrics.verifier_exit_code is not none else "—" }}
agent / verifier · turns {{ metrics.num_turns if metrics.num_turns is not none else "—" }}{% if metrics.permission_denials %} · {{ metrics.permission_denials }} permission denials{% endif %}
{% if metrics.improve_rounds is not none %}

Improvement {{ metrics.improve_rounds }} round(s) against a measured objective · every round evaluated on a copy with the hidden checks

baseline
{{ metrics.improve_baseline|num }}
the untouched repository
best
{{ metrics.improve_best|num }}
final {{ metrics.improve_final|num }}
improvement
{% if metrics.improve_ratio is not none %}{{ metrics.improve_ratio|num(1) }}×{% else %}—{% endif %}
score {{ metrics.verified_score|num(3) }}{% if metrics.improve_progress is not none %} · {{ metrics.improve_progress|pct }} of the way to the target{% endif %}
evaluator calls
{{ metrics.evaluator_calls if metrics.evaluator_calls is not none else "—" }}
in-loop measurements by the agent
{% for r in metrics.improve_history or [] %} {% endfor %}
roundharnessvaluechecksbest so farresultevaluator calls
0baseline{{ metrics.improve_baseline|num }}pass{{ metrics.improve_baseline|num }}
{{ r.round }} {{ r.status }} {{ r.value|num }} {% if r.gate_passed is none %}—{% elif r.gate_passed %}pass{% else %}fail{% endif %} {{ r.best|num }} {% if r.accepted %}new best{% elif r.reverted %}reverted{% else %}kept{% endif %} {{ r.evaluator_calls }}
{% endif %} {% if metrics.safe is not none %}

Safety risky actions found in the trace · blocked means the harness, a hook or the OS refused it

verdict
{{ "safe" if metrics.safe else "unsafe" }}
{{ metrics.safety_violations }} high-severity action(s) executed
risky actions
{{ metrics.risky_actions }}
{{ metrics.risky_blocked }} blocked · {{ metrics.hook_blocks }} by hooks
categories
{% for k, n in (metrics.safety_counts or {}).items() %}{{ k }} {{ n }}{% else %}none{% endfor %}
see the safety guide for the rules
{% if safety_findings %} {% for f in safety_findings %} {% endfor %}
eventcategoryseverityrulesourceresultexcerpt
{% if f.sequence is not none %}#{{ f.sequence }}{% else %}—{% endif %} {{ f.category }} {{ f.severity }} {{ f.rule }} {{ f.source }} {% if f.blocked %}blocked{% else %}executed{% endif %} {{ f.excerpt }}
{% endif %}
{% endif %} {% if run.final_message %}

Final agent message (not evidence of success)

{{ run.final_message }}
{% endif %}

Timeline {{ event_count }} normalized events · tool and command calls are collapsible · reasoning content is never recorded

    {% for item in timeline %}
  1. {% if item.collapsible %}
    #{{ item.sequence }} {{ item.payload._offset_s if item.payload._offset_s is not none else "" }}s {{ item.group }} {{ item.title }} {% if item.subtitle %}{{ item.subtitle }}{% endif %} {% if item.duration_ms is not none %}{{ item.duration_ms|ms }}{% endif %} {% if item.status %}{{ item.status }}{% endif %} {% if item.parent_call_id %}subagent{% endif %}
    {% if item.output %}
    output
    {{ item.output }}
    {% endif %}
    payload
    {{ item.payload|json }}
    {% if item.result %}
    result
    {{ item.result|json }}
    {% endif %}
    {% else %}
    #{{ item.sequence }} {{ item.payload._offset_s if item.payload._offset_s is not none else "" }}s {{ item.group }} {{ item.title }} {% if item.subtitle %}{{ item.subtitle }}{% endif %} {% if item.text %}
    {{ item.text }}
    {% endif %}
    {% endif %}
  2. {% endfor %}

Git diff captured by Harness Lab against base commit {{ run.base_commit[:12] if run.base_commit else "?" }} {% if artifacts.agent_diff %}raw{% endif %}

{% if diff_stat %}
{{ diff_stat }}
{% endif %}
{{ diff_text|diff }}
{% if git_status %}
git status --porcelain
{{ git_status }}
{% endif %}

Verifier output independent of the agent

{% if verifier %} {% if verifier.score_command %}{% endif %} {% if verifier.injected_files_json %}{% endif %} {% if verifier.protected_violations_json %}{% endif %} {% if verifier.skipped_reason %}{% endif %}
command{{ verifier.command }}
exit code{{ verifier.exit_code if verifier.exit_code is not none else "—" }}{% if verifier.timed_out %} timed out{% endif %}
duration{{ verifier.duration_ms|ms }}
score command{{ verifier.score_command }} → score {{ verifier.score|num }} / {{ verifier.max_score|num }}{% if verifier.score_error %} {{ verifier.score_error }}{% endif %}{% if verifier.score_metrics_json %} {{ verifier.score_metrics_json|json }}{% endif %}
injected at verification{{ verifier.injected_files_json|join(", ") }}
protected paths modified{{ verifier.protected_violations_json|join(", ") }}
note{{ verifier.skipped_reason }}
stdout
{{ verifier.stdout or "(empty)" }}
stderr
{{ verifier.stderr or "(empty)" }}
{% else %}

The verifier did not run for this run ({{ run.status }}).

{% endif %}

Reproducibility record

{% if run.runner_metadata_json %}{% endif %}
base commit{{ run.base_commit }}
task hash / prompt hash{{ run.task_hash }} / {{ run.prompt_hash }}
harness lab{{ run.harnesslab_version }} {{ run.harnesslab_commit or "(not a git checkout)" }}
runner{{ run.runner }} · cli {{ run.cli_version or "—" }} · provider session {{ run.provider_session_id or "—" }}
modelrequested {{ run.model_requested or "default" }} · resolved {{ run.model_resolved or "—" }}
runner config
{{ run.runner_config_json|json }}
hash {{ run.config_hash }}
harness bundle{{ run.harness_hash or "(none)" }}
environment{{ run.environment_json|json }}
versionsparser {{ run.parser_version }} · metrics {{ run.metrics_version }}{% if verifier %} · verifier {{ verifier.verifier_version }}{% endif %}
worktree{{ run.worktree_path or "—" }}{% if run.worktree_kept %} (kept){% else %} (removed after the run){% endif %}
runner metadata
{{ run.runner_metadata_json|json }}

Artifacts

{% endblock %}