{"id":"37841f05-a62f-4cf3-9990-f7ec69a61180","shortId":"rngXFY","kind":"skill","title":"Code Simplification","tagline":"Agent Skills skill by Addyosmani","description":"# Code Simplification\n\n> Inspired by the [Claude Code Simplifier plugin](https://github.com/anthropics/claude-plugins-official/blob/main/plugins/code-simplifier/agents/code-simplifier.md). Adapted here as a model-agnostic, process-driven skill for any AI coding agent.\n\n## Overview\n\nSimplify code by reducing complexity while preserving exact behavior. The goal is not fewer lines — it's code that is easier to read, understand, modify, and debug. Every simplification must pass a simple test: \"Would a new team member understand this faster than the original?\"\n\n## When to Use\n\n- After a feature is working and tests pass, but the implementation feels heavier than it needs to be\n- During code review when readability or complexity issues are flagged\n- When you encounter deeply nested logic, long functions, or unclear names\n- When refactoring code written under time pressure\n- When consolidating related logic scattered across files\n- After merging changes that introduced duplication or inconsistency\n\n**When NOT to use:**\n\n- Code is already clean and readable — don't simplify for the sake of it\n- You don't understand what the code does yet — comprehend before you simplify\n- The code is performance-critical and the \"simpler\" version would be measurably slower\n- You're about to rewrite the module entirely — simplifying throwaway code wastes effort\n\n## The Five Principles\n\n### 1. Preserve Behavior Exactly\n\nDon't change what the code does — only how it expresses it. All inputs, outputs, side effects, error behavior, and edge cases must remain identical. If you're not sure a simplification preserves behavior, don't make it.\n\n```\nASK BEFORE EVERY CHANGE:\n→ Does this produce the same output for every input?\n→ Does this maintain the same error behavior?\n→ Does this preserve the same side effects and ordering?\n→ Do all existing tests still pass without modification?\n```\n\n### 2. Follow Project Conventions\n\nSimplification means making code more consistent with the codebase, not imposing external preferences. Before simplifying:\n\n```\n1. Read CLAUDE.md / project conventions\n2. Study how neighboring code handles similar patterns\n3. Match the project's style for:\n   - Import ordering and module system\n   - Function declaration style\n   - Naming conventions\n   - Error handling patterns\n   - Type annotation depth\n```\n\nSimplification that breaks project consistency is not simplification — it's churn.\n\n### 3. Prefer Clarity Over Cleverness\n\nExplicit code is better than compact code when the compact version requires a mental pause to parse.\n\n```typescript\n// UNCLEAR: Dense ternary chain\nconst label = isNew ? 'New' : isUpdated ? 'Updated' : isArchived ? 'Archived' : 'Active';\n\n// CLEAR: Readable mapping\nfunction getStatusLabel(item: Item): string {\n  if (item.isNew) return 'New';\n  if (item.isUpdated) return 'Updated';\n  if (item.isArchived) return 'Archived';\n  return 'Active';\n}\n```\n\n```typescript\n// UNCLEAR: Chained reduces with inline logic\nconst result = items.reduce((acc, item) => ({\n  ...acc,\n  [item.id]: { ...acc[item.id], count: (acc[item.id]?.count ?? 0) + 1 }\n}), {});\n\n// CLEAR: Named intermediate step\nconst countById = new Map<string, number>();\nfor (const item of items) {\n  countById.set(item.id, (countById.get(item.id) ?? 0) + 1);\n}\n```\n\n### 4. Maintain Balance\n\nSimplification has a failure mode: over-simplification. Watch for these traps:\n\n- **Inlining too aggressively** — removing a helper that gave a concept a name makes the call site harder to read\n- **Combining unrelated logic** — two simple functions merged into one complex function is not simpler\n- **Removing \"unnecessary\" abstraction** — some abstractions exist for extensibility or testability, not complexity\n- **Optimizing for line count** — fewer lines is not the goal; easier comprehension is\n\n### 5. Scope to What Changed\n\nDefault to simplifying recently modified code. Avoid drive-by refactors of unrelated code unless explicitly asked to broaden scope. Unscoped simplification creates noise in diffs and risks unintended regressions.\n\n## The Simplification Process\n\n### Step 1: Understand Before Touching (Chesterton's Fence)\n\nBefore changing or removing anything, understand why it exists. This is Chesterton's Fence: if you see a fence across a road and don't understand why it's there, don't tear it down. First understand the reason, then decide if the reason still applies.\n\n```\nBEFORE SIMPLIFYING, ANSWER:\n- What is this code's responsibility?\n- What calls it? What does it call?\n- What are the edge cases and error paths?\n- Are there tests that define the expected behavior?\n- Why might it have been written this way? (Performance? Platform constraint? Historical reason?)\n- Check git blame: what was the original context for this code?\n```\n\nIf you can't answer these, you're not ready to simplify. Read more context first.\n\n### Step 2: Identify Simplification Opportunities\n\nScan for these patterns — each one is a concrete signal, not a vague smell:\n\n**Structural complexity:**\n\n| Pattern | Signal | Simplification |\n|---------|--------|----------------|\n| Deep nesting (3+ levels) | Hard to follow control flow | Extract conditions into guard clauses or helper functions |\n| Long functions (50+ lines) | Multiple responsibilities | Split into focused functions with descriptive names |\n| Nested ternaries | Requires mental stack to parse | Replace with if/else chains, switch, or lookup objects |\n| Boolean parameter flags | `doThing(true, false, true)` | Replace with options objects or separate functions |\n| Repeated conditionals | Same `if` check in multiple places | Extract to a well-named predicate function |\n\n**Naming and readability:**\n\n| Pattern | Signal | Simplification |\n|---------|--------|----------------|\n| Generic names | `data`, `result`, `temp`, `val`, `item` | Rename to describe the content: `userProfile`, `validationErrors` |\n| Abbreviated names | `usr`, `cfg`, `btn`, `evt` | Use full words unless the abbreviation is universal (`id`, `url`, `api`) |\n| Misleading names | Function named `get` that also mutates state | Rename to reflect actual behavior |\n| Comments explaining \"what\" | `// increment counter` above `count++` | Delete the comment — the code is clear enough |\n| Comments explaining \"why\" | `// Retry because the API is flaky under load` | Keep these — they carry intent the code can't express |\n\n**Redundancy:**\n\n| Pattern | Signal | Simplification |\n|---------|--------|----------------|\n| Duplicated logic | Same 5+ lines in multiple places | Extract to a shared function |\n| Dead code | Unreachable branches, unused variables, commented-out blocks | Remove (after confirming it's truly dead) |\n| Unnecessary abstractions | Wrapper that adds no value | Inline the wrapper, call the underlying function directly |\n| Over-engineered patterns | Factory-for-a-factory, strategy-with-one-strategy | Replace with the simple direct approach |\n| Redundant type assertions | Casting to a type that's already inferred | Remove the assertion |\n\n### Step 3: Apply Changes Incrementally\n\nMake one simplification at a time. Run tests after each change. **Submit refactoring changes separately from feature or bug fix changes.** A PR that refactors and adds a feature is two PRs — split them.\n\n```\nFOR EACH SIMPLIFICATION:\n1. Make the change\n2. Run the test suite\n3. If tests pass → commit (or continue to next simplification)\n4. If tests fail → revert and reconsider\n```\n\nAvoid batching multiple simplifications into a single untested change. If something breaks, you need to know which simplification caused it.\n\n**The Rule of 500:** If a refactoring would touch more than 500 lines, invest in automation (codemods, sed scripts, AST transforms) rather than making the changes by hand. Manual edits at that scale are error-prone and exhausting to review.\n\n### Step 4: Verify the Result\n\nAfter all simplifications, step back and evaluate the whole:\n\n```\nCOMPARE BEFORE AND AFTER:\n- Is the simplified version genuinely easier to understand?\n- Did you introduce any new patterns inconsistent with the codebase?\n- Is the diff clean and reviewable?\n- Would a teammate approve this change?\n```\n\nIf the \"simplified\" version is harder to understand or review, revert. Not every simplification attempt succeeds.\n\n## Language-Specific Guidance\n\n### TypeScript / JavaScript\n\n```typescript\n// SIMPLIFY: Unnecessary async wrapper\n// Before\nasync function getUser(id: string): Promise<User> {\n  return await userService.findById(id);\n}\n// After\nfunction getUser(id: string): Promise<User> {\n  return userService.findById(id);\n}\n\n// SIMPLIFY: Verbose conditional assignment\n// Before\nlet displayName: string;\nif (user.nickname) {\n  displayName = user.nickname;\n} else {\n  displayName = user.fullName;\n}\n// After\nconst displayName = user.nickname || user.fullName;\n\n// SIMPLIFY: Manual array building\n// Before\nconst activeUsers: User[] = [];\nfor (const user of users) {\n  if (user.isActive) {\n    activeUsers.push(user);\n  }\n}\n// After\nconst activeUsers = users.filter((user) => user.isActive);\n\n// SIMPLIFY: Redundant boolean return\n// Before\nfunction isValid(input: string): boolean {\n  if (input.length > 0 && input.length < 100) {\n    return true;\n  }\n  return false;\n}\n// After\nfunction isValid(input: string): boolean {\n  return input.length > 0 && input.length < 100;\n}\n```\n\n### Python\n\n```python\n# SIMPLIFY: Verbose dictionary building\n# Before\nresult = {}\nfor item in items:\n    result[item.id] = item.name\n# After\nresult = {item.id: item.name for item in items}\n\n# SIMPLIFY: Nested conditionals with early return\n# Before\ndef process(data):\n    if data is not None:\n        if data.is_valid():\n            if data.has_permission():\n                return do_work(data)\n            else:\n                raise PermissionError(\"No permission\")\n        else:\n            raise ValueError(\"Invalid data\")\n    else:\n        raise TypeError(\"Data is None\")\n# After\ndef process(data):\n    if data is None:\n        raise TypeError(\"Data is None\")\n    if not data.is_valid():\n        raise ValueError(\"Invalid data\")\n    if not data.has_permission():\n        raise PermissionError(\"No permission\")\n    return do_work(data)\n```\n\n### React / JSX\n\n```tsx\n// SIMPLIFY: Verbose conditional rendering\n// Before\nfunction UserBadge({ user }: Props) {\n  if (user.isAdmin) {\n    return <Badge variant=\"admin\">Admin</Badge>;\n  } else {\n    return <Badge variant=\"default\">User</Badge>;\n  }\n}\n// After\nfunction UserBadge({ user }: Props) {\n  const variant = user.isAdmin ? 'admin' : 'default';\n  const label = user.isAdmin ? 'Admin' : 'User';\n  return <Badge variant={variant}>{label}</Badge>;\n}\n\n// SIMPLIFY: Prop drilling through intermediate components\n// Before — consider whether context or composition solves this better.\n// This is a judgment call — flag it, don't auto-refactor.\n```\n\n## Common Rationalizations\n\n| Rationalization | Reality |\n|---|---|\n| \"It's working, no need to touch it\" | Working code that's hard to read will be hard to fix when it breaks. Simplifying now saves time on every future change. |\n| \"Fewer lines is always simpler\" | A 1-line nested ternary is not simpler than a 5-line if/else. Simplicity is about comprehension speed, not line count. |\n| \"I'll just quickly simplify this unrelated code too\" | Unscoped simplification creates noisy diffs and risks regressions in code you didn't intend to change. Stay focused. |\n| \"The types make it self-documenting\" | Types document structure, not intent. A well-named function explains *why* better than a type signature explains *what*. |\n| \"This abstraction might be useful later\" | Don't preserve speculative abstractions. If it's not used now, it's complexity without value. Remove it and re-add when needed. |\n| \"The original author must have had a reason\" | Maybe. Check git blame — apply Chesterton's Fence. But accumulated complexity often has no reason; it's just the residue of iteration under pressure. |\n| \"I'll refactor while adding this feature\" | Separate refactoring from feature work. Mixed changes are harder to review, revert, and understand in history. |\n\n## Red Flags\n\n- Simplification that requires modifying tests to pass (you likely changed behavior)\n- \"Simplified\" code that is longer and harder to follow than the original\n- Renaming things to match your preferences rather than project conventions\n- Removing error handling because \"it makes the code cleaner\"\n- Simplifying code you don't fully understand\n- Batching many simplifications into one large, hard-to-review commit\n- Refactoring code outside the scope of the current task without being asked\n\n## Verification\n\nAfter completing a simplification pass:\n\n- [ ] All existing tests pass without modification\n- [ ] Build succeeds with no new warnings\n- [ ] Linter/formatter passes (no style regressions)\n- [ ] Each simplification is a reviewable, incremental change\n- [ ] The diff is clean — no unrelated changes mixed in\n- [ ] Simplified code follows project conventions (checked against CLAUDE.md or equivalent)\n- [ ] No error handling was removed or weakened\n- [ ] No dead code was left behind (unused imports, unreachable branches)\n- [ ] A teammate or review agent would approve the change as a net improvement","tags":["code","simplification","agent","skills","addyosmani"],"capabilities":["skill","source-addyosmani","category-agent-skills"],"categories":["agent-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/addyosmani/agent-skills/code-simplification","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"install_from":"skills.sh"}},"qualityScore":"0.300","qualityRationale":"deterministic score 0.30 from registry signals: · indexed on skills.sh · published under addyosmani/agent-skills","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:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T11:40:30.442Z","embedding":null,"createdAt":"2026-04-18T20:31:31.886Z","updatedAt":"2026-04-22T11:40:30.442Z","lastSeenAt":"2026-04-22T11:40:30.442Z","tsv":"'/anthropics/claude-plugins-official/blob/main/plugins/code-simplifier/agents/code-simplifier.md).':19 '0':430,451,1238,1253 '1':207,305,431,452,565,1001,1460 '100':1240,1255 '2':286,310,691,1005 '3':318,352,716,960,1010 '4':453,1020,1089 '5':526,883,1469 '50':733 '500':1050,1058 'abbrevi':809,820 'abstract':503,505,911,1534,1543 'acc':420,422,424,427 'accumul':1580 'across':136,591 'activ':387,409 'activeus':1209,1222 'activeusers.push':1218 'actual':838 'ad':1599 'adapt':20 'add':914,990,1560 'addyosmani':7 'admin':1368,1380,1385 'agent':3,35,1762 'aggress':470 'agnost':26 'ai':33 'alreadi':152,954 'also':832 'alway':1457 'annot':339 'answer':620,678 'anyth':576 'api':825,861 'appli':617,961,1575 'approach':944 'approv':1133,1764 'archiv':386,407 'array':1205 'ask':249,547,1691 'assert':947,958 'assign':1186 'ast':1066 'async':1161,1164 'attempt':1150 'author':1565 'auto':1417 'auto-refactor':1416 'autom':1062 'avoid':537,1027 'await':1171 'back':1097 'badg':1388 'balanc':455 'batch':1028,1669 'behavior':45,209,229,244,268,649,839,1630 'behind':1753 'better':360,1406,1526 'blame':665,1574 'block':902 'boolean':759,1228,1235,1250 'branch':896,1757 'break':343,1038,1445 'broaden':549 'btn':813 'bug':982 'build':1206,1261,1704 'call':482,628,633,920,1411 'carri':869 'case':232,638 'cast':948 'category-agent-skills' 'caus':1045 'cfg':812 'chain':378,412,754 'chang':140,213,252,530,573,962,974,977,984,1004,1035,1072,1135,1453,1504,1608,1629,1721,1728,1766 'check':663,777,1572,1736 'chesterton':569,583,1576 'churn':351 'clariti':354 'claud':13 'claude.md':307,1738 'claus':727 'clean':153,1127,1725 'cleaner':1661 'clear':388,432,853 'clever':356 'code':1,8,14,34,38,54,104,126,150,170,178,201,216,293,314,358,363,536,544,624,673,851,872,894,1432,1487,1498,1632,1660,1663,1681,1732,1750 'codebas':298,1123 'codemod':1063 'combin':487 'comment':840,849,855,900 'commented-out':899 'commit':1014,1679 'common':1419 'compact':362,366 'compar':1102 'complet':1694 'complex':41,109,496,512,710,1552,1581 'compon':1397 'composit':1403 'comprehend':173 'comprehens':524,1475 'concept':477 'concret':703 'condit':724,774,1185,1281,1358 'confirm':905 'consid':1399 'consist':295,345 'consolid':132 'const':379,417,436,443,1199,1208,1212,1221,1377,1382 'constraint':660 'content':806 'context':670,688,1401 'continu':1016 'control':721 'convent':289,309,334,1652,1735 'count':426,429,516,846,1479 'countbyid':437 'countbyid.get':449 'countbyid.set':447 'counter':844 'creat':553,1491 'critic':182 'current':1687 'data':797,1288,1290,1303,1313,1317,1323,1325,1330,1340,1352 'data.has':1298,1343 'data.is':1295,1335 'dead':893,909,1749 'debug':63 'decid':612 'declar':331 'deep':714 'deepli':116 'def':1286,1321 'default':531,1381 'defin':646 'delet':847 'dens':376 'depth':340 'describ':804 'descript':742 'dictionari':1260 'didn':1500 'diff':556,1126,1493,1723 'direct':924,943 'displaynam':1189,1193,1196,1200 'document':1513,1515 'doth':762 'drill':1394 'drive':539 'drive-bi':538 'driven':29 'duplic':143,880 'earli':1283 'easier':57,523,1111 'edg':231,637 'edit':1076 'effect':227,275 'effort':203 'els':1195,1304,1309,1314,1369 'encount':115 'engin':927 'enough':854 'entir':198 'equival':1740 'error':228,267,335,640,1082,1654,1742 'error-pron':1081 'evalu':1099 'everi':64,251,260,1148,1451 'evt':814 'exact':44,210 'exhaust':1085 'exist':280,506,580,1699 'expect':648 'explain':841,856,1524,1531 'explicit':357,546 'express':221,875 'extens':508 'extern':301 'extract':723,781,888 'factori':930,933 'factory-for-a-factori':929 'fail':1023 'failur':459 'fals':764,1244 'faster':78 'featur':87,980,992,1601,1605 'feel':96 'fenc':571,585,590,1578 'fewer':50,517,1454 'file':137 'first':607,689 'five':205 'fix':983,1442 'flag':112,761,1412,1619 'flaki':863 'flow':722 'focus':739,1506 'follow':287,720,1639,1733 'full':816 'fulli':1667 'function':120,330,391,492,497,730,732,740,772,788,828,892,923,1165,1175,1231,1246,1361,1373,1523 'futur':1452 'gave':475 'generic':795 'genuin':1110 'get':830 'getstatuslabel':392 'getus':1166,1176 'git':664,1573 'github.com':18 'github.com/anthropics/claude-plugins-official/blob/main/plugins/code-simplifier/agents/code-simplifier.md).':17 'goal':47,522 'guard':726 'guidanc':1155 'hand':1074 'handl':315,336,1655,1743 'hard':718,1435,1440,1676 'hard-to-review':1675 'harder':484,1141,1610,1637 'heavier':97 'helper':473,729 'histor':661 'histori':1617 'id':823,1167,1173,1177,1182 'ident':235 'identifi':692 'if/else':753,1471 'implement':95 'import':325,1755 'impos':300 'improv':1770 'inconsist':145,1120 'increment':843,963,1720 'infer':955 'inlin':415,468,917 'input':224,261,1233,1248 'input.length':1237,1239,1252,1254 'inspir':10 'intend':1502 'intent':870,1518 'intermedi':434,1396 'introduc':142,1116 'invalid':1312,1339 'invest':1060 'isarchiv':385 'isnew':381 'issu':110 'isupd':383 'isvalid':1232,1247 'item':393,394,421,444,446,801,1265,1267,1276,1278 'item.id':423,425,428,448,450,1269,1273 'item.isarchived':405 'item.isnew':397 'item.isupdated':401 'item.name':1270,1274 'items.reduce':419 'iter':1592 'javascript':1157 'jsx':1354 'judgment':1410 'keep':866 'know':1042 'label':380,1383,1391 'languag':1153 'language-specif':1152 'larg':1674 'later':1538 'left':1752 'let':1188 'level':717 'like':1628 'line':51,515,518,734,884,1059,1455,1461,1470,1478 'linter/formatter':1710 'll':1481,1596 'load':865 'logic':118,134,416,489,881 'long':119,731 'longer':1635 'lookup':757 'maintain':264,454 'make':247,292,480,964,1002,1070,1509,1658 'mani':1670 'manual':1075,1204 'map':390,439 'match':319,1646 'mayb':1571 'mean':291 'measur':189 'member':75 'mental':370,747 'merg':139,493 'might':651,1535 'mislead':826 'mix':1607,1729 'mode':460 'model':25 'model-agnost':24 'modif':285,1703 'modifi':61,535,1623 'modul':197,328 'multipl':735,779,886,1029 'must':66,233,1566 'mutat':833 'name':123,333,433,479,743,786,789,796,810,827,829,1522 'need':100,1040,1427,1562 'neighbor':313 'nest':117,715,744,1280,1462 'net':1769 'new':73,382,399,438,1118,1708 'next':1018 'nois':554 'noisi':1492 'none':1293,1319,1327,1332 'number':441 'object':758,769 'often':1582 'one':495,700,937,965,1673 'opportun':694 'optim':513 'option':768 'order':277,326 'origin':81,669,1564,1642 'output':225,258 'outsid':1682 'over-engin':925 'over-simplif':461 'overview':36 'paramet':760 'pars':373,750 'pass':67,92,283,1013,1626,1697,1701,1711 'path':641 'pattern':317,337,698,711,792,877,928,1119 'paus':371 'perform':181,658 'performance-crit':180 'permiss':1299,1308,1344,1348 'permissionerror':1306,1346 'place':780,887 'platform':659 'plugin':16 'pr':986 'predic':787 'prefer':302,353,1648 'preserv':43,208,243,271,1541 'pressur':130,1594 'principl':206 'process':28,563,1287,1322 'process-driven':27 'produc':255 'project':288,308,321,344,1651,1734 'promis':1169,1179 'prone':1083 'prop':1364,1376,1393 'prs':995 'python':1256,1257 'quick':1483 'rais':1305,1310,1315,1328,1337,1345 'rather':1068,1649 'ration':1420,1421 're':192,238,681,1559 're-add':1558 'react':1353 'read':59,306,486,686,1437 'readabl':107,155,389,791 'readi':683 'realiti':1422 'reason':610,615,662,1570,1585 'recent':534 'reconsid':1026 'red':1618 'reduc':40,413 'redund':876,945,1227 'refactor':125,541,976,988,1053,1418,1597,1603,1680 'reflect':837 'regress':560,1496,1714 'relat':133 'remain':234 'remov':471,501,575,903,956,1555,1653,1745 'renam':802,835,1643 'render':1359 'repeat':773 'replac':751,766,939 'requir':368,746,1622 'residu':1590 'respons':626,736 'result':418,798,1092,1263,1268,1272 'retri':858 'return':398,402,406,408,1170,1180,1229,1241,1243,1251,1284,1300,1349,1367,1370,1387 'revert':1024,1146,1613 'review':105,1087,1129,1145,1612,1678,1719,1761 'rewrit':195 'risk':558,1495 'road':593 'rule':1048 'run':970,1006 'sake':161 'save':1448 'scale':1079 'scan':695 'scatter':135 'scope':527,550,1684 'script':1065 'sed':1064 'see':588 'self':1512 'self-docu':1511 'separ':771,978,1602 'share':891 'side':226,274 'signal':704,712,793,878 'signatur':1530 'similar':316 'simpl':69,491,942 'simpler':185,500,1458,1466 'simplic':1472 'simplif':2,9,65,242,290,341,348,456,463,552,562,693,713,794,879,966,1000,1019,1030,1044,1095,1149,1490,1620,1671,1696,1716 'simplifi':15,37,158,176,199,304,533,619,685,1108,1138,1159,1183,1203,1226,1258,1279,1356,1392,1446,1484,1631,1662,1731 'singl':1033 'site':483 'skill':4,5,30 'slower':190 'smell':708 'solv':1404 'someth':1037 'source-addyosmani' 'specif':1154 'specul':1542 'speed':1476 'split':737,996 'stack':748 'state':834 'stay':1505 'step':435,564,690,959,1088,1096 'still':282,616 'strategi':935,938 'strategy-with-one-strategi':934 'string':395,440,1168,1178,1190,1234,1249 'structur':709,1516 'studi':311 'style':323,332,1713 'submit':975 'succeed':1151,1705 'suit':1009 'sure':240 'switch':755 'system':329 'task':1688 'team':74 'teammat':1132,1759 'tear':604 'temp':799 'ternari':377,745,1463 'test':70,91,281,644,971,1008,1012,1022,1624,1700 'testabl':510 'thing':1644 'throwaway':200 'time':129,969,1449 'touch':568,1055,1429 'transform':1067 'trap':467 'true':763,765,1242 'truli':908 'tsx':1355 'two':490,994 'type':338,946,951,1508,1514,1529 'typeerror':1316,1329 'typescript':374,410,1156,1158 'unclear':122,375,411 'under':922 'understand':60,76,167,566,577,597,608,1113,1143,1615,1668 'unintend':559 'univers':822 'unless':545,818 'unnecessari':502,910,1160 'unreach':895,1756 'unrel':488,543,1486,1727 'unscop':551,1489 'untest':1034 'unus':897,1754 'updat':384,403 'url':824 'use':84,149,815,1537,1548 'user':1210,1213,1215,1219,1224,1363,1371,1375,1386 'user.fullname':1197,1202 'user.isactive':1217,1225 'user.isadmin':1366,1379,1384 'user.nickname':1192,1194,1201 'userbadg':1362,1374 'userprofil':807 'users.filter':1223 'userservice.findbyid':1172,1181 'usr':811 'vagu':707 'val':800 'valid':1296,1336 'validationerror':808 'valu':916,1554 'valueerror':1311,1338 'variabl':898 'variant':1378,1389,1390 'verbos':1184,1259,1357 'verif':1692 'verifi':1090 'version':186,367,1109,1139 'warn':1709 'wast':202 'watch':464 'way':657 'weaken':1747 'well':785,1521 'well-nam':784,1520 'whether':1400 'whole':1101 'without':284,1553,1689,1702 'word':817 'work':89,1302,1351,1425,1431,1606 'would':71,187,1054,1130,1763 'wrapper':912,919,1162 'written':127,655 'yet':172","prices":[{"id":"c3ada5c5-634c-41a2-ba8d-b655a61e57b3","listingId":"37841f05-a62f-4cf3-9990-f7ec69a61180","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"addyosmani","category":"agent-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T20:31:31.886Z"}],"sources":[{"listingId":"37841f05-a62f-4cf3-9990-f7ec69a61180","source":"github","sourceId":"addyosmani/agent-skills/code-simplification","sourceUrl":"https://github.com/addyosmani/agent-skills/tree/main/skills/code-simplification","isPrimary":false,"firstSeenAt":"2026-04-18T21:52:56.439Z","lastSeenAt":"2026-04-22T06:52:41.964Z"},{"listingId":"37841f05-a62f-4cf3-9990-f7ec69a61180","source":"skills_sh","sourceId":"addyosmani/agent-skills/code-simplification","sourceUrl":"https://skills.sh/addyosmani/agent-skills/code-simplification","isPrimary":true,"firstSeenAt":"2026-04-18T20:31:31.886Z","lastSeenAt":"2026-04-22T11:40:30.442Z"}],"details":{"listingId":"37841f05-a62f-4cf3-9990-f7ec69a61180","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"addyosmani","slug":"code-simplification","source":"skills_sh","category":"agent-skills","skills_sh_url":"https://skills.sh/addyosmani/agent-skills/code-simplification"},"updatedAt":"2026-04-22T11:40:30.442Z"}}