rtk · usage report

Token Savings

Live from rtk gain + rtk discover · global scope

Daily trend

By week and month

Tokens saved by command

Top 10 — a hard cap in the tool itself, not a display choice.

Missed opportunities

Parse failures

'\n cat <<'EOF'\n\nEOF\n} > \"$SP/pourtest/solo.html\"\necho \"built solo.html\"; curl -s -o /dev/null -w \"%{http_code}\\n\" http://localhost:8766/solo.html"}, {"base_command": "fi\n perl", "count": 1, "example": "fi\n perl -e 'select undef,undef,undef,1'\ndone\necho \"=== response ===\"\ncurl -s -w \"\\nstatus %{http_code} | type %{content_type} | bytes %{size_download}\\n\" \"http://localhost:8788/api/videos\" -o /tmp/yt.json"}, {"base_command": "VITE_SPOTIFY_CLIENT_ID", "count": 1, "example": "SPOTIFY_CLIENT_ID=$(grep VITE_SPOTIFY_CLIENT_ID .env.local"}, {"base_command": "the Iron", "count": 1, "example": "DESC='Pour the Iron v2: real defect model (cold shut/short pour/runout), arrow-key pour rate, weight-based ladle, molds-per-hour dashboard'"}, {"base_command": "exit 1", "count": 1, "example": "exit 1"}, {"base_command": "sw_vers", "count": 1, "example": "sw_vers"}, {"base_command": "-e 'tell", "count": 1, "example": "OUT=/private/tmp/claude-501/-Users-jd9hall/31adf8b3-86b1-4885-a3a8-46a2b4817f9e/scratchpad\nWAS_RUNNING=$(osascript -e 'tell application \"System Events\" to (name of processes) contains \"Safari\"')\necho \"Safari was running: $WAS_RUNNING\"\nosascript <<'AS'\ntell application \"Safari\"\n activate\n make new document with properties {URL:\"https://justindhall.pages.dev/ai\"}\n set bounds of window 1 to {60, 60, 1500, 960}\nend tell\nAS\nsleep 6\nWID=$(osascript -e 'tell application \"Safari\" to id of window 1')\nscreencapture -x -o -l\"$WID\" \"$OUT/safari-ai.png\" 2>/dev/null || screencapture -x -D 1 \"$OUT/safari-ai.png\"\nls -la \"$OUT/safari-ai.png\""}, {"base_command": "and build", "count": 1, "example": "DESC=\"Specs and build docs for the iPhone WidgetKit widgets\""}, {"base_command": "git mv", "count": 1, "example": "git mv --force Credentials.json credentials.json 2>/dev/null"}, {"base_command": "v=$(pbpaste)", "count": 1, "example": "v=$(pbpaste)"}, {"base_command": "find-generic-password", "count": 1, "example": "KEY=$(security find-generic-password -s spotify-widget -a widget_key -w 2>/dev/null)"}], "parse_errors": 0, "rtk_disabled_count": 0, "rtk_disabled_examples": [], "agent_status": {"cursor_hook_installed": false, "hermes_plugin_installed": false, "copilot_hook_installed": false}}, "opportunityTokens": 257613}; var REDUCED = window.matchMedia('(prefers-reduced-motion: reduce)').matches; // ---- theme toggle (manual override beats system preference either direction) ---- var STORAGE_KEY = 'rtk_dashboard_theme'; function applyTheme(t) { if (t) document.documentElement.dataset.theme = t; else delete document.documentElement.dataset.theme; } function systemDark() { return window.matchMedia('(prefers-color-scheme: dark)').matches; } var stored = localStorage.getItem(STORAGE_KEY); applyTheme(stored === 'light' || stored === 'dark' ? stored : null); function paintToggleIcon() { var dark = document.documentElement.dataset.theme ? document.documentElement.dataset.theme === 'dark' : systemDark(); document.getElementById('themeToggle').innerHTML = dark ? '' : ''; } paintToggleIcon(); document.getElementById('themeToggle').addEventListener('click', function () { var current = document.documentElement.dataset.theme || (systemDark() ? 'dark' : 'light'); var next = current === 'dark' ? 'light' : 'dark'; localStorage.setItem(STORAGE_KEY, next); applyTheme(next); paintToggleIcon(); }); var css = getComputedStyle(document.querySelector('.viz-root')); function tok(name) { return css.getPropertyValue(name).trim(); } var CATEGORY_SLOTS = { 'Git': 'cat-1', 'PackageManager': 'cat-2', 'Files': 'cat-3', 'Build': 'cat-4', 'Network': 'cat-5', 'Test': 'cat-6', 'Infrastructure': 'cat-7', 'GitHub': 'cat-8', }; function categoryColor(cat) { return tok('--' + (CATEGORY_SLOTS[cat] || 'cat-other')); } function compact(n) { // Savings crossed a million once rtk grep started dominating; without an // M step the headline read "2054.5K". if (Math.abs(n) >= 1000000) return (n / 1000000).toFixed(1) + 'M'; if (Math.abs(n) >= 1000) return (n / 1000).toFixed(1) + 'K'; return String(Math.round(n)); } // count-up on stat tiles — the immediate, no-hover-required "this is alive" signal function animateValue(el, target, opts) { opts = opts || {}; if (REDUCED) { el.textContent = opts.format ? opts.format(target) : compact(target); return; } var start = performance.now(), dur = 700; function frame(now) { var t = Math.min(1, (now - start) / dur); var eased = 1 - Math.pow(1 - t, 3); var v = target * eased; el.textContent = opts.format ? opts.format(v) : compact(v); if (t < 1) requestAnimationFrame(frame); else el.textContent = opts.format ? opts.format(target) : compact(target); } requestAnimationFrame(frame); } var tooltip = document.getElementById('tooltip'); function showTooltip(x, y, valueText, labelText) { tooltip.innerHTML = ''; var strong = document.createElement('span'); strong.className = 'tt-value'; strong.textContent = valueText; var sep = document.createTextNode(' — '); var name = document.createElement('span'); name.textContent = labelText; tooltip.appendChild(strong); tooltip.appendChild(sep); tooltip.appendChild(name); tooltip.style.left = x + 'px'; tooltip.style.top = y + 'px'; tooltip.classList.add('show'); } function hideTooltip() { tooltip.classList.remove('show'); } // ---- stat tiles (values count up on load) ---- (function renderTiles() { var s = DATA.summary; var tiles = [ { label: 'Total commands', target: s.total_commands, format: function (v) { return compact(v); } }, { label: 'Tokens saved', target: s.total_saved, format: function (v) { return compact(v); } }, { label: 'Avg savings', target: s.avg_savings_pct, format: function (v) { return v.toFixed(1) + '%'; } }, { label: 'Avg exec time', target: s.avg_time_ms / 1000, format: function (v) { return v.toFixed(1) + 's'; } }, { label: 'Tokens still on the table', target: DATA.opportunityTokens, format: function (v) { return compact(v); }, accent: true }, ]; var root = document.getElementById('tiles'); tiles.forEach(function (t) { var el = document.createElement('div'); el.className = 'tile' + (t.accent ? ' accent' : ''); var l = document.createElement('div'); l.className = 'label'; l.textContent = t.label; var v = document.createElement('div'); v.className = 'value'; v.textContent = t.format(0); el.appendChild(l); el.appendChild(v); root.appendChild(el); animateValue(v, t.target, { format: t.format }); }); }()); // ---- daily trend (line + area, animated draw-in, crosshair tooltip) ---- (function renderTrend() { var daily = DATA.daily || []; var note = document.getElementById('trendNote'); if (daily.length === 0) { note.textContent = 'No daily data yet.'; return; } // Absolute savings track how heavily rtk was used that day, so a single // heavy day flattens every other into the baseline — one 1.9M day against // days under 60K makes the line a spike and nothing else. Efficiency is // bounded and comparable day to day, so it leads; the absolute series is // one click away. var METRICS = { savings_pct: { label: 'Efficiency', fmt: function (v) { return Math.round(v) + '%'; } }, saved_tokens: { label: 'Tokens saved', fmt: compact } }; var metric = 'savings_pct'; var svg = document.getElementById('trendSvg'); var W = 600, H = 170, padL = 8, padR = 8, padT = 16, padB = 26; var n = daily.length; function draw() { var spec = METRICS[metric]; while (svg.firstChild) svg.removeChild(svg.firstChild); note.textContent = (daily.length < 7 ? 'Only ' + daily.length + ' day' + (daily.length === 1 ? '' : 's') + ' recorded so far — this fills in as more days pass. ' : '') + spec.label + ' per day, last ' + daily.length + ' days.'; var maxSaved = Math.max.apply(null, daily.map(function (d) { return d[metric]; }).concat([1])); var stepX = n > 1 ? (W - padL - padR) / (n - 1) : 0; function xAt(i) { return n > 1 ? padL + i * stepX : W / 2; } function yAt(v) { return H - padB - (v / maxSaved) * (H - padT - padB); } var ns = 'http://www.w3.org/2000/svg'; function el(tag, attrs) { var e = document.createElementNS(ns, tag); for (var k in attrs) e.setAttribute(k, attrs[k]); return e; } svg.appendChild(el('line', { x1: padL, y1: H - padB, x2: W - padR, y2: H - padB, stroke: tok('--baseline'), 'stroke-width': 1 })); if (n > 1) { var linePts = daily.map(function (d, i) { return xAt(i) + ',' + yAt(d[metric]); }).join(' '); var areaPts = 'M' + xAt(0) + ',' + (H - padB) + ' L' + linePts.split(' ').join(' L') + ' L' + xAt(n - 1) + ',' + (H - padB) + ' Z'; var area = el('path', { d: areaPts, fill: tok('--seq-450'), opacity: 0 }); svg.appendChild(area); var line = el('polyline', { points: linePts, fill: 'none', stroke: tok('--seq-450'), 'stroke-width': 2, 'stroke-linejoin': 'round', 'stroke-linecap': 'round' }); svg.appendChild(line); if (!REDUCED) { var len = line.getTotalLength ? line.getTotalLength() : 1000; line.style.strokeDasharray = len; line.style.strokeDashoffset = len; line.style.transition = 'stroke-dashoffset 0.9s cubic-bezier(.16,1,.3,1)'; area.style.transition = 'opacity 0.6s ease 0.5s'; requestAnimationFrame(function () { requestAnimationFrame(function () { line.style.strokeDashoffset = 0; area.style.opacity = 0.1; }); }); } else { area.style.opacity = 0.1; } } var hitGroup = el('g', {}); daily.forEach(function (d, i) { var cx = xAt(i), cy = yAt(d[metric]); var ring = el('circle', { cx: cx, cy: cy, r: 4, fill: tok('--seq-450'), stroke: tok('--surface-1'), 'stroke-width': 2 }); svg.appendChild(ring); var hit = el('circle', { cx: cx, cy: cy, r: 14, fill: 'transparent', style: 'cursor:pointer' }); hit.tabIndex = 0; var onEnter = function () { var box = svg.getBoundingClientRect(); var px = box.left + (cx / W) * box.width; var py = box.top + (cy / H) * box.height + window.scrollY; showTooltip(px, py, spec.fmt(d[metric]), d.date + ' · ' + d.commands + ' commands · ' + compact(d.saved_tokens) + ' saved'); var ch = document.getElementById('crosshair'); ch.style.left = px + 'px'; ch.style.opacity = 1; }; hit.addEventListener('pointerenter', onEnter); hit.addEventListener('pointermove', onEnter); hit.addEventListener('focus', onEnter); hit.addEventListener('pointerleave', function () { hideTooltip(); document.getElementById('crosshair').style.opacity = 0; }); hit.addEventListener('blur', function () { hideTooltip(); document.getElementById('crosshair').style.opacity = 0; }); hitGroup.appendChild(hit); if (i === n - 1) { var lbl = el('text', { x: cx - 2, y: cy - 12, 'text-anchor': 'end', 'font-size': 11, 'font-weight': 600, fill: tok('--text-primary') }); lbl.textContent = spec.fmt(d[metric]); svg.appendChild(lbl); } // Anchor the end ticks inward: centred on the plot edge, half the label // falls outside the viewBox and gets clipped mid-digit. var anchor = i === 0 ? 'start' : i === n - 1 ? 'end' : 'middle'; var tick = el('text', { x: cx, y: H - padB + 16, 'text-anchor': anchor, 'font-size': 10, fill: tok('--text-muted') }); tick.textContent = d.date.slice(5); svg.appendChild(tick); }); svg.appendChild(hitGroup); } draw(); var chips = document.getElementById('trendChips'); if (chips) { chips.addEventListener('click', function (e) { var btn = e.target.closest('button[data-metric]'); if (!btn || btn.dataset.metric === metric) return; metric = btn.dataset.metric; chips.querySelectorAll('button').forEach(function (b) { b.classList.toggle('active', b.dataset.metric === metric); }); draw(); }); } }()); // ---- weekly / monthly breakdown ---- // Listed as rows rather than charted: two weeks and one month exist so far, // and a one- or two-bar chart is a stat tile wearing the wrong clothes. Rows // scale as the periods accumulate, so this won't need revisiting. (function renderPeriods() { var weekly = DATA.weekly || []; var monthly = DATA.monthly || []; var card = document.getElementById('periodsCard'); var root = document.getElementById('periodsChart'); var note = document.getElementById('periodsNote'); if (!weekly.length && !monthly.length) { if (card) card.style.display = 'none'; return; } note.textContent = 'Savings grouped by period. Percent is the share of input tokens rtk removed, so it is comparable across periods; the totals are not.'; function shortDate(iso) { if (!iso) return ''; var p = iso.split('-'); return new Date(+p[0], +p[1] - 1, +p[2]).toLocaleDateString(undefined, { month: 'short', day: 'numeric' }); } function monthName(m) { var p = m.split('-'); return new Date(+p[0], +p[1] - 1, 1).toLocaleDateString(undefined, { month: 'long', year: 'numeric' }); } function section(title, rows, nameOf) { if (!rows.length) return; var h = document.createElement('div'); h.className = 'bar-label'; h.style.cssText = 'margin:10px 0 6px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.08em;font-size:10px'; h.textContent = title; root.appendChild(h); var maxVal = Math.max.apply(null, rows.map(function (r) { return r.saved_tokens; }).concat([1])); rows.forEach(function (d) { var row = document.createElement('div'); row.className = 'bar-row'; var label = document.createElement('div'); label.className = 'bar-label'; label.textContent = nameOf(d); row.appendChild(label); var track = document.createElement('div'); track.className = 'bar-track'; var fill = document.createElement('div'); fill.className = 'bar-fill'; fill.style.background = tok('--seq-450'); var w = Math.max((d.saved_tokens / maxVal) * 100, 2) + '%'; fill.dataset.targetWidth = w; fill.style.width = REDUCED ? w : '0%'; fill.tabIndex = 0; var show = function () { var r = fill.getBoundingClientRect(); showTooltip(r.left + r.width / 2 + window.scrollX, r.top + window.scrollY - 8, compact(d.saved_tokens) + ' tokens saved', nameOf(d) + ' · ' + d.commands + ' commands · ' + Math.round(d.savings_pct) + '%'); }; fill.addEventListener('pointerenter', show); fill.addEventListener('pointermove', show); fill.addEventListener('focus', show); fill.addEventListener('pointerleave', hideTooltip); fill.addEventListener('blur', hideTooltip); track.appendChild(fill); row.appendChild(track); var value = document.createElement('div'); value.className = 'bar-value'; value.textContent = compact(d.saved_tokens) + ' · ' + Math.round(d.savings_pct) + '%'; row.appendChild(value); root.appendChild(row); }); } section('By week', weekly.slice().reverse(), function (d) { return shortDate(d.week_start) + ' – ' + shortDate(d.week_end); }); section('By month', monthly.slice().reverse(), function (d) { return monthName(d.month); }); animateBars(root); }()); // ---- shared: animate a set of bar rows in with a slight stagger ---- function animateBars(container) { if (REDUCED) return; var fills = container.querySelectorAll('.bar-fill'); fills.forEach(function (f, i) { var target = f.dataset.targetWidth; f.style.width = '0%'; setTimeout(function () { f.style.width = target; }, 30 + i * 35); }); } // ---- command breakdown (sortable bar list) ---- (function renderCommands() { var container = document.getElementById('commandChart'); var chips = document.querySelectorAll('#sortChips .sort-chip'); var sortKey = 'saved'; function draw() { var rows = DATA.commands.slice().sort(function (a, b) { return b[sortKey] - a[sortKey]; }); var maxVal = Math.max.apply(null, rows.map(function (r) { return r[sortKey]; }).concat([1])); container.innerHTML = ''; rows.forEach(function (d) { var row = document.createElement('div'); row.className = 'bar-row'; var label = document.createElement('div'); label.className = 'bar-label'; label.textContent = d.command; row.appendChild(label); var track = document.createElement('div'); track.className = 'bar-track'; var fill = document.createElement('div'); fill.className = 'bar-fill'; fill.style.background = tok('--seq-450'); var w = Math.max((d[sortKey] / maxVal) * 100, 2) + '%'; fill.dataset.targetWidth = w; fill.style.width = REDUCED ? w : '0%'; fill.tabIndex = 0; track.appendChild(fill); row.appendChild(track); var value = document.createElement('div'); value.className = 'bar-value'; value.textContent = sortKey === 'saved' ? compact(d.saved) : sortKey === 'pct' ? d.pct + '%' : d.ms + 'ms'; row.appendChild(value); var show = function (e) { var r = fill.getBoundingClientRect(); showTooltip(r.left + r.width / 2 + window.scrollX, r.top + window.scrollY - 8, compact(d.saved) + ' tokens saved', d.command + ' ×' + d.count + ' (' + d.pct + '%)'); }; fill.addEventListener('pointerenter', show); fill.addEventListener('pointermove', show); fill.addEventListener('focus', show); fill.addEventListener('pointerleave', hideTooltip); fill.addEventListener('blur', hideTooltip); container.appendChild(row); }); animateBars(container); } chips.forEach(function (chip) { chip.addEventListener('click', function () { sortKey = chip.dataset.sort; chips.forEach(function (c) { c.classList.toggle('active', c === chip); }); draw(); }); }); chips[0].classList.add('active'); draw(); }()); // ---- missed opportunities (rtk discover) ---- (function renderOpportunities() { var supported = (DATA.discover.supported || []).slice().sort(function (a, b) { return b.estimated_savings_tokens - a.estimated_savings_tokens; }); var note = document.getElementById('opportunityNote'); note.textContent = supported.length === 0 ? 'Nothing found — everything scannable already goes through rtk.' : 'Commands from your last ' + DATA.discover.since_days + ' days that have an rtk equivalent you\'re not using yet.'; var seenCats = []; supported.forEach(function (d) { if (seenCats.indexOf(d.category) === -1) seenCats.push(d.category); }); var legend = document.getElementById('categoryLegend'); seenCats.forEach(function (cat) { var item = document.createElement('div'); item.className = 'legend-item'; var sw = document.createElement('span'); sw.className = 'legend-swatch'; sw.style.background = categoryColor(cat); var name = document.createElement('span'); name.textContent = cat; item.appendChild(sw); item.appendChild(name); legend.appendChild(item); }); var container = document.getElementById('opportunityChart'); var maxVal = Math.max.apply(null, supported.map(function (d) { return d.estimated_savings_tokens; }).concat([1])); supported.forEach(function (d) { var row = document.createElement('div'); row.className = 'bar-row'; var label = document.createElement('div'); label.className = 'bar-label'; var dot = document.createElement('span'); dot.className = 'bar-cat-dot'; dot.style.background = categoryColor(d.category); label.appendChild(dot); label.appendChild(document.createTextNode(d.command + ' → rtk ' + d.rtk_equivalent.replace(/^rtk\s*/, ''))); row.appendChild(label); var track = document.createElement('div'); track.className = 'bar-track'; var fill = document.createElement('div'); fill.className = 'bar-fill'; // a lighter tint carries magnitude; the dot + legend carry category // identity — keeps the bar area calm instead of eight saturated hues // competing for attention. fill.style.background = 'color-mix(in srgb, ' + categoryColor(d.category) + ' 55%, transparent)'; var w = Math.max((d.estimated_savings_tokens / maxVal) * 100, 2) + '%'; fill.dataset.targetWidth = w; fill.style.width = REDUCED ? w : '0%'; fill.tabIndex = 0; track.appendChild(fill); row.appendChild(track); var value = document.createElement('div'); value.className = 'bar-value'; value.textContent = compact(d.estimated_savings_tokens); row.appendChild(value); var show = function () { var r = fill.getBoundingClientRect(); showTooltip(r.left + r.width / 2 + window.scrollX, r.top + window.scrollY - 8, '~' + compact(d.estimated_savings_tokens) + ' tokens', d.command + ' ×' + d.count + ' — ' + d.category); }; fill.addEventListener('pointerenter', show); fill.addEventListener('pointermove', show); fill.addEventListener('focus', show); fill.addEventListener('pointerleave', hideTooltip); fill.addEventListener('blur', hideTooltip); container.appendChild(row); }); animateBars(container); }()); // ---- failures ---- (function renderFailures() { var f = DATA.failures; var row = document.getElementById('failuresRow'); var recoveryColor = f.recovery_pct >= 95 ? tok('--good-text') : f.recovery_pct >= 80 ? tok('--warning') : tok('--critical'); row.innerHTML = ''; var s1 = document.createElement('span'); s1.className = 'failures-stat'; s1.appendChild(document.createTextNode('Total failures: ')); var b1 = document.createElement('b'); b1.textContent = f.total; s1.appendChild(b1); var s2 = document.createElement('span'); s2.className = 'failures-stat'; s2.appendChild(document.createTextNode('Recovery rate: ')); var b2 = document.createElement('b'); b2.textContent = f.recovery_pct.toFixed(1) + '%'; b2.style.color = recoveryColor; s2.appendChild(b2); row.appendChild(s1); row.appendChild(s2); var list = document.getElementById('failuresList'); (f.top || []).forEach(function (item) { var chip = document.createElement('span'); chip.className = 'failure-chip'; chip.textContent = item.count + '× ' + item.command; list.appendChild(chip); }); }()); document.getElementById('footerNote').textContent = 'Command breakdown and failures are parsed from rtk’s text output (JSON mode doesn’t include them); ' + 'summary and daily trend come straight from rtk gain --format json; missed opportunities from rtk discover --format json.'; }());