{"id":"0153554b-9a65-44d8-bf8a-17ec0b772abb","shortId":"VYcX5S","kind":"skill","title":"retro","tagline":"Weekly engineering retrospective. Analyzes commit history, work patterns,\nand code quality metrics with persistent history and trend tracking.\nTeam-aware: breaks down per-person contributions with praise and growth areas.\nUse when asked to \"weekly retro\", \"what did we ship\", or \"","description":"## Preamble\n\n```bash\neval \"$(~/.vibestack/bin/vibe-slug 2>/dev/null)\" 2>/dev/null || SLUG=\"unknown\"\n_LEARN_FILE=\"${VIBESTACK_HOME:-$HOME/.vibestack}/projects/${SLUG:-unknown}/learnings.jsonl\"\nif [ -f \"$_LEARN_FILE\" ]; then\n  _LEARN_COUNT=$(wc -l < \"$_LEARN_FILE\" 2>/dev/null | tr -d ' ')\n  echo \"LEARNINGS: $_LEARN_COUNT entries loaded\"\n  if [ \"$_LEARN_COUNT\" -gt 5 ] 2>/dev/null; then\n    ~/.vibestack/bin/vibe-learnings-search --limit 5 2>/dev/null || true\n  fi\nelse\n  echo \"LEARNINGS: none yet\"\nfi\n```\n\n## Step 0: Detect platform and base branch\n\nFirst, detect the git hosting platform from the remote URL:\n\n```bash\ngit remote get-url origin 2>/dev/null\n```\n\n- If the URL contains \"github.com\" → platform is **GitHub**\n- If the URL contains \"gitlab\" → platform is **GitLab**\n- Otherwise, check CLI availability:\n  - `gh auth status 2>/dev/null` succeeds → platform is **GitHub** (covers GitHub Enterprise)\n  - `glab auth status 2>/dev/null` succeeds → platform is **GitLab** (covers self-hosted)\n  - Neither → **unknown** (use git-native commands only)\n\nDetermine which branch this PR/MR targets, or the repo's default branch if no\nPR/MR exists. Use the result as \"the base branch\" in all subsequent steps.\n\n**If GitHub:**\n1. `gh pr view --json baseRefName -q .baseRefName` — if succeeds, use it\n2. `gh repo view --json defaultBranchRef -q .defaultBranchRef.name` — if succeeds, use it\n\n**If GitLab:**\n1. `glab mr view -F json 2>/dev/null` and extract the `target_branch` field — if succeeds, use it\n2. `glab repo view -F json 2>/dev/null` and extract the `default_branch` field — if succeeds, use it\n\n**Git-native fallback (if unknown platform, or CLI commands fail):**\n1. `git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||'`\n2. If that fails: `git rev-parse --verify origin/main 2>/dev/null` → use `main`\n3. If that fails: `git rev-parse --verify origin/master 2>/dev/null` → use `master`\n\nIf all fail, fall back to `main`.\n\nPrint the detected base branch name. In every subsequent `git diff`, `git log`,\n`git fetch`, `git merge`, and PR/MR creation command, substitute the detected\nbranch name wherever the instructions say \"the base branch\" or `<default>`.\n\n---\n\n# /retro — Weekly Engineering Retrospective\n\nGenerates a comprehensive engineering retrospective analyzing commit history, work patterns, and code quality metrics. Team-aware: identifies the user running the command, then analyzes every contributor with per-person praise and growth opportunities. Designed for a senior IC/CTO-level builder using Claude Code as a force multiplier.\n\n## User-invocable\nWhen the user types `/retro`, run this skill.\n\n## Arguments\n- `/retro` — default: last 7 days\n- `/retro 24h` — last 24 hours\n- `/retro 14d` — last 14 days\n- `/retro 30d` — last 30 days\n- `/retro compare` — compare current window vs prior same-length window\n- `/retro compare 14d` — compare with explicit window\n- `/retro global` — cross-project retro across all AI coding tools (7d default)\n- `/retro global 14d` — cross-project retro with explicit window\n\n\n\n## Instructions\n\nParse the argument to determine the time window. Default to 7 days if no argument given. All times should be reported in the user's **local timezone** (use the system default — do NOT set `TZ`).\n\n**Midnight-aligned windows:** For day (`d`) and week (`w`) units, compute an absolute start date at local midnight, not a relative string. For example, if today is 2026-03-18 and the window is 7 days: the start date is 2026-03-11. Use `--since=\"2026-03-11T00:00:00\"` for git log queries — the explicit `T00:00:00` suffix ensures git starts from midnight. Without it, git uses the current wall-clock time (e.g., `--since=\"2026-03-11\"` at 11pm means 11pm, not midnight). For week units, multiply by 7 to get days (e.g., `2w` = 14 days back). For hour (`h`) units, use `--since=\"N hours ago\"` since midnight alignment does not apply to sub-day windows.\n\n**Argument validation:** If the argument doesn't match a number followed by `d`, `h`, or `w`, the word `compare` (optionally followed by a window), or the word `global` (optionally followed by a window), show this usage and stop:\n```\nUsage: /retro [window | compare | global]\n  /retro              — last 7 days (default)\n  /retro 24h          — last 24 hours\n  /retro 14d          — last 14 days\n  /retro 30d          — last 30 days\n  /retro compare      — compare this period vs prior period\n  /retro compare 14d  — compare with explicit window\n  /retro global       — cross-project retro across all AI tools (7d default)\n  /retro global 14d   — cross-project retro with explicit window\n```\n\n**If the first argument is `global`:** Skip the normal repo-scoped retro (Steps 1-14). Instead, follow the **Global Retrospective** flow at the end of this document. The optional second argument is the time window (default 7d). This mode does NOT require being inside a git repo.\n\n{{include lib/snippets/prior-learnings.md}}\n### Non-git context (optional)\n\nCheck for non-git context that should be included in the retro:\n\n```bash\n[ -f ~/.vibestack/retro-context.md ] && echo \"RETRO_CONTEXT_FOUND\" || echo \"NO_RETRO_CONTEXT\"\n```\n\nIf `RETRO_CONTEXT_FOUND`: read `~/.vibestack/retro-context.md`. This file is user-authored and may contain meeting notes, calendar events, decisions, and other context that doesn't appear in git history. Incorporate this context into the retro narrative where relevant.\n\n### Step 1: Gather Raw Data\n\nFirst, fetch origin and identify the current user:\n```bash\ngit fetch origin <default> --quiet\n# Identify who is running the retro\ngit config user.name\ngit config user.email\n```\n\nThe name returned by `git config user.name` is **\"you\"** — the person reading this retro. All other authors are teammates. Use this to orient the narrative: \"your\" commits vs teammate contributions.\n\nRun ALL of these git commands in parallel (they are independent):\n\n```bash\n# 1. All commits in window with timestamps, subject, hash, AUTHOR, files changed, insertions, deletions\ngit log origin/<default> --since=\"<window>\" --format=\"%H|%aN|%ae|%ai|%s\" --shortstat\n\n# 2. Per-commit test vs total LOC breakdown with author\n#    Each commit block starts with COMMIT:<hash>|<author>, followed by numstat lines.\n#    Separate test files (matching test/|spec/|__tests__/) from production files.\ngit log origin/<default> --since=\"<window>\" --format=\"COMMIT:%H|%aN\" --numstat\n\n# 3. Commit timestamps for session detection and hourly distribution (with author)\ngit log origin/<default> --since=\"<window>\" --format=\"%at|%aN|%ai|%s\" | sort -n\n\n# 4. Files most frequently changed (hotspot analysis)\ngit log origin/<default> --since=\"<window>\" --format=\"\" --name-only | grep -v '^$' | sort | uniq -c | sort -rn\n\n# 5. PR/MR numbers from commit messages (GitHub #NNN, GitLab !NNN)\ngit log origin/<default> --since=\"<window>\" --format=\"%s\" | grep -oE '[#!][0-9]+' | sort -t'#' -k1 | uniq\n\n# 6. Per-author file hotspots (who touches what)\ngit log origin/<default> --since=\"<window>\" --format=\"AUTHOR:%aN\" --name-only\n\n# 7. Per-author commit counts (quick summary)\ngit shortlog origin/<default> --since=\"<window>\" -sn --no-merges\n\n# 8. Greptile triage history (if available)\ncat ~/.vibestack/greptile-history.md 2>/dev/null || true\n\n# 9. TODOS.md backlog (if available)\ncat TODOS.md 2>/dev/null || true\n\n# 10. Test file count\nfind . -name '*.test.*' -o -name '*.spec.*' -o -name '*_test.*' -o -name '*_spec.*' 2>/dev/null | grep -v node_modules | wc -l\n\n# 11. Regression test commits in window\ngit log origin/<default> --since=\"<window>\" --oneline --grep=\"test(qa):\" --grep=\"test(design):\" --grep=\"test: coverage\"\n\n# 12. vibestack skill usage telemetry (if available)\ncat ~/.vibestack/analytics/skill-usage.jsonl 2>/dev/null || true\n\n# 12. Test files changed in window\ngit log origin/<default> --since=\"<window>\" --format=\"\" --name-only | grep -E '\\.(test|spec)\\.' | sort -u | wc -l\n```\n\n### Step 2: Compute Metrics\n\nCalculate and present these metrics in a summary table:\n\n| Metric | Value |\n|--------|-------|\n| **Features shipped** (from CHANGELOG + merged PR titles) | N |\n| Commits to main | N |\n| Weighted commits (commits × avg files-touched, capped at 20 per commit) | N |\n| Contributors | N |\n| PRs merged | N |\n| **Logical SLOC added** (non-blank, non-comment — primary code-volume metric) | N |\n| Raw LOC: insertions | N |\n| Raw LOC: deletions | N |\n| Raw LOC: net | N |\n| Test LOC (insertions) | N |\n| Test LOC ratio | N% |\n| Version range | vX.Y.Z.W → vX.Y.Z.W |\n| Active days | N |\n| Detected sessions | N |\n| Avg raw LOC/session-hour | N |\n| Greptile signal | N% (Y catches, Z FPs) |\n| Test Health | N total tests · M added this period · K regression tests |\n\n**Metric order rationale (V1):** features shipped leads — what users got. Commits\nand weighted commits reflect intent-to-ship. Logical SLOC added reflects real\nnew functionality. Raw LOC is demoted to context because AI inflates it; ten\nlines of a good fix is not less shipping than ten thousand lines of scaffold.\nSee docs/designs/PLAN_TUNING_V1.md §Workstream C.\n\nThen show a **per-author leaderboard** immediately below:\n\n```\nContributor         Commits   +/-          Top area\nYou (timur)              32   +2400/-300   browse/\nalice                    12   +800/-150    app/services/\nbob                       3   +120/-40     tests/\n```\n\nSort by commits descending. The current user (from `git config user.name`) always appears first, labeled \"You (name)\".\n\n**Greptile signal (if history exists):** Read `~/.vibestack/greptile-history.md` (fetched in Step 1, command 8). Filter entries within the retro time window by date. Count entries by type: `fix`, `fp`, `already-fixed`. Compute signal ratio: `(fix + already-fixed) / (fix + already-fixed + fp)`. If no entries exist in the window or the file doesn't exist, skip the Greptile metric row. Skip unparseable lines silently.\n\n**Backlog Health (if TODOS.md exists):** Read `TODOS.md` (fetched in Step 1, command 9). Compute:\n- Total open TODOs (exclude items in `## Completed` section)\n- P0/P1 count (critical/urgent items)\n- P2 count (important items)\n- Items completed this period (items in Completed section with dates within the retro window)\n- Items added this period (cross-reference git log for commits that modified TODOS.md within the window)\n\nInclude in the metrics table:\n```\n| Backlog Health | N open (X P0/P1, Y P2) · Z completed this period |\n```\n\nIf TODOS.md doesn't exist, skip the Backlog Health row.\n\n**Skill Usage (if analytics exist):** Read `~/.vibestack/analytics/skill-usage.jsonl` if it exists. Filter entries within the retro time window by `ts` field. Separate skill activations (no `event` field) from hook fires (`event: \"hook_fire\"`). Aggregate by skill name. Present as:\n\n```\n| Skill Usage | /ship(12) /qa(8) /review(5) · 3 safety hook fires |\n```\n\nIf the JSONL file doesn't exist or has no entries in the window, skip the Skill Usage row.\n\n**Eureka Moments (if logged):** Read `~/.vibestack/analytics/eureka.jsonl` if it exists. Filter entries within the retro time window by `ts` field. For each eureka moment, show the skill that flagged it, the branch, and a one-line summary of the insight. Present as:\n\n```\n| Eureka Moments | 2 this period |\n```\n\nIf moments exist, list them:\n```\n  EUREKA /office-hours (branch: timur/auth-rethink): \"Session tokens don't need server storage — browser crypto API makes client-side JWT validation viable\"\n  EUREKA /plan-eng-review (branch: timur/cache-layer): \"Redis isn't needed here — Bun's built-in LRU cache handles this workload\"\n```\n\nIf the JSONL file doesn't exist or has no entries in the window, skip the Eureka Moments row.\n\n### Step 3: Commit Time Distribution\n\nShow hourly histogram in local time using bar chart:\n\n```\nHour  Commits  ████████████████\n 00:    4      ████\n 07:    5      █████\n ...\n```\n\nIdentify and call out:\n- Peak hours\n- Dead zones\n- Whether pattern is bimodal (morning/evening) or continuous\n- Late-night coding clusters (after 10pm)\n\n### Step 4: Work Session Detection\n\nDetect sessions using **45-minute gap** threshold between consecutive commits. For each session report:\n- Start/end time (Pacific)\n- Number of commits\n- Duration in minutes\n\nClassify sessions:\n- **Deep sessions** (50+ min)\n- **Medium sessions** (20-50 min)\n- **Micro sessions** (<20 min, typically single-commit fire-and-forget)\n\nCalculate:\n- Total active coding time (sum of session durations)\n- Average session length\n- LOC per hour of active time\n\n### Step 5: Commit Type Breakdown\n\nCategorize by conventional commit prefix (feat/fix/refactor/test/chore/docs). Show as percentage bar:\n\n```\nfeat:     20  (40%)  ████████████████████\nfix:      27  (54%)  ███████████████████████████\nrefactor:  2  ( 4%)  ██\n```\n\nFlag if fix ratio exceeds 50% — this signals a \"ship fast, fix fast\" pattern that may indicate review gaps.\n\n### Step 6: Hotspot Analysis\n\nShow top 10 most-changed files. Flag:\n- Files changed 5+ times (churn hotspots)\n- Test files vs production files in the hotspot list\n- VERSION/CHANGELOG frequency (version discipline indicator)\n\n### Step 7: PR Size Distribution\n\nFrom commit diffs, estimate PR sizes and bucket them:\n- **Small** (<100 LOC)\n- **Medium** (100-500 LOC)\n- **Large** (500-1500 LOC)\n- **XL** (1500+ LOC)\n\n### Step 8: Focus Score + Ship of the Week\n\n**Focus score:** Calculate the percentage of commits touching the single most-changed top-level directory (e.g., `app/services/`, `app/views/`). Higher score = deeper focused work. Lower score = scattered context-switching. Report as: \"Focus score: 62% (app/services/)\"\n\n**Ship of the week:** Auto-identify the single highest-LOC PR in the window. Highlight it:\n- PR number and title\n- LOC changed\n- Why it matters (infer from commit messages and files touched)\n\n### Step 9: Team Member Analysis\n\nFor each contributor (including the current user), compute:\n\n1. **Commits and LOC** — total commits, insertions, deletions, net LOC\n2. **Areas of focus** — which directories/files they touched most (top 3)\n3. **Commit type mix** — their personal feat/fix/refactor/test breakdown\n4. **Session patterns** — when they code (their peak hours), session count\n5. **Test discipline** — their personal test LOC ratio\n6. **Biggest ship** — their single highest-impact commit or PR in the window\n\n**For the current user (\"You\"):** This section gets the deepest treatment. Include all the detail from the solo retro — session analysis, time patterns, focus score. Frame it in first person: \"Your peak hours...\", \"Your biggest ship...\"\n\n**For each teammate:** Write 2-3 sentences covering what they worked on and their pattern. Then:\n\n- **Praise** (1-2 specific things): Anchor in actual commits. Not \"great work\" — say exactly what was good. Examples: \"Shipped the entire auth middleware rewrite in 3 focused sessions with 45% test coverage\", \"Every PR under 200 LOC — disciplined decomposition.\"\n- **Opportunity for growth** (1 specific thing): Frame as a leveling-up suggestion, not criticism. Anchor in actual data. Examples: \"Test ratio was 12% this week — adding test coverage to the payment module before it gets more complex would pay off\", \"5 fix commits on the same file suggest the original PR could have used a review pass.\"\n\n**If only one contributor (solo repo):** Skip the team breakdown and proceed as before — the retro is personal.\n\n**If there are Co-Authored-By trailers:** Parse `Co-Authored-By:` lines in commit messages. Credit those authors for the commit alongside the primary author. Note AI co-authors (e.g., `noreply@anthropic.com`) but do not include them as team members — instead, track \"AI-assisted commits\" as a separate metric.\n\n{{include lib/snippets/capture-learnings.md}}\n### Step 10: Week-over-Week Trends (if window >= 14d)\n\nIf the time window is 14 days or more, split into weekly buckets and show trends:\n- Commits per week (total and per-author)\n- LOC per week\n- Test ratio per week\n- Fix ratio per week\n- Session count per week\n\n### Step 11: Streak Tracking\n\nCount consecutive days with at least 1 commit to origin/<default>, going back from today. Track both team streak and personal streak:\n\n```bash\n# Team streak: all unique commit dates (local time) — no hard cutoff\ngit log origin/<default> --format=\"%ad\" --date=format:\"%Y-%m-%d\" | sort -u\n\n# Personal streak: only the current user's commits\ngit log origin/<default> --author=\"<user_name>\" --format=\"%ad\" --date=format:\"%Y-%m-%d\" | sort -u\n```\n\nCount backward from today — how many consecutive days have at least one commit? This queries the full history so streaks of any length are reported accurately. Display both:\n- \"Team shipping streak: 47 consecutive days\"\n- \"Your shipping streak: 32 consecutive days\"\n\n### Step 12: Load History & Compare\n\nBefore saving the new snapshot, check for prior retro history:\n\n```bash\nsetopt +o nomatch 2>/dev/null || true  # zsh compat\nls -t .context/retros/*.json 2>/dev/null\n```\n\n**If prior retros exist:** Load the most recent one using the Read tool. Calculate deltas for key metrics and include a **Trends vs Last Retro** section:\n```\n                    Last        Now         Delta\nTest ratio:         22%    →    41%         ↑19pp\nSessions:           10     →    14          ↑4\nLOC/hour:           200    →    350         ↑75%\nFix ratio:          54%    →    30%         ↓24pp (improving)\nCommits:            32     →    47          ↑47%\nDeep sessions:      3      →    5           ↑2\n```\n\n**If no prior retros exist:** Skip the comparison section and append: \"First retro recorded — run again next week to see trends.\"\n\n### Step 13: Save Retro History\n\nAfter computing all metrics (including streak) and loading any prior history for comparison, save a JSON snapshot:\n\n```bash\nmkdir -p .context/retros\n```\n\nDetermine the next sequence number for today (substitute the actual date for `$(date +%Y-%m-%d)`):\n```bash\nsetopt +o nomatch 2>/dev/null || true  # zsh compat\n# Count existing retros for today to get next sequence number\ntoday=$(date +%Y-%m-%d)\nexisting=$(ls .context/retros/${today}-*.json 2>/dev/null | wc -l | tr -d ' ')\nnext=$((existing + 1))\n# Save as .context/retros/${today}-${next}.json\n```\n\nUse the Write tool to save the JSON file with this schema:\n```json\n{\n  \"date\": \"2026-03-08\",\n  \"window\": \"7d\",\n  \"metrics\": {\n    \"commits\": 47,\n    \"contributors\": 3,\n    \"prs_merged\": 12,\n    \"insertions\": 3200,\n    \"deletions\": 800,\n    \"net_loc\": 2400,\n    \"test_loc\": 1300,\n    \"test_ratio\": 0.41,\n    \"active_days\": 6,\n    \"sessions\": 14,\n    \"deep_sessions\": 5,\n    \"avg_session_minutes\": 42,\n    \"loc_per_session_hour\": 350,\n    \"feat_pct\": 0.40,\n    \"fix_pct\": 0.30,\n    \"peak_hour\": 22,\n    \"ai_assisted_commits\": 32\n  },\n  \"authors\": {\n    \"Timur\": { \"commits\": 32, \"insertions\": 2400, \"deletions\": 300, \"test_ratio\": 0.41, \"top_area\": \"browse/\" },\n    \"Alice\": { \"commits\": 12, \"insertions\": 800, \"deletions\": 150, \"test_ratio\": 0.35, \"top_area\": \"app/services/\" }\n  },\n  \"version_range\": [\"1.16.0.0\", \"1.16.1.0\"],\n  \"streak_days\": 47,\n  \"tweetable\": \"Week of Mar 1: 47 commits (3 contributors), 3.2k LOC, 38% tests, 12 PRs, peak: 10pm\",\n  \"greptile\": {\n    \"fixes\": 3,\n    \"fps\": 1,\n    \"already_fixed\": 2,\n    \"signal_pct\": 83\n  }\n}\n```\n\n**Note:** Only include the `greptile` field if `~/.vibestack/greptile-history.md` exists and has entries within the time window. Only include the `backlog` field if `TODOS.md` exists. Only include the `test_health` field if test files were found (command 10 returns > 0). If any has no data, omit the field entirely.\n\nInclude test health data in the JSON when test files exist:\n```json\n  \"test_health\": {\n    \"total_test_files\": 47,\n    \"tests_added_this_period\": 5,\n    \"regression_test_commits\": 3,\n    \"test_files_changed\": 8\n  }\n```\n\nInclude backlog data in the JSON when TODOS.md exists:\n```json\n  \"backlog\": {\n    \"total_open\": 28,\n    \"p0_p1\": 2,\n    \"p2\": 8,\n    \"completed_this_period\": 3,\n    \"added_this_period\": 1\n  }\n```\n\n### Step 14: Write the Narrative\n\nStructure the output as:\n\n---\n\n**Tweetable summary** (first line, before everything else):\n```\nWeek of Mar 1: 47 commits (3 contributors), 3.2k LOC, 38% tests, 12 PRs, peak: 10pm | Streak: 47d\n```\n\n## Engineering Retro: [date range]\n\n### Summary Table\n(from Step 2)\n\n### Trends vs Last Retro\n(from Step 11, loaded before save — skip if first retro)\n\n### Time & Session Patterns\n(from Steps 3-4)\n\nNarrative interpreting what the team-wide patterns mean:\n- When the most productive hours are and what drives them\n- Whether sessions are getting longer or shorter over time\n- Estimated hours per day of active coding (team aggregate)\n- Notable patterns: do team members code at the same time or in shifts?\n\n### Shipping Velocity\n(from Steps 5-7)\n\nNarrative covering:\n- Commit type mix and what it reveals\n- PR size distribution and what it reveals about shipping cadence\n- Fix-chain detection (sequences of fix commits on the same subsystem)\n- Version bump discipline\n\n### Code Quality Signals\n- Test LOC ratio trend\n- Hotspot analysis (are the same files churning?)\n- Greptile signal ratio and trend (if history exists): \"Greptile: X% signal (Y valid catches, Z false positives)\"\n\n### Test Health\n- Total test files: N (from command 10)\n- Tests added this period: M (from command 12 — test files changed)\n- Regression test commits: list `test(qa):` and `test(design):` and `test: coverage` commits from command 11\n- If prior retro exists and has `test_health`: show delta \"Test count: {last} → {now} (+{delta})\"\n- If test ratio < 20%: flag as growth area — \"100% test coverage is the goal. Tests make vibe coding safe.\"\n\n### Plan Completion\nCheck review JSONL logs for plan completion data from /ship runs this period:\n\n```bash\nsetopt +o nomatch 2>/dev/null || true  # zsh compat\neval \"$(~/.vibestack/bin/vibe-slug 2>/dev/null)\"\ncat ~/.vibestack/projects/$SLUG/*-reviews.jsonl 2>/dev/null | grep '\"skill\":\"ship\"' | grep '\"plan_items_total\"' || echo \"NO_PLAN_DATA\"\n```\n\nIf plan completion data exists within the retro time window:\n- Count branches shipped with plans (entries that have `plan_items_total` > 0)\n- Compute average completion: sum of `plan_items_done` / sum of `plan_items_total`\n- Identify most-skipped item category if data supports it\n\nOutput:\n```\nPlan Completion This Period:\n  {N} branches shipped with plans\n  Average completion: {X}% ({done}/{total} items)\n```\n\nIf no plan data exists, skip this section silently.\n\n### Focus & Highlights\n(from Step 8)\n- Focus score with interpretation\n- Ship of the week callout\n\n### Your Week (personal deep-dive)\n(from Step 9, for the current user only)\n\nThis is the section the user cares most about. Include:\n- Their personal commit count, LOC, test ratio\n- Their session patterns and peak hours\n- Their focus areas\n- Their biggest ship\n- **What you did well** (2-3 specific things anchored in commits)\n- **Where to level up** (1-2 specific, actionable suggestions)\n\n### Team Breakdown\n(from Step 9, for each teammate — skip if solo repo)\n\nFor each teammate (sorted by commits descending), write a section:\n\n#### [Name]\n- **What they shipped**: 2-3 sentences on their contributions, areas of focus, and commit patterns\n- **Praise**: 1-2 specific things they did well, anchored in actual commits. Be genuine — what would you actually say in a 1:1? Examples:\n  - \"Cleaned up the entire auth module in 3 small, reviewable PRs — textbook decomposition\"\n  - \"Added integration tests for every new endpoint, not just happy paths\"\n  - \"Fixed the N+1 query that was causing 2s load times on the dashboard\"\n- **Opportunity for growth**: 1 specific, constructive suggestion. Frame as investment, not criticism. Examples:\n  - \"Test coverage on the payment module is at 8% — worth investing in before the next feature lands on top of it\"\n  - \"Most commits land in a single burst — spacing work across the day could reduce context-switching fatigue\"\n  - \"All commits land between 1-4am — sustainable pace matters for code quality long-term\"\n\n**AI collaboration note:** If many commits have `Co-Authored-By` AI trailers (e.g., Claude, Copilot), note the AI-assisted commit percentage as a team metric. Frame it neutrally — \"N% of commits were AI-assisted\" — without judgment.\n\n### Top 3 Team Wins\nIdentify the 3 highest-impact things shipped in the window across the whole team. For each:\n- What it was\n- Who shipped it\n- Why it matters (product/architecture impact)\n\n### 3 Things to Improve\nSpecific, actionable, anchored in actual commits. Mix personal and team-level suggestions. Phrase as \"to get even better, the team could...\"\n\n### 3 Habits for Next Week\nSmall, practical, realistic. Each must be something that takes <5 minutes to adopt. At least one should be team-oriented (e.g., \"review each other's PRs same-day\").\n\n### Week-over-Week Trends\n(if applicable, from Step 10)\n\n---\n\n## Global Retrospective Mode\n\nWhen the user runs `/retro global` (or `/retro global 14d`), follow this flow instead of the repo-scoped Steps 1-14. This mode works from any directory — it does NOT require being inside a git repo.\n\n### Global Step 1: Compute time window\n\nSame midnight-aligned logic as the regular retro. Default 7d. The second argument after `global` is the window (e.g., `14d`, `30d`, `24h`).\n\n### Global Step 2: Run discovery\n\nLocate and run the discovery script using this fallback chain:\n\n```bash\nDISCOVER_BIN=\"\"\n# global-discover not available in vibestack — skip global discovery\nDISCOVER_BIN=\"\"\necho \"DISCOVER_BIN: $DISCOVER_BIN\"\n```\n\nIf no binary is found, skip global discovery silently.\n\nRun the discovery:\n```bash\n$DISCOVER_BIN --since \"<window>\" --format json 2>/tmp/vibestack-discover-stderr\n```\n\nRead the stderr output from `/tmp/vibestack-discover-stderr` for diagnostic info. Parse the JSON output from stdout.\n\nIf `total_sessions` is 0, say: \"No AI coding sessions found in the last <window>. Try a longer window: `/retro global 30d`\" and stop.\n\n### Global Step 3: Run git log on each discovered repo\n\nFor each repo in the discovery JSON's `repos` array, find the first valid path in `paths[]` (directory exists with `.git/`). If no valid path exists, skip the repo and note it.\n\n**For local-only repos** (where `remote` starts with `local:`): skip `git fetch` and use the local default branch. Use `git log HEAD` instead of `git log origin/$DEFAULT`.\n\n**For repos with remotes:**\n\n```bash\ngit -C <path> fetch origin --quiet 2>/dev/null\n```\n\nDetect the default branch for each repo: first try `git symbolic-ref refs/remotes/origin/HEAD`, then check common branch names (`main`, `master`), then fall back to `git rev-parse --abbrev-ref HEAD`. Use the detected branch as `<default>` in the commands below.\n\n```bash\n# Commits with stats\ngit -C <path> log origin/$DEFAULT --since=\"<start_date>T00:00:00\" --format=\"%H|%aN|%ai|%s\" --shortstat\n\n# Commit timestamps for session detection, streak, and context switching\ngit -C <path> log origin/$DEFAULT --since=\"<start_date>T00:00:00\" --format=\"%at|%aN|%ai|%s\" | sort -n\n\n# Per-author commit counts\ngit -C <path> shortlog origin/$DEFAULT --since=\"<start_date>T00:00:00\" -sn --no-merges\n\n# PR/MR numbers from commit messages (GitHub #NNN, GitLab !NNN)\ngit -C <path> log origin/$DEFAULT --since=\"<start_date>T00:00:00\" --format=\"%s\" | grep -oE '[#!][0-9]+' | sort -t'#' -k1 | uniq\n```\n\nFor repos that fail (deleted paths, network errors): skip and note \"N repos could not be reached.\"\n\n### Global Step 4: Compute global shipping streak\n\nFor each repo, get commit dates (capped at 365 days):\n\n```bash\ngit -C <path> log origin/$DEFAULT --since=\"365 days ago\" --format=\"%ad\" --date=format:\"%Y-%m-%d\" | sort -u\n```\n\nUnion all dates across all repos. Count backward from today — how many consecutive days have at least one commit to ANY repo? If the streak hits 365 days, display as \"365+ days\".\n\n### Global Step 5: Compute context switching metric\n\nFrom the commit timestamps gathered in Step 3, group by date. For each date, count how many distinct repos had commits that day. Report:\n- Average repos/day\n- Maximum repos/day\n- Which days were focused (1 repo) vs. fragmented (3+ repos)\n\n### Global Step 6: Per-tool productivity patterns\n\nFrom the discovery JSON, analyze tool usage patterns:\n- Which AI tool is used for which repos (exclusive vs. shared)\n- Session count per tool\n- Behavioral patterns (e.g., \"Codex used exclusively for myapp, Claude Code for everything else\")\n\n### Global Step 7: Aggregate and generate narrative\n\nStructure the output with the **shareable personal card first**, then the full\nteam/project breakdown below. The personal card is designed to be screenshot-friendly\n— everything someone would want to share on X/Twitter in one clean block.\n\n---\n\n**Tweetable summary** (first line, before everything else):\n```\nWeek of Mar 14: 5 projects, 138 commits, 250k LOC across 5 repos | 48 AI sessions | Streak: 52d 🔥\n```\n\n## 🚀 Your Week: [user name] — [date range]\n\nThis section is the **shareable personal card**. It contains ONLY the current user's\nstats — no team data, no project breakdowns. Designed to screenshot and post.\n\nUse the user identity from `git config user.name` to filter all per-repo git data.\nAggregate across all repos to compute personal totals.\n\nRender as a single visually clean block. Left border only — no right border (LLMs\ncan't align right borders reliably). Pad repo names to the longest name so columns\nalign cleanly. Never truncate project names.\n\n```\n╔═══════════════════════════════════════════════════════════════\n║  [USER NAME] — Week of [date]\n╠═══════════════════════════════════════════════════════════════\n║\n║  [N] commits across [M] projects\n║  +[X]k LOC added · [Y]k LOC deleted · [Z]k net\n║  [N] AI coding sessions (CC: X, Codex: Y, Gemini: Z)\n║  [N]-day shipping streak 🔥\n║\n║  PROJECTS\n║  ─────────────────────────────────────────────────────────\n║  [repo_name_full]        [N] commits    +[X]k LOC    [solo/team]\n║  [repo_name_full]        [N] commits    +[X]k LOC    [solo/team]\n║  [repo_name_full]        [N] commits    +[X]k LOC    [solo/team]\n║\n║  SHIP OF THE WEEK\n║  [PR title] — [LOC] lines across [N] files\n║\n║  TOP WORK\n║  • [1-line description of biggest theme]\n║  • [1-line description of second theme]\n║  • [1-line description of third theme]\n║\n║  Powered by vibestack\n╚═══════════════════════════════════════════════════════════════\n```\n\n**Rules for the personal card:**\n- Only show repos where the user has commits. Skip repos with 0 commits.\n- Sort repos by user's commit count descending.\n- **Never truncate repo names.** Use the full repo name (e.g., `analyze_transcripts`\n  not `analyze_trans`). Pad the name column to the longest repo name so all columns\n  align. If names are long, widen the box — the box width adapts to content.\n- For LOC, use \"k\" formatting for thousands (e.g., \"+64.0k\" not \"+64010\").\n- Role: \"solo\" if user is the only contributor, \"team\" if others contributed.\n- Ship of the Week: the user's single highest-LOC PR across ALL repos.\n- Top Work: 3 bullet points summarizing the user's major themes, inferred from\n  commit messages. Not individual commits — synthesize into themes.\n  E.g., \"Built /retro global — cross-project retrospective with AI session discovery\"\n  not \"feat: vibe-global-discover\" + \"feat: /retro global template\".\n- The card must be self-contained. Someone seeing ONLY this block should understand\n  the user's week without any surrounding context.\n- Do NOT include team members, project totals, or context switching data here.\n\n**Personal streak:** Use the user's own commits across all repos (filtered by\n`--author`) to compute a personal streak, separate from the team streak.\n\n---\n\n## Global Engineering Retro: [date range]\n\nEverything below is the full analysis — team data, project breakdowns, patterns.\nThis is the \"deep dive\" that follows the shareable card.\n\n### All Projects Overview\n| Metric | Value |\n|--------|-------|\n| Projects active | N |\n| Total commits (all repos, all contributors) | N |\n| Total LOC | +N / -N |\n| AI coding sessions | N (CC: X, Codex: Y, Gemini: Z) |\n| Active days | N |\n| Global shipping streak (any contributor, any repo) | N consecutive days |\n| Context switches/day | N avg (max: M) |\n\n### Per-Project Breakdown\nFor each repo (sorted by commits descending):\n- Repo name (with % of total commits)\n- Commits, LOC, PRs merged, top contributor\n- Key work (inferred from commit messages)\n- AI sessions by tool\n\n**Your Contributions** (sub-section within each project):\nFor each project, add a \"Your contributions\" block showing the current user's\npersonal stats within that repo. Use the user identity from `git config user.name`\nto filter. Include:\n- Your commits / total commits (with %)\n- Your LOC (+insertions / -deletions)\n- Your key work (inferred from YOUR commit messages only)\n- Your commit type mix (feat/fix/refactor/chore/docs breakdown)\n- Your biggest ship in this repo (highest-LOC commit or PR)\n\nIf the user is the only contributor, say \"Solo project — all commits are yours.\"\nIf the user has 0 commits in a repo (team project they didn't touch this period),\nsay \"No commits this period — [N] AI sessions only.\" and skip the breakdown.\n\nFormat:\n```\n**Your contributions:** 47/244 commits (19%), +4.2k/-0.3k LOC\n  Key work: Writer Chat, email blocking, security hardening\n  Biggest ship: PR #605 — Writer Chat eats the admin bar (2,457 ins, 46 files)\n  Mix: feat(3) fix(2) chore(1)\n```\n\n### Cross-Project Patterns\n- Time allocation across projects (% breakdown, use YOUR commits not total)\n- Peak productivity hours aggregated across all repos\n- Focused vs. fragmented days\n- Context switching trends\n\n### Tool Usage Analysis\nPer-tool breakdown with behavioral patterns:\n- Claude Code: N sessions across M repos — patterns observed\n- Codex: N sessions across M repos — patterns observed\n- Gemini: N sessions across M repos — patterns observed\n\n### Ship of the Week (Global)\nHighest-impact PR across ALL projects. Identify by LOC and commit messages.\n\n### 3 Cross-Project Insights\nWhat the global view reveals that no single-repo retro could show.\n\n### 3 Habits for Next Week\nConsidering the full cross-project picture.\n\n---\n\n### Global Step 8: Load history & compare\n\n```bash\nsetopt +o nomatch 2>/dev/null || true  # zsh compat\nls -t ~/.vibestack/retros/global-*.json 2>/dev/null | head -5\n```\n\n**Only compare against a prior retro with the same `window` value** (e.g., 7d vs 7d). If the most recent prior retro has a different window, skip comparison and note: \"Prior global retro used a different window — skipping comparison.\"\n\nIf a matching prior retro exists, load it with the Read tool. Show a **Trends vs Last Global Retro** table with deltas for key metrics: total commits, LOC, sessions, streak, context switches/day.\n\nIf no prior global retros exist, append: \"First global retro recorded — run again next week to see trends.\"\n\n### Global Step 9: Save snapshot\n\n```bash\nmkdir -p ~/.vibestack/retros\n```\n\nDetermine the next sequence number for today:\n```bash\nsetopt +o nomatch 2>/dev/null || true  # zsh compat\ntoday=$(date +%Y-%m-%d)\nexisting=$(ls ~/.vibestack/retros/global-${today}-*.json 2>/dev/null | wc -l | tr -d ' ')\nnext=$((existing + 1))\n```\n\nUse the Write tool to save JSON to `~/.vibestack/retros/global-${today}-${next}.json`:\n\n```json\n{\n  \"type\": \"global\",\n  \"date\": \"2026-03-21\",\n  \"window\": \"7d\",\n  \"projects\": [\n    {\n      \"name\": \"vibestack\",\n      \"remote\": \"<detected from git remote get-url origin, normalized to HTTPS>\",\n      \"commits\": 47,\n      \"insertions\": 3200,\n      \"deletions\": 800,\n      \"sessions\": { \"claude_code\": 15, \"codex\": 3, \"gemini\": 0 }\n    }\n  ],\n  \"totals\": {\n    \"commits\": 182,\n    \"insertions\": 15300,\n    \"deletions\": 4200,\n    \"projects\": 5,\n    \"active_days\": 6,\n    \"sessions\": { \"claude_code\": 48, \"codex\": 8, \"gemini\": 3 },\n    \"global_streak_days\": 52,\n    \"avg_context_switches_per_day\": 2.1\n  },\n  \"tweetable\": \"Week of Mar 14: 5 projects, 182 commits, 15.3k LOC | CC: 48, Codex: 8, Gemini: 3 | Focus: vibestack (58%) | Streak: 52d\"\n}\n```\n\n---\n\n## Compare Mode\n\nWhen the user runs `/retro compare` (or `/retro compare 14d`):\n\n1. Compute metrics for the current window (default 7d) using the midnight-aligned start date (same logic as the main retro — e.g., if today is 2026-03-18 and window is 7d, use `--since=\"2026-03-11T00:00:00\"`)\n2. Compute metrics for the immediately prior same-length window using both `--since` and `--until` with midnight-aligned dates to avoid overlap (e.g., for a 7d window starting 2026-03-11: prior window is `--since=\"2026-03-04T00:00:00\" --until=\"2026-03-11T00:00:00\"`)\n3. Show a side-by-side comparison table with deltas and arrows\n4. Write a brief narrative highlighting the biggest improvements and regressions\n5. Save only the current-window snapshot to `.context/retros/` (same as a normal retro run); do **not** persist the prior-window metrics.\n\n## Tone\n\n- Encouraging but candid, no coddling\n- Specific and concrete — always anchor in actual commits/code\n- Skip generic praise (\"great job!\") — say exactly what was good and why\n- Frame improvements as leveling up, not criticism\n- **Praise should feel like something you'd actually say in a 1:1** — specific, earned, genuine\n- **Growth suggestions should feel like investment advice** — \"this is worth your time because...\" not \"you failed at...\"\n- Never compare teammates against each other negatively. Each person's section stands on its own.\n- Keep total output around 3000-4500 words (slightly longer to accommodate team sections)\n- Use markdown tables and code blocks for data, prose for narrative\n- Output directly to the conversation — do NOT write to filesystem (except the `.context/retros/` JSON snapshot)\n\n## Important Rules\n\n- ALL narrative output goes directly to the user in the conversation. The ONLY file written is the `.context/retros/` JSON snapshot.\n- Use `origin/<default>` for all git queries (not local main which may be stale)\n- Display all timestamps in the user's local timezone (do not override `TZ`)\n- If the window has zero commits, say so and suggest a different window\n- Round LOC/hour to nearest 50\n- Treat merge commits as PR boundaries\n- Do not read CLAUDE.md or other docs — this skill is self-contained\n- On first run (no prior retros), skip comparison sections gracefully\n- **Global mode:** Does NOT require being inside a git repo. Saves snapshots to `~/.vibestack/retros/` (not `.context/retros/`). Gracefully skip AI tools that aren't installed. Only compare against prior global retros with the same window value. If streak hits 365d cap, display as \"365+ days\".","tags":["retro","vibestack","timurgaleev","agent-skills","ai-agents","claude-code","cursor-ide","developer-tools","kiro","mcp","prompt-engineering","slash-commands"],"capabilities":["skill","source-timurgaleev","skill-retro","topic-agent-skills","topic-ai-agents","topic-claude-code","topic-cursor-ide","topic-developer-tools","topic-kiro","topic-mcp","topic-prompt-engineering","topic-slash-commands"],"categories":["vibestack"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/timurgaleev/vibestack/retro","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add timurgaleev/vibestack","source_repo":"https://github.com/timurgaleev/vibestack","install_from":"skills.sh"}},"qualityScore":"0.457","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 15 github stars · SKILL.md body (38,491 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:06:23.539Z","embedding":null,"createdAt":"2026-05-18T19:06:23.539Z","updatedAt":"2026-05-18T19:06:23.539Z","lastSeenAt":"2026-05-18T19:06:23.539Z","tsv":"'+1':3473 '+120':1402 '+2400':1392 '+4.2':4939 '+64.0':4577 '+64010':4580 '+800':1397 '-0.3':4941 '-03':557,570,575,608,2712,5257,5382,5391,5427,5434,5441 '-04':5435 '-08':2713 '-11':571,576,609,5392,5428,5442 '-14':765,3718 '-150':1398 '-1500':1964 '-18':558,5383 '-2':2177,3380,3424 '-21':5258 '-3':2164,3369,3411 '-300':1393 '-4':3000,3541 '-40':1403 '-4500':5580 '-5':5107 '-50':1834 '-500':1960 '-7':3056 '-9':1068,4066 '/.vibestack/analytics/eureka.jsonl':1649 '/.vibestack/analytics/skill-usage.jsonl':1181,1581 '/.vibestack/bin/vibe-learnings-search':93 '/.vibestack/bin/vibe-slug':48,3217 '/.vibestack/greptile-history.md':1115,1428,2837 '/.vibestack/projects':3221 '/.vibestack/retro-context.md':820,834 '/.vibestack/retros':5204,5722 '/.vibestack/retros/global-':5102,5228,5248 '/dev/null':50,52,76,91,97,131,156,168,247,265,294,309,323,1117,1127,1146,1183,2523,2532,2658,2683,3212,3219,3225,3938,5096,5105,5217,5232 '/learnings.jsonl':63 '/office-hours':1697 '/plan-eng-review':1718 '/projects':60 '/qa':1617 '/retro':367,426,431,436,441,446,451,462,469,482,689,693,698,703,708,713,721,728,740,3701,3704,3851,4631,4648,5349,5352 '/review':1619 '/ship':1615,3203 '/tmp/vibestack-discover-stderr':3817,3823 '0':107,1067,2868,3258,3837,4065,4518,4907,5289 '0.30':2759 '0.35':2790 '0.40':2756 '0.41':2736,2777 '00':578,579,587,588,1771,3992,3993,4016,4017,4037,4038,4059,4060,5394,5395,5437,5438,5444,5445 '07':1773 '1':214,240,287,764,869,940,1432,1497,2061,2176,2217,2403,2690,2805,2823,2935,2955,3379,3423,3443,3444,3487,3540,3717,3736,4195,4481,4487,4493,4973,5239,5355,5538,5539 '1.16.0.0':2796 '1.16.1.0':2797 '10':1129,1915,2345,2568,2866,3130,3693 '100':1956,1959,3181 '10pm':1796,2818,2968 '11':1153,2394,2986,3157 '11pm':611,613 '12':1173,1185,1396,1616,2237,2504,2723,2783,2815,2965,3138 '13':2612 '1300':2733 '138':4302 '14':444,627,706,2359,2569,2741,2937,4299,5324 '14d':442,464,484,704,723,742,2353,3706,3760,5354 '15':5285 '15.3':5329 '150':2787 '1500':1967 '15300':5294 '182':5292,5327 '19':4938 '19pp':2566 '2':49,51,75,90,96,130,155,167,226,246,258,264,293,298,308,322,965,1116,1126,1145,1182,1208,1688,1888,2071,2163,2522,2531,2589,2657,2682,2826,2925,2979,3211,3218,3224,3368,3410,3765,3816,3937,4962,4971,5095,5104,5216,5231,5396 '2.1':5319 '20':1243,1833,1838,1882,3176 '200':2210,2572 '2026':556,569,574,607,2711,5256,5381,5390,5426,5433,5440 '22':2564,2762 '24':439,701 '2400':2730,2772 '24h':437,699,3762 '24pp':2579 '250k':4304 '27':1885 '28':2922 '2s':3478 '2w':626 '3':312,1005,1401,1621,1756,2081,2082,2200,2587,2720,2808,2821,2904,2931,2958,2999,3453,3592,3597,3623,3649,3858,4170,4199,4610,4969,5055,5073,5287,5309,5337,5446 '3.2':2810,2960 '30':449,711,2578 '300':2774 '3000':5579 '30d':447,709,3761,3853 '32':1391,2500,2582,2766,2770 '3200':2725,5279 '350':2573,2753 '365':4103,4112,4150,4154,5751 '365d':5747 '38':2813,2963 '4':1027,1772,1798,1889,2090,2570,4090,5459 '40':1883 '41':2565 '42':2748 '4200':5296 '45':1805,2204 '457':4963 '46':4965 '47':2494,2583,2584,2718,2800,2806,2895,2956,5277 '47/244':4936 '47d':2970 '48':4309,5305,5333 '5':89,95,1049,1620,1774,1867,1923,2101,2255,2588,2744,2900,3055,3663,4158,4300,4307,5298,5325,5470 '50':1829,1895,5679 '500':1963 '52':5313 '52d':4313,5342 '54':1886,2577 '58':5340 '6':1073,1910,2109,2739,4203,5301 '605':4955 '62':2012 '7':434,503,563,621,695,1092,1942,4247 '75':2574 '7d':480,738,787,2715,3750,5120,5122,5260,5363,5387,5423 '8':1108,1434,1618,1970,2908,2927,3311,3505,5087,5307,5335 '800':2727,2785,5281 '83':2829 '9':1119,1499,2049,3329,3388,5198 'abbrev':3969 'abbrev-ref':3968 'absolut':541 'accommod':5585 'accur':2488 'across':475,734,3527,3606,4127,4306,4363,4412,4476,4605,4693,4980,4992,5016,5024,5032,5046 'action':3382,3628 'activ':1291,1597,1850,1864,2737,3034,4741,4764,5299 'actual':2182,2231,2646,3432,3439,3631,5506,5534 'ad':1254,1314,1341,1532,2240,2434,2455,2897,2932,3132,3459,4116,4418 'adapt':4566 'add':4827 'admin':4960 'adopt':3666 'advic':5549 'ae':961 'aggreg':1607,3037,4248,4362,4991 'ago':638,4114 'ai':477,736,962,1023,1353,2318,2335,2763,3552,3563,3571,3587,3840,3997,4021,4218,4310,4427,4638,4754,4812,4926,5727 'ai-assist':2334,3570,3586 'alic':1395,2781 'align':530,641,3743,4386,4399,4555,5368,5415 'alloc':4979 'alongsid':2313 'alreadi':1451,1458,1462,2824 'already-fix':1450,1457,1461 'alway':1416,5503 'analysi':1033,1912,2052,2143,3099,4719,5004 'analyt':1578 'analyz':5,376,395,4213,4538,4541 'anchor':2180,2229,3372,3430,3629,5504 'api':1709 'app/services':1399,1995,2013,2793 'app/views':1996 'appear':855,1417 'append':2600,5184 'appli':644 'applic':3690 'area':33,1388,2072,2779,2792,3180,3360,3416 'aren':5730 'argument':430,495,507,650,654,753,781,3753 'around':5578 'array':3875 'arrow':5458 'ask':36 'assist':2336,2764,3572,3588 'auth':153,165,2196,3450 'author':840,914,949,975,1015,1076,1087,1095,1381,2295,2301,2309,2316,2321,2377,2453,2767,3561,4027,4698 'auto':2019 'auto-identifi':2018 'avail':151,1113,1123,1179,3785 'averag':1857,3260,3292,4187 'avg':1237,1297,2745,4780,5314 'avoid':5418 'awar':22,387 'back':330,629,2408,3962 'backlog':1121,1487,1553,1572,2849,2910,2919 'backward':2464,4131 'bar':1767,1880,4961 'base':111,206,336,364 'baserefnam':219,221 'bash':46,123,818,881,939,2418,2518,2633,2653,3207,3778,3810,3931,3981,4105,5091,5201,5212 'behavior':4232,5010 'better':3645 'biggest':2110,2157,3362,4485,4878,4952,5466 'bimod':1786 'bin':3780,3792,3795,3797,3812 'binari':3800 'blank':1257 'block':978,4288,4376,4662,4831,4949,5593 'bob':1400 'border':4378,4382,4388 'boundari':5685 'box':4562,4564 'branch':112,187,196,207,252,270,337,357,365,1674,1698,1719,3248,3288,3916,3942,3956,3975 'break':23 'breakdown':973,1870,2089,2281,3385,4265,4340,4723,4786,4876,4932,4982,5008 'brief':5462 'brows':1394,2780 'browser':1707 'bucket':1953,2366 'builder':411 'built':1729,4630 'built-in':1728 'bullet':4611 'bump':3089 'bun':1726 'burst':3524 'c':1046,1375,3933,3986,4010,4031,4053,4107 'cach':1732 'cadenc':3075 'calcul':1211,1848,1979,2546 'calendar':846 'call':1777 'callout':3320 'candid':5497 'cap':1241,4101,5748 'card':4259,4269,4326,4506,4652,4734 'care':3341 'cat':1114,1124,1180,3220 'catch':1305,3118 'categor':1871 'categori':3277 'caus':3477 'cc':4430,4758,5332 'chain':3078,3777 'chang':951,1031,1188,1918,1922,1989,2037,2907,3141 'changelog':1225 'chart':1768 'chat':4947,4957 'check':149,805,2513,3194,3954 'chore':4972 'churn':1925,3104 'classifi':1825 'claud':413,3566,4240,5012,5283,5303 'claude.md':5689 'clean':3446,4287,4375,4400 'cli':150,284 'client':1712 'client-sid':1711 'clock':603 'cluster':1794 'co':2294,2300,2320,3560 'co-author':2319 'co-authored-bi':2293,2299,3559 'coddl':5499 'code':11,382,414,478,1263,1793,1851,2095,3035,3043,3091,3190,3547,3841,4241,4428,4755,5013,5284,5304,5592 'code-volum':1262 'codex':4235,4432,4760,5021,5286,5306,5334 'collabor':3553 'column':4398,4546,4554 'command':183,285,353,393,933,1433,1498,2865,3129,3137,3156,3979 'comment':1260 'commit':6,377,924,942,968,977,981,1001,1006,1053,1096,1156,1230,1235,1236,1245,1330,1333,1386,1407,1541,1757,1770,1811,1821,1843,1868,1874,1947,1983,2043,2062,2066,2083,2117,2183,2257,2305,2312,2337,2370,2404,2423,2449,2475,2581,2717,2765,2769,2782,2807,2903,2957,3059,3083,3144,3154,3347,3374,3401,3420,3433,3519,3537,3557,3573,3584,3632,3982,4000,4028,4046,4099,4142,4165,4183,4303,4411,4445,4454,4463,4514,4519,4525,4621,4625,4692,4744,4792,4799,4800,4810,4854,4856,4868,4872,4886,4900,4908,4922,4937,4985,5053,5172,5276,5291,5328,5667,5682 'commits/code':5507 'common':3955 'compar':452,453,463,465,668,691,714,715,722,724,2507,5090,5109,5343,5350,5353,5561,5734 'comparison':2597,2628,5134,5145,5453,5706 'compat':2526,2661,3215,5099,5220 'complet':1507,1518,1523,1562,2928,3193,3200,3239,3261,3284,3293 'complex':2251 'comprehens':373 'comput':539,1209,1453,1500,2060,2617,3259,3737,4091,4159,4367,4700,5356,5397 'concret':5502 'config':893,896,903,1414,4352,4848 'consecut':1810,2398,2469,2495,2501,4136,4775 'consid':5078 'construct':3489 'contain':135,143,843,4328,4657,5698 'content':4568 'context':803,810,823,828,831,851,861,1351,2006,3533,4007,4160,4672,4681,4777,4999,5176,5315 'context-switch':2005,3532 'context/retros':2529,2636,2679,2693,5479,5611,5633,5724 'continu':1789 'contribut':28,927,3415,4592,4817,4830,4935 'contributor':397,1247,1385,2055,2275,2719,2809,2959,4588,4748,4771,4805,4895 'convent':1873 'convers':5603,5626 'copilot':3567 'could':2266,3530,3648,4084,5071 'count':70,82,87,1097,1132,1444,1510,1514,2100,2390,2397,2463,2662,3169,3247,3348,4029,4130,4177,4229,4526 'cover':161,173,2166,3058 'coverag':1172,2206,2242,3153,3183,3498 'creation':352 'credit':2307 'critic':2228,3495,5526 'critical/urgent':1511 'cross':472,486,731,744,1536,4634,4975,5057,5082 'cross-project':471,485,730,743,4633,4974,5056,5081 'cross-refer':1535 'crypto':1708 'current':454,600,879,1410,2058,2125,2446,3332,4331,4834,5360,5475 'current-window':5474 'cutoff':2429 'd':78,534,662,2439,2460,2652,2676,2687,4121,5225,5236,5533 'dashboard':3483 'data':872,2232,2873,2881,2911,3201,3236,3240,3279,3301,4337,4361,4683,4721,5595 'date':543,567,1443,1526,2424,2435,2456,2647,2649,2673,2710,2973,4100,4117,4126,4173,4176,4318,4409,4712,5222,5255,5370,5416 'day':435,445,450,504,533,564,624,628,648,696,707,712,1292,2360,2399,2470,2496,2502,2738,2799,3032,3529,3683,4104,4113,4137,4151,4155,4185,4192,4437,4765,4776,4998,5300,5312,5318,5752 'dead':1781 'decis':848 'decomposit':2213,3458 'deep':1827,2585,2742,3325,4728 'deep-div':3324 'deeper':1999 'deepest':2132 'default':195,269,432,481,501,523,697,739,786,3749,3915,3926,3941,3989,4013,4034,4056,4110,5362 'defaultbranchref':231 'defaultbranchref.name':233 'delet':953,1273,2068,2726,2773,2786,4075,4422,4861,5280,5295 'delta':2547,2561,3167,3172,5167,5456 'demot':1349 'descend':1408,3402,4527,4793 'descript':4483,4489,4495 'design':406,1169,3150,4271,4341 'detail':2137 'detect':108,114,335,356,1010,1294,1801,1802,3079,3939,3974,4004,5265 'determin':185,497,2637,5205 'diagnost':3825 'didn':4915 'diff':343,1948 'differ':5131,5142,5673 'direct':5600,5620 'directori':1993,3724,3883 'directories/files':2076 'disciplin':1939,2103,2212,3090 'discov':3779,3783,3791,3794,3796,3811,3864,4646 'discoveri':3767,3772,3790,3805,3809,3871,4211,4640 'display':2489,4152,5649,5749 'distinct':4180 'distribut':1013,1759,1945,3068 'dive':3326,4729 'doc':5692 'docs/designs/plan_tuning_v1.md':1373 'document':777 'doesn':655,853,1475,1567,1629,1740 'done':3266,3295 'drive':3018 'durat':1822,1856 'e':1200 'e.g':605,625,1994,2322,3565,3675,3759,4234,4537,4576,4629,5119,5377,5420 'earn':5541 'eat':4958 'echo':79,101,821,825,3233,3793 'els':100,2951,4244,4295 'email':4948 'encourag':5495 'end':774 'endpoint':3465 'engin':3,369,374,2971,4710 'ensur':590 'enterpris':163 'entir':2195,2877,3449 'entri':83,1436,1445,1467,1586,1635,1654,1746,2841,3252 'error':4078 'estim':1949,3029 'eureka':1644,1665,1686,1696,1717,1752 'eval':47,3216 'even':3644 'event':847,1599,1604 'everi':340,396,2207,3463 'everyth':2950,4243,4277,4294,4714 'exact':2188,5514 'exampl':552,2192,2233,3445,3496 'exceed':1894 'except':5609 'exclud':1504 'exclus':4225,4237 'exist':200,1426,1468,1477,1491,1569,1579,1584,1631,1652,1693,1742,2536,2594,2663,2677,2689,2838,2853,2888,2917,3112,3161,3241,3302,3884,3891,5151,5183,5226,5238 'explicit':467,490,585,726,748 'extract':249,267 'f':65,244,262,819 'fail':286,301,315,328,4074,5558 'fall':329,3961 'fallback':279,3776 'fals':3120 'fast':1900,1902 'fatigu':3535 'feat':1881,2754,4642,4647,4968 'feat/fix/refactor/chore/docs':4875 'feat/fix/refactor/test':2088 'feat/fix/refactor/test/chore/docs':1876 'featur':1222,1324,3512 'feel':5529,5546 'fetch':347,874,883,1429,1494,3910,3934 'fi':99,105 'field':253,271,1594,1600,1662,2835,2850,2859,2876 'file':56,67,74,836,950,988,995,1028,1077,1131,1187,1239,1474,1628,1739,1919,1921,1928,1931,2046,2261,2705,2862,2887,2894,2906,3103,3126,3140,4478,4966,5629 'files-touch':1238 'filesystem':5608 'filter':1435,1585,1653,4355,4696,4851 'find':1133,3876 'fire':1603,1606,1624,1845 'fire-and-forget':1844 'first':113,752,873,1418,2151,2601,2947,2992,3878,3946,4260,4291,5185,5700 'fix':1361,1448,1452,1456,1459,1460,1463,1884,1892,1901,2256,2385,2575,2757,2820,2825,3077,3082,3470,4970 'fix-chain':3076 'flag':1671,1890,1920,3177 'flow':771,3709 'focus':1971,1977,2000,2010,2074,2146,2201,3307,3312,3359,3418,4194,4995,5338 'follow':660,670,679,767,982,3707,4731 'forc':417 'forget':1847 'format':958,1000,1020,1038,1063,1086,1195,2433,2436,2454,2457,3814,3994,4018,4061,4115,4118,4573,4933 'found':824,832,2864,3802,3843 'fp':1449,1464 'fps':1307,2822 'fragment':4198,4997 'frame':2148,2220,3491,3579,5520 'frequenc':1937 'frequent':1030 'friend':4276 'full':2479,4263,4443,4452,4461,4534,4718,5080 'function':1345 'gap':1807,1908 'gather':870,4167 'gemini':4434,4762,5029,5288,5308,5336 'generat':371,4250 'generic':5509 'genuin':3435,5542 'get':127,623,2130,2249,2668,3023,3643,4098,5270 'get-url':126,5269 'gh':152,215,227 'git':116,124,181,277,288,302,316,342,344,346,348,581,591,597,796,802,809,857,882,892,895,902,932,954,996,1016,1034,1059,1082,1100,1159,1191,1413,1538,2430,2450,3732,3860,3886,3909,3918,3923,3932,3948,3964,3985,4009,4030,4052,4106,4351,4360,4847,5267,5640,5717 'git-nat':180,276 'github':139,160,162,213,1055,4048 'github.com':136 'gitlab':144,147,172,239,1057,4050 'given':508 'glab':164,241,259 'global':470,483,677,692,729,741,755,769,3694,3702,3705,3734,3755,3763,3782,3789,3804,3852,3856,4088,4092,4156,4201,4245,4632,4645,4649,4709,4767,5041,5062,5085,5138,5163,5181,5186,5196,5254,5310,5709,5737 'global-discov':3781 'go':2407 'goal':3186 'goe':5619 'good':1360,2191,5517 'got':1329 'grace':5708,5725 'great':2185,5511 'grep':1042,1065,1147,1164,1167,1170,1199,3226,3229,4063 'greptil':1109,1301,1422,1480,2819,2834,3105,3113 'group':4171 'growth':32,404,2216,3179,3486,5543 'gt':88 'h':632,663,959,1002,3995 'habit':3650,5074 'handl':1733 'happi':3468 'hard':2428 'harden':4951 'hash':948 'head':3920,3971,5106 'health':1309,1488,1554,1573,2858,2880,2891,3123,3165 'higher':1997 'highest':2024,2115,3599,4602,4884,5043 'highest-impact':2114,3598,5042 'highest-loc':2023,4601,4883 'highlight':2030,3308,5464 'histogram':1762 'histori':7,16,378,858,1111,1425,2480,2506,2517,2615,2626,3111,5089 'hit':4149,5746 'home':58 'home/.vibestack':59 'hook':1602,1605,1623 'host':117,176 'hotspot':1032,1078,1911,1926,1934,3098 'hour':440,631,637,702,1012,1761,1769,1780,1862,2098,2155,2752,2761,3014,3030,3357,4990 'https':5275 'ic/cto-level':410 'ident':4349,4845 'identifi':388,877,886,1775,2020,3272,3595,5049 'immedi':1383,5401 'impact':2116,3600,3622,5044 'import':1515,5614 'improv':2580,3626,5467,5521 'in':4964 'includ':798,814,1548,2056,2134,2327,2342,2552,2620,2832,2847,2855,2878,2909,3344,4675,4852 'incorpor':859 'independ':938 'indic':1906,1940 'individu':4624 'infer':2041,4619,4808,4865 'inflat':1354 'info':3826 'insert':952,1269,1281,2067,2724,2771,2784,4860,5278,5293 'insid':794,3730,5715 'insight':1683,5059 'instal':5732 'instead':766,2332,3710,3921 'instruct':361,492 'integr':3460 'intent':1336 'intent-to-ship':1335 'interpret':3002,3315 'invest':3493,3507,5548 'invoc':421 'isn':1722 'item':1505,1512,1516,1517,1521,1531,3231,3256,3265,3270,3276,3297 'job':5512 'json':218,230,245,263,2530,2631,2681,2696,2704,2709,2884,2889,2914,2918,3815,3829,3872,4212,5103,5230,5246,5251,5252,5612,5634 'jsonl':1627,1738,3196 'judgment':3590 'jwt':1714 'k':1317,2811,2961,4416,4420,4424,4447,4456,4465,4572,4578,4940,4942,5330 'k1':1071,4069 'keep':5575 'key':2549,4806,4863,4944,5169 'l':72,1152,1206,2685,5234 'label':1419 'land':3513,3520,3538 'larg':1962 'last':433,438,443,448,694,700,705,710,2556,2559,2982,3170,3846,5162 'late':1791 'late-night':1790 'lead':1326 'leaderboard':1382 'learn':55,66,69,73,80,81,86,102 'least':2402,2473,3668,4140 'left':4377 'length':460,1859,2485,5405 'less':1364 'level':1992,2224,3377,3638,5523 'leveling-up':2223 'lib/snippets/capture-learnings.md':2343 'lib/snippets/prior-learnings.md':799 'like':5530,5547 'limit':94 'line':985,1357,1369,1485,1679,2303,2948,4292,4475,4482,4488,4494 'list':1694,1935,3145 'llms':4383 'load':84,2505,2537,2623,2987,3479,5088,5152 'loc':972,1268,1272,1276,1280,1284,1347,1860,1957,1961,1965,1968,2025,2036,2064,2070,2107,2211,2378,2729,2732,2749,2812,2962,3095,3349,4305,4417,4421,4448,4457,4466,4474,4570,4603,4751,4801,4859,4885,4943,5051,5173,5331 'loc/hour':2571,5676 'loc/session-hour':1299 'local':518,545,1764,2425,3900,3907,3914,5643,5656 'local-on':3899 'locat':3768 'log':345,582,955,997,1017,1035,1060,1083,1160,1192,1539,1647,2431,2451,3197,3861,3919,3924,3987,4011,4054,4108 'logic':1252,1339,3744,5372 'long':3550,4559 'long-term':3549 'longer':3024,3849,5583 'longest':4395,4549 'lower':2002 'lru':1731 'ls':2527,2678,5100,5227 'm':1313,2438,2459,2651,2675,3135,4120,4413,4782,5017,5025,5033,5224 'main':311,332,1232,3958,5375,5644 'major':4617 'make':1710,3188 'mani':2468,3556,4135,4179 'mar':2804,2954,4298,5323 'markdown':5589 'master':325,3959 'match':657,989,5148 'matter':2040,3545,3620 'max':4781 'maximum':4189 'may':842,1905,5646 'mean':612,3009 'medium':1831,1958 'meet':844 'member':2051,2331,3042,4677 'merg':349,1107,1226,1250,2722,4042,4803,5681 'messag':1054,2044,2306,4047,4622,4811,4869,5054 'metric':13,384,1210,1215,1220,1265,1320,1481,1551,2341,2550,2619,2716,3578,4162,4738,5170,5357,5398,5493 'micro':1836 'middlewar':2197 'midnight':529,546,594,615,640,3742,5367,5414 'midnight-align':528,3741,5366,5413 'min':1830,1835,1839 'minut':1806,1824,2747,3664 'mix':2085,3061,3633,4874,4967 'mkdir':2634,5202 'mode':789,3696,3720,5344,5710 'modifi':1543 'modul':1150,2246,3451,3502 'moment':1645,1666,1687,1692,1753 'morning/evening':1787 'most-chang':1916,1987 'most-skip':3273 'mr':242 'multipli':418,619 'must':3658,4653 'myapp':4239 'n':636,1026,1229,1233,1246,1248,1251,1266,1270,1274,1278,1282,1286,1293,1296,1300,1303,1310,1555,3127,3287,3472,3582,4024,4082,4410,4426,4436,4444,4453,4462,4477,4742,4749,4752,4753,4757,4766,4774,4779,4925,5014,5022,5030 'name':338,358,899,1040,1090,1134,1137,1140,1143,1197,1421,1610,3406,3957,4317,4392,4396,4404,4406,4442,4451,4460,4531,4536,4545,4551,4557,4795,5262 'name-on':1039,1089,1196 'narrat':865,922,2940,3001,3057,4251,5463,5598,5617 'nativ':182,278 'nearest':5678 'need':1704,1724 'negat':5566 'neither':177 'net':1277,2069,2728,4425 'network':4077 'neutral':3581 'never':4401,4528,5560 'new':1344,2511,3464 'next':2606,2639,2669,2688,2695,3511,3652,5076,5191,5207,5237,5250 'night':1792 'nnn':1056,1058,4049,4051 'no-merg':1105,4040 'node':1149 'nomatch':2521,2656,3210,5094,5215 'non':801,808,1256,1259 'non-blank':1255 'non-com':1258 'non-git':800,807 'none':103 'noreply@anthropic.com':2323 'normal':758,5273,5483 'notabl':3038 'note':845,2317,2830,3554,3568,3896,4081,5136 'number':659,1051,1819,2033,2641,2671,4044,5209 'numstat':984,1004 'o':1136,1139,1142,2520,2655,3209,5093,5214 'observ':5020,5028,5036 'oe':1066,4064 'omit':2874 'one':1678,2274,2474,2541,3669,4141,4286 'one-lin':1677 'onelin':1163 'open':1502,1556,2921 'opportun':405,2214,3484 'option':669,678,779,804 'order':1321 'orient':920,3674 'origin':129,875,884,956,998,1018,1036,1061,1084,1102,1161,1193,2264,2406,2432,2452,3925,3935,3988,4012,4033,4055,4109,5272,5637 'origin/main':307 'origin/master':321 'other':4591 'otherwis':148 'output':2943,3282,3821,3830,4254,5577,5599,5618 'overlap':5419 'overrid':5660 'overview':4737 'p':2635,5203 'p0':2923 'p0/p1':1509,1558 'p1':2924 'p2':1513,1560,2926 'pace':3544 'pacif':1818 'pad':4390,4543 'parallel':935 'pars':305,319,493,2298,3827,3967 'pass':2271 'path':3469,3880,3882,3890,4076 'pattern':9,380,1784,1903,2092,2145,2173,2996,3008,3039,3354,3421,4208,4216,4233,4724,4977,5011,5019,5027,5035 'pay':2253 'payment':2245,3501 'pct':2755,2758,2828 'peak':1779,2097,2154,2760,2817,2967,3356,4988 'per':26,400,967,1075,1094,1244,1380,1861,2371,2376,2379,2383,2387,2391,2750,3031,4026,4205,4230,4358,4784,5006,5317 'per-author':1074,1093,1379,2375,4025 'per-commit':966 'per-person':25,399 'per-project':4783 'per-repo':4357 'per-tool':4204,5005 'percentag':1879,1981,3574 'period':717,720,1316,1520,1534,1564,1690,2899,2930,2934,3134,3206,3286,4919,4924 'persist':15,5488 'person':27,401,908,2087,2105,2152,2289,2416,2442,3323,3346,3634,4258,4268,4325,4368,4505,4685,4702,4837,5568 'phrase':3640 'pictur':5084 'plan':3192,3199,3230,3235,3238,3251,3255,3264,3269,3283,3291,3300 'platform':109,118,137,145,158,170,282 'point':4612 'posit':3121 'post':4345 'power':4499 'pr':216,1227,1943,1950,2026,2032,2119,2208,2265,3066,4472,4604,4888,4954,5045,5684 'pr/mr':189,199,351,1050,4043 'practic':3655 'prais':30,402,2175,3422,5510,5527 'preambl':45 'prefix':1875 'present':1213,1611,1684 'primari':1261,2315 'print':333 'prior':457,719,2515,2534,2592,2625,3159,5112,5127,5137,5149,5180,5402,5429,5491,5703,5736 'prior-window':5490 'proceed':2283 'product':994,1930,3013,4207,4989 'product/architecture':3621 'project':473,487,732,745,4301,4339,4403,4414,4440,4635,4678,4722,4736,4740,4785,4823,4826,4898,4913,4976,4981,5048,5058,5083,5261,5297,5326 'prose':5596 'prs':1249,2721,2816,2966,3456,3680,4802 'q':220,232 'qa':1166,3147 'qualiti':12,383,3092,3548 'queri':583,2477,3474,5641 'quick':1098 'quiet':885,3936 'rang':1288,2795,2974,4319,4713 'ratio':1285,1455,1893,2108,2235,2382,2386,2563,2576,2735,2776,2789,3096,3107,3175,3351 'rational':1322 'raw':871,1267,1271,1275,1298,1346 'reach':4087 'read':833,909,1427,1492,1580,1648,2544,3818,5156,5688 'real':1343 'realist':3656 'recent':2540,5126 'record':2603,5188 'redi':1721 'reduc':3531 'ref':291,3951,3970 'refactor':1887 'refer':1537 'reflect':1334,1342 'refs/remotes/origin':297 'refs/remotes/origin/head':292,3952 'regress':1154,1318,2901,3142,5469 'regular':3747 'relat':549 'relev':867 'reliabl':4389 'remot':121,125,3904,3930,5264,5268 'render':4370 'repo':193,228,260,760,797,2277,3395,3714,3733,3865,3868,3874,3894,3902,3928,3945,4072,4083,4097,4129,4145,4181,4196,4200,4224,4308,4359,4365,4391,4441,4450,4459,4509,4516,4521,4530,4535,4550,4607,4695,4746,4773,4789,4794,4841,4882,4911,4994,5018,5026,5034,5069,5718 'repo-scop':759,3713 'report':513,1815,2008,2487,4186 'repos/day':4188,4190 'requir':792,3728,5713 'result':203 'retro':1,39,474,488,733,746,762,817,822,827,830,864,891,911,1439,1529,1589,1657,2141,2287,2516,2535,2557,2593,2602,2614,2664,2972,2983,2993,3160,3244,3748,4711,5070,5113,5128,5139,5150,5164,5182,5187,5376,5484,5704,5738 'retrospect':4,370,375,770,3695,4636 'return':900,2867 'rev':304,318,3966 'rev-pars':303,317,3965 'reveal':3065,3072,5064 'review':1907,2270,3195,3455,3676 'reviews.jsonl':3223 'rewrit':2198 'right':4381,4387 'rn':1048 'role':4581 'round':5675 'row':1482,1574,1643,1754 'rule':4502,5615 'run':391,427,889,928,2604,3204,3700,3766,3770,3807,3859,5189,5348,5485,5701 'safe':3191 'safeti':1622 'same-day':3681 'same-length':458,5403 'save':2509,2613,2629,2691,2702,2989,5199,5245,5471,5719 'say':362,2187,3440,3838,4896,4920,5513,5535,5668 'scaffold':1371 'scatter':2004 'schema':2708 'scope':761,3715 'score':1972,1978,1998,2003,2011,2147,3313 'screenshot':4275,4343 'screenshot-friend':4274 'script':3773 'second':780,3752,4491 'section':1508,1524,2129,2558,2598,3305,3338,3405,4321,4820,5570,5587,5707 'secur':4950 'sed':295 'see':1372,2609,4659,5194 'self':175,4656,5697 'self-contain':4655,5696 'self-host':174 'senior':409 'sentenc':2165,3412 'separ':986,1595,2340,4704 'sequenc':2640,2670,3080,5208 'server':1705 'session':1009,1295,1700,1800,1803,1814,1826,1828,1832,1837,1855,1858,2091,2099,2142,2202,2389,2567,2586,2740,2743,2746,2751,2995,3021,3353,3835,3842,4003,4228,4311,4429,4639,4756,4813,4927,5015,5023,5031,5174,5282,5302 'set':526 'setopt':2519,2654,3208,5092,5213 'share':4227,4282 'shareabl':4257,4324,4733 'shift':3050 'ship':43,1223,1325,1338,1365,1899,1973,2014,2111,2158,2193,2492,2498,3051,3074,3228,3249,3289,3316,3363,3409,3602,3616,4093,4438,4468,4593,4768,4879,4953,5037 'shorter':3026 'shortlog':1101,4032 'shortstat':964,3999 'show':683,1377,1667,1760,1877,1913,2368,3166,4508,4832,5072,5158,5447 'side':1713,5450,5452 'side-by-sid':5449 'signal':1302,1423,1454,1897,2827,3093,3106,3115 'silent':1486,3306,3806 'sinc':573,606,635,639,957,999,1019,1037,1062,1085,1103,1162,1194,3813,3990,4014,4035,4057,4111,5389,5409,5432 'singl':1842,1986,2022,2113,3523,4373,4600,5068 'single-commit':1841 'single-repo':5067 'size':1944,1951,3067 'skill':429,1175,1575,1596,1609,1613,1641,1669,3227,5694 'skill-retro' 'skip':756,1478,1483,1570,1639,1750,2278,2595,2990,3275,3303,3392,3788,3803,3892,3908,4079,4515,4930,5133,5144,5508,5705,5726 'slight':5582 'sloc':1253,1340 'slug':53,61,3222 'small':1955,3454,3654 'sn':1104,4039 'snapshot':2512,2632,5200,5477,5613,5635,5720 'solo':2140,2276,3394,4582,4897 'solo/team':4449,4458,4467 'someon':4278,4658 'someth':3660,5531 'sort':1025,1044,1047,1069,1203,1405,2440,2461,3399,4023,4067,4122,4520,4790 'source-timurgaleev' 'space':3525 'spec':991,1138,1144,1202 'specif':2178,2218,3370,3381,3425,3488,3627,5500,5540 'split':2363 'stale':5648 'stand':5571 'start':542,566,592,979,3905,5369,5425 'start/end':1816 'stat':3984,4334,4838 'status':154,166 'stderr':3820 'stdout':3832 'step':106,211,763,868,1207,1431,1496,1755,1797,1866,1909,1941,1969,2048,2344,2393,2503,2611,2936,2978,2985,2998,3054,3310,3328,3387,3692,3716,3735,3764,3857,4089,4157,4169,4202,4246,5086,5197 'stop':687,3855 'storag':1706 'streak':2395,2414,2417,2420,2443,2482,2493,2499,2621,2798,2969,4005,4094,4148,4312,4439,4686,4703,4708,4769,5175,5311,5341,5745 'string':550 'structur':2941,4252 'sub':647,4819 'sub-day':646 'sub-sect':4818 'subject':947 'subsequ':210,341 'substitut':354,2644 'subsystem':3087 'succeed':157,169,223,235,255,273 'suffix':589 'suggest':2226,2262,3383,3490,3639,5544,5671 'sum':1853,3262,3267 'summar':4613 'summari':1099,1218,1680,2946,2975,4290 'support':3280 'surround':4671 'sustain':3543 'switch':2007,3534,4008,4161,4682,5000,5316 'switches/day':4778,5177 'symbol':290,3950 'symbolic-ref':289,3949 'synthes':4626 'system':522 't00':577,586,3991,4015,4036,4058,5393,5436,5443 'tabl':1219,1552,2976,5165,5454,5590 'take':3662 'target':190,251 'team':21,386,2050,2280,2330,2413,2419,2491,3006,3036,3041,3384,3577,3593,3609,3637,3647,3673,4336,4589,4676,4707,4720,4912,5586 'team-awar':20,385 'team-level':3636 'team-ori':3672 'team-wid':3005 'team/project':4264 'teammat':916,926,2161,3391,3398,5562 'telemetri':1177 'templat':4650 'ten':1356,1367 'term':3551 'test':969,987,990,992,1130,1135,1141,1155,1165,1168,1171,1186,1201,1279,1283,1308,1312,1319,1404,1927,2102,2106,2205,2234,2241,2381,2562,2731,2734,2775,2788,2814,2857,2861,2879,2886,2890,2893,2896,2902,2905,2964,3094,3122,3125,3131,3139,3143,3146,3149,3152,3164,3168,3174,3182,3187,3350,3461,3497 'textbook':3457 'theme':4486,4492,4498,4618,4628 'thing':2179,2219,3371,3426,3601,3624 'third':4497 'thousand':1368,4575 'threshold':1808 'time':499,510,604,784,1440,1590,1658,1758,1765,1817,1852,1865,1924,2144,2356,2426,2844,2994,3028,3047,3245,3480,3738,4978,5554 'timestamp':946,1007,4001,4166,5651 'timezon':519,5657 'timur':1390,2768 'timur/auth-rethink':1699 'timur/cache-layer':1720 'titl':1228,2035,4473 'today':554,2410,2466,2643,2666,2672,2680,2694,4133,5211,5221,5229,5249,5379 'todo':1503 'todos.md':1120,1125,1490,1493,1544,1566,2852,2916 'token':1701 'tone':5494 'tool':479,737,2545,2700,4206,4214,4219,4231,4815,5002,5007,5157,5243,5728 'top':1387,1914,1991,2080,2778,2791,3515,3591,4479,4608,4804 'top-level':1990 'topic-agent-skills' 'topic-ai-agents' 'topic-claude-code' 'topic-cursor-ide' 'topic-developer-tools' 'topic-kiro' 'topic-mcp' 'topic-prompt-engineering' 'topic-slash-commands' 'total':971,1311,1501,1849,2065,2373,2892,2920,3124,3232,3257,3271,3296,3834,4369,4679,4743,4750,4798,4855,4987,5171,5290,5576 'touch':1080,1240,1984,2047,2078,4917 'tr':77,2686,5235 'track':19,2333,2396,2411 'trailer':2297,3564 'tran':4542 'transcript':4539 'treat':5680 'treatment':2133 'trend':18,2350,2369,2554,2610,2980,3097,3109,3688,5001,5160,5195 'tri':3847,3947 'triag':1110 'true':98,1118,1128,1184,2524,2659,3213,5097,5218 'truncat':4402,4529 'ts':1593,1661 'tweetabl':2801,2945,4289,5320 'type':425,1447,1869,2084,3060,4873,5253 'typic':1840 'tz':527,5661 'u':1204,2441,2462,4123 'understand':4664 'union':4124 'uniq':1045,1072,4070 'uniqu':2422 'unit':538,618,633 'unknown':54,62,178,281 'unpars':1484 'url':122,128,134,142,5271 'usag':685,688,1176,1576,1614,1642,4215,5003 'use':34,179,201,224,236,256,274,310,324,412,520,572,598,634,917,1766,1804,2268,2542,2697,3774,3912,3917,3972,4221,4236,4346,4532,4571,4687,4842,4983,5140,5240,5364,5388,5407,5588,5636 'user':390,420,424,516,839,880,1328,1411,2059,2126,2447,3333,3340,3699,4316,4332,4348,4405,4512,4523,4584,4598,4615,4666,4689,4835,4844,4891,4905,5347,5623,5654 'user-author':838 'user-invoc':419 'user.email':897 'user.name':894,904,1415,4353,4849 'v':1043,1148 'v1':1323 'valid':651,1715,3117,3879,3889 'valu':1221,4739,5118,5743 'veloc':3052 'verifi':306,320 'version':1287,1938,2794,3088 'version/changelog':1936 'viabl':1716 'vibe':3189,4644 'vibe-global-discov':4643 'vibestack':57,1174,3787,4501,5263,5339 'view':217,229,243,261,5063 'visual':4374 'volum':1264 'vs':456,718,925,970,1929,2555,2981,4197,4226,4996,5121,5161 'vx.y.z.w':1289,1290 'w':537,665 'wall':602 'wall-clock':601 'want':4280 'wc':71,1151,1205,2684,5233 'week':2,38,368,536,617,1976,2017,2239,2347,2349,2365,2372,2380,2384,2388,2392,2607,2802,2952,3319,3322,3653,3685,3687,4296,4315,4407,4471,4596,4668,5040,5077,5192,5321 'week-over-week':2346,3684 'weight':1234,1332 'well':3367,3429 'wherev':359 'whether':1783,3020 'whole':3608 'wide':3007 'widen':4560 'width':4565 'win':3594 'window':455,461,468,491,500,531,561,649,673,682,690,727,749,785,944,1158,1190,1441,1471,1530,1547,1591,1638,1659,1749,2029,2122,2352,2357,2714,2845,3246,3605,3739,3758,3850,5117,5132,5143,5259,5361,5385,5406,5424,5430,5476,5492,5664,5674,5742 'within':1437,1527,1545,1587,1655,2842,3242,4821,4839 'without':595,3589,4669 'word':667,676,5581 'work':8,379,1799,2001,2169,2186,3526,3721,4480,4609,4807,4864,4945 'workload':1735 'workstream':1374 'worth':3506,5552 'would':2252,3437,4279 'write':2162,2699,2938,3403,5242,5460,5606 'writer':4946,4956 'written':5630 'x':1557,3114,3294,4415,4431,4446,4455,4464,4759 'x/twitter':4284 'xl':1966 'y':1304,1559,2437,2458,2650,2674,3116,4119,4419,4433,4761,5223 'yet':104 'z':1306,1561,3119,4423,4435,4763 'zero':5666 'zone':1782 'zsh':2525,2660,3214,5098,5219","prices":[{"id":"e4e02582-f8fd-4a8d-b9e7-1e1344c6631d","listingId":"0153554b-9a65-44d8-bf8a-17ec0b772abb","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"timurgaleev","category":"vibestack","install_from":"skills.sh"},"createdAt":"2026-05-18T19:06:23.539Z"}],"sources":[{"listingId":"0153554b-9a65-44d8-bf8a-17ec0b772abb","source":"github","sourceId":"timurgaleev/vibestack/retro","sourceUrl":"https://github.com/timurgaleev/vibestack/tree/main/skills/retro","isPrimary":false,"firstSeenAt":"2026-05-18T19:06:23.539Z","lastSeenAt":"2026-05-18T19:06:23.539Z"}],"details":{"listingId":"0153554b-9a65-44d8-bf8a-17ec0b772abb","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"timurgaleev","slug":"retro","github":{"repo":"timurgaleev/vibestack","stars":15,"topics":["agent-skills","ai-agents","claude-code","cursor-ide","developer-tools","kiro","mcp","prompt-engineering","slash-commands"],"license":"mit","html_url":"https://github.com/timurgaleev/vibestack","pushed_at":"2026-05-18T18:19:05Z","description":"vibestack is a portable skill pack for AI coding agents. Slash commands like /office-hours, /ship, /investigate, /tdd, /review install once and work across every agent that supports the Agent Skills open standard — Claude Code, Cursor, Kiro, and a growing list of others. ","skill_md_sha":"318129d09ea7a4d377f28c89ff3aa9d3e6959167","skill_md_path":"skills/retro/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/timurgaleev/vibestack/tree/main/skills/retro"},"layout":"multi","source":"github","category":"vibestack","frontmatter":{"name":"retro","description":"Weekly engineering retrospective. Analyzes commit history, work patterns,\nand code quality metrics with persistent history and trend tracking.\nTeam-aware: breaks down per-person contributions with praise and growth areas.\nUse when asked to \"weekly retro\", \"what did we ship\", or \"engineering retrospective\".\nProactively suggest at the end of a work week or sprint."},"skills_sh_url":"https://skills.sh/timurgaleev/vibestack/retro"},"updatedAt":"2026-05-18T19:06:23.539Z"}}