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": "timeout 75", "count": 1, "example": "timeout 75 npx wrangler tail --format json > /private/tmp/claude-501/-Users-jd9hall/1b56ad43-9eed-446f-9ab0-b3f6e8bf6310/scratchpad/tail.json 2>/dev/null"}, {"base_command": "done\nfor", "count": 1, "example": "done\nfor h in 525603c 138a2fa 252948a 54d4859"}, {"base_command": "cd $S", "count": 1, "example": "S=/private/tmp/claude-501/-Users-jd9hall/28fcd8c7-e827-45e7-b61c-d4afe9adbdd8/scratchpad; cd $S && cat > bounds.swift <<'EOF'\nimport CoreGraphics\nlet list = CGWindowListCopyWindowInfo([.optionOnScreenOnly], kCGNullWindowID) as! [[String: Any]]\nfor w in list where (w[\"kCGWindowOwnerName\"] as? String) == \"Punch\" && (w[\"kCGWindowLayer\"] as! Int) == 0 {\n let b = w[\"kCGWindowBounds\"] as! [String: Any]; print(b[\"X\"]!, b[\"Y\"]!)\n}\nEOF\ncat > click.swift <<'EOF'\nimport CoreGraphics\nimport Foundation\nlet x = Double(CommandLine.arguments[1])!, y = Double(CommandLine.arguments[2])!\nlet p = CGPoint(x: x, y: y)\nfor t in [CGEventType.leftMouseDown, .leftMouseUp] {\n CGEvent(mouseEventSource: nil, mouseType: t, mouseCursorPosition: p, mouseButton: .left)!.post(tap: .cghidEventTap)\n usleep(80000)\n}\nEOF\nread X Y < <(swift bounds.swift 2>/dev/null); echo $X $Y; swift click.swift $((X+298)) $((Y+333)); sleep 1.5; W=$(swift wid.swift 2>/dev/null | awk '$2==0{print $1; exit}'); screencapture -x -o -l $W mac3.png && sips -Z 1400 mac3.png >/dev/null"}, {"base_command": "-d '\\n'", "count": 1, "example": "TOK=$(tr -d '\\n' < /private/tmp/claude-501/-Users-jd9hall/f3c33310-2366-4930-a1ed-22c5b791d198/scratchpad/capture_token)"}, {"base_command": "date +\"%Y-%m-%d", "count": 1, "example": "TZ=America/Chicago date +\"%Y-%m-%d %H:%M %Z\""}, {"base_command": "claude-api", "count": 1, "example": "S=/private/tmp/claude-501/bundled-skills/2.1.289/0c6224ea761ddfb66f7b6943c7c7fe1f/claude-api"}, {"base_command": "fi\n[", "count": 1, "example": "fi\n[ -f /tmp/.sbkey ]"}, {"base_command": "timeout 300", "count": 1, "example": "timeout 300 node parse-health-export.js 2>&1"}, {"base_command": "workers-oauth-provider", "count": 1, "example": "D=node_modules/@cloudflare/workers-oauth-provider"}, {"base_command": "readlink", "count": 1, "example": "readlink ~/projects/gmail-warehouse"}, {"base_command": "com.jd9hall.punch-refresh.plist", "count": 1, "example": "P=~/Library/LaunchAgents/com.jd9hall.punch-refresh.plist"}, {"base_command": "gather.sh newsfeed-app", "count": 1, "example": "LINES_PER=25 /private/tmp/claude-501/-Users-jd9hall/8e5dbc48-90c1-4612-8baa-65427fa02763/scratchpad/gather.sh newsfeed-app Notion personal-website Router-Table rtk-dashboard screenshot-filer 2>&1"}, {"base_command": "# Regenerate", "count": 1, "example": "# Regenerate combined files\nnode /tmp/split_tables.js > /dev/null 2>&1"}, {"base_command": "file \"$F\"", "count": 1, "example": "file \"$F\""}, {"base_command": "\\\nfor", "count": 1, "example": "\\\nfor f in mcp-claude_ai_HealthEx-get_*.txt"}, {"base_command": "strings $HIST", "count": 1, "example": "strings $HIST 2>/dev/null"}, {"base_command": "brew", "count": 1, "example": "brew --version"}, {"base_command": "tmp", "count": 1, "example": "SP=/tmp"}, {"base_command": "}\nshot", "count": 1, "example": "}\nshot desk-dark 1440,1000 dark 1"}, {"base_command": "# Extract", "count": 1, "example": "# Extract conditions chunk from the SQL file\ngrep -A 850 \"INSERT INTO public.conditions\" /tmp/f_inserts.sql"}, {"base_command": "g=\"-\"", "count": 1, "example": "g=\"-\""}, {"base_command": "punch-ui\"", "count": 1, "example": "O=\"$TMPDIR/punch-ui\""}, {"base_command": "blz1n21y4.output", "count": 1, "example": "O=/private/tmp/claude-501/-Users-jd9hall/8b9fe02b-1001-4f24-acd1-19fca536033e/tasks/blz1n21y4.output"}, {"base_command": "filer-start-line2); tail", "count": 1, "example": "L=~/Library/Logs/screenshot-filer.log; S0=$(cat /private/tmp/claude-501/-Users-jd9hall/c6194814-d4bb-4b20-a437-51c26bc6ca4e/scratchpad/filer-start-line2); tail -n +$((S0+1)) \"$L\" | head -6"}, {"base_command": "by0kx011d.output", "count": 1, "example": "F=/private/tmp/claude-501/-Users-jd9hall/c6194814-d4bb-4b20-a437-51c26bc6ca4e/tasks/by0kx011d.output"}, {"base_command": "ifconfig", "count": 1, "example": "ifconfig 2>/dev/null"}, {"base_command": "memory_pressure", "count": 1, "example": "memory_pressure 2>/dev/null"}, {"base_command": "260914-qhv-PLAN.md\"", "count": 1, "example": "P=\".planning/quick/260914-qhv-rebuild-pour-the-iron-top-down-operator-/260914-qhv-PLAN.md\""}, {"base_command": "com.apple.windowserver.displays.*.plist);", "count": 1, "example": "SP=/private/tmp/claude-501/-Users-jd9hall-Claude/81b76ba6-9f05-4ee3-8347-fe6cff75a934/scratchpad; F=$(ls ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist); /usr/bin/plutil -convert json -o $SP/disp.json \"$F\" 2>/dev/null && python3 - <<'EOF'\nimport json\nd=json.load(open(\"/private/tmp/claude-501/-Users-jd9hall-Claude/81b76ba6-9f05-4ee3-8347-fe6cff75a934/scratchpad/disp.json\"))\nsets=d.get('DisplayAnyUserSets') or d.get('DisplayUserSets') or {}\nprint(\"top keys:\",list(d.keys()))\ndef walk(o,path=\"\"):\n if isinstance(o,dict):\n if 'UUID' in o and 'CurrentInfo' in o:\n ci=o['CurrentInfo']\n yield (o['UUID'], ci.get('Wide'), ci.get('High'), ci.get('Scale'), ci.get('OriginX'), ci.get('OriginY'), path)\n for k,v in o.items():\n yield from walk(v,path+\"/\"+str(k))\n elif isinstance(o,list):\n for i,v in enumerate(o): yield from walk(v,path+f\"[{i}]\")\nrows=list(walk(d))\nprint(f\"\\n{len(rows)} display config entries:\\n\")\nfor u,w,h,s,ox,oy,p in rows:\n flag=\" <-- DEGENERATE\" if (w is not None and w<100) else \"\"\n print(f\" {u[:13]} {str(w):>5} x {str(h):<5} scale={s} origin=({ox},{oy}){flag}\")\nEOF"}, {"base_command": "node $GT", "count": 1, "example": "node $GT config-get workflow.use_worktrees 2>&1"}, {"base_command": "rand", "count": 1, "example": "TOKEN=$(openssl rand -hex 24)"}, {"base_command": "filer-start-line2); for", "count": 1, "example": "L=~/Library/Logs/screenshot-filer.log; S0=$(cat /private/tmp/claude-501/-Users-jd9hall/c6194814-d4bb-4b20-a437-51c26bc6ca4e/scratchpad/filer-start-line2); for i in $(seq 1 180); do tail -n +$((S0+1)) \"$L\" | grep -qE \"^.{21}filed [0-9]+|ERROR\" && break; sleep 10; done; launchctl bootout gui/$(id -u)/com.jd9hall.filer-once 2>/dev/null; tail -n +$((S0+1)) \"$L\" | grep -vE \" -> |SKIP \\(unreadable\\)\" ; echo \"moved: $(tail -n +$((S0+1)) \"$L\" | grep -c ' -> ') unreadable: $(tail -n +$((S0+1)) \"$L\" | grep -c 'SKIP (unreadable)')\"; D=~/\"Library/Mobile Documents/com~apple~CloudDocs/Screenshots\"; echo \"loose files left in iCloud root: $(find \"$D\" -maxdepth 1 -type f ! -name '.*' | wc -l | tr -d ' ')\""}, {"base_command": "fi\necho", "count": 1, "example": "fi\necho\necho \"=== disk free now ===\""}, {"base_command": "\\\ngrep", "count": 1, "example": "\\\ngrep -E \"'@[0-9]+'::timestamp\" /tmp/encounters.sql /tmp/medications.sql /tmp/conditions.sql /tmp/lab_results.sql 2>/dev/null"}, {"base_command": "date +%Z", "count": 1, "example": "date +%Z"}, {"base_command": "^NOTION_TOKEN=", "count": 1, "example": "N=$(grep ^NOTION_TOKEN= ~/Projects/hub/.env.local"}, {"base_command": "shot phone-dark", "count": 1, "example": "shot phone-dark 390,1700 dark 2"}, {"base_command": "gather.sh shortcuts-runner", "count": 1, "example": "LINES_PER=22 /private/tmp/claude-501/-Users-jd9hall/8e5dbc48-90c1-4612-8baa-65427fa02763/scratchpad/gather.sh shortcuts-runner spotify-player spotify-widget-api spotify-widget supabase-dashboard task-capture youtube-widget 2>&1"}, {"base_command": "security find-identity", "count": 1, "example": "security find-identity -v -p codesigning 2>&1"}, {"base_command": "xattr \"Screen", "count": 1, "example": "xattr \"Screen Shot 2026-09-30 at 21.16.19 PM.png\" \"Screenshot 2026-09-23 at 12.12.02.png\""}, {"base_command": "prog=$(plutil", "count": 1, "example": "prog=$(plutil -extract ProgramArguments json -o - $f 2>/dev/null"}, {"base_command": "-E '^PUNCH_TOKEN='", "count": 1, "example": "T=$(grep -E '^PUNCH_TOKEN=' .env.local"}, {"base_command": "shot phone-light", "count": 1, "example": "shot phone-light 390,1700 light 2\nls -la \"$S\"/*.png"}, {"base_command": "com.jd9hall.status-collector.plist", "count": 1, "example": "P=~/Library/LaunchAgents/com.jd9hall.status-collector.plist"}, {"base_command": "killall MenuBarAgent", "count": 1, "example": "killall MenuBarAgent 2>/dev/null"}, {"base_command": "fi\ngrep", "count": 1, "example": "fi\ngrep -l \"SUPABASE_KEY\" ~/.zshrc ~/.zshenv ~/.zprofile 2>/dev/null"}, {"base_command": "f=$(grep", "count": 1, "example": "f=$(grep -rlE 'run_local_server|InstalledAppFlow' src"}, {"base_command": "2026-10-05", "count": 1, "example": "Q=~/Projects/_cleanup_quarantine/2026-10-05"}, {"base_command": "{ echo", "count": 1, "example": "{ echo \"reclaimed $1 -> $2/\""}, {"base_command": "gather.sh Health-skill", "count": 1, "example": "LINES_PER=30 /private/tmp/claude-501/-Users-jd9hall/8e5dbc48-90c1-4612-8baa-65427fa02763/scratchpad/gather.sh Health-skill Iphone-Widgets mac-cleanup mailroom my-team 2>&1"}, {"base_command": "-f \"$(which", "count": 1, "example": "F=$(readlink -f \"$(which claude)\")"}, {"base_command": "gsd-tools.cjs", "count": 1, "example": "GT=~/.claude/get-shit-done/bin/gsd-tools.cjs"}, {"base_command": "IMG_1691.png\"", "count": 1, "example": "f=\"$D/IMG_1691.png\""}, {"base_command": "git grep", "count": 1, "example": "git grep -c \"dn-126677\" $(git rev-parse HEAD) -- ."}, {"base_command": "project.pbxproj", "count": 1, "example": "P=Widgets.xcodeproj/project.pbxproj"}, {"base_command": "git auth", "count": 1, "example": "git -c credential.helper= -c 'credential.helper=!gh auth git-credential' push 2>&1"}, {"base_command": "dirty=$(git", "count": 1, "example": "dirty=$(git -C \"$d\" status --porcelain 2>/dev/null"}, {"base_command": "--sdk macosx", "count": 1, "example": "SDK=$(xcrun --sdk macosx --show-sdk-path 2>&1)"}, {"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": "done\nls", "count": 1, "example": "done\nls -la \"$SP/p1-desk.png\" \"$SP/p1-phone.png\""}, {"base_command": "n=$(grep", "count": 1, "example": "n=$(grep -n 'gmail-oauth-is-production.md' MEMORY.md"}, {"base_command": "python3.14", "count": 1, "example": "/Library/Frameworks/Python.framework/Versions/3.14/bin/python3.14 -m venv --clear .venv"}, {"base_command": "cd $S;", "count": 1, "example": "S=/private/tmp/claude-501/-Users-jd9hall/28fcd8c7-e827-45e7-b61c-d4afe9adbdd8/scratchpad; cd $S; swift wid.swift 2>/dev/null; read X Y < <(swift bounds.swift 2>/dev/null); W=$(swift wid.swift 2>/dev/null | awk '$2==0{print $3; exit}'); swift click.swift $((X+530*W/1400)) $((Y+300*W/1400)); sleep 4; N=$(swift wid.swift 2>/dev/null | awk '$2==0{print $1; exit}'); screencapture -x -o -l $N mac6.png && sips -Z 1400 mac6.png >/dev/null"}, {"base_command": "npm i", "count": 1, "example": "npm i puppeteer-core@23 --silent 2>&1"}, {"base_command": "uv", "count": 1, "example": "uv --version"}, {"base_command": "vm_stat", "count": 1, "example": "vm_stat"}, {"base_command": "MenuCapture", "count": 1, "example": "(build/MenuCapture.app/Contents/MacOS/MenuCapture --preview-window > $TMPDIR/mc.out 2>&1 &)"}, {"base_command": "shot desk-light", "count": 1, "example": "shot desk-light 1440,1000 light 1"}, {"base_command": "bwg234s38.output", "count": 1, "example": "F=/private/tmp/claude-501/-Users-jd9hall/c6194814-d4bb-4b20-a437-51c26bc6ca4e/tasks/bwg234s38.output"}, {"base_command": "sleep 10", "count": 1, "example": "/bin/sleep 10"}, {"base_command": "npm pack", "count": 1, "example": "npm pack get-shit-done-cc@1.42.3 --silent 2>/dev/null"}, {"base_command": "_deckcheck", "count": 1, "example": "OUT=~/Documents/_deckcheck"}, {"base_command": "&& python3", "count": 1, "example": "P=\".planning/quick/260914-qhv-rebuild-pour-the-iron-top-down-operator-/260914-qhv-PLAN.md\" && python3 - \"$P\" <<'PY'\nimport sys\np=sys.argv[1]\ns=open(p).read()\nold='\\n '\nnew=('\\n'\n ' Task 4: Play the shift \u2014 confirm the frame reads and the tuning lands\\n'\n ' Pause and hand the running game to the developer. Do not self-approve: there is no\\n'\n 'test framework here, and every acceptance criterion in the spec is a judgement about whether the\\n'\n 'picture reads and the game feels fair. Serve the site, walk the checks below, and wait.\\n'\n ' ')\nassert old in s\nopen(p,'w').write(s.replace(old,new,1))\nPY\ngsd-sdk query verify.plan-structure \"$P\" 2>&1 | head -8"}, {"base_command": "strings \"$f\"", "count": 1, "example": "strings \"$f\" 2>/dev/null"}, {"base_command": "time node", "count": 1, "example": "time node --max-old-space-size=8192 --env-file=../supabase-dashboard/.env scripts/backfill.mjs ~/Downloads/export.zip --out /private/tmp/claude-501/-Users-jd9hall/1b56ad43-9eed-446f-9ab0-b3f6e8bf6310/scratchpad/backfill-preview.csv 2>&1"}, {"base_command": "security add-generic-password", "count": 1, "example": "security add-generic-password -U -s punch-icloud -a \"jd9hall@gmail.com\" -l \"Punch iCloud calendar (app-specific password)\" -w \"$(pbpaste | tr -d '[:space:]')\""}, {"base_command": "date\necho", "count": 1, "example": "date\necho"}, {"base_command": "git reset", "count": 1, "example": "git reset -q --soft HEAD~1 && git reset -q HEAD && rtk git add .planning/STATE.md .planning/quick/260913-a4l-publish-ai-lanes-one-pager-at-ai && rtk git commit -q -F - <<'MSG'\ndocs(quick-260913-a4l): record the orphan fix and the route flatten\n\nCo-Authored-By: Claude Opus 5 \nClaude-Session: https://claude.ai/code/session_01SADfKr8de9eWnMYxiGH7FW\nMSG\nrtk git add .planning/quick/260820-jur-add-pour-the-iron-an-autopour-themed-tim .planning/quick/260820-keb-pour-the-iron-v2-real-defect-model-cold- && rtk git commit -q -F - <<'MSG2'\ndocs: track the two Pour the Iron quick-task dirs\n\nLeft untracked by their own sessions; every other .planning/quick dir is\ncommitted. Recorded separately rather than folded into unrelated work.\n\nCo-Authored-By: Claude Opus 5 \nClaude-Session: https://claude.ai/code/session_01SADfKr8de9eWnMYxiGH7FW\nMSG2\necho \"--- final ---\"; rtk git log --oneline -6; rtk git status --short; git show --stat --oneline HEAD~1 | head -5"}, {"base_command": "fi\n mv", "count": 1, "example": "fi\n mv \"$src\" \"$dst\""}, {"base_command": "synced", "count": 1, "example": "S=$(find ~/.claude/skills/synced -path '*wrap-up*' -name SKILL.md 2>/dev/null"}, {"base_command": "livecheck.sh", "count": 1, "example": "./livecheck.sh"}, {"base_command": "tar", "count": 1, "example": "tar -xzf get-shit-done-cc-1.42.3.tgz 2>/dev/null"}, {"base_command": "return", "count": 1, "example": "return"}, {"base_command": "gunzip", "count": 1, "example": "gunzip -c /tmp/widgets-dd/Logs/Build/AFAD6BC1-5DE4-48E9-B958-CCC501DA8A75.xcactivitylog"}, {"base_command": "defaults import", "count": 1, "example": "defaults import com.apple.MenuBarAgent $SP/mba-new.plist"}, {"base_command": "sports-proxy.jd9hall.workers.dev", "count": 1, "example": "B=https://sports-proxy.jd9hall.workers.dev"}, {"base_command": "gsd-sdk", "count": 1, "example": "gsd-sdk --version 2>&1"}, {"base_command": "\\\nls", "count": 1, "example": "\\\nls -lh health-report/scripts/build_deck.js files/build_deck.js files2/build_deck.js 2>/dev/null"}, {"base_command": "digests", "count": 1, "example": "S=/private/tmp/claude-501/-Users-jd9hall/dd47eb9b-a446-46c2-bab0-cc61658c7ef7/scratchpad/digests"}, {"base_command": "PlistBuddy", "count": 1, "example": "/usr/libexec/PlistBuddy -c \"Print :CFBundleIdentifier\" \"$EXT/Info.plist\" 2>&1"}, {"base_command": "Comet\"", "count": 1, "example": "CHROME=\"/Applications/Comet.app/Contents/MacOS/Comet\""}, {"base_command": "git mv", "count": 1, "example": "git mv routines/evening-alarm.md routines/evening.md"}, {"base_command": "crontab", "count": 1, "example": "crontab -l 2>&1"}, {"base_command": "until tail", "count": 1, "example": "until tail -1 ~/Projects/hub/logs/refresh.log"}, {"base_command": "sleep 1", "count": 1, "example": "/bin/sleep 1"}, {"base_command": "wrap-up.zip", "count": 1, "example": "Z=~/Projects/hub/skills/dist/wrap-up.zip"}, {"base_command": "wrap-up", "count": 1, "example": "D=~/.claude/skills/synced/62c82f39-68e1-4193-a371-3a79f80b4d6d_72d0c793-a627-4d4d-a78d-5c3c1b5f79a6/wrap-up"}, {"base_command": "zsh", "count": 1, "example": "zsh -x ./build.sh 2>&1"}, {"base_command": "shasum", "count": 1, "example": "shasum -a 256 migrations/001_init.sql"}, {"base_command": "done", "count": 1, "example": "done 2>/dev/null"}, {"base_command": "ditto", "count": 1, "example": "ditto /tmp/punch-mac-dd/Build/Products/Release/Punch.app /Applications/Punch.app"}], "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": 396498}; 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.'; }());