cursor-grok-4.5 @ medium · cursor

cursormedium
config
cursor-grok-4.5-eff-medium--cli--cursor--dev
batch
2026-07-19--unified
transport
cursor-agent-cli-isolated-home
protocol
cli · plan
served model
cursor-grok-4.5-medium
captured
Jul 18, 2026, 11:54 AM · N=2
variant
live
slot 0 · P-q · sandboxed iframe
cursor-grok-4.5 @medium · cursor P-q slot 0 screenshot

The screenshot is the exact frozen pixels the similarity channels measured. Run live re-executes the raw output in a sandboxed iframe; its rendering depends on your browser and fonts and is not guaranteed to match the measured pixels.

similarity neighbors

within session 2026-07-19--unified

similarity measures convergence within this session — not quality.

Fidelity — does the card show the right data?

  • namematch
  • conditionmatch
  • datematch
  • max tempmatchshown: 25
  • min tempmatchshown: 16
  • hourlyambiguouscoverage · 0 match · 0 mismatch · 24 not shown
  • request sidematch0 violation(s)

extractor fidelity-extractor-v1+Berlin-2026-07-15

Source — raw model output, one byte unchanged

download card.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=1280, height=800">
<title>Weather</title>
<style>
  :root {
    --ink: #0e1a24;
    --ink-soft: #3a4a57;
    --muted: #6b7c8a;
    --line: rgba(14, 26, 36, 0.1);
    --panel: rgba(255, 255, 255, 0.42);
    --panel-strong: rgba(255, 255, 255, 0.62);
    --accent: #c45c26;
    --sky-top: #7eb6d9;
    --sky-mid: #c5dde8;
    --sky-bot: #eef3f0;
    --glow: rgba(255, 214, 160, 0.55);
  }

  * { box-sizing: border-box; margin: 0; padding: 0; }

  html, body {
    width: 1280px;
    height: 800px;
    overflow: hidden;
    font-family: "Avenir Next", "Segoe UI", "Helvetica Neue", sans-serif;
    color: var(--ink);
    background: #0b1220;
  }

  body {
    display: grid;
    place-items: stretch;
  }

  .stage {
    position: relative;
    width: 1280px;
    height: 800px;
    overflow: hidden;
    background:
      radial-gradient(ellipse 900px 480px at 78% 18%, var(--glow), transparent 60%),
      linear-gradient(165deg, var(--sky-top) 0%, var(--sky-mid) 48%, var(--sky-bot) 100%);
    transition: background 0.8s ease;
  }

  .stage::before {
    content: "";
    position: absolute;
    inset: 0;
    background:
      radial-gradient(circle at 18% 78%, rgba(255,255,255,0.25), transparent 42%),
      radial-gradient(circle at 86% 72%, rgba(14,26,36,0.06), transparent 35%);
    pointer-events: none;
  }

  .haze {
    position: absolute;
    left: -10%;
    right: -10%;
    bottom: -8%;
    height: 42%;
    background: linear-gradient(180deg, transparent, rgba(255,255,255,0.35) 40%, rgba(238,243,240,0.85));
    filter: blur(18px);
    animation: drift 18s ease-in-out infinite alternate;
    pointer-events: none;
  }

  @keyframes drift {
    from { transform: translateX(-2%) translateY(0); }
    to { transform: translateX(3%) translateY(-1.5%); }
  }

  .sun {
    position: absolute;
    top: 72px;
    right: 140px;
    width: 160px;
    height: 160px;
    border-radius: 50%;
    background: radial-gradient(circle at 35% 35%, #fff7e6 0%, #ffd27a 38%, #f0a35a 70%, transparent 72%);
    box-shadow: 0 0 80px 30px rgba(255, 200, 120, 0.35);
    opacity: 0.9;
    animation: pulse 6s ease-in-out infinite;
    pointer-events: none;
  }

  @keyframes pulse {
    0%, 100% { transform: scale(1); opacity: 0.88; }
    50% { transform: scale(1.04); opacity: 1; }
  }

  .content {
    position: relative;
    z-index: 2;
    height: 100%;
    padding: 56px 72px 48px;
    display: grid;
    grid-template-rows: auto 1fr auto;
    gap: 28px;
  }

  .top {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 40px;
  }

  .place {
    max-width: 720px;
  }

  .place h1 {
    font-family: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
    font-size: 72px;
    font-weight: 600;
    letter-spacing: -0.03em;
    line-height: 0.95;
    color: var(--ink);
    text-wrap: balance;
  }

  .place .date {
    margin-top: 14px;
    font-size: 18px;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--ink-soft);
    font-weight: 500;
  }

  .condition-block {
    text-align: right;
    padding-top: 10px;
    min-width: 240px;
  }

  .condition-label {
    font-size: 13px;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--muted);
    margin-bottom: 8px;
  }

  .condition {
    font-family: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
    font-size: 32px;
    line-height: 1.15;
    color: var(--ink);
  }

  .temps {
    display: flex;
    align-items: flex-end;
    gap: 48px;
    padding: 8px 0 12px;
  }

  .temp-main {
    display: flex;
    align-items: flex-start;
    gap: 6px;
  }

  .temp-main .value {
    font-family: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
    font-size: 168px;
    font-weight: 600;
    letter-spacing: -0.05em;
    line-height: 0.82;
    color: var(--ink);
  }

  .temp-main .unit {
    font-size: 36px;
    font-weight: 500;
    margin-top: 18px;
    color: var(--ink-soft);
  }

  .temp-range {
    display: flex;
    flex-direction: column;
    gap: 18px;
    padding-bottom: 14px;
  }

  .range-item {
    display: grid;
    grid-template-columns: 48px auto;
    align-items: baseline;
    gap: 12px;
  }

  .range-item .label {
    font-size: 13px;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--muted);
  }

  .range-item .num {
    font-family: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
    font-size: 42px;
    font-weight: 600;
    letter-spacing: -0.02em;
    color: var(--ink);
  }

  .hourly {
    background: var(--panel);
    backdrop-filter: blur(18px);
    -webkit-backdrop-filter: blur(18px);
    border: 1px solid rgba(255,255,255,0.45);
    border-radius: 20px;
    padding: 22px 28px 20px;
    box-shadow: 0 20px 50px rgba(14, 26, 36, 0.08);
  }

  .hourly-head {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    margin-bottom: 16px;
  }

  .hourly-head h2 {
    font-size: 13px;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--muted);
    font-weight: 600;
  }

  .hourly-head span {
    font-size: 13px;
    color: var(--ink-soft);
  }

  .hours {
    display: grid;
    grid-template-columns: repeat(24, 1fr);
    gap: 4px;
    align-items: end;
    min-height: 168px;
  }

  .hour {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    min-width: 0;
  }

  .hour .bar-wrap {
    width: 100%;
    height: 110px;
    display: flex;
    align-items: flex-end;
    justify-content: center;
  }

  .hour .bar {
    width: 70%;
    max-width: 18px;
    border-radius: 999px 999px 6px 6px;
    background: linear-gradient(180deg, rgba(196, 92, 38, 0.85), rgba(14, 26, 36, 0.18));
    transform-origin: bottom;
    animation: rise 0.9s cubic-bezier(0.22, 1, 0.36, 1) both;
  }

  @keyframes rise {
    from { transform: scaleY(0.15); opacity: 0; }
    to { transform: scaleY(1); opacity: 1; }
  }

  .hour .t {
    font-size: 12px;
    font-weight: 600;
    color: var(--ink);
    font-variant-numeric: tabular-nums;
  }

  .hour .h {
    font-size: 10px;
    letter-spacing: 0.02em;
    color: var(--muted);
    font-variant-numeric: tabular-nums;
  }

  .error, .loading {
    position: absolute;
    inset: 0;
    z-index: 5;
    display: grid;
    place-items: center;
    background:
      radial-gradient(ellipse 800px 420px at 50% 40%, rgba(255,255,255,0.55), transparent 70%),
      linear-gradient(165deg, #8aa8be 0%, #d5e2e8 55%, #eef2ef 100%);
    text-align: center;
    padding: 48px;
  }

  .error h1, .loading h1 {
    font-family: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
    font-size: 48px;
    margin-bottom: 12px;
    letter-spacing: -0.02em;
  }

  .error p, .loading p {
    font-size: 18px;
    color: var(--ink-soft);
    max-width: 480px;
  }

  .loading .pulse-dot {
    width: 12px;
    height: 12px;
    border-radius: 50%;
    background: var(--accent);
    margin: 0 auto 24px;
    animation: pulse 1.2s ease-in-out infinite;
  }

  .hidden { display: none !important; }

  .stage[data-theme="clear"] {
    --sky-top: #5ea6d4;
    --sky-mid: #b9d8ea;
    --sky-bot: #eef4f1;
    --glow: rgba(255, 214, 150, 0.6);
  }

  .stage[data-theme="cloudy"] {
    --sky-top: #7f93a5;
    --sky-mid: #b7c4ce;
    --sky-bot: #e4e8ea;
    --glow: rgba(220, 230, 240, 0.35);
  }

  .stage[data-theme="rain"] {
    --sky-top: #4d6578;
    --sky-mid: #7f96a6;
    --sky-bot: #c9d4db;
    --glow: rgba(160, 190, 210, 0.25);
    --ink: #10202c;
  }

  .stage[data-theme="snow"] {
    --sky-top: #9bb4c8;
    --sky-mid: #d4e0ea;
    --sky-bot: #f2f5f7;
    --glow: rgba(255, 255, 255, 0.7);
  }

  .stage[data-theme="storm"] {
    --sky-top: #2f3d4d;
    --sky-mid: #5a6d7d;
    --sky-bot: #9aadb8;
    --glow: rgba(180, 200, 220, 0.2);
    --ink: #0d1720;
    --panel: rgba(255,255,255,0.28);
  }

  .stage[data-theme="fog"] {
    --sky-top: #9aa6ad;
    --sky-mid: #c8d0d4;
    --sky-bot: #e8ecee;
    --glow: rgba(255,255,255,0.45);
  }

  .stage[data-theme="clear"] .sun { opacity: 1; }
  .stage[data-theme="cloudy"] .sun,
  .stage[data-theme="rain"] .sun,
  .stage[data-theme="storm"] .sun,
  .stage[data-theme="fog"] .sun,
  .stage[data-theme="snow"] .sun { opacity: 0.25; filter: grayscale(0.4); }
</style>
</head>
<body>
  <div class="stage" id="stage" data-theme="clear">
    <div class="sun" id="sun"></div>
    <div class="haze"></div>

    <div class="loading" id="loading">
      <div>
        <div class="pulse-dot"></div>
        <h1>Fetching sky</h1>
        <p>Loading weather for your location…</p>
      </div>
    </div>

    <div class="error hidden" id="error">
      <div>
        <h1>Weather unavailable</h1>
        <p>The data could not be loaded. Check the location and date, then try again.</p>
      </div>
    </div>

    <div class="content hidden" id="content">
      <header class="top">
        <div class="place">
          <h1 id="name">Berlin</h1>
          <div class="date" id="dateLabel">—</div>
        </div>
        <div class="condition-block">
          <div class="condition-label">Condition</div>
          <div class="condition" id="condition">—</div>
        </div>
      </header>

      <section class="temps">
        <div class="temp-main">
          <div class="value" id="maxTemp">—</div>
          <div class="unit">°C</div>
        </div>
        <div class="temp-range">
          <div class="range-item">
            <span class="label">High</span>
            <span class="num" id="maxTempSide">—</span>
          </div>
          <div class="range-item">
            <span class="label">Low</span>
            <span class="num" id="minTemp">—</span>
          </div>
        </div>
      </section>

      <section class="hourly">
        <div class="hourly-head">
          <h2>Hourly temperature</h2>
          <span id="hourSummary">24 hours · °C</span>
        </div>
        <div class="hours" id="hours"></div>
      </section>
    </div>
  </div>

<script>
(function () {
  const WMO = {
    0: "Clear sky",
    1: "Mainly clear",
    2: "Partly cloudy",
    3: "Overcast",
    45: "Fog",
    48: "Depositing rime fog",
    51: "Light drizzle",
    53: "Moderate drizzle",
    55: "Dense drizzle",
    56: "Light freezing drizzle",
    57: "Dense freezing drizzle",
    61: "Slight rain",
    63: "Moderate rain",
    65: "Heavy rain",
    66: "Light freezing rain",
    67: "Heavy freezing rain",
    71: "Slight snow",
    73: "Moderate snow",
    75: "Heavy snow",
    77: "Snow grains",
    80: "Slight rain showers",
    81: "Moderate rain showers",
    82: "Violent rain showers",
    85: "Slight snow showers",
    86: "Heavy snow showers",
    95: "Thunderstorm",
    96: "Thunderstorm with slight hail",
    99: "Thunderstorm with heavy hail"
  };

  function themeForCode(code) {
    if (code === 0 || code === 1) return "clear";
    if (code === 2 || code === 3) return "cloudy";
    if (code === 45 || code === 48) return "fog";
    if ([71, 73, 75, 77, 85, 86].includes(code)) return "snow";
    if ([95, 96, 99].includes(code)) return "storm";
    if ([51, 53, 55, 56, 57, 61, 63, 65, 66, 67, 80, 81, 82].includes(code)) return "rain";
    return "cloudy";
  }

  function todayUTC() {
    const now = new Date();
    const y = now.getUTCFullYear();
    const m = String(now.getUTCMonth() + 1).padStart(2, "0");
    const d = String(now.getUTCDate()).padStart(2, "0");
    return `${y}-${m}-${d}`;
  }

  function parseParams() {
    const q = new URLSearchParams(window.location.search);
    const lat = parseFloat(q.get("lat"));
    const lon = parseFloat(q.get("lon"));
    return {
      lat: Number.isFinite(lat) ? lat : 52.52,
      lon: Number.isFinite(lon) ? lon : 13.405,
      name: q.get("name") || "Berlin",
      date: q.get("date") || todayUTC()
    };
  }

  function isPastDate(dateStr) {
    return dateStr < todayUTC();
  }

  function formatDisplayDate(dateStr) {
    const [y, m, d] = dateStr.split("-").map(Number);
    const dt = new Date(Date.UTC(y, m - 1, d));
    return new Intl.DateTimeFormat("en-GB", {
      weekday: "long",
      day: "numeric",
      month: "long",
      year: "numeric",
      timeZone: "UTC"
    }).format(dt);
  }

  function showError() {
    document.getElementById("loading").classList.add("hidden");
    document.getElementById("content").classList.add("hidden");
    document.getElementById("error").classList.remove("hidden");
  }

  function buildUrl(base, params) {
    const sp = new URLSearchParams({
      latitude: String(params.lat),
      longitude: String(params.lon),
      daily: "temperature_2m_max,temperature_2m_min,weather_code",
      hourly: "temperature_2m",
      timezone: "UTC",
      temperature_unit: "celsius",
      start_date: params.date,
      end_date: params.date
    });
    return `${base}?${sp.toString()}`;
  }

  function roundTemp(t) {
    if (t == null || Number.isNaN(t)) return null;
    return Math.round(t);
  }

  function render(params, data) {
    const daily = data.daily || {};
    const hourly = data.hourly || {};
    const max = roundTemp(daily.temperature_2m_max && daily.temperature_2m_max[0]);
    const min = roundTemp(daily.temperature_2m_min && daily.temperature_2m_min[0]);
    const code = daily.weather_code && daily.weather_code[0];
    const times = hourly.time || [];
    const temps = hourly.temperature_2m || [];

    if (max == null || min == null || code == null || !times.length || !temps.length) {
      showError();
      return;
    }

    const theme = themeForCode(code);
    document.getElementById("stage").setAttribute("data-theme", theme);

    document.getElementById("name").textContent = params.name;
    document.getElementById("dateLabel").textContent = formatDisplayDate(params.date);
    document.getElementById("condition").textContent = WMO[code] || `Code ${code}`;
    document.getElementById("maxTemp").textContent = String(max);
    document.getElementById("maxTempSide").textContent = `${max}°`;
    document.getElementById("minTemp").textContent = `${min}°`;

    const nums = temps.map((t) => (t == null ? null : Number(t))).filter((t) => t != null);
    const lo = Math.min(...nums);
    const hi = Math.max(...nums);
    const span = Math.max(hi - lo, 1);

    const hoursEl = document.getElementById("hours");
    hoursEl.innerHTML = "";

    const pairs = times.map((t, i) => ({ time: t, temp: temps[i] }))
      .filter((p) => p.time && p.time.startsWith(params.date));

    const list = pairs.length ? pairs : times.map((t, i) => ({ time: t, temp: temps[i] }));

    list.forEach((p, i) => {
      const temp = roundTemp(p.temp);
      if (temp == null) return;
      const hour = p.time.slice(11, 13) || String(i).padStart(2, "0");
      const height = 18 + ((Number(p.temp) - lo) / span) * 92;
      const el = document.createElement("div");
      el.className = "hour";
      el.innerHTML =
        `<div class="bar-wrap"><div class="bar" style="height:${height}px;animation-delay:${i * 18}ms"></div></div>` +
        `<div class="t">${temp}°</div>` +
        `<div class="h">${hour}</div>`;
      hoursEl.appendChild(el);
    });

    document.getElementById("hourSummary").textContent =
      `${list.length} hours · ${min}° to ${max}°C`;

    document.getElementById("loading").classList.add("hidden");
    document.getElementById("error").classList.add("hidden");
    document.getElementById("content").classList.remove("hidden");
  }

  async function main() {
    const params = parseParams();
    const endpoint = isPastDate(params.date) ? "/api/om/archive" : "/api/om/forecast";
    try {
      const res = await fetch(buildUrl(endpoint, params));
      if (!res.ok) throw new Error("bad status");
      const data = await res.json();
      if (data.error) throw new Error(data.reason || "api error");
      render(params, data);
    } catch (e) {
      showError();
    }
  }

  main();
})();
</script>
</body>
</html>

L1 — cheap deterministic descriptors

bytes total16,098html / css / js1,908 / 8,268 / 5,922
dom nodes44dom depth8
css rules56js presentyes
brightness165.5contrast41.8
colorfulness27.2whitespace30.8%

This slot's telemetry

prompt tokens34,368completion tokens12,321
total tokens46,689wall150.6 s
cost—request id—
config.json589 B
{
  "N": 2,
  "auth": {
    "credential_ref": "WCB_NONE",
    "method": "oauth-login"
  },
  "billing": "plan",
  "config_id": "cursor-grok-4.5-eff-medium--cli--cursor--dev",
  "effort": "medium",
  "family": "grok",
  "m": {
    "min": 2,
    "q": 2
  },
  "model_id": "cursor-grok-4.5",
  "protocol": "cli",
  "served_model": "cursor-grok-4.5-medium",
  "telemetry": {
    "completion_tokens": 38889,
    "cost_usd": null,
    "prompt_tokens": 108922,
    "total_tokens": 147811,
    "wall_ms": 467197
  },
  "transport": "cursor-agent-cli-isolated-home",
  "vendor_sanction_ref": null
}
send-log2.5 KB
{
  "N": 2,
  "batch_id": "2026-08-13--cursor-s0",
  "config_id": "cursor-grok-4.5-eff-medium--cli--cursor--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-08-12T17:31:30.209321+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T17:30:04.854513+00:00"
        }
      ],
      "block_index": 0,
      "model_reaching_attempt_index": 0,
      "slot_index": 0,
      "terminal_state": "valid",
      "variant": "P-min"
    },
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-08-12T17:34:04.291676+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T17:31:33.710744+00:00"
        }
      ],
      "block_index": 0,
      "model_reaching_attempt_index": 0,
      "slot_index": 0,
      "terminal_state": "valid",
      "variant": "P-q"
    },
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-08-12T17:36:30.049711+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T17:34:08.263987+00:00"
        }
      ],
      "block_index": 1,
      "model_reaching_attempt_index": 0,
      "slot_index": 1,
      "terminal_state": "valid",
      "variant": "P-q"
    },
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-08-12T17:38:03.431902+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T17:36:33.952557+00:00"
        }
      ],
      "block_index": 1,
      "model_reaching_attempt_index": 0,
      "slot_index": 1,
      "terminal_state": "valid",
      "variant": "P-min"
    }
  ],
  "retry_policy": {
    "max_unreachable_retries": 5,
    "rate_limit_backoff": {
      "max_attempts": 4,
      "max_total_ms": 60000
    }
  }
}