{"id":"a9d6947a-203e-413c-83c7-a6a95e3f8155","shortId":"rgJK6q","kind":"skill","title":"age","tagline":"This skill should be used when the user wants a code review on a diff, PR, branch, or path — phrases like \"review this\", \"/age\", \"is this safe to merge\", \"find bugs\", \"spot security issues\", \"check for slop\", \"review my PR\", \"look for problems\", \"what's wrong with this code\". Run","description":"# /age\n\nUse this skill to review a diff or scoped path before merging, after `/press`, or whenever the user wants evidence-backed observations rather than an approval verdict.\n\nDo not use it to apply fixes directly. Hand fix work to `/cure`, which owns applying findings.\n\n## Inputs\n\nAccept:\n\n```text\n/age [<ref-or-range>] [--scope <path>] [--comprehensive] [--auto]\n/age <slug> [--auto]\n```\n\nWhen called with a `<slug>`, resolve `.cheese/press/<slug>.md` (if present) for press context and review the current working diff. When called with a `<ref-or-range>`, review that range. Default to the current working diff when neither is supplied. If the base branch is unclear, ask or use the repository's documented default.\n\n`--auto` is the propagated autonomous-mode flag from `/cook --auto`. It changes the handoff (see `## Handoff`). Track the cure-pass count internally so the two-cure-pass cap can be enforced — increment after each `/cure --auto` returns. The full chain is `age → cure → age → cure → age → stop`: up to three `/age --auto` invocations and up to two `/cure --auto` passes. Once two cure passes have completed, the next `/age --auto` writes the final report and stops without invoking `/cure` again. (This in-session contract uses conversation memory to track passes — it works because `/cook --auto` runs every phase in the same context. When invoked from `/ultracook`, each phase boots in fresh context with no shared memory; see `### When invoked from /ultracook` below for the no-shared-memory variant.)\n\n`--hard` is the propagated metacognitive-gate flag from `/cook --hard` (or `/cheese --hard`). Age does not fire the gate; it only passes `--hard` forward to `/cure` at the handoff so the gate can fire at the share-for-review boundary. See `skills/hard-cheese/SKILL.md`.\n\n## Review dimensions\n\n| Dimension | Stake | Look for |\n| --- | --- | --- |\n| correctness | high | broken behaviour, silent failures, ordering, null/empty edge cases |\n| security | high | auth, injection, secrets, unsafe parsing, tainted inputs |\n| encapsulation | high | boundary leaks, cross-slice internals, public API sprawl |\n| spec | high | drift from stated requirements or acceptance criteria |\n| complexity | medium | unnecessary nesting, long functions, speculative abstractions, redundant state, parameter sprawl, stringly-typed code |\n| deslop | medium | dead code, AI residue, duplicated logic, copy-paste-with-variation, vague names |\n| assertions | medium | weak tests, shallow existence checks, swallowed errors |\n| nih | medium | reinvented dependency, stdlib, or existing project helper / utility / component |\n| efficiency | medium | unnecessary work, missed concurrency, hot-path bloat, no-op updates, time-of-check/time-of-use (TOCTOU) pre-checks, memory leaks, overly broad reads |\n\nPer-dimension rubrics and recommendation shapes in `references/dimensions.md`. This reduced workflow intentionally omits the git-history/precedent dimension.\n\n## Flow\n\n1. Identify the diff, scope, and relevant spec or issue.\n2. Gather evidence: diff, touched files, tests, callers/imports. If `.cheese/press/<slug>.md` exists, read it and include a `## Press findings` sub-section in the age report summarising unresolved items — `/cure` reads only `.cheese/age/<slug>.md` and cannot access the press report directly.\n3. Review every dimension; dimensions with no findings simply omit themselves.\n4. Group findings by stake (high → medium) and by file.\n5. Write the report to `.cheese/age/<slug>.md` and print the path.\n6. Hand off via the shared handoff gate (see `## Handoff` below). Age owns the selection gate: it asks the user *which findings to cure*, never *whether to run /cure*. `/cure` still owns the actual fix application — age never auto-applies fixes.\n\n## Preferred tools and fallbacks\n\nCode search and reading go through the cheez-* skills (`/cheez-search`, `/cheez-read`) — see those skills for tool selection rules. For caller graphs specifically, age uses `cheez-search` with `kind: \"callers\"` and `tilth_deps` (cheez-search owns the routing).\n\nBeyond cheez-* there are review-specific tools:\n\n| Need | Prefer | Fallback |\n| --- | --- | --- |\n| Diff inspection | `delta` | `git diff --unified=3` |\n| Risk-scored impact + curated review context | code-review-graph: `get_review_context_tool`, `get_impact_radius_tool`, `detect_changes_tool` | `tilth_deps` + manual scoping |\n| Architecture / hotspot framing for large diffs | code-review-graph: `get_architecture_overview_tool`, `get_hub_nodes_tool`, `get_bridge_nodes_tool` | skip and note in confidence |\n| GitHub/PR context | `gh` | local git commands or user-provided PR data |\n| Merge/conflict awareness | mergiraf | manual conflict checks |\n\n**Freshness:** before the first code-review-graph query in a run, call `build_or_update_graph_tool` (and `embed_graph_tool` if you'll use `semantic_search_nodes_tool`). The graph is persistent and goes stale between sessions. See [`/cheez-search`](../cheez-search/SKILL.md#when-code-review-graph-beats-tilth-if-your-harness-has-it) for the full freshness contract and when semantic search beats tilth — steel threads across renamed layers, concepts under divergent names, spec-vs-code vocabulary mismatch.\n\nMissing optional tools should not block review. State which evidence was unavailable and reduce confidence accordingly.\n\n## Sub-agent context gate\n\n`/age` should fork a read-only review-context sub-agent when evidence gathering is likely to exceed the parent context, especially for `--comprehensive` reviews.\n\nSpawn when any of these are true:\n\n- The diff spans more than 15 files.\n- Touched code or generated review context is larger than roughly 25 KB (about 5 K tokens of raw output the parent would not read line-by-line).\n- Caller / dependency graph expansion crosses multiple subsystems.\n- code-review-graph or `tilth_deps` output is needed for hotspot, bridge-node, or blast-radius framing.\n\nThe sub-agent returns a digest: orientation paragraph, high-signal `path:line` citations, gap list. The parent owns the nine-dimension review, severity grading, and the `.cheese/age/<slug>.md` report. Do not spawn for small diffs, to outsource severity grading, or to outsource the final verdict.\n\nDigest size, parent-vs-sub-agent split, and harness-agnostic sub-agent selection live in `references/sub-agent-gate.md` — single source of truth for the cross-cutting rules.\n\n## Output\n\nWrite to `.cheese/age/<slug>.md` with a minimum handoff slug at the top so `/ultracook` and `/cheese --continue` can chain without re-parsing the report:\n\n```markdown\nstatus: ok | halt: <one-line reason>\nnext: cure | done\nartifact: <path-to-press-report-or-prior-cure-if-any>\n<one-line orientation: what the diff does>\n\n# Age Report — <slug>\n\n## Orientation\n<one or two factual sentences about what the diff does>\n\n## High-stake findings\n- **[correctness]** `path/to/file.ts:42-50` — <what is wrong, in plain terms>. <recommendation>.\n- **[security]** `path/to/handler.ts:108` — <what is wrong>. <recommendation>.\n\n## Medium-stake findings\n- **[complexity]** `path/to/util.ts:200-240` — <what is wrong>. <recommendation>.\n- **[deslop]** `path/to/old.ts:55-60` — <what is wrong>. <recommendation>.\n\n## Confidence\n<`certain` | `speculating` | `don't know`> — <one-line justification including which evidence sources were unavailable>\n\n## Next step\nSelection prompt rendered inline — pick findings to cure or `none` to stop.\n```\n\n`status: ok` when the review completed. `status: halt: <reason>` when evidence was unreachable in a way that blocks honest review. `next: cure` when at least one medium-or-above finding exists and the chain has cure passes remaining; `next: done` when no medium-or-above findings remain or the two-cure-pass cap has been reached.\n\nThen print:\n\n```\nAge report: .cheese/age/<slug>.md\n```\n\n## Handoff\n\n**Pipeline:** culture → mold → cook → press → **[age]** → cure → ship\n\nAfter the report is on disk, skip any \"should I run /cure?\" meta-question and go straight to the selection gate. The user's working memory is on the findings, not on whether a follow-up step exists. Use the shared handoff gate in [`../../shared/handoff-gate.md`](../../shared/handoff-gate.md) for post-selection dispatch.\n\n1. Render the numbered selection table per `../cure/references/selection.md` directly inline (one row per finding, grouped by stake).\n2. Ask via the handoff gate which findings to cure. Lead each option with the verb (what the user wants to *do* next); the underlying selection verb is the backing detail. Offer:\n   - **Pick findings to fix** — accept a free-text reply using the verbs from `../cure/references/selection.md` (`1,3,5`, `all-high`, `all`, `none`, `skip N`).\n   - **Fix all high-stake findings** *(recommended when at least one high-stake finding exists)* — equivalent to `all-high`.\n   - **Stop — leave the report for later** — equivalent to `none`.\n3. On a non-empty selection, immediately dispatch `/cure <slug> [--hard]` with the selection locked in via context, not a CLI flag:\n\n```yaml\nhandoff_context:\n  source_skill: /age\n  source_report: .cheese/age/<slug>.md\n  selection: \"<recognized verb or explicit ids>\"\n  resolved_ids: [<expanded ids>]\n```\n\n`/cure` skips its own selection prompt when this context is present, re-confirms the cited ids still exist, then owns the apply / validate / report loop. `/age` never auto-applies fixes. Always emit `resolved_ids` alongside `selection` — expand the verb yourself rather than leaving the field empty; `/cure` re-confirms against the report regardless.\n4. On `none` / `Stop`, exit cleanly with the report path.\n\nOutside `--auto`, never auto-apply fixes and never invoke `/cure` without an explicit non-empty selection. The default selection remains empty. `--auto` substitutes a stake-floor selection — see `### Auto mode` below.\n\n### Auto mode\n\nWhen invoked with `--auto`:\n\n- Skip the handoff gate.\n- If two cure passes have already completed (cap reached), stop and surface the final report — do not invoke `/cure` again even if findings remain.\n- Otherwise, if any medium-or-above finding exists, invoke `/cure <slug> --auto --stake medium+` and increment the cure-pass count when it returns.\n- If no medium-or-above findings remain, stop the chain with a one-line \"auto chain clean\" note and the report path.\n\n### When invoked from /ultracook\n\n`/ultracook` spawns age as a fresh-context sub-agent and owns the chain itself. Honour the no-chain override:\n\n- Write `.cheese/age/<slug>.md` (with the handoff slug at the top) and stop. Do not invoke `/cure <slug> --auto --stake medium+` from inside the sub-agent.\n- Set `next:` from what you observe on this run, not from any guess about chain position. `next: cure` when at least one medium-or-above finding exists; `next: done` when none do.\n- The two-cure-pass cap is enforced by ultracook's fixed chain length, not by age's `next:` field. Fresh-context age cannot count prior cure passes anyway, so this is the only honest contract. The orchestrator uses `next: done` for early-stop signalling; the natural terminal stop is the chain table running out of entries.\n\n### Inline-degrade mode (invoked from a sub-agent, e.g. /cheese-factory curd worker)\n\nWhen `/age` detects it is running as a sub-agent (the parent passes the `invoked-from: cheese-factory-curd` marker or equivalent context line in the prompt), it runs its nine dimensions inline within its own context instead of spawning per-dimension sub-agents. This honours the host's nesting-depth limit (Claude Code allows 1 level of sub-agent nesting; equivalents in other harnesses are similar).\n\nDetection mechanism: scan the invoking prompt for an `invoked-from:` line — values like `cheese-factory-curd`, `fromagerie-curd`, or any harness-specific marker the orchestrator passes in. When present, switch modes:\n\n- Run every dimension's review inline. Do not fork the read-only review-context sub-agent gate (`## Sub-agent context gate` above is skipped under inline-degrade).\n- Output (the findings report + handoff slug) is identical between fan-out and inline-degrade modes — only the internal execution differs.\n- Honour the no-chain-forward directive as usual: write the slug and stop. Do not invoke `/cure` from the sub-agent — the orchestrator owns the chain.\n\nInline-degrade is forced when the marker is present; there is no opt-out. Spawning a level-2 sub-agent from inside a curd worker would silently exceed the harness's nesting limit and fail — the marker is the only honest signal that the parent has already consumed level-1 depth.\n\n## Rules\n\n- Review is not a verdict; explain where to look and why.\n- Do not edit production files.\n- Do not auto-apply fixes. Age owns the *selection* gate (which findings to cure) and dispatches `/cure` only with an explicit non-empty selection; the *application* gate stays inside `/cure`. The only sanctioned bypass of either gate is `--auto`, which `/cure` enforces with a stake floor and `/age` enforces with a two-pass cap.\n- Do not invent evidence. Cite files, diffs, commands, or unavailable-source notes.\n- Agree when the diff is fine. Do not manufacture findings to fill a dimension; an empty dimension is a valid outcome.\n- Keep confidence qualitative (`certain | speculating | don't know`); never emit a numeric score.\n- Findings carry location + recommendation. Do not write JSON sidecars or hash-anchored fix payloads — `/cure` reads the markdown directly.\n- Apply `references/voice.md` (output discipline, reasoning posture, confidence vocabulary).\n\n## References\n\n- `references/dimensions.md` — per-dimension rubrics and recommendation shapes.\n- `references/voice.md` — shared output discipline, reasoning posture, and confidence vocabulary.\n- `references/sub-agent-gate.md` — shared sub-agent kernel: digest contract, harness-agnostic selection, what the parent never delegates.","tags":["age","easy","cheese","paulnsorensen","agent-skills","ai-coding","claude-code","code-review","developer-tools"],"capabilities":["skill","source-paulnsorensen","skill-age","topic-agent-skills","topic-ai-coding","topic-claude-code","topic-code-review","topic-developer-tools"],"categories":["easy-cheese"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/paulnsorensen/easy-cheese/age","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add paulnsorensen/easy-cheese","source_repo":"https://github.com/paulnsorensen/easy-cheese","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 7 github stars · SKILL.md body (13,853 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:13:40.140Z","embedding":null,"createdAt":"2026-05-18T13:21:07.798Z","updatedAt":"2026-05-18T19:13:40.140Z","lastSeenAt":"2026-05-18T19:13:40.140Z","tsv":"'-1':1942 '-2':1909 '-240':1070 '-50':1053 '-60':1074 '/../shared/handoff-gate.md':1214,1215 '/age':25,52,101,105,209,227,836,1352,1386,1700,2010 '/cheese':301,1025 '/cheese-factory':1696 '/cheez-read':617 '/cheez-search':616,775 '/cheez-search/skill.md':776 '/cook':165,253,298 '/cure':93,193,216,237,315,517,589,590,1179,1334,1360,1408,1436,1488,1504,1583,1879,1978,1992,2003,2080 '/cure/references/selection.md':1228,1284 '/precedent':475 '/press':66 '/time-of-use':447 '/ultracook':265,280,1023,1545,1546 '1':478,1221,1285,1760 '108':1062 '15':875 '2':488,1238 '200':1069 '25':887 '3':529,663,1286,1325 '4':540,1416 '42':1052 '5':550,890,1287 '55':1073 '6':561 'abstract':385 'accept':99,376,1274 'access':524 'accord':830 'across':802 'actual':594 'age':1,200,202,204,303,512,572,597,629,1043,1155,1165,1548,1642,1649,1967 'agent':833,848,935,986,994,1556,1592,1694,1709,1747,1765,1826,1830,1884,1912,2115 'agnost':991,2121 'agre':2031 'ai':398 'all-high':1288,1313 'allow':1759 'alongsid':1396 'alreadi':1475,1939 'alway':1392 'anchor':2077 'anyway':1655 'api':367 'appli':86,96,601,1382,1390,1431,1965,2085 'applic':596,1988 'approv':79 'architectur':690,701 'artifact':1042 'ask':148,578,1239 'assert':409 'auth':351 'auto':104,106,156,166,194,210,217,228,254,600,1389,1427,1430,1449,1457,1460,1465,1505,1534,1584,1964,2001 'auto-appli':599,1388,1429,1963 'autonom':161 'autonomous-mod':160 'awar':730 'back':74,1267 'base':144 'beat':782,798 'behaviour':342 'beyond':646 'blast':929 'blast-radius':928 'bloat':438 'block':820,1111 'boot':268 'boundari':330,360 'branch':18,145 'bridg':709,925 'bridge-nod':924 'broad':455 'broken':341 'bug':32 'build':748 'bypass':1996 'call':108,126,747 'caller':626,636,905 'callers/imports':495 'cannot':523,1650 'cap':186,1149,1477,1631,2017 'carri':2066 'case':348 'certain':1076,2055 'chain':198,1028,1128,1528,1535,1560,1566,1607,1638,1679,1866,1889 'chang':168,684 'check':36,415,446,451,734 'chees':1718,1788 'cheese-factory-curd':1717,1787 'cheese/age':520,555,961,1012,1157,1355,1569 'cheese/press':112,497 'cheez':614,632,641,647 'cheez-search':631,640 'citat':946 'cite':1375,2022 'claud':1757 'clean':1421,1536 'cli':1345 'code':12,50,393,397,607,672,697,740,779,812,878,913,1758 'code-review-graph':671,696,739,912 'command':722,2025 'complet':224,1100,1476 'complex':378,1067 'compon':428 'comprehens':103,861 'concept':805 'concurr':434 'confid':716,829,1075,2053,2091,2109 'confirm':1373,1411 'conflict':733 'consum':1940 'context':118,261,271,670,677,718,834,845,858,882,1342,1349,1368,1553,1648,1724,1738,1823,1831 'continu':1026 'contract':243,793,1662,2118 'convers':245 'cook':1163 'copi':403 'copy-paste-with-vari':402 'correct':339,1050 'count':178,1514,1651 'criteria':377 'cross':363,909,1006 'cross-cut':1005 'cross-slic':362 'cultur':1161 'curat':668 'curd':1697,1720,1790,1793,1916 'cure':176,184,201,203,221,584,1040,1090,1115,1130,1147,1166,1247,1472,1512,1610,1629,1653,1975 'cure-pass':175,1511 'current':122,135 'cut':1007 'data':728 'dead':396 'default':132,155,1445 'degrad':1687,1839,1855,1892 'deleg':2127 'delta':659 'dep':639,687,918 'depend':421,906 'depth':1755,1943 'deslop':394,1071 'detail':1268 'detect':683,1701,1773 'diff':16,59,124,137,481,491,657,661,695,871,969,2024,2034 'differ':1861 'digest':938,980,2117 'dimens':334,335,459,476,532,533,955,1733,1744,1810,2044,2047,2097 'direct':88,528,1229,1868,2084 'disciplin':2088,2105 'disk':1173 'dispatch':1220,1333,1977 'diverg':807 'document':154 'done':1041,1134,1622,1667 'drift':371 'duplic':400 'e.g':1695 'earli':1670 'early-stop':1669 'edg':347 'edit':1958 'effici':429 'either':1998 'emb':754 'emit':1393,2061 'empti':1330,1407,1442,1448,1985,2046 'encapsul':358 'enforc':189,1633,2004,2011 'entri':1684 'equival':1311,1322,1723,1767 'error':417 'especi':859 'even':1490 'everi':256,531,1809 'evid':73,490,824,850,1104,2021 'evidence-back':72 'exceed':855,1920 'execut':1860 'exist':414,424,499,1125,1207,1310,1378,1502,1620 'exit':1420 'expand':1398 'expans':908 'explain':1950 'explicit':1439,1982 'factori':1719,1789 'fail':1927 'failur':344 'fallback':606,656 'fan':1850 'fan-out':1849 'field':1406,1645 'file':493,549,876,1960,2023 'fill':2042 'final':231,978,1483 'find':31,97,506,536,542,582,1049,1066,1088,1124,1141,1198,1234,1245,1271,1300,1309,1492,1501,1524,1619,1842,1973,2040,2065 'fine':2036 'fire':306,323 'first':738 'fix':87,90,595,602,1273,1295,1391,1432,1637,1966,2078 'flag':163,296,1346 'floor':1454,2008 'flow':477 'follow':1204 'follow-up':1203 'forc':1894 'fork':838,1816 'forward':313,1867 'frame':692,931 'free':1277 'free-text':1276 'fresh':270,735,792,1552,1647 'fresh-context':1551,1646 'fromageri':1792 'fromagerie-curd':1791 'full':197,791 'function':383 'gap':947 'gate':295,308,321,568,576,835,1189,1212,1243,1469,1827,1832,1971,1989,1999 'gather':489,851 'generat':880 'get':675,679,700,704,708 'gh':719 'git':473,660,721 'git-histori':472 'github/pr':717 'go':611,1184 'goe':770 'grade':958,973 'graph':627,674,699,742,751,755,766,781,907,915 'group':541,1235 'guess':1605 'halt':1038,1102 'hand':89,562 'handoff':170,172,318,567,570,1017,1159,1211,1242,1348,1468,1573,1844 'har':786,990,1770,1797,1922,2120 'hard':289,299,302,312,1335 'harness-agnost':989,2119 'harness-specif':1796 'hash':2076 'hash-anchor':2075 'helper':426 'high':340,350,359,370,545,942,1047,1290,1298,1307,1315 'high-sign':941 'high-stak':1046,1297,1306 'histori':474 'honest':1112,1661,1933 'honour':1562,1749,1862 'host':1751 'hot':436 'hot-path':435 'hotspot':691,923 'hub':705 'id':1359,1376,1395 'ident':1847 'identifi':479 'immedi':1332 'impact':667,680 'in-sess':240 'includ':503 'increment':190,1509 'inject':352 'inlin':1086,1230,1686,1734,1813,1838,1854,1891 'inline-degrad':1685,1837,1853,1890 'input':98,357 'insid':1588,1914,1991 'inspect':658 'instead':1739 'intent':469 'intern':179,365,1859 'invent':2020 'invoc':211 'invok':236,263,278,1435,1463,1487,1503,1543,1582,1689,1715,1777,1782,1878 'invoked-from':1714,1781 'issu':35,487 'item':516 'json':2072 'k':891 'kb':888 'keep':2052 'kernel':2116 'kind':635 'know':1080,2059 'larg':694 'larger':884 'later':1321 'layer':804 'lead':1248 'leak':361,453 'least':1118,1304,1613 'leav':1317,1404 'length':1639 'level':1761,1908,1941 'like':22,853,1786 'limit':1756,1925 'line':902,904,945,1533,1725,1784 'line-by-lin':901 'list':948 'live':996 'll':759 'local':720 'locat':2067 'lock':1339 'logic':401 'long':382 'look':42,337,1953 'loop':1385 'manual':688,732 'manufactur':2039 'markdown':1035,2083 'marker':1721,1799,1897,1929 'md':113,498,521,556,962,1013,1158,1356,1570 'mechan':1774 'medium':379,395,410,419,430,546,1064,1121,1138,1498,1507,1521,1586,1616 'medium-or-abov':1120,1137,1497,1520,1615 'medium-stak':1063 'memori':246,275,287,452,1194 'merg':30,64 'merge/conflict':729 'mergiraf':731 'meta':1181 'meta-quest':1180 'metacognit':294 'metacognitive-g':293 'minimum':1016 'mismatch':814 'miss':433,815 'mode':162,1458,1461,1688,1807,1856 'mold':1162 'multipl':910 'n':1294 'name':408,808 'natur':1674 'need':654,921 'neither':139 'nest':381,1754,1766,1924 'nesting-depth':1753 'never':585,598,1387,1428,1434,2060,2126 'next':226,1039,1081,1114,1133,1260,1594,1609,1621,1644,1666 'nih':418 'nine':954,1732 'nine-dimens':953 'no-chain':1564 'no-chain-forward':1864 'no-op':439 'no-shared-memori':284 'node':706,710,763,926 'non':1329,1441,1984 'non-empti':1328,1440,1983 'none':1092,1292,1324,1418,1624 'note':714,1537,2030 'null/empty':346 'number':1224 'numer':2063 'observ':75,1598 'offer':1269 'ok':1037,1096 'omit':470,538 'one':1119,1231,1305,1532,1614 'one-lin':1531 'op':441 'opt':1904 'opt-out':1903 'option':816,1250 'orchestr':1664,1801,1886 'order':345 'orient':939,1045 'otherwis':1494 'outcom':2051 'output':895,919,1009,1840,2087,2104 'outsid':1426 'outsourc':971,976 'over':454 'overrid':1567 'overview':702 'own':95,573,592,643,951,1380,1558,1887,1968 'paragraph':940 'paramet':388 'parent':857,897,950,983,1711,1937,2125 'parent-vs-sub-ag':982 'pars':355,1032 'pass':177,185,218,222,249,311,1131,1148,1473,1513,1630,1654,1712,1802,2016 'past':404 'path':20,62,437,560,944,1425,1541 'path/to/file.ts':1051 'path/to/handler.ts':1061 'path/to/old.ts':1072 'path/to/util.ts':1068 'payload':2079 'per':458,1227,1233,1743,2096 'per-dimens':457,1742,2095 'persist':768 'phase':257,267 'phrase':21 'pick':1087,1270 'pipelin':1160 'plain':1058 'posit':1608 'post':1218 'post-select':1217 'postur':2090,2107 'pr':17,41,727 'pre':450 'pre-check':449 'prefer':603,655 'present':115,1370,1805,1899 'press':117,505,526,1164 'print':558,1154 'prior':1652 'problem':44 'product':1959 'project':425 'prompt':1084,1365,1728,1778 'propag':159,292 'provid':726 'public':366 'qualit':2054 'queri':743 'question':1182 'radius':681,930 'rang':131 'rather':76,1402 'raw':894 're':1031,1372,1410 're-confirm':1371,1409 're-pars':1030 'reach':1152,1478 'read':456,500,518,610,841,900,1819,2081 'read-on':840,1818 'reason':2089,2106 'recommend':462,1301,2068,2100 'reduc':467,828 'redund':386 'refer':2093 'references/dimensions.md':465,2094 'references/sub-agent-gate.md':998,2111 'references/voice.md':2086,2102 'regardless':1415 'reinvent':420 'relev':484 'remain':1132,1142,1447,1493,1525 'renam':803 'render':1085,1222 'repli':1279 'report':232,513,527,553,963,1034,1044,1156,1170,1319,1354,1384,1414,1424,1484,1540,1843 'repositori':152 'requir':374 'residu':399 'resolv':111,1358,1394 'return':195,936,1517 'review':13,23,39,57,120,129,329,333,530,651,669,673,676,698,741,780,821,844,862,881,914,956,1099,1113,1812,1822,1945 'review-context':843,1821 'review-specif':650 'risk':665 'risk-scor':664 'rough':886 'rout':645 'row':1232 'rubric':460,2098 'rule':624,1008,1944 'run':51,255,588,746,1178,1601,1681,1704,1730,1808 'safe':28 'sanction':1995 'scan':1775 'scope':61,102,482,689 'score':666,2064 'search':608,633,642,762,797 'secret':353 'section':509 'secur':34,349,1060 'see':171,276,331,569,618,774,1456 'select':575,623,995,1083,1188,1219,1225,1263,1331,1338,1357,1364,1397,1443,1446,1455,1970,1986,2122 'semant':761,796 'session':242,773 'set':1593 'sever':957,972 'shallow':413 'shape':463,2101 'share':274,286,327,566,1210,2103,2112 'share-for-review':326 'ship':1167 'sidecar':2073 'signal':943,1672,1934 'silent':343,1919 'similar':1772 'simpli':537 'singl':999 'size':981 'skill':3,55,615,620,1351 'skill-age' 'skills/hard-cheese/skill.md':332 'skip':712,1174,1293,1361,1466,1835 'slice':364 'slop':38 'slug':1018,1574,1845,1873 'small':968 'sourc':1000,1350,1353,2029 'source-paulnsorensen' 'span':872 'spawn':863,966,1547,1741,1906 'spec':369,485,810 'spec-vs-cod':809 'specif':628,652,1798 'specul':384,1077,2056 'split':987 'spot':33 'sprawl':368,389 'stake':336,544,1048,1065,1237,1299,1308,1453,1506,1585,2007 'stake-floor':1452 'stale':771 'state':373,387,822 'status':1036,1095,1101 'stay':1990 'stdlib':422 'steel':800 'step':1082,1206 'still':591,1377 'stop':205,234,1094,1316,1419,1479,1526,1579,1671,1676,1875 'straight':1185 'string':391 'stringly-typ':390 'sub':508,832,847,934,985,993,1555,1591,1693,1708,1746,1764,1825,1829,1883,1911,2114 'sub-ag':831,846,933,992,1554,1590,1692,1707,1745,1763,1824,1828,1882,1910,2113 'sub-sect':507 'substitut':1450 'subsystem':911 'summaris':514 'suppli':141 'surfac':1481 'swallow':416 'switch':1806 'tabl':1226,1680 'taint':356 'term':1059 'termin':1675 'test':412,494 'text':100,1278 'thread':801 'three':208 'tilth':638,686,783,799,917 'time':444 'time-of-check':443 'toctou':448 'token':892 'tool':604,622,653,678,682,685,703,707,711,752,756,764,817 'top':1021,1577 'topic-agent-skills' 'topic-ai-coding' 'topic-claude-code' 'topic-code-review' 'topic-developer-tools' 'touch':492,877 'track':173,248 'true':869 'truth':1002 'two':183,215,220,1146,1471,1628,2015 'two-cure-pass':182,1145,1627 'two-pass':2014 'type':392 'ultracook':1635 'unavail':826,2028 'unavailable-sourc':2027 'unclear':147 'under':1262 'unifi':662 'unnecessari':380,431 'unreach':1106 'unresolv':515 'unsaf':354 'updat':442,750 'use':6,53,83,150,244,630,760,1208,1280,1665 'user':9,70,580,725,1191,1256 'user-provid':724 'usual':1870 'util':427 'vagu':407 'valid':1383,2050 'valu':1785 'variant':288 'variat':406 'verb':1253,1264,1282,1400 'verdict':80,979,1949 'via':564,1240,1341 'vocabulari':813,2092,2110 'vs':811,984 'want':10,71,1257 'way':1109 'weak':411 'when-code-review-graph-beats-tilth-if-your-harness-has-it':777 'whenev':68 'whether':586,1201 'within':1735 'without':235,1029,1437 'work':91,123,136,251,432,1193 'worker':1698,1917 'workflow':468 'would':898,1918 'write':229,551,1010,1568,1871,2071 'wrong':47,1056 'yaml':1347","prices":[{"id":"3c777aa2-4a14-493d-a1b3-3201db86a9eb","listingId":"a9d6947a-203e-413c-83c7-a6a95e3f8155","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"paulnsorensen","category":"easy-cheese","install_from":"skills.sh"},"createdAt":"2026-05-18T13:21:07.798Z"}],"sources":[{"listingId":"a9d6947a-203e-413c-83c7-a6a95e3f8155","source":"github","sourceId":"paulnsorensen/easy-cheese/age","sourceUrl":"https://github.com/paulnsorensen/easy-cheese/tree/main/skills/age","isPrimary":false,"firstSeenAt":"2026-05-18T13:21:07.798Z","lastSeenAt":"2026-05-18T19:13:40.140Z"}],"details":{"listingId":"a9d6947a-203e-413c-83c7-a6a95e3f8155","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"paulnsorensen","slug":"age","github":{"repo":"paulnsorensen/easy-cheese","stars":7,"topics":["agent-skills","ai-coding","claude-code","code-review","developer-tools"],"license":"mit","html_url":"https://github.com/paulnsorensen/easy-cheese","pushed_at":"2026-05-18T06:33:38Z","description":"Cheese your code 🧀 — high-quality results as easy as cheese. A portable, harness-agnostic Agent Skills toolkit.","skill_md_sha":"7ab82dcbd2058261cfe757c7ebcbd86dcf53e23d","skill_md_path":"skills/age/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/paulnsorensen/easy-cheese/tree/main/skills/age"},"layout":"multi","source":"github","category":"easy-cheese","frontmatter":{"name":"age","license":"MIT","description":"This skill should be used when the user wants a code review on a diff, PR, branch, or path — phrases like \"review this\", \"/age\", \"is this safe to merge\", \"find bugs\", \"spot security issues\", \"check for slop\", \"review my PR\", \"look for problems\", \"what's wrong with this code\". Runs nine orthogonal review dimensions (correctness, security, encapsulation, spec, complexity, deslop, assertions, NIH, efficiency) over the scoped diff and emits a stake-grouped findings report at `.cheese/age/<slug>.md`. Use even when the user only asks for one dimension — the report scopes itself. Findings only — no fixes; after the report lands, age renders the cure-selection table inline and asks which findings to cure (no \"should I run /cure?\" meta-question), then hands off to `/cure` with the selection locked in. Supports `--auto` (propagated from `/cook --auto`) for the autonomous chain into `/cure` (see `### Auto mode`). After `/press` (optional); before `/cure`."},"skills_sh_url":"https://skills.sh/paulnsorensen/easy-cheese/age"},"updatedAt":"2026-05-18T19:13:40.140Z"}}