specstory-yak
Analyze your SpecStory AI coding sessions in .specstory/history for yak shaving - when your initial goal got derailed into rabbit holes. Run when user says "analyze my yak shaving", "check for rabbit holes", "how distracted was I", or "yak shave score".
What this skill does
# Specstory Yak Shave Analyzer Analyzes your `.specstory/history` to detect when coding sessions drifted off track from their original goal. Produces a "yak shave score" for each session. ## How It Works 1. **Parses** specstory history files from a date range (or all recent sessions) 2. **Extracts** the initial user intent from the first message 3. **Tracks** domain shifts: file references, tool call patterns, goal changes 4. **Scores** each session from 0 (laser focused) to 100 (maximum yak shave) 5. **Summarizes** your worst offenders and patterns ## What Is Yak Shaving? > "I need to deploy my app, but first I need to fix CI, but first I need to update Node, but first I need to fix my shell config..." Yak shaving is when you start with Goal A but end up deep in unrelated Task Z. This skill detects that pattern in your AI coding sessions. ## Usage ### Slash Command When invoked via `/specstory-yak`, interpret the user's natural language: | User says | Script args | |-----------|-------------| | `/specstory-yak` | `--days 7` (default) | | `/specstory-yak last 30 days` | `--days 30` | | `/specstory-yak this week` | `--days 7` | | `/specstory-yak top 10` | `--top 10` | | `/specstory-yak january` | `--from 2026-01-01 --to 2026-01-31` | | `/specstory-yak from jan 15 to jan 20` | `--from 2026-01-15 --to 2026-01-20` | | `/specstory-yak by modification time` | `--by-mtime` | | `/specstory-yak last 14 days as json` | `--days 14 --json` | | `/specstory-yak save to yak-report.md` | `-o yak-report.md` | | `/specstory-yak last 90 days output to report` | `--days 90 -o report.md` | ### Direct Script Usage ```bash python /path/to/skills/specstory-yak/scripts/analyze.py [options] ``` **Arguments:** - `--days N` - Analyze last N days (default: 7) - `--from DATE` - Start date (YYYY-MM-DD) - `--to DATE` - End date (YYYY-MM-DD) - `--path PATH` - Path to .specstory/history (auto-detects if not specified) - `--top N` - Show top N worst yak shaves (default: 5) - `--json` - Output as JSON - `--verbose` - Show detailed analysis - `--by-mtime` - Filter by file modification time instead of filename date - `-o, --output FILE` - Write report to file (auto-adds .md or .json extension) **Examples:** ```bash # Analyze last 7 days python scripts/analyze.py # Analyze last 30 days, show top 10 python scripts/analyze.py --days 30 --top 10 # Analyze specific date range python scripts/analyze.py --from 2026-01-01 --to 2026-01-28 # Filter by when files were modified (not session start time) python scripts/analyze.py --days 7 --by-mtime # JSON output for further processing python scripts/analyze.py --days 14 --json # Save report to a markdown file python scripts/analyze.py --days 90 -o yak-report.md # Save JSON to a file python scripts/analyze.py --days 30 --json -o yak-data.json ``` ## Output ``` Yak Shave Report (2026-01-21 to 2026-01-28) ========================================== Sessions analyzed: 23 Average yak shave score: 34/100 Top Yak Shaves: --------------- 1. [87/100] "fix button alignment" (2026-01-25) Started: CSS fix for button Ended up: Rewriting entire build system Domain shifts: 4 (ui -> build -> docker -> k8s) 2. [72/100] "add logout feature" (2026-01-23) Started: Add logout button Ended up: Refactoring auth system + session management Domain shifts: 3 (ui -> auth -> database) 3. [65/100] "update readme" (2026-01-22) Started: Documentation update Ended up: CI pipeline overhaul Domain shifts: 2 (docs -> ci -> testing) Most Focused Sessions: ---------------------- 1. [5/100] "explain auth flow" (2026-01-26) - Pure analysis, no drift 2. [8/100] "fix typo in config" (2026-01-24) - Quick surgical fix Patterns Detected: ------------------ - You yak shave most on: UI tasks (avg 58/100) - Safest task type: Code review/explanation (avg 12/100) - Peak yak shave hours: 11pm-2am (avg 71/100) ``` ## Scoring Methodology The yak shave score (0-100) is computed from: | Factor | Weight | Description | |--------|--------|-------------| | Domain shifts | 40% | How many times file references jumped domains | | Goal completion | 25% | Did the original stated goal get completed? | | Session length ratio | 20% | Length vs. complexity of original ask | | Tool type cascade | 15% | Read->Search->Edit->Create->Deploy escalation | **Score interpretation:** - 0-20: Laser focused - 21-40: Minor tangents - 41-60: Moderate drift - 61-80: Significant yak shaving - 81-100: Epic rabbit hole ## Present Results to User **IMPORTANT**: After running the analyzer script, you MUST add a personalized LLM-generated summary at the very top of your response, BEFORE showing the raw report output. ### LLM Summary Guidelines Generate a 3-5 sentence personalized commentary that: 1. **Opens with a verdict** - A witty one-liner about the overall state (e.g., "Your coding sessions this week were... an adventure." or "Remarkably disciplined! Someone's been taking their focus vitamins.") 2. **Calls out the highlight** - Reference the most notable session specifically: - If high yak shave: "That January 25th button fix that somehow became a Kubernetes migration? *Chef's kiss* of scope creep." - If low yak shave: "Your January 26th auth flow explanation was surgical - in and out, no detours." 3. **Identifies a pattern** - Note any recurring theme: - "You seem to yak shave most when starting with UI tasks" - "Late night sessions are your danger zone" - "Your refactoring sessions tend to stay focused" 4. **Ends with actionable advice or a joke** - Either: - A practical tip: "Consider time-boxing those 'quick CSS fixes' - they have a 73% yak shave rate" - Or a joke: "At this rate, your next typo fix will result in a complete rewrite of the Linux kernel" ### Example LLM Summary ``` ## ๐ Your Yak Shave Analysis Well, well, well. You came to fix buttons and left having rewritten half the infrastructure. Your average yak shave score of 47/100 puts you firmly in "classic developer behavior" territory. The standout? That January 25th session where a CSS alignment fix somehow evolved into a full Kubernetes deployment overhaul. Four domain shifts later, you probably forgot what a button even looks like. Pattern I noticed: Your UI tasks have a 58% higher yak shave rate than your code review sessions. Maybe start labeling those "quick UI fixes" as "potential 3-hour adventures" in your calendar. Here's the full breakdown: ``` Then show the raw report output below your summary. ### What to Highlight After your summary, when presenting the raw results: 1. The **worst offenders** with before/after comparison 2. **Patterns** in when/what causes yak shaving 3. **Actionable insight** - what task types to watch out for
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.