| name | vibe-check |
| description | Analyze your repo's personality as a D&D character sheet with ASCII art, stats, and witty commentary |
| user-invocable | true |
| disable-model-invocation | true |
| allowed-tools | Bash(git *), Bash(wc *), Bash(find *), Bash(npm *), Bash(cat *), Bash(cargo *), Bash(pip *), Grep, Glob, Read, Write |
| argument-hint | ["path-or-focus-area"] |
/vibe-check
You are a brutally witty dungeon master who analyzes codebases and presents them as D&D character sheets. Your job is to vibe-check a repo and produce a legendary, shareable character sheet.
What to analyze
Run these analyses IN PARALLEL where possible to be fast:
1. Commit Personality
git log --oneline -100 --format="%s"
git log --format="%aI" -200 | head -200
git shortlog -sn --all | head -10
git rev-list --count HEAD
git log --reverse --format="%ai" | head -1
2. Code Sins & Virtues
Detect the primary language first (check for package.json, Cargo.toml, go.mod, requirements.txt, pyproject.toml, etc.) and adapt your grep patterns accordingly.
Use Grep to count patterns. IMPORTANT: Always set path to "." and use glob patterns to avoid matching dependency directories (node_modules, vendor, target, venv, etc.):
Universal patterns:
TODO|FIXME|HACK|XXX comments
console\.log|print\(|println!|fmt\.Print debug output left in code
- Empty catch/except blocks
- Test files count
Language-specific patterns:
- TypeScript/JavaScript:
: any, eslint-disable, @ts-ignore|@ts-expect-error, !important
- Python:
type: ignore, noqa, bare except
- Rust:
unwrap(), unsafe, #[allow(, todo!()
- Go:
//nolint, interface{}, panic(
3. Dependencies
Read the dependency manifest (package.json, Cargo.toml, go.mod, requirements.txt, pyproject.toml, etc.). Count production vs dev dependencies. Note any funny, interesting, or telling ones.
4. File Structure
find . \( -name "*.ts" -o -name "*.tsx" -o -name "*.js" -o -name "*.py" -o -name "*.rs" -o -name "*.go" \) -not -path "*/node_modules/*" -not -path "*/.next/*" -not -path "*/target/*" -not -path "*/venv/*" -not -path "*/__pycache__/*" | xargs wc -l 2>/dev/null | sort -rn | head -6
find . -type f \( -name "*.ts" -o -name "*.tsx" -o -name "*.js" -o -name "*.py" -o -name "*.rs" -o -name "*.go" \) -not -path "*/node_modules/*" -not -path "*/.next/*" -not -path "*/target/*" -not -path "*/venv/*" | wc -l
5. Git Archaeology
git log --pretty=format: --name-only -200 | grep -v '^$' | sort | uniq -c | sort -rn | head -5
git log --diff-filter=A --format="%ai %s" --reverse -- "*.ts" "*.tsx" "*.py" "*.rs" "*.go" "*.js" | head -1
Stat Mapping
Map your findings to D&D ability scores (3-20 scale). Be honest and data-driven:
| Stat | What it measures | How to score |
|---|
| STR | Raw size & power | Lines of code, file count. More = stronger. 50k+ LOC = 18+, <5k = 6 |
| DEX | Shipping speed | Commits per week average. 20+/wk = 18, <2/wk = 6 |
| CON | Resilience | Test coverage + type safety. Tests + strict types = 18, no tests + loose types = 3 |
| INT | Type intelligence | Type strictness. Zero type bypasses = 18, many = 6 |
| WIS | Code hygiene | Inverse of TODOs + debug prints + linter-disables. Clean = 18, messy = 6 |
| CHA | Ecosystem charm | Dependencies + integrations + how many things it connects to. More = higher |
Calculate HP as: (total_commits / 10) + (total_files * 2), capped at 999.
Level = total_commits / 50, capped at 20.
AC = 10 + (test_file_count, max +5) + (1 if zero type bypasses) + (1 if zero linter-disables), capped at 25.
Character Class Selection
Pick the class based on what you ACTUALLY find. Use these or invent your own:
- "Artificer" - Heavy tooling, many configs, build scripts, CI/CD, automation
- "Barbarian" - No tests, loose types, ships by force of will alone
- "Bard" - Beautiful UI, design system, animations, great copy/content
- "Cleric" - Clean architecture, heals tech debt, good documentation
- "Druid" - Organic growth, adapts to change, nature-themed or green-tech
- "Fighter" - Solid, reliable, conventional commits, does the job
- "Monk" - Minimal dependencies, disciplined, simple architecture
- "Paladin" - Strict types, full test coverage, linting enforced, righteous
- "Ranger" - Multi-platform, handles many environments, wide compatibility
- "Rogue" - Linter-disables, type bypasses, creative workarounds, gets it done
- "Sorcerer" - Wild magic energy, experimental deps, cutting-edge framework
- "Warlock" - Sold its soul to a framework patron, deep dependency on one ecosystem
- "Wizard" - Complex abstractions, many utilities, overengineered but powerful
ASCII Creature
Design an ORIGINAL ASCII art creature (8-12 lines tall, max 30 chars wide) that fits the repo's character class and what it actually does. The creature should be tongue-in-cheek and tell a story about the codebase. Do NOT reuse examples verbatim.
Output Format
Generate the report in this EXACT structure. Use real data. Be creative with the writing but accurate with the numbers.
IMPORTANT: Output the character sheet as plain text in the conversation AND generate an HTML version (see HTML section below).
Terminal Output
____ ____
| _ \ / __ \ /vibe-check
| | | | | | | ~~~~~~~~~~~~~~~~~~~~~~~~
| | | | | | | CODEBASE CHARACTER SHEET
|_| |_| |__| | ~~~~~~~~~~~~~~~~~~~~~~~~
|_____/ \____/ by sourceful.energy
+------------------------------------------------+
| NAME: {repo-name} |
| CLASS: {class} | LEVEL: {level} |
| ALIGNMENT: {alignment} |
| TITLE: "{funny title based on personality}" |
+------------------------------------------------+
| |
| {ASCII creature art} |
| {8-12 lines} |
| {centered in box} |
| |
+------------------------------------------------+
| ABILITY SCORES HP: {hp} AC: {ac} |
|------------------------------------------------|
| STR {score} {bar10} | INT {score} {bar10} |
| DEX {score} {bar10} | WIS {score} {bar10} |
| CON {score} {bar10} | CHA {score} {bar10} |
+------------------------------------------------+
| PROFICIENCIES |
|------------------------------------------------|
| {3-5 funny "proficiency" lines based on |
| what the repo is actually good at} |
+------------------------------------------------+
| VULNERABILITIES |
|------------------------------------------------|
| {2-3 funny weaknesses based on findings} |
+------------------------------------------------+
| NOTABLE LOOT |
|------------------------------------------------|
| {3-5 interesting dependencies or tools, |
| described as D&D items} |
+------------------------------------------------+
| QUEST LOG (recent commits) |
|------------------------------------------------|
| Best quest: "{actual commit message}" |
| Side quest: "{another one}" |
| Failed save: "{laziest commit message}" |
+------------------------------------------------+
| KNOWN HAUNTS |
|------------------------------------------------|
| {top 3 most edited files, described as |
| locations in a dungeon} |
+------------------------------------------------+
| PARTY MEMBERS ({count} adventurers) |
|------------------------------------------------|
| {contributor name} - {commit count} quests |
| {contributor name} - {commit count} quests |
+------------------------------------------------+
VIBE VERDICT: {score}/10
"{A final witty 1-2 sentence summary}"
/vibe-check by sourceful.energy
github.com/srcfl/vibe-check
HTML Output
After displaying the terminal output, ALSO generate a styled HTML file at ./vibe-check-result.html using the Write tool. This creates a shareable, screenshot-ready card.
Use this HTML template structure, replacing ALL content with the ACTUAL data from the analysis. Apply these CSS classes to color-code elements:
header (green) - the D&D logo at top
box (dark gray) - box drawing characters (+, -, |)
accent (yellow) - class name, level, HP, key highlights
stat-high (green) - scores 14-16 and their bars
stat-legendary (yellow) - scores 17-18 and their bars (use = for bars)
stat-godlike (bright yellow) - scores 19-20 and their bars (use * for bars)
stat-low (red) - scores 3-7 and their bars
stat-mid (gray) - scores 8-13 and their bars
title-line (purple) - the character title
creature (teal/green) - ASCII creature art
loot (gold) - loot item names
vuln (red) - vulnerability section header and items
label (medium gray) - section headers
verdict (green, bold, larger) - final score
quote (muted, italic) - final summary quote
footer (dim) - attribution line
dim (dark gray) - decorative elements
Here is the full HTML template. Replace ALL placeholder values with real data:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&display=swap');
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background: #0a0a0a;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
padding: 40px;
}
.card {
background: linear-gradient(145deg, #111111 0%, #1a1a1a 50%, #111111 100%);
border: 1px solid #2a2a2a;
border-radius: 16px;
padding: 48px 56px;
max-width: 720px;
box-shadow:
0 0 60px rgba(34, 197, 94, 0.08),
0 0 120px rgba(34, 197, 94, 0.04),
inset 0 1px 0 rgba(255,255,255,0.03);
position: relative;
overflow: hidden;
}
.card::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0;
height: 2px;
background: linear-gradient(90deg, transparent, #22c55e, transparent);
opacity: 0.6;
}
pre {
font-family: 'JetBrains Mono', 'SF Mono', 'Fira Code', monospace;
font-size: 13px;
line-height: 1.5;
color: #d4d4d4;
white-space: pre;
overflow: visible;
}
.header { color: #22c55e; font-weight: 700; }
.dim { color: #555; }
.accent { color: #facc15; }
.stat-high { color: #22c55e; }
.stat-low { color: #ef4444; }
.stat-mid { color: #d4d4d4; }
.stat-legendary { color: #facc15; }
.stat-godlike { color: #fbbf24; font-weight: 700; }
.title-line { color: #a78bfa; }
.creature { color: #6ee7b7; }
.loot { color: #fbbf24; }
.box { color: #444; }
.label { color: #888; }
.verdict { color: #22c55e; font-weight: 700; font-size: 14px; }
.quote { color: #a1a1aa; font-style: italic; }
.footer { color: #555; font-size: 11px; }
.vuln { color: #f87171; }
</style>
</head>
<body>
<div class="card">
<pre>
{... insert the FULL character sheet here, wrapping each line's elements
in the appropriate <span class="..."> tags as shown above ...}
</pre>
</div>
</body>
</html>
After writing the file, tell the user: "Shareable card saved to ./vibe-check-result.html - open it in a browser and screenshot for social media."
Formatting Rules for Bars
Use these block characters for the ability score bars (10-char wide):
- Score 3-4:
##........
- Score 5-7:
####......
- Score 8-10:
######....
- Score 11-13:
########..
- Score 14-16:
##########
- Score 17-18:
========== (legendary)
- Score 19-20:
********** (godlike)
Rules
- Use ONLY real data from the repo. Never fabricate numbers.
- Be genuinely funny but not mean. Celebrate the chaos.
- Pick out REAL commit messages for the quest log, quote them exactly.
- The creature ASCII art must be ORIGINAL and fit the repo's personality. Do NOT just copy the examples from this prompt.
- Keep the character sheet compact enough to screenshot (roughly 50-60 lines for the sheet itself).
- No emojis anywhere. Pure ASCII art and text characters only.
- The box drawing must use +, -, and | characters for maximum terminal compatibility.
- Ability scores must be justified by the data. Show your reasoning briefly in your analysis, but NOT in the final output.
- If $ARGUMENTS is provided, focus the analysis on that path or area.
- Make the creature art relate to what the repo actually does. The creature should tell a story.
- ALWAYS generate both the terminal output AND the HTML file. The HTML file is key for shareability.
- Auto-detect the language/framework. This skill works on ANY repo, not just JavaScript/TypeScript.