{"id":"9873d7c8-5a53-4536-b718-0334db36da6a","shortId":"VeHwAn","kind":"skill","title":"health","tagline":"Code quality dashboard. Wraps existing project tools (type checker, linter,\ntest runner, dead code detector, shell linter), computes a weighted composite\n0-10 score, and tracks trends over time. Use when: \"health check\",\n\"code quality\", \"how healthy is the codebase\", \"run all che","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## User-invocable\nWhen the user types `/health`, run this skill.\n\n---\n\n## Step 1: Detect Health Stack\n\nRead CLAUDE.md and look for a `## Health Stack` section. If found, parse the tools\nlisted there and skip auto-detection.\n\nIf no `## Health Stack` section exists, auto-detect available tools:\n\n```bash\n# Type checker\n[ -f tsconfig.json ] && echo \"TYPECHECK: tsc --noEmit\"\n\n# Linter\n[ -f biome.json ] || [ -f biome.jsonc ] && echo \"LINT: biome check .\"\nsetopt +o nomatch 2>/dev/null || true\nls eslint.config.* .eslintrc.* .eslintrc 2>/dev/null | head -1 | xargs -I{} echo \"LINT: eslint .\"\n[ -f .pylintrc ] || [ -f pyproject.toml ] && grep -q \"pylint\\|ruff\" pyproject.toml 2>/dev/null && echo \"LINT: ruff check .\"\n\n# Test runner\n[ -f package.json ] && grep -q '\"test\"' package.json 2>/dev/null && echo \"TEST: $(node -e \"console.log(JSON.parse(require('fs').readFileSync('package.json','utf8')).scripts.test)\" 2>/dev/null)\"\n[ -f pyproject.toml ] && grep -q \"pytest\" pyproject.toml 2>/dev/null && echo \"TEST: pytest\"\n[ -f Cargo.toml ] && echo \"TEST: cargo test\"\n[ -f go.mod ] && echo \"TEST: go test ./...\"\n\n# Dead code\ncommand -v knip >/dev/null 2>&1 && echo \"DEADCODE: knip\"\n[ -f package.json ] && grep -q '\"knip\"' package.json 2>/dev/null && echo \"DEADCODE: npx knip\"\n\n# Shell linting\ncommand -v shellcheck >/dev/null 2>&1 && ls *.sh scripts/*.sh bin/*.sh 2>/dev/null | head -1 | xargs -I{} echo \"SHELL: shellcheck\"\n```\n\nUse Glob to search for shell scripts:\n- `**/*.sh` (shell scripts in the repo)\n\nAfter auto-detection, present the detected tools via AskUserQuestion:\n\n\"I detected these health check tools for this project:\n\n- Type check: `tsc --noEmit`\n- Lint: `biome check .`\n- Tests: `bun test`\n- Dead code: `knip`\n- Shell lint: `shellcheck *.sh`\n\nA) Looks right -- persist to CLAUDE.md and continue\nB) I need to adjust some tools (tell me which)\nC) Skip persistence -- just run these\"\n\nIf the user chooses A or B (after adjustments), append or update a `## Health Stack`\nsection in CLAUDE.md:\n\n```markdown\n## Health Stack\n\n- typecheck: tsc --noEmit\n- lint: biome check .\n- test: bun test\n- deadcode: knip\n- shell: shellcheck *.sh scripts/*.sh\n```\n\n---\n\n## Step 2: Run Tools\n\nRun each detected tool. For each tool:\n\n1. Record the start time\n2. Run the command, capturing both stdout and stderr\n3. Record the exit code\n4. Record the end time\n5. Capture the last 50 lines of output for the report\n\n```bash\n# Example for each tool — run each independently\nSTART=$(date +%s)\ntsc --noEmit 2>&1 | tail -50\nEXIT_CODE=$?\nEND=$(date +%s)\necho \"TOOL:typecheck EXIT:$EXIT_CODE DURATION:$((END-START))s\"\n```\n\nRun tools sequentially (some may share resources or lock files). If a tool is not\ninstalled or not found, record it as `SKIPPED` with reason, not as a failure.\n\n---\n\n## Step 3: Score Each Category\n\nScore each category on a 0-10 scale using this rubric:\n\n| Category | Weight | 10 | 7 | 4 | 0 |\n|-----------|--------|------|-----------|------------|-----------|\n| Type check | 25% | Clean (exit 0) | <10 errors | <50 errors | >=50 errors |\n| Lint | 20% | Clean (exit 0) | <5 warnings | <20 warnings | >=20 warnings |\n| Tests | 30% | All pass (exit 0) | >95% pass | >80% pass | <=80% pass |\n| Dead code | 15% | Clean (exit 0) | <5 unused exports | <20 unused | >=20 unused |\n| Shell lint | 10% | Clean (exit 0) | <5 issues | >=5 issues | N/A (skip) |\n\n**Parsing tool output for counts:**\n- **tsc:** Count lines matching `error TS` in output.\n- **biome/eslint/ruff:** Count lines matching error/warning patterns. Parse the summary line if available.\n- **Tests:** Parse pass/fail counts from the test runner output. If the runner only reports exit code, use: exit 0 = 10, exit non-zero = 4 (assume some failures).\n- **knip:** Count lines reporting unused exports, files, or dependencies.\n- **shellcheck:** Count distinct findings (lines starting with \"In ... line\").\n\n**Composite score:**\n```\ncomposite = (typecheck_score * 0.25) + (lint_score * 0.20) + (test_score * 0.30) + (deadcode_score * 0.15) + (shell_score * 0.10)\n```\n\nIf a category is skipped (tool not available), redistribute its weight proportionally among the remaining categories.\n\n---\n\n## Step 4: Present Dashboard\n\nPresent results as a clear table:\n\n```\nCODE HEALTH DASHBOARD\n=====================\n\nProject: <project name>\nBranch:  <current branch>\nDate:    <today>\n\nCategory      Tool              Score   Status     Duration   Details\n----------    ----------------  -----   --------   --------   -------\nType check    tsc --noEmit      10/10   CLEAN      3s         0 errors\nLint          biome check .      8/10   WARNING    2s         3 warnings\nTests         bun test          10/10   CLEAN      12s        47/47 passed\nDead code     knip               7/10   WARNING    5s         4 unused exports\nShell lint    shellcheck        10/10   CLEAN      1s         0 issues\n\nCOMPOSITE SCORE: 9.1 / 10\n\nDuration: 23s total\n```\n\nUse these status labels:\n- 10: `CLEAN`\n- 7-9: `WARNING`\n- 4-6: `NEEDS WORK`\n- 0-3: `CRITICAL`\n\nIf any category scored below 7, list the top issues from that tool's output:\n\n```\nDETAILS: Lint (3 warnings)\n  biome check . output:\n    src/utils.ts:42 — lint/complexity/noForEach: Prefer for...of\n    src/api.ts:18 — lint/style/useConst: Use const instead of let\n    src/api.ts:55 — lint/suspicious/noExplicitAny: Unexpected any\n```\n\n---\n\n## Step 5: Persist to Health History\n\n```bash\neval \"$(~/.vibestack/bin/vibe-slug 2>/dev/null)\" && mkdir -p ~/.vibestack/projects/$SLUG\n```\n\nAppend one JSONL line to `~/.vibestack/projects/$SLUG/health-history.jsonl`:\n\n```json\n{\"ts\":\"2026-03-31T14:30:00Z\",\"branch\":\"main\",\"score\":9.1,\"typecheck\":10,\"lint\":8,\"test\":10,\"deadcode\":7,\"shell\":10,\"duration_s\":23}\n```\n\nFields:\n- `ts` -- ISO 8601 timestamp\n- `branch` -- current git branch\n- `score` -- composite score (one decimal)\n- `typecheck`, `lint`, `test`, `deadcode`, `shell` -- individual category scores (integer 0-10)\n- `duration_s` -- total time for all tools in seconds\n\nIf a category was skipped, set its value to `null`.\n\n---\n\n## Step 6: Trend Analysis + Recommendations\n\nRead the last 10 entries from `~/.vibestack/projects/$SLUG/health-history.jsonl` (if the\nfile exists and has prior entries).\n\n```bash\neval \"$(~/.vibestack/bin/vibe-slug 2>/dev/null)\" && mkdir -p ~/.vibestack/projects/$SLUG\ntail -10 ~/.vibestack/projects/$SLUG/health-history.jsonl 2>/dev/null || echo \"NO_HISTORY\"\n```\n\n**If prior entries exist, show the trend:**\n\n```\nHEALTH TREND (last 5 runs)\n==========================\nDate          Branch         Score   TC   Lint  Test  Dead  Shell\n----------    -----------    -----   --   ----  ----  ----  -----\n2026-03-28    main           9.4     10   9     10    8     10\n2026-03-29    feat/auth      8.8     10   7     10    7     10\n2026-03-30    feat/auth      8.2     10   6     9     7     10\n2026-03-31    feat/auth      9.1     10   8     10    7     10\n\nTrend: IMPROVING (+0.9 since last run)\n```\n\n**If score dropped vs the previous run:**\n1. Identify WHICH categories declined\n2. Show the delta for each declining category\n3. Correlate with tool output -- what specific errors/warnings appeared?\n\n```\nREGRESSIONS DETECTED\n  Lint: 9 -> 6 (-3) — 12 new biome warnings introduced\n    Most common: lint/complexity/noForEach (7 instances)\n  Tests: 10 -> 9 (-1) — 2 test failures\n    FAIL src/auth.test.ts > should validate token expiry\n    FAIL src/auth.test.ts > should reject malformed JWT\n```\n\n**Health improvement suggestions (always show these):**\n\nPrioritize suggestions by impact (weight * score deficit):\n\n```\nRECOMMENDATIONS (by impact)\n============================\n1. [HIGH]  Fix 2 failing tests (Tests: 9/10, weight 30%)\n   Run: bun test --verbose to see failures\n2. [MED]   Address 12 lint warnings (Lint: 6/10, weight 20%)\n   Run: biome check . --write to auto-fix\n3. [LOW]   Remove 4 unused exports (Dead code: 7/10, weight 15%)\n   Run: knip --fix to auto-remove\n```\n\nRank by `weight * (10 - score)` descending. Only show categories below 10.\n\n---\n\n## Important Rules\n\n1. **Wrap, don't replace.** Run the project's own tools. Never substitute your own analysis for what the tool reports.\n2. **Read-only.** Never fix issues. Present the dashboard and let the user decide.\n3. **Respect CLAUDE.md.** If `## Health Stack` is configured, use those exact commands. Do not second-guess.\n4. **Skipped is not failed.** If a tool isn't available, skip it gracefully and redistribute weight. Do not penalize the score.\n5. **Show raw output for failures.** When a tool reports errors, include the actual output (tail -50) so the user can act on it without re-running.\n6. **Trends require history.** On first run, say \"First health check -- no trend data yet. Run /health again after making changes to track progress.\"\n7. **Be honest about scores.** A codebase with 100 type errors and all tests passing is not healthy. The composite score should reflect reality.","tags":["health","vibestack","timurgaleev","agent-skills","ai-agents","claude-code","cursor-ide","developer-tools","kiro","mcp","prompt-engineering","slash-commands"],"capabilities":["skill","source-timurgaleev","skill-health","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/health","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 (9,376 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:21.448Z","embedding":null,"createdAt":"2026-05-18T19:06:21.448Z","updatedAt":"2026-05-18T19:06:21.448Z","lastSeenAt":"2026-05-18T19:06:21.448Z","tsv":"'+0.9':1024 '-03':857,983,993,1003,1013 '-1':185,293,1076 '-10':24,528,903,954 '-28':984 '-29':994 '-3':789,1062 '-30':1004 '-31':858,1014 '-50':471,1265 '-6':785 '-9':782 '/.vibestack/bin/vibe-learnings-search':93 '/.vibestack/bin/vibe-slug':48,840,946 '/.vibestack/projects':845,852,934,951,955 '/dev/null':50,52,76,91,97,176,183,201,215,229,237,258,271,281,291,842,948,958 '/health':113,1293 '/learnings.jsonl':63 '/projects':60 '0':23,527,538,544,555,567,579,592,642,733,766,788,902 '0.10':687 '0.15':684 '0.20':678 '0.25':675 '0.30':681 '00z':861 '1':118,260,283,420,469,1035,1108,1174 '10':535,545,589,643,771,779,867,871,875,931,987,989,991,997,999,1001,1007,1011,1017,1019,1021,1074,1164,1171 '10/10':730,746,763 '100':1309 '12':1063,1128 '12s':748 '15':576,1153 '18':820 '1s':765 '2':49,51,75,90,96,175,182,200,214,228,236,259,270,282,290,410,425,468,841,947,957,1040,1077,1111,1125,1195 '20':552,558,560,583,585,1134 '2026':856,982,992,1002,1012 '23':878 '23s':773 '25':541 '2s':740 '3':434,518,741,808,1048,1143,1210 '30':563,860,1117 '3s':732 '4':439,537,648,705,757,784,1146,1227 '42':814 '47/47':749 '5':89,95,444,556,580,593,595,833,972,1249 '50':448,547,549 '55':828 '5s':756 '6':924,1008,1061,1277 '6/10':1132 '7':536,781,796,873,998,1000,1010,1020,1071,1301 '7/10':754,1151 '8':869,990,1018 '8.2':1006 '8.8':996 '8/10':738 '80':570,572 '8601':882 '9':988,1009,1060,1075 '9.1':770,865,1016 '9.4':986 '9/10':1115 '95':568 'act':1270 'actual':1262 'address':1127 'adjust':360,380 'alway':1095 'among':700 'analysi':926,1189 'appear':1056 'append':381,847 'askuserquest':321 'assum':649 'auto':141,150,314,1141,1159 'auto-detect':140,149,313 'auto-fix':1140 'auto-remov':1158 'avail':152,623,695,1237 'b':356,378 'bash':46,154,455,838,944 'bin':288 'biom':170,336,397,736,810,1065,1136 'biome.json':165 'biome.jsonc':167 'biome/eslint/ruff':612 'branch':718,862,884,887,975 'bun':339,400,744,1119 'c':366 'captur':429,445 'cargo':245 'cargo.toml':242 'categori':521,524,533,690,703,720,793,899,915,1038,1047,1169 'chang':1297 'che':44 'check':34,171,205,326,332,337,398,540,727,737,811,1137,1287 'checker':10,156 'choos':375 'claude.md':123,353,389,1212 'clean':542,553,577,590,731,747,764,780 'clear':712 'code':2,15,35,254,342,438,473,482,575,639,714,752,1150 'codebas':41,1307 'command':255,278,428,1221 'common':1069 'composit':22,670,672,768,889,1320 'comput':19 'configur':1217 'console.log':220 'const':823 'continu':355 'correl':1049 'count':70,82,87,603,605,613,627,653,662 'critic':790 'current':885 'd':78 'dashboard':4,707,716,1204 'data':1290 'date':464,475,719,974 'dead':14,253,341,574,751,980,1149 'deadcod':262,273,402,682,872,896 'decid':1209 'decim':892 'declin':1039,1046 'deficit':1104 'delta':1043 'depend':660 'descend':1166 'detail':725,806 'detect':119,142,151,315,318,323,415,1058 'detector':16 'distinct':663 'drop':1030 'durat':483,724,772,876,904 'e':219 'echo':79,101,159,168,188,202,216,238,243,249,261,272,296,477,959 'els':100 'end':442,474,485 'end-start':484 'entri':83,932,943,964 'error':546,548,550,608,734,1259,1311 'error/warning':616 'errors/warnings':1055 'eslint':190 'eslint.config':179 'eslintrc':180,181 'eval':47,839,945 'exact':1220 'exampl':456 'exist':6,148,939,965 'exit':437,472,480,481,543,554,566,578,591,638,641,644 'expiri':1085 'export':582,657,759,1148 'f':65,157,164,166,191,193,208,230,241,247,264 'fail':1080,1086,1112,1231 'failur':516,651,1079,1124,1254 'feat/auth':995,1005,1015 'fi':99,105 'field':879 'file':56,67,74,497,658,938 'find':664 'first':1282,1285 'fix':1110,1142,1156,1200 'found':132,506 'fs':223 'git':886 'glob':300 'go':251 'go.mod':248 'grace':1240 'grep':195,210,232,266 'gt':88 'guess':1226 'head':184,292 'health':1,33,120,128,145,325,385,391,715,836,969,1092,1214,1286 'healthi':38,1318 'high':1109 'histori':837,961,1280 'home':58 'home/.vibestack':59 'honest':1303 'identifi':1036 'impact':1101,1107 'import':1172 'improv':1023,1093 'includ':1260 'independ':462 'individu':898 'instal':503 'instanc':1072 'instead':824 'integ':901 'introduc':1067 'invoc':108 'isn':1235 'iso':881 'issu':594,596,767,800,1201 'json':854 'json.parse':221 'jsonl':849 'jwt':1091 'knip':257,263,268,275,343,403,652,753,1155 'l':72 'label':778 'last':447,930,971,1026 'learn':55,66,69,73,80,81,86,102 'let':826,1206 'limit':94 'line':449,606,614,621,654,665,669,850 'lint':169,189,203,277,335,345,396,551,588,676,735,761,807,868,894,978,1059,1129,1131 'lint/complexity/noforeach':815,1070 'lint/style/useconst':821 'lint/suspicious/noexplicitany':829 'linter':11,18,163 'list':136,797 'load':84 'lock':496 'look':125,349 'low':1144 'ls':178,284 'main':863,985 'make':1296 'malform':1090 'markdown':390 'match':607,615 'may':492 'med':1126 'mkdir':843,949 'n/a':597 'need':358,786 'never':1185,1199 'new':1064 'node':218 'noemit':162,334,395,467,729 'nomatch':174 'non':646 'non-zero':645 'none':103 'npx':274 'null':922 'o':173 'one':848,891 'output':451,601,611,632,805,812,1052,1252,1263 'p':844,950 'package.json':209,213,225,265,269 'pars':133,599,618,625 'pass':565,569,571,573,750,1315 'pass/fail':626 'pattern':617 'penal':1246 'persist':351,368,834 'preambl':45 'prefer':816 'present':316,706,708,1202 'previous':1033 'prior':942,963 'priorit':1098 'progress':1300 'project':7,330,717,1181 'proport':699 'pylint':197 'pylintrc':192 'pyproject.toml':194,199,231,235 'pytest':234,240 'q':196,211,233,267 'qualiti':3,36 'rank':1161 'raw':1251 're':1275 're-run':1274 'read':122,928,1197 'read-on':1196 'readfilesync':224 'realiti':1324 'reason':512 'recommend':927,1105 'record':421,435,440,507 'redistribut':696,1242 'reflect':1323 'regress':1057 'reject':1089 'remain':702 'remov':1145,1160 'replac':1178 'repo':311 'report':454,637,655,1194,1258 'requir':222,1279 'resourc':494 'respect':1211 'result':709 'right':350 'rubric':532 'ruff':198,204 'rule':1173 'run':42,114,370,411,413,426,460,488,973,1027,1034,1118,1135,1154,1179,1276,1283,1292 'runner':13,207,631,635 'say':1284 'scale':529 'score':25,519,522,671,674,677,680,683,686,722,769,794,864,888,890,900,976,1029,1103,1165,1248,1305,1321 'script':286,305,308,407 'scripts.test':227 'search':302 'second':912,1225 'second-guess':1224 'section':130,147,387 'see':1123 'sequenti':490 'set':918 'setopt':172 'sh':285,287,289,306,347,406,408 'share':493 'shell':17,276,297,304,307,344,404,587,685,760,874,897,981 'shellcheck':280,298,346,405,661,762 'show':966,1041,1096,1168,1250 'sinc':1025 'skill':116 'skill-health' 'skip':139,367,510,598,692,917,1228,1238 'slug':53,61,846,952 'slug/health-history.jsonl':853,935,956 'source-timurgaleev' 'specif':1054 'src/api.ts':819,827 'src/auth.test.ts':1081,1087 'src/utils.ts':813 'stack':121,129,146,386,392,1215 'start':423,463,486,666 'status':723,777 'stderr':433 'stdout':431 'step':117,409,517,704,832,923 'substitut':1186 'suggest':1094,1099 'summari':620 't14':859 'tabl':713 'tail':470,953,1264 'tc':977 'tell':363 'test':12,206,212,217,239,244,246,250,252,338,340,399,401,562,624,630,679,743,745,870,895,979,1073,1078,1113,1114,1120,1314 'time':30,424,443,907 'timestamp':883 'token':1084 'tool':8,135,153,319,327,362,412,416,419,459,478,489,500,600,693,721,803,910,1051,1184,1193,1234,1257 'top':799 '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':774,906 'tr':77 'track':27,1299 'trend':28,925,968,970,1022,1278,1289 'true':98,177 'ts':609,855,880 'tsc':161,333,394,466,604,728 'tsconfig.json':158 'type':9,112,155,331,539,726,1310 'typecheck':160,393,479,673,866,893 'unexpect':830 'unknown':54,62 'unus':581,584,586,656,758,1147 'updat':383 'use':31,299,530,640,775,822,1218 'user':107,111,374,1208,1268 'user-invoc':106 'utf8':226 'v':256,279 'valid':1083 'valu':920 'verbos':1121 'via':320 'vibestack':57 'vs':1031 'warn':557,559,561,739,742,755,783,809,1066,1130 'wc':71 'weight':21,534,698,1102,1116,1133,1152,1163,1243 'without':1273 'work':787 'wrap':5,1175 'write':1138 'xarg':186,294 'yet':104,1291 'zero':647","prices":[{"id":"c0f0d335-2426-4c38-88e7-f104e4652aba","listingId":"9873d7c8-5a53-4536-b718-0334db36da6a","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:21.448Z"}],"sources":[{"listingId":"9873d7c8-5a53-4536-b718-0334db36da6a","source":"github","sourceId":"timurgaleev/vibestack/health","sourceUrl":"https://github.com/timurgaleev/vibestack/tree/main/skills/health","isPrimary":false,"firstSeenAt":"2026-05-18T19:06:21.448Z","lastSeenAt":"2026-05-18T19:06:21.448Z"}],"details":{"listingId":"9873d7c8-5a53-4536-b718-0334db36da6a","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"timurgaleev","slug":"health","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":"76e7bf917ab0b544f9bc05d7548e69cc2c114d09","skill_md_path":"skills/health/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/timurgaleev/vibestack/tree/main/skills/health"},"layout":"multi","source":"github","category":"vibestack","frontmatter":{"name":"health","description":"Code quality dashboard. Wraps existing project tools (type checker, linter,\ntest runner, dead code detector, shell linter), computes a weighted composite\n0-10 score, and tracks trends over time. Use when: \"health check\",\n\"code quality\", \"how healthy is the codebase\", \"run all checks\",\n\"quality score\"."},"skills_sh_url":"https://skills.sh/timurgaleev/vibestack/health"},"updatedAt":"2026-05-18T19:06:21.448Z"}}