/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".
$ npx -y skills add specstoryai/agent-skills --skill specstory-yak --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/specstory-yak
Context preview
The summary Claude sees to decide when to auto-load this skill.
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".
SKILL.md
specstory-yak.SKILL.mdname: specstory-yak
description: 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".
license: Apache-2.0
metadata:
author: specstory
version: "1.0.0"
argument-hint: "[days|date-range]"
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
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:**
# 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 ti
Read more
name: specstory-yak description: 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". license: Apache-2.0 metadata: author: specstory version: "1.0.0" argument-hint: "[days|date-range]"
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
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:**
# 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 ti
Showing the first part of this file.
A collection of AI agent skills for working with SpecStory session histories. Built for developers who want Claude Code (or similar AI coding assistants) to help analyze, organize, and extract insights from their AI-assisted coding sessions.
Other skills on specstoryai-agent-skills.
- /specstory-guard
Install a pre-commit hook that scans .specstory/history for secrets before commits. Run when user says "set up secret scanning", "install specstory guard", "protect my history", or "check for secrets".
Open skill - /specstory-link-trail
Track all URLs fetched during SpecStory AI coding sessions. Run when user says "show my link trail", "what URLs did I visit", "list fetched links", or "show web fetches".
Open skill - /specstory-organize
Organize SpecStory AI coding sessions in .specstory/history into year/month folders. Run when user says "organize my history", "clean up specstory", "sort my sessions", or "organize specstory files".
Open skill - /specstory-project-stats
Fetch project statistics from SpecStory Cloud. Run when user says "get project stats", "show SpecStory stats", "project statistics", "how many sessions", or "SpecStory metrics".
Open skill - /specstory-session-summary
Summarize recent SpecStory AI coding sessions in standup format. Use when the user wants to review sessions from .specstory/history, prepare for standups, track work progress, or understand what was accomplished.
Open skill

