{"id":"9c2bb44c-cd0f-4aba-b113-5c37701578b8","shortId":"pDNpzw","kind":"skill","title":"code-slop","tagline":"Detect AI-generated code patterns (\"slop\") in PHP/Laravel and TypeScript/React source — comment narration, generic naming, premature interfaces, defensive overdose, mock-everything tests, and the absence of human \"scars\". Use when reviewing AI-assisted PRs, auditing code for tast","description":"# Code Slop Detection\n\nTaste-level review of code for AI-generated patterns. Contains 24 rules across 6 categories covering comments, naming, over-engineering, defensive overdose, test slop, and style fingerprints. Where [`technical-debt`](../technical-debt) measures *quantitative* code debt (complexity, duplication, CVEs), this skill measures the *qualitative* failure mode: code that passes every metric but reads like a tutorial blog post, not like a human wrote it.\n\n## Metadata\n\n- **Version:** 1.0.0\n- **Scope:** PHP / Laravel + TypeScript / React (Node)\n- **Rule Count:** 24 rules across 6 categories\n- **License:** MIT\n\n## Why this skill exists\n\nIndustry data on AI-assisted code (GitClear 2025, cURL bug-bounty shutdown 2025, arXiv 2510.03029):\n\n- **Refactoring collapsed** from 25% to <10% of changes\n- **Copy-paste surged** 8.3% → 12.3%; code duplication rose ~8x\n- **Code-smell rates +42–85%** over human baselines\n- **82% of AI PRs** use generic catch blocks that don't distinguish error types\n- **76% miss timeouts** on external calls\n\nNone of this fails a typical CI lint. It just makes the codebase slowly unmaintainable. This skill is the lens for catching it before it ships.\n\nThe core insight: **reading cost > writing cost now**. The cost of writing code collapsed; the cost of reading it didn't. Code you can't quickly understand is slop, even if it works.\n\n## How to Audit\n\nWhen the user asks \"review for AI slop\", \"audit code-quality taste\", or \"find AI patterns\" — run through this skill's rules as a checklist against the changed files (PR diff) or full repo.\n\n### Audit Step 1: Determine Scope\n\n- If a PR diff is provided: audit only files changed in the diff\n- If files are named: audit those\n- If no scope: audit the whole repo, prioritized by recently-touched files (most likely AI output)\n\n### Audit Step 2: Detect Stack\n\n| Signal | Stack |\n|--------|-------|\n| `composer.json` + `artisan` | PHP / Laravel |\n| `package.json` (with TypeScript/React deps) | Node / TypeScript / React |\n| Both present | Laravel + Inertia + React |\n\n### Audit Step 3: Run the Slop Checklist\n\nFor each item below, output:\n- **CLEAN** — pattern not present (brief confirmation)\n- **SUSPICIOUS** — present in small amounts; flag and discuss\n- **INFLATED** — present extensively; verbose-but-functional; remediation recommended\n- **CRITICAL** — extensive AI-fingerprint presence; full review needed before merge\n\n#### Comments\n- [ ] No comments that just narrate the code (`// create user` above `User::create(...)`)\n- [ ] No empty docblocks (`/** Get user */` above `getUser()`)\n- [ ] No placeholder comments left in (`// TODO: implement`, `// your code here`, `// implementation`)\n- [ ] No closing-brace labels (`} // end function`, `} // end if block`)\n\n#### Naming\n- [ ] No generic placeholder names (`data`, `result`, `info`, `temp`, `helper`)\n- [ ] No over-descriptive run-on names (`theUserWhoIsCurrentlyLoggedIn`)\n- [ ] No suffix abuse (`*Helper` / `*Manager` / `*Util` / `*Wrapper` overused without justification)\n- [ ] No type-in-name patterns (`userObject`, `resultArray`, `stringData`)\n\n#### Over-engineering\n- [ ] No interfaces with exactly one implementation (and no plan for a second)\n- [ ] No single-method classes that should be top-level functions\n- [ ] No wrapper functions called once that just delegate\n- [ ] No new dependency added when an existing one does the same job\n\n#### Defensive overdose\n- [ ] No generic `catch (e) { console.error(...) }` blocks around code that can't throw\n- [ ] No null checks for impossible nulls (after non-null assertions / type-guaranteed values)\n- [ ] Real defensive concerns (timeouts on external calls, rate limits) ARE present\n\n#### Test slop\n- [ ] No tests that mock every dependency with no real behavioural assertion\n- [ ] No \"doesn't throw\" tests that just call and check for exceptions\n- [ ] No tests that mirror the implementation's logic (re-encoding rather than verifying)\n- [ ] No snapshot tests standing in for behavioural assertions\n\n#### Style fingerprints\n- [ ] Some formatting drift exists (no codebase looks like every file ran through the most aggressive linter)\n- [ ] No `as any` / `@ts-ignore` / `@ts-expect-error` sprinkled where inference is hard\n- [ ] Repo has some `// HACK:` / `// XXX:` / 2am comments somewhere — codebases without scars are suspect\n- [ ] No debug artifacts (`console.log`, `var_dump`, `dd()`, `dump()`) left in production code\n- [ ] No `if (x) return true; else return false` / redundant type annotations on obvious literals\n\n### Audit Step 4: Build the Slop Ledger\n\nEnd the audit with a verdict table:\n\n```\n## Code Slop Ledger\n\n| File | Verdict | Top findings | Suggested action |\n|------|---------|--------------|------------------|\n| app/Services/UserExportService.php | INFLATED | 12 narration comments; 3 closing-brace labels; `*Helper` overuse | Strip comments; rename Helper → split into functions |\n| resources/js/Pages/Orders/Show.tsx | CRITICAL | 4 `as any`; mock-everything tests; useless wrapper; impossible null checks | Rewrite section; remove tests; revisit type model |\n| app/Models/Order.php | CLEAN | — | — |\n\n## Summary\n- CLEAN: X files\n- SUSPICIOUS: Y files\n- INFLATED: Z files (top priority: …)\n- CRITICAL: N files (rewrite before merge)\n```\n\n## When to Apply\n\nReference this skill when:\n- Reviewing an AI-assisted PR before merge\n- Auditing a repo that has accepted heavy AI-assisted contributions\n- Onboarding a codebase and assessing whether it reads as human-maintained\n- Hardening a team's code-review checklist against AI slop\n- After a \"vibe coding\" sprint, before declaring features done\n- Setting up CI gates for AI-output quality\n\n## Step 1: Detect Project Stack\n\nMost rules are stack-agnostic in concept, but examples and detection commands differ between PHP and TypeScript.\n\n| Signal | Stack | Tooling |\n|--------|-------|---------|\n| `composer.json` | PHP / Laravel | `phpstan`, `phpcs`, `phpmd`, manual grep |\n| `package.json` | Node / TS / React | `eslint`, `tsc --noEmit`, `knip`, manual grep |\n\n## Rule Categories by Priority\n\n| Priority | Category | Impact | Prefix |\n|----------|----------|--------|--------|\n| 1 | Comments | CRITICAL | `comments-` |\n| 2 | Naming | CRITICAL | `naming-` |\n| 3 | Over-engineering | HIGH | `over-eng-` |\n| 4 | Defensive overdose | HIGH | `defensive-` |\n| 5 | Test slop | HIGH | `test-` |\n| 6 | Style fingerprints | MEDIUM | `style-` |\n\n## Quick Reference\n\n### 1. Comments (CRITICAL)\n\n- `comments-narration` — Comments that just restate the code on the next line\n- `comments-empty-docblocks` — Generic `/** Get the user */` over a typed `getUser()` signature\n- `comments-placeholder` — `// TODO: implement`, `// your code here`, `// implementation`, `// helper function`\n- `comments-closing-brace-labels` — `} // end function` / `} // end if block`\n\n### 2. Naming (CRITICAL)\n\n- `naming-generic-placeholders` — `data`, `result`, `info`, `temp`, `helper`, `value`\n- `naming-over-descriptive` — `theUserWhoIsCurrentlyLoggedIn`, `calculateTotalAmountFromItemsList`\n- `naming-suffix-abuse` — `*Helper` / `*Manager` / `*Util` / `*Wrapper` / `*Processor` overused\n- `naming-type-in-name` — `userObject`, `resultArray`, `stringData`, `listOfItems`\n\n### 3. Over-engineering (HIGH)\n\n- `over-eng-premature-interface` — Interface with exactly one implementation and no second on the roadmap\n- `over-eng-single-method-class` — Classes that exist solely to wrap one function\n- `over-eng-useless-wrapper` — Wrapper called from exactly one place, just delegating\n- `over-eng-dependency-creep` — New library when an existing dep already does the job\n\n### 4. Defensive overdose (HIGH)\n\n- `defensive-generic-catch` — `try { ... } catch (e) { console.error(\"error\") }` everywhere\n- `defensive-impossible-null` — Null checks after non-null assertions / type-guaranteed values\n- `defensive-missing-real` — Defensive in the wrong places; missing timeouts/rate-limits where it matters\n\n### 5. Test slop (HIGH)\n\n- `test-mock-everything` — Mock for every dep; the test re-encodes the implementation, not the behaviour\n- `test-doesnt-throw` — Tests that just call the function and assert no exception\n- `test-mirror-implementation` — Tests whose logic mirrors the production code being tested\n- `test-snapshot-abuse` — Snapshot tests replacing behavioural assertions\n\n### 6. Style fingerprints (MEDIUM)\n\n- `style-hyper-consistent` — No formatting drift anywhere; every file looks linter-perfect\n- `style-as-any-escape` — `as any` / `@ts-ignore` / `@ts-expect-error` sprinkled where types are hard\n- `style-no-hack-scars` — Codebase has zero `// HACK:` / `// XXX:` markers; no \"geology\"\n- `style-debug-artifacts` — `console.log`, `var_dump`, `dd()`, `dump()` left in production paths\n- `style-trivial-boilerplate` — `if (x) return true; else return false;`, redundant TS type annotations on obvious literals\n\n## Essential Patterns\n\n### The \"would this pass code review?\" filter\n\nFor each code chunk, ask:\n1. **Could I cut a third of these comments and the code would be clearer?** → likely comment slop\n2. **Do the variable names tell me what they hold, or just what type they are?** → likely naming slop\n3. **Could this class be a function?** → likely over-engineering\n4. **Does this catch block actually handle anything, or just log?** → likely defensive overdose\n5. **Does this test fail if I break the function?** → if no, test slop\n6. **Are there any `// HACK:` / `// XXX:` markers in the diff?** → if no, suspicious for AI\n\n### Verdict bands (matched to AI-SLOP-Detector's scoring)\n\n| Verdict | Meaning | Action |\n|---|---|---|\n| **CLEAN** | < 5% of lines flagged | Ship |\n| **SUSPICIOUS** | 5–15% flagged | Review changes one more time |\n| **INFLATED** | 15–30% flagged | Strip slop, split commits |\n| **CRITICAL** | > 30% flagged | Rewrite section before merge |\n\n## How to Use\n\nRead individual rule files for detailed conventions and examples:\n\n```\nrules/comments-narration.md\nrules/naming-generic-placeholders.md\nrules/over-eng-premature-interface.md\nrules/defensive-generic-catch.md\nrules/test-mock-everything.md\nrules/style-hyper-consistent.md\n```\n\nEach rule file contains:\n- YAML frontmatter (title, impact, tags)\n- Brief explanation of why the pattern is AI-fingerprint\n- \"Incorrect\" example showing the slop\n- \"Correct\" example showing the human-equivalent\n- Detection guidance (grep / eslint / phpstan / heuristic)\n- Reference link\n\n## References\n\n- GitClear — 2025 Code-Quality Trends Report (refactoring collapse, copy-paste surge)\n- [arXiv 2510.03029 — Investigating the Smells of LLM-Generated Code](https://arxiv.org/abs/2510.03029)\n- Addy Osmani — Comprehension Debt (O'Reilly Radar)\n- Stack Overflow Blog — Eno Reyes Q&A on AI code quality\n\n- [hardikpandya/stop-slop](https://github.com/hardikpandya/stop-slop) — sister project for prose slop\n- [flamehaven01/AI-SLOP-Detector](https://github.com/flamehaven01/AI-SLOP-Detector) — Python AST scanner with 27 patterns\n\n## Full Compiled Document\n\nFor the complete guide with all rules expanded: `AGENTS.md`","tags":["code","slop","agent","skills","asyrafhussin","agent-rules","agent-skills","ai-agents","ai-slop","claude-code","code-quality","code-review"],"capabilities":["skill","source-asyrafhussin","skill-code-slop","topic-agent-rules","topic-agent-skills","topic-ai-agents","topic-ai-slop","topic-claude-code","topic-code-quality","topic-code-review","topic-codex","topic-cursor","topic-laravel","topic-nodejs","topic-react"],"categories":["agent-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/AsyrafHussin/agent-skills/code-slop","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add AsyrafHussin/agent-skills","source_repo":"https://github.com/AsyrafHussin/agent-skills","install_from":"skills.sh"}},"qualityScore":"0.469","qualityRationale":"deterministic score 0.47 from registry signals: · indexed on github topic:agent-skills · 39 github stars · SKILL.md body (11,024 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-18T18:58:24.074Z","embedding":null,"createdAt":"2026-05-16T18:57:13.878Z","updatedAt":"2026-05-18T18:58:24.074Z","lastSeenAt":"2026-05-18T18:58:24.074Z","tsv":"'+42':176 '/abs/2510.03029)':1492 '/flamehaven01/ai-slop-detector)':1523 '/hardikpandya/stop-slop)':1514 '/technical-debt':82 '1':300,844,895,928,1275 '1.0.0':117 '10':159 '12':718 '12.3':167 '15':1387,1395 '2':341,899,978,1293 '2025':145,151,1468 '24':60,126 '25':157 '2510.03029':153,1481 '27':1528 '2am':659 '3':364,721,903,1016,1312 '30':1396,1403 '4':695,737,911,1079,1323 '5':916,1122,1337,1380,1386 '6':63,129,921,1180,1351 '76':195 '8.3':166 '82':181 '85':177 '8x':171 'absenc':30 'abus':470,1000,1174 'accept':796 'across':62,128 'action':715,1378 'actual':1328 'ad':525 'addi':1493 'agents.md':1541 'aggress':637 'agnost':853 'ai':6,38,56,141,183,269,278,337,400,786,799,823,840,1365,1371,1444,1508 'ai-assist':37,140,785,798 'ai-fingerprint':399,1443 'ai-gener':5,55 'ai-output':839 'ai-slop-detector':1370 'alreadi':1075 'amount':384 'annot':689,1257 'anyth':1330 'anywher':1191 'app/models/order.php':756 'app/services/userexportservice.php':716 'appli':778 'around':542 'artifact':669,1233 'artisan':347 'arxiv':152,1480 'arxiv.org':1491 'arxiv.org/abs/2510.03029)':1490 'ask':266,1274 'assert':558,586,620,1103,1155,1179 'assess':806 'assist':39,142,787,800 'ast':1525 'audit':41,262,271,298,309,320,325,339,362,693,702,791 'band':1367 'baselin':180 'behaviour':585,619,1143,1178 'block':188,448,541,977,1327 'blog':107,1502 'boilerpl':1246 'bounti':149 'brace':442,724,971 'break':1344 'brief':378,1436 'bug':148 'bug-bounti':147 'build':696 'calculatetotalamountfromitemslist':996 'call':200,517,569,594,1057,1151 'catch':187,222,538,1086,1088,1326 'categori':64,130,888,892 'chang':161,291,312,1390 'check':550,596,748,1098 'checklist':288,368,821 'chunk':1273 'ci':207,836 'class':506,1042,1043,1315 'clean':374,757,759,1379 'clearer':1289 'close':441,723,970 'closing-brac':440,722 'code':2,8,42,45,53,85,97,143,168,173,239,248,273,415,436,543,678,707,819,828,939,963,1168,1267,1272,1286,1470,1489,1509 'code-qu':272,1469 'code-review':818 'code-slop':1 'code-smel':172 'codebas':213,628,662,804,1222 'collaps':155,240,1475 'command':860 'comment':16,66,408,410,430,660,720,729,896,898,929,932,934,945,958,969,1283,1291 'comments-closing-brace-label':968 'comments-empty-docblock':944 'comments-narr':931 'comments-placehold':957 'commit':1401 'compil':1531 'complet':1535 'complex':87 'composer.json':346,869 'comprehens':1495 'concept':855 'concern':565 'confirm':379 'consist':1187 'console.error':540,1090 'console.log':670,1234 'contain':59,1430 'contribut':801 'convent':1418 'copi':163,1477 'copy-past':162,1476 'core':228 'correct':1451 'cost':231,233,236,242 'could':1276,1313 'count':125 'cover':65 'creat':416,420 'creep':1068 'critic':397,736,770,897,901,930,980,1402 'curl':146 'cut':1278 'cves':89 'data':138,454,985 'dd':673,1237 'debt':81,86,1496 'debug':668,1232 'declar':831 'defens':22,71,534,564,912,915,1080,1084,1094,1109,1112,1335 'defensive-generic-catch':1083 'defensive-impossible-nul':1093 'defensive-missing-r':1108 'deleg':521,1063 'dep':353,1074,1133 'depend':524,581,1067 'descript':462,994 'detail':1417 'detect':4,47,342,845,859,1458 'detector':1373 'determin':301 'didn':246 'diff':294,306,315,1360 'differ':861 'discuss':387 'distinguish':192 'docblock':423,947 'document':1532 'doesn':588 'doesnt':1146 'done':833 'drift':625,1190 'dump':672,674,1236,1238 'duplic':88,169 'e':539,1089 'els':684,1251 'empti':422,946 'encod':609,1138 'end':444,446,700,973,975 'eng':910,1023,1039,1053,1066 'engin':70,489,906,1019,1322 'eno':1503 'equival':1457 'error':193,648,1091,1211 'escap':1202 'eslint':881,1461 'essenti':1261 'even':256 'everi':100,580,631,1132,1192 'everyth':26,742,1129 'everywher':1092 'exact':493,1028,1059 'exampl':857,1420,1447,1452 'except':598,1157 'exist':136,528,626,1045,1073 'expand':1540 'expect':647,1210 'explan':1437 'extens':390,398 'extern':199,568 'fail':204,1341 'failur':95 'fals':686,1253 'featur':832 'file':292,311,317,334,632,710,761,764,767,772,1193,1415,1429 'filter':1269 'find':277,713 'fingerprint':77,401,622,923,1182,1445 'flag':385,1383,1388,1397,1404 'flamehaven01/ai-slop-detector':1520 'format':624,1189 'frontmatt':1432 'full':296,403,1530 'function':394,445,513,516,734,967,974,1050,1153,1318,1346 'gate':837 'generat':7,57,1488 'generic':18,186,451,537,948,983,1085 'geolog':1229 'get':424,949 'getus':427,955 'gitclear':144,1467 'github.com':1513,1522 'github.com/flamehaven01/ai-slop-detector)':1521 'github.com/hardikpandya/stop-slop)':1512 'grep':876,886,1460 'guarante':561,1106 'guid':1536 'guidanc':1459 'hack':657,1220,1225,1355 'handl':1329 'hard':653,1216 'harden':814 'hardikpandya/stop-slop':1511 'heavi':797 'helper':458,471,726,731,966,989,1001 'heurist':1463 'high':907,914,919,1020,1082,1125 'hold':1302 'human':32,112,179,812,1456 'human-equival':1455 'human-maintain':811 'hyper':1186 'ignor':644,1207 'impact':893,1434 'implement':434,438,495,604,961,965,1030,1140,1161 'imposs':552,746,1095 'incorrect':1446 'individu':1413 'industri':137 'inertia':360 'infer':651 'inflat':388,717,765,1394 'info':456,987 'insight':229 'interfac':21,491,1025,1026 'investig':1482 'item':371 'job':533,1078 'justif':477 'knip':884 'label':443,725,972 'laravel':120,349,359,871 'ledger':699,709 'left':431,675,1239 'len':220 'level':50,512 'librari':1070 'licens':131 'like':104,110,336,630,1290,1309,1319,1334 'limit':571 'line':943,1382 'link':1465 'lint':208 'linter':638,1196 'linter-perfect':1195 'listofitem':1015 'liter':692,1260 'llm':1487 'llm-gener':1486 'log':1333 'logic':606,1164 'look':629,1194 'maintain':813 'make':211 'manag':472,1002 'manual':875,885 'marker':1227,1357 'match':1368 'matter':1121 'mean':1377 'measur':83,92 'medium':924,1183 'merg':407,775,790,1408 'metadata':115 'method':505,1041 'metric':101 'mirror':602,1160,1165 'miss':196,1110,1117 'mit':132 'mock':25,579,741,1128,1130 'mock-everyth':24,740 'mode':96 'model':755 'n':771 'name':19,67,319,449,453,466,482,900,902,979,982,992,998,1008,1011,1297,1310 'naming-generic-placehold':981 'naming-over-descript':991 'naming-suffix-abus':997 'naming-type-in-nam':1007 'narrat':17,413,719,933 'need':405 'new':523,1069 'next':942 'node':123,354,878 'noemit':883 'non':556,1101 'non-nul':555,1100 'none':201 'null':549,553,557,747,1096,1097,1102 'o':1497 'obvious':691,1259 'onboard':802 'one':494,529,1029,1049,1060,1391 'osmani':1494 'output':338,373,841 'over-descript':460 'over-eng':908 'over-eng-dependency-creep':1064 'over-eng-premature-interfac':1021 'over-eng-single-method-class':1037 'over-eng-useless-wrapp':1051 'over-engin':68,487,904,1017,1320 'overdos':23,72,535,913,1081,1336 'overflow':1501 'overus':475,727,1006 'package.json':350,877 'pass':99,1266 'past':164,1478 'path':1242 'pattern':9,58,279,375,483,1262,1441,1529 'perfect':1197 'php':119,348,863,870 'php/laravel':12 'phpcs':873 'phpmd':874 'phpstan':872,1462 'place':1061,1116 'placehold':429,452,959,984 'plan':498 'post':108 'pr':293,305,788 'prefix':894 'prematur':20,1024 'presenc':402 'present':358,377,381,389,573 'priorit':329 'prioriti':769,890,891 'processor':1005 'product':677,1167,1241 'project':846,1516 'prose':1518 'provid':308 'prs':40,184 'python':1524 'q':1505 'qualit':94 'qualiti':274,842,1471,1510 'quantit':84 'quick':252,926 'radar':1499 'ran':633 'rate':175,570 'rather':610 're':608,1137 're-encod':607,1136 'react':122,356,361,880 'read':103,230,244,809,1412 'real':563,584,1111 'recent':332 'recently-touch':331 'recommend':396 'redund':687,1254 'refactor':154,1474 'refer':779,927,1464,1466 'reilli':1498 'remedi':395 'remov':751 'renam':730 'replac':1177 'repo':297,328,654,793 'report':1473 'resources/js/pages/orders/show.tsx':735 'restat':937 'result':455,986 'resultarray':485,1013 'return':682,685,1249,1252 'review':36,51,267,404,783,820,1268,1389 'revisit':753 'rewrit':749,773,1405 'rey':1504 'roadmap':1036 'rose':170 'rule':61,124,127,285,849,887,1414,1428,1539 'rules/comments-narration.md':1421 'rules/defensive-generic-catch.md':1424 'rules/naming-generic-placeholders.md':1422 'rules/over-eng-premature-interface.md':1423 'rules/style-hyper-consistent.md':1426 'rules/test-mock-everything.md':1425 'run':280,365,464 'run-on':463 'scanner':1526 'scar':33,664,1221 'scope':118,302,324 'score':1375 'second':501,1033 'section':750,1406 'set':834 'ship':226,1384 'show':1448,1453 'shutdown':150 'signal':344,866 'signatur':956 'singl':504,1040 'single-method':503 'sister':1515 'skill':91,135,217,283,781 'skill-code-slop' 'slop':3,10,46,74,255,270,367,575,698,708,824,918,1124,1292,1311,1350,1372,1399,1450,1519 'slowli':214 'small':383 'smell':174,1484 'snapshot':614,1173,1175 'sole':1046 'somewher':661 'sourc':15 'source-asyrafhussin' 'split':732,1400 'sprinkl':649,1212 'sprint':829 'stack':343,345,847,852,867,1500 'stack-agnost':851 'stand':616 'step':299,340,363,694,843 'stringdata':486,1014 'strip':728,1398 'style':76,621,922,925,1181,1185,1199,1218,1231,1244 'style-as-any-escap':1198 'style-debug-artifact':1230 'style-hyper-consist':1184 'style-no-hack-scar':1217 'style-trivial-boilerpl':1243 'suffix':469,999 'suggest':714 'summari':758 'surg':165,1479 'suspect':666 'suspici':380,762,1363,1385 'tabl':706 'tag':1435 'tast':44,49,275 'taste-level':48 'team':816 'technic':80 'technical-debt':79 'tell':1298 'temp':457,988 'test':27,73,574,577,591,600,615,743,752,917,920,1123,1127,1135,1145,1148,1159,1162,1170,1172,1176,1340,1349 'test-doesnt-throw':1144 'test-mirror-implement':1158 'test-mock-everyth':1126 'test-snapshot-abus':1171 'theuserwhoiscurrentlyloggedin':467,995 'third':1280 'throw':547,590,1147 'time':1393 'timeout':197,566 'timeouts/rate-limits':1118 'titl':1433 'todo':433,960 'tool':868 'top':511,712,768 'top-level':510 'topic-agent-rules' 'topic-agent-skills' 'topic-ai-agents' 'topic-ai-slop' 'topic-claude-code' 'topic-code-quality' 'topic-code-review' 'topic-codex' 'topic-cursor' 'topic-laravel' 'topic-nodejs' 'topic-react' 'touch':333 'trend':1472 'tri':1087 'trivial':1245 'true':683,1250 'ts':643,646,879,1206,1209,1255 'ts-expect-error':645,1208 'ts-ignor':642,1205 'tsc':882 'tutori':106 'type':194,480,560,688,754,954,1009,1105,1214,1256,1306 'type-guarante':559,1104 'type-in-nam':479 'typescript':121,355,865 'typescript/react':14,352 'typic':206 'understand':253 'unmaintain':215 'use':34,185,1411 'useless':744,1054 'user':265,417,419,425,951 'userobject':484,1012 'util':473,1003 'valu':562,990,1107 'var':671,1235 'variabl':1296 'verbos':392 'verbose-but-funct':391 'verdict':705,711,1366,1376 'verifi':612 'version':116 'vibe':827 'whether':807 'whole':327 'whose':1163 'without':476,663 'work':259 'would':1264,1287 'wrap':1048 'wrapper':474,515,745,1004,1055,1056 'write':232,238 'wrong':1115 'wrote':113 'x':681,760,1248 'xxx':658,1226,1356 'y':763 'yaml':1431 'z':766 'zero':1224","prices":[{"id":"826781cf-cdf2-4474-a66d-19211aa16145","listingId":"9c2bb44c-cd0f-4aba-b113-5c37701578b8","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"AsyrafHussin","category":"agent-skills","install_from":"skills.sh"},"createdAt":"2026-05-16T18:57:13.878Z"}],"sources":[{"listingId":"9c2bb44c-cd0f-4aba-b113-5c37701578b8","source":"github","sourceId":"AsyrafHussin/agent-skills/code-slop","sourceUrl":"https://github.com/AsyrafHussin/agent-skills/tree/main/skills/code-slop","isPrimary":false,"firstSeenAt":"2026-05-16T18:57:13.878Z","lastSeenAt":"2026-05-18T18:58:24.074Z"}],"details":{"listingId":"9c2bb44c-cd0f-4aba-b113-5c37701578b8","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"AsyrafHussin","slug":"code-slop","github":{"repo":"AsyrafHussin/agent-skills","stars":39,"topics":["agent-rules","agent-skills","ai-agents","ai-slop","claude-code","code-quality","code-review","codex","cursor","laravel","nodejs","react","technical-debt","typescript","windsurf"],"license":"mit","html_url":"https://github.com/AsyrafHussin/agent-skills","pushed_at":"2026-05-16T19:24:02Z","description":"Agent skills for AI coding agents (Claude Code, Cursor, Codex, Windsurf) — Laravel, React, TypeScript, MySQL, code quality, technical debt, documentation, and security.","skill_md_sha":"58f803a8cac79848240036fd33140a67c3473e4c","skill_md_path":"skills/code-slop/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/AsyrafHussin/agent-skills/tree/main/skills/code-slop"},"layout":"multi","source":"github","category":"agent-skills","frontmatter":{"name":"code-slop","license":"MIT","description":"Detect AI-generated code patterns (\"slop\") in PHP/Laravel and TypeScript/React source — comment narration, generic naming, premature interfaces, defensive overdose, mock-everything tests, and the absence of human \"scars\". Use when reviewing AI-assisted PRs, auditing code for taste/quality (not metrics — that's technical-debt), or hardening a code-review checklist. Triggers on \"review for AI slop\", \"find AI patterns\", \"check code feels human\", \"audit code-quality taste\"."},"skills_sh_url":"https://skills.sh/AsyrafHussin/agent-skills/code-slop"},"updatedAt":"2026-05-18T18:58:24.074Z"}}