{"id":"a4e0bac1-ce21-4a7a-8113-c81a901cc843","shortId":"845fnS","kind":"skill","title":"AI-UIconfig-skill","tagline":"Refactor an existing SwiftUI project into a governed UI architecture with render-state boundaries, tokenized styling, preview mocks, and a debug-only runtime tuning + writeback tool. Use when the user wants to improve UI maintainability, live-tune styles, or build a reusable UI d","description":"# AI-UIconfig-skill\n\nTurn an existing SwiftUI project into a UI system that is:\n\n- easier to debug\n- safer to refactor\n- previewable in isolation\n- adjustable at runtime in `DEBUG`\n- able to write approved style values back into source\n\nThis skill is optimized for SwiftUI apps on Apple platforms. It is especially useful when a project already has a meaningful UI but the UI code is mixed with runtime logic, styling is hardcoded across many views, and designers/developers need faster visual iteration.\n\n## Default Principle\n\nThe default mode is **preserve mode**:\n\n- Do **not** intentionally redesign the product.\n- Do **not** change behavior or visual output unless required to create safe structure.\n- Prefer equivalent refactors over aesthetic changes.\n- The goal is to improve **control**, not to impose a new design.\n\nOnly switch to **extend mode** when the user explicitly wants new UI to be brought into the same system.\n\n## Preserve Mode vs Extend Mode\n\n### Preserve Mode\n\nUse for existing UI that already ships or already has product intent.\n\nIn preserve mode:\n\n- keep existing visuals materially unchanged\n- keep existing interaction behavior materially unchanged\n- extract styles into governed tokens/metrics\n- split runtime orchestration from pure UI\n- add previews, mocks, tuning tools, and writeback\n\n### Extend Mode\n\nUse when the user has already added new UI or explicitly wants new UI added.\n\nIn extend mode:\n\n- this skill does **not** invent the design language for the new UI\n- it helps absorb the new UI into the same governed system\n- new stable style values should be folded into tokens/metrics\n- new view states should get preview mocks and render-state inputs\n- new governed values can then be exposed in the runtime tuning tool\n\n## What This Skill Produces\n\nWhen fully applied, this skill should leave the project with these building blocks:\n\n1. A clear UI directory structure.\n2. Runtime/composer views separated from pure UI views.\n3. Render-state types for pure UI inputs.\n4. Preview mocks and preview galleries for major states.\n5. A tokenized style layer.\n6. A debug-only runtime tuning tool for governed values.\n7. A save/export workspace for tuning snapshots.\n8. A writeback service that updates approved source constants.\n9. A saved-config list that can explicitly reload prior tuning snapshots.\n10. Optional debug-only surface controls that can trigger stable mock scenes and pin governed UI states open for tuning.\n\n## Non-Goals\n\nDo **not** treat this as a generic no-code UI designer.\n\nThis skill does not:\n\n- automatically understand arbitrary Swift source via AST scanning\n- expose every modifier or every constant as a runtime control\n- redesign product UI without explicit user direction\n- rewrite entire metrics files when only leaf values need updates\n- solve runtime logic bugs that are unrelated to UI structure\n- ship debug tuning affordances in release builds\n\n## Best-Fit Conditions\n\nThis skill is a strong fit when:\n\n- the app uses SwiftUI\n- the project has repeated layout/styling values\n- runtime logic and visual code are mixed together\n- the team wants faster visual iteration\n- the team benefits from Xcode Canvas previews\n- the same UI surfaces are revisited often\n\nIt is a weaker fit when:\n\n- the UI is highly experimental and not yet structurally stable\n- the app is primarily UIKit/AppKit without meaningful SwiftUI surfaces\n- the user only wants one small visual tweak\n\n## Execution Contract\n\nAlways follow this order unless the user explicitly narrows the scope.\n\n### 1. Inventory the UI\n\nIdentify:\n\n- major UI surfaces\n- major states per surface\n- current runtime/composer files\n- current pure UI files\n- current metrics/constants files\n- hardcoded style clusters worth tokenizing first\n\nOutput a concrete map of:\n\n- what should stay runtime-facing\n- what should become pure UI\n- what should become tokenized\n- what should get preview mocks first\n\n### 2. Establish UI Boundaries\n\nSplit code into:\n\n- runtime/composer/orchestration layer\n- pure UI layer\n- shared UI primitives\n- preview/mocks layer\n\nRules:\n\n- runtime/composer layer may read models, side effects, services, polling, bridges\n- pure UI layer should only consume render state and style tokens\n- preview layer must not trigger real services or side effects\n\n### 3. Introduce Render State\n\nFor each major surface or module, define render-state inputs that are:\n\n- UI-only\n- preview-safe\n- independent from `ObservableObject` internals where practical\n\nRules:\n\n- pure UI views should not depend directly on runtime models unless the user explicitly accepts that tradeoff\n- preview galleries should consume render-state mocks, not real module models\n\n### 4. Tokenize Stable Styling\n\nExtract style values into governed tokens/metrics.\n\nPrioritize:\n\n- spacing\n- padding\n- corner radius\n- opacity\n- semantic colors\n- animation durations\n- common surface dimensions\n- module chrome values\n\nDo **not** expose every value automatically.\n\nOnly govern values that are:\n\n- stable enough to matter\n- likely to be tuned more than once\n- meaningful across a component, surface, or module\n\n### 5. Build Preview Support\n\nCreate:\n\n- preview mocks\n- preview containers\n- preview galleries\n\nRequired preview goals:\n\n- cover the main states the user actually debugs\n- include every materially different visual state for the governed surface\n  - for example: `closed`, `peek`, and `expanded` when a shell uses those states\n- avoid real polling, bridges, media control, network calls, or system mutations\n- make the most important states easy to compare side by side\n\n### 6. Add Debug-Only Live Tuning\n\nAdd a debug-only tuning tool that:\n\n- edits the governed tokens/metrics at runtime\n- updates the active UI immediately\n- keeps a working copy separate from the saved baseline\n- can save/export the current working state\n- supports reverting the whole session to the saved baseline\n- supports reverting a single governed parameter without discarding other current edits\n- exposes a saved-config list so prior tuning snapshots can be reloaded explicitly\n- can trigger explicit mock presentation states for isolated UI debugging when live runtime data is inconvenient\n- can pin peek or expanded states open while tuning so shell surfaces do not auto-collapse mid-adjustment\n\nRules:\n\n- the tuning tool must be `DEBUG` only unless the user explicitly wants otherwise\n- release builds must not expose the editor\n- editor UI should be safe and inspectable, not magical\n- when practical, the tuning tool should inherit the host project's existing design language instead of introducing a generic inspector style\n- prefer reusing the project's own tokens, typography, color semantics, spacing scale, corner radii, and shared UI primitives for the editor chrome and controls when those inputs are stable enough\n- if the project already has an internal settings, debug, or utility-chrome pattern, follow that pattern first\n- fall back to a neutral debug presentation only when the project does not yet have a stable style language worth inheriting\n- debug mock scenes and pinning controls must be clearly framed as development aids, not product features\n- mock scenes should be backed by stable sample data routed through the same render boundaries as the real UI when practical\n- by default, app relaunch should return to the source-defined baseline unless the user explicitly wants auto-restore\n- saved configs should remain available as explicit snapshots the user can choose to reload for a new tuning session\n- the runtime token baseline must derive from the same source constants that writeback edits; do not keep a second divergent hardcoded default table\n\n### 7. Add Precise Writeback\n\nWriteback should:\n\n- save the current working snapshot externally\n- update only mapped leaf constants in source\n- preserve hand-written structure, comments, and derived values\n- avoid broad file rewrites when unnecessary\n- emit syntactically valid source literals for every supported value type\n- avoid replacement strategies that can corrupt source text through regex-template escaping or truncated literal serialization\n- preserve each source declaration's prefix and suffix and replace only the matched value span\n\nRules:\n\n- use explicit token-to-source mappings\n- do not perform destructive wide rewrites of style files\n- fail explicitly when a mapped constant cannot be matched exactly once\n- generated external snapshots should not automatically become app target inputs\n\n### 8. Validate\n\nAlways finish with:\n\n- compile/build verification\n- preview validation when feasible\n- a clear report of what is covered vs not covered\n\nIf interaction behavior is high risk, explicitly call out what still needs manual runtime regression.\n\n## Output Expectations\n\nWhen applying this skill, the final result should tell the user:\n\n- which surfaces were governed\n- which tokens were added\n- which views were split or extracted\n- which previews were added\n- whether a debug editor was added\n- whether writeback exists and what it can touch\n- what remains manual or not yet governed\n\n## Naming and Boundary Guidance\n\nPrefer consistent layers such as:\n\n- `UI/`\n- `UI/PreviewSupport`\n- `UI/<Surface>`\n- `UI/Modules/<Module>`\n- `UI/DesignTokens`\n\nType naming guidance:\n\n- `...RenderState` for UI-only inputs\n- `...PreviewMocks` for mock builders\n- `...Metrics` or `...Tokens` for governed values\n- `...Editor...` for debug tuning interfaces\n- `...WritebackService` for source update services\n\n## Localization Guidance for Tuning Tools\n\nIf the project includes a runtime token editor:\n\n- keep code-facing identifiers readable and stable\n- prefer leaving parameter names and module names aligned with source semantics\n- localize the **explanatory descriptions**, not the underlying code mapping, unless the user explicitly asks otherwise\n- prefer localizing tool chrome and explanatory help, while preserving code-facing token keys as-is\n- if the tool supports saved configs, keep snapshot names/code keys stable and human-auditable rather than translating them\n\nThis avoids polluting the code-facing layer while still making the tool understandable in the user's language.\n\n## Safety Checklist\n\nBefore finishing, verify these constraints:\n\n- existing UI was not intentionally redesigned without explicit approval\n- runtime logic is not accidentally triggered in previews\n- debug-only tools are not exposed in release\n- writeback does not overwrite unrelated code\n- tokenized values still resolve to the original visual baseline by default\n- relaunch behavior is explicit: source baseline by default, snapshot restore only when deliberately chosen\n- the project still builds\n\n## Maintenance Contract\n\nThis skill must stay aligned with behavior validated in real projects.\n\nWhen a project changes any governed UI workflow behavior, explicitly decide whether the skill contract also changed.\n\nExamples that usually require re-evaluating the skill:\n\n- render-state boundary changes\n- preview coverage rules\n- token scope changes\n- runtime editor behavior changes\n- save/load snapshot behavior changes\n- revert semantics changes\n- writeback targeting or path resolution changes\n- localization rules for the tuning tool\n- baseline/default-session behavior changes\n\nIf the change affects how the governed workflow is supposed to work, update the skill definition.\n\nIf the skill definition changes, sync it to the public `AI-UIconfig-skill` repository as part of the same maintenance cycle.\n\nPure project-specific bug fixes that do not change the reusable contract do not always require a skill update, but they must still be checked against this rule.\n\n## Adoption Checklist for New UI\n\nWhen a new UI surface is added later, fold it in using this order:\n\n1. Build the UI normally.\n2. Wait until the structure is stable enough to govern.\n3. Extract stable styles into tokens/metrics.\n4. Define render-state inputs.\n5. Add preview mocks and gallery states.\n6. Add selected governed values to the debug editor.\n7. Add writeback mapping only for stable leaf values.\n\n## Good Prompt Shapes\n\nThis skill works well with requests like:\n\n- \"Use AI-UIconfig-skill to refactor this SwiftUI surface into render-state and previewable UI.\"\n- \"Use AI-UIconfig-skill to tokenize the stable layout and spacing values for this module.\"\n- \"Use AI-UIconfig-skill to add a debug-only runtime editor for the governed UI tokens.\"\n- \"Use AI-UIconfig-skill in preserve mode. Keep the existing design, but make the UI easier to iterate on.\"\n- \"Use AI-UIconfig-skill to fold this new module into the existing token/preview/writeback system.\"\n\n## Bad Prompt Shapes\n\nThis skill is not the right primary tool for:\n\n- \"Invent a completely new visual design\"\n- \"Expose every number in the project as a slider\"\n- \"Rewrite the whole app architecture\"\n- \"Fix a network or persistence bug unrelated to UI structure\"\n\n## Working Style\n\nWhen using this skill:\n\n- preserve existing product intent first\n- extract structure before adding tooling\n- tokenize only stable values\n- keep previews deterministic\n- keep the editor understandable\n- keep writeback explicit and narrow\n- after workflow-related changes, re-evaluate whether the skill and public repo need to be updated\n- compile often","tags":["uiconfig","skill","voderment","agent-skills","ai-tools","codex-skill","design-tokens","developer-tooling","macos","prompt-engineering","swiftui","xcode"],"capabilities":["skill","source-voderment","skill-ai-uiconfig-skill","topic-agent-skills","topic-ai-tools","topic-codex-skill","topic-design-tokens","topic-developer-tooling","topic-macos","topic-prompt-engineering","topic-swiftui","topic-xcode"],"categories":["AI-UIconfig-skill"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/voderment/AI-UIconfig-skill","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add voderment/AI-UIconfig-skill","source_repo":"https://github.com/voderment/AI-UIconfig-skill","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 6 github stars · SKILL.md body (13,217 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:14:28.478Z","embedding":null,"createdAt":"2026-05-18T13:22:08.850Z","updatedAt":"2026-05-18T19:14:28.478Z","lastSeenAt":"2026-05-18T19:14:28.478Z","tsv":"'1':341,605,1795 '10':418 '2':347,659,1800 '3':355,708,1810 '4':364,767,1816 '5':373,822,1822 '6':378,888,1829 '7':389,1218,1838 '8':396,1332 '9':405 'abl':81 'absorb':282 'accept':752 'accident':1585 'across':124,816 'activ':911 'actual':842 'ad':256,264,1388,1398,1404,1787,1999 'add':241,889,895,1219,1823,1830,1839,1896 'adjust':76,998 'adopt':1776 'aesthet':164 'affect':1712 'afford':506 'ai':2,53,1736,1859,1876,1892,1910,1930 'ai-uiconfig-skil':1,52,1735,1858,1875,1891,1909,1929 'aid':1131 'align':1491,1639 'alreadi':107,209,212,255,1083 'also':1661 'alway':594,1334,1762 'anim':785 'app':96,522,576,1158,1329,1973 'appl':98 'appli':330,1371 'approv':84,402,1580 'arbitrari':460 'architectur':14,1974 'as-i':1524 'ask':1508 'ast':464 'audit':1541 'auto':994,1174 'auto-collaps':993 'auto-restor':1173 'automat':458,798,1327 'avail':1180 'avoid':866,1246,1262,1547 'back':87,1099,1139 'bad':1943 'baselin':922,937,1167,1198,1612,1620 'baseline/default-session':1706 'becom':646,651,1328 'behavior':150,227,1355,1616,1641,1654,1685,1689,1707 'benefit':547 'best':511 'best-fit':510 'block':340 'boundari':19,662,1149,1422,1675 'bridg':686,869 'broad':1247 'brought':192 'bug':496,1751,1980 'build':47,339,509,823,1014,1632,1796 'builder':1446 'call':873,1360 'cannot':1317 'canva':550 'chang':149,165,1649,1662,1676,1682,1686,1690,1693,1699,1708,1711,1729,1756,2021 'check':1772 'checklist':1566,1777 'choos':1187 'chosen':1628 'chrome':791,1071,1092,1513 'clear':343,1127,1344 'close':856 'cluster':629 'code':115,451,535,664,1478,1502,1520,1551,1603 'code-fac':1477,1519,1550 'collaps':995 'color':784,1058 'comment':1242 'common':787 'compar':884 'compil':2035 'compile/build':1337 'complet':1957 'compon':818 'concret':635 'condit':513 'config':409,953,1177,1532 'consist':1425 'constant':404,471,1205,1234,1316 'constraint':1571 'consum':692,758 'contain':830 'contract':593,1634,1660,1759 'control':171,424,475,871,1073,1124 'copi':917 'corner':780,1062 'corrupt':1267 'cover':836,1349,1352 'coverag':1678 'creat':157,826 'current':617,620,624,926,947,1226 'cycl':1746 'd':51 'data':976,1143 'debug':27,69,80,381,421,504,843,891,898,972,1005,1088,1103,1119,1401,1455,1590,1836,1899 'debug-on':26,380,420,890,897,1589,1898 'decid':1656 'declar':1282 'default':133,136,1157,1216,1614,1622 'defin':718,1166,1817 'definit':1724,1728 'deliber':1627 'depend':743 'deriv':1200,1244 'descript':1498 'design':177,274,453,1041,1919,1960 'designers/developers':128 'destruct':1305 'determinist':2007 'develop':1130 'differ':847 'dimens':789 'direct':482,744 'directori':345 'discard':945 'diverg':1214 'durat':786 'easi':882 'easier':67,1924 'edit':903,948,1208 'editor':1019,1020,1070,1402,1453,1475,1684,1837,1902,2010 'effect':683,707 'emit':1252 'enough':805,1079,1807 'entir':484 'equival':161 'escap':1274 'especi':102 'establish':660 'evalu':1669,2024 'everi':467,470,796,845,1258,1962 'exact':1320 'exampl':855,1663 'execut':592 'exist':7,58,206,220,225,1040,1407,1572,1918,1940,1992 'expand':859,983 'expect':1369 'experiment':569 'explanatori':1497,1515 'explicit':186,260,413,480,601,751,962,965,1010,1171,1182,1296,1312,1359,1507,1579,1618,1655,2014 'expos':318,466,795,949,1017,1595,1961 'extend':181,200,248,266 'extern':1229,1323 'extract':230,771,1394,1811,1996 'face':643,1479,1521,1552 'fail':1311 'fall':1098 'faster':130,542 'feasibl':1342 'featur':1134 'file':486,619,623,626,1248,1310 'final':1375 'finish':1335,1568 'first':632,658,1097,1995 'fit':512,519,563 'fix':1752,1975 'fold':297,1789,1934 'follow':595,1094 'frame':1128 'fulli':329 'galleri':369,756,832,1827 'generat':1322 'generic':448,1047 'get':304,655 'goal':167,441,835 'good':1847 'govern':12,233,289,313,387,433,775,800,852,905,942,1384,1419,1451,1651,1715,1809,1832,1905 'guidanc':1423,1436,1464 'hand':1239 'hand-written':1238 'hardcod':123,627,1215 'help':281,1516 'high':568,1357 'host':1037 'human':1540 'human-audit':1539 'identifi':609,1480 'immedi':913 'import':880 'impos':174 'improv':39,170 'includ':844,1471 'inconveni':978 'independ':731 'inherit':1035,1118 'input':311,363,722,1076,1331,1442,1821 'inspect':1026 'inspector':1048 'instead':1043 'intent':143,215,1576,1994 'interact':226,1354 'interfac':1457 'intern':734,1086 'introduc':709,1045 'invent':272,1955 'inventori':606 'isol':75,970 'iter':132,544,1926 'keep':219,224,914,1211,1476,1533,1916,2005,2008,2012 'key':1523,1536 'languag':275,1042,1116,1564 'later':1788 'layer':377,667,670,675,678,689,699,1426,1553 'layout':1883 'layout/styling':529 'leaf':489,1233,1845 'leav':334,1485 'like':808,1856 'list':410,954 'liter':1256,1277 'live':43,893,974 'live-tun':42 'local':1463,1495,1511,1700 'logic':120,495,532,1582 'magic':1028 'main':838 'maintain':41 'mainten':1633,1745 'major':371,610,613,714 'make':877,1556,1921 'mani':125 'manual':1365,1415 'map':636,1232,1301,1315,1503,1841 'match':1291,1319 'materi':222,228,846 'matter':807 'may':679 'meaning':110,581,815 'media':870 'metric':485,1447 'metrics/constants':625 'mid':997 'mid-adjust':996 'mix':117,537 'mock':23,243,306,366,429,657,762,828,966,1120,1135,1445,1825 'mode':137,140,182,198,201,203,218,249,267,1915 'model':681,747,766 'modifi':468 'modul':717,765,790,821,1489,1889,1937 'must':700,1003,1015,1125,1199,1637,1769 'mutat':876 'name':1420,1435,1487,1490 'names/code':1535 'narrow':602,2016 'need':129,491,1364,2031 'network':872,1977 'neutral':1102 'new':176,188,257,262,278,284,291,300,312,1192,1779,1783,1936,1958 'no-cod':449 'non':440 'non-goal':439 'normal':1799 'number':1963 'observableobject':733 'often':558,2036 'one':588 'opac':782 'open':436,985 'optim':93 'option':419 'orchestr':237 'order':597,1794 'origin':1610 'otherwis':1012,1509 'output':153,633,1368 'overwrit':1601 'pad':779 'paramet':943,1486 'part':1741 'path':1697 'pattern':1093,1096 'peek':857,981 'per':615 'perform':1304 'persist':1979 'pin':432,980,1123 'platform':99 'poll':685,868 'pollut':1548 'practic':736,1030,1155 'precis':1220 'prefer':160,1050,1424,1484,1510 'prefix':1284 'present':967,1104 'preserv':139,197,202,217,1237,1279,1518,1914,1991 'preview':22,73,242,305,365,368,551,656,698,729,755,824,827,829,831,834,1339,1396,1588,1677,1824,1872,2006 'preview-saf':728 'preview/mocks':674 'previewmock':1443 'primari':1952 'primarili':578 'primit':673,1067 'principl':134 'prior':415,956 'priorit':777 'produc':327 'product':146,214,477,1133,1993 'project':9,60,106,336,526,1038,1053,1082,1108,1470,1630,1645,1648,1749,1966 'project-specif':1748 'prompt':1848,1944 'public':1734,2029 'pure':239,352,361,621,647,668,687,738,1747 'radii':1063 'radius':781 'rather':1542 're':1668,2023 're-evalu':1667,2022 'read':680 'readabl':1481 'real':703,764,867,1152,1644 'redesign':144,476,1577 'refactor':5,72,162,1863 'regex':1272 'regex-templ':1271 'regress':1367 'relat':2020 'relaunch':1159,1615 'releas':508,1013,1597 'reload':414,961,1189 'remain':1179,1414 'render':17,309,357,693,710,720,760,1148,1673,1819,1869 'render-st':16,308,356,719,759,1672,1818,1868 'renderst':1437 'repeat':528 'replac':1263,1288 'repo':2030 'report':1345 'repositori':1739 'request':1855 'requir':155,833,1666,1763 'resolut':1698 'resolv':1607 'restor':1175,1624 'result':1376 'return':1161 'reus':1051 'reusabl':49,1758 'revert':930,939,1691 'revisit':557 'rewrit':483,1249,1307,1970 'right':1951 'risk':1358 'rout':1144 'rule':676,737,999,1294,1679,1701,1775 'runtim':29,78,119,236,321,383,474,494,531,642,746,908,975,1196,1366,1473,1581,1683,1901 'runtime-fac':641 'runtime/composer':348,618,677 'runtime/composer/orchestration':666 'safe':158,730,1024 'safer':70 'safeti':1565 'sampl':1142 'save':408,921,936,952,1176,1224,1531 'save/export':391,924 'save/load':1687 'saved-config':407,951 'scale':1061 'scan':465 'scene':430,1121,1136 'scope':604,1681 'second':1213 'select':1831 'semant':783,1059,1494,1692 'separ':350,918 'serial':1278 'servic':399,684,704,1462 'session':933,1194 'set':1087 'shape':1849,1945 'share':671,1065 'shell':862,989 'ship':210,503 'side':682,706,885,887 'singl':941 'skill':4,55,91,269,326,332,455,515,1373,1636,1659,1671,1723,1727,1738,1765,1851,1861,1878,1894,1912,1932,1947,1990,2027 'skill-ai-uiconfig-skill' 'slider':1969 'small':589 'snapshot':395,417,958,1183,1228,1324,1534,1623,1688 'solv':493 'sourc':89,403,462,1165,1204,1236,1255,1268,1281,1300,1460,1493,1619 'source-defin':1164 'source-voderment' 'space':778,1060,1885 'span':1293 'specif':1750 'split':235,663,1392 'stabl':292,428,574,769,804,1078,1114,1141,1483,1537,1806,1812,1844,1882,2003 'state':18,302,310,358,372,435,614,694,711,721,761,839,849,865,881,928,968,984,1674,1820,1828,1870 'stay':640,1638 'still':1363,1555,1606,1631,1770 'strategi':1264 'strong':518 'structur':159,346,502,573,1241,1804,1984,1997 'style':21,45,85,121,231,293,376,628,696,770,772,1049,1115,1309,1813,1986 'suffix':1286 'support':825,929,938,1259,1530 'suppos':1718 'surfac':423,555,583,612,616,715,788,819,853,990,1382,1785,1866 'swift':461 'swiftui':8,59,95,524,582,1865 'switch':179 'sync':1730 'syntact':1253 'system':64,196,290,875,1942 'tabl':1217 'target':1330,1695 'team':540,546 'tell':1378 'templat':1273 'text':1269 'togeth':538 'token':20,375,631,652,697,768,1056,1197,1298,1386,1449,1474,1522,1604,1680,1880,1907,2001 'token-to-sourc':1297 'token/preview/writeback':1941 'tokens/metrics':234,299,776,906,1815 'tool':32,245,323,385,901,1002,1033,1467,1512,1529,1558,1592,1705,1953,2000 'topic-agent-skills' 'topic-ai-tools' 'topic-codex-skill' 'topic-design-tokens' 'topic-developer-tooling' 'topic-macos' 'topic-prompt-engineering' 'topic-swiftui' 'topic-xcode' 'touch':1412 'tradeoff':754 'translat':1544 'treat':444 'trigger':427,702,964,1586 'truncat':1276 'tune':30,44,244,322,384,394,416,438,505,811,894,900,957,987,1001,1032,1193,1456,1466,1704 'turn':56 'tweak':591 'type':359,1261,1434 'typographi':1057 'ui':13,40,50,63,111,114,189,207,240,258,263,279,285,344,353,362,434,452,478,501,554,566,608,611,622,648,661,669,672,688,726,739,912,971,1021,1066,1153,1429,1431,1440,1573,1652,1780,1784,1798,1873,1906,1923,1983 'ui-on':725,1439 'ui/designtokens':1433 'ui/modules':1432 'ui/previewsupport':1430 'uiconfig':3,54,1737,1860,1877,1893,1911,1931 'uikit/appkit':579 'unchang':223,229 'under':1501 'understand':459,1559,2011 'unless':154,598,748,1007,1168,1504 'unnecessari':1251 'unrel':499,1602,1981 'updat':401,492,909,1230,1461,1721,1766,2034 'use':33,103,204,250,523,863,1295,1792,1857,1874,1890,1908,1928,1988 'user':36,185,253,481,585,600,750,841,1009,1170,1185,1380,1506,1562 'usual':1665 'util':1091 'utility-chrom':1090 'valid':1254,1333,1340,1642 'valu':86,294,314,388,490,530,773,792,797,801,1245,1260,1292,1452,1605,1833,1846,1886,2004 'verif':1338 'verifi':1569 'via':463 'view':126,301,349,354,740,1390 'visual':131,152,221,534,543,590,848,1611,1959 'vs':199,1350 'wait':1801 'want':37,187,261,541,587,1011,1172 'weaker':562 'well':1853 'whether':1399,1405,1657,2025 'whole':932,1972 'wide':1306 'without':479,580,944,1578 'work':916,927,1227,1720,1852,1985 'workflow':1653,1716,2019 'workflow-rel':2018 'workspac':392 'worth':630,1117 'write':83 'writeback':31,247,398,1207,1221,1222,1406,1598,1694,1840,2013 'writebackservic':1458 'written':1240 'xcode':549 'yet':572,1111,1418","prices":[{"id":"753017af-7508-4044-9d61-0a4117e03dfb","listingId":"a4e0bac1-ce21-4a7a-8113-c81a901cc843","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"voderment","category":"AI-UIconfig-skill","install_from":"skills.sh"},"createdAt":"2026-05-18T13:22:08.850Z"}],"sources":[{"listingId":"a4e0bac1-ce21-4a7a-8113-c81a901cc843","source":"github","sourceId":"voderment/AI-UIconfig-skill","sourceUrl":"https://github.com/voderment/AI-UIconfig-skill","isPrimary":false,"firstSeenAt":"2026-05-18T13:22:08.850Z","lastSeenAt":"2026-05-18T19:14:28.478Z"}],"details":{"listingId":"a4e0bac1-ce21-4a7a-8113-c81a901cc843","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"voderment","slug":"AI-UIconfig-skill","github":{"repo":"voderment/AI-UIconfig-skill","stars":6,"topics":["agent-skills","ai-tools","codex-skill","design-tokens","developer-tooling","macos","prompt-engineering","swiftui","xcode"],"license":"mit","html_url":"https://github.com/voderment/AI-UIconfig-skill","pushed_at":"2026-04-22T08:11:00Z","description":"A reusable skill for turning SwiftUI codebases into a governed, previewable, tokenized UI workflow.","skill_md_sha":"e51a1fac5c0a3190506777a07a089d8eb82b12ac","skill_md_path":"SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/voderment/AI-UIconfig-skill"},"layout":"root","source":"github","category":"AI-UIconfig-skill","frontmatter":{"name":"AI-UIconfig-skill","description":"Refactor an existing SwiftUI project into a governed UI architecture with render-state boundaries, tokenized styling, preview mocks, and a debug-only runtime tuning + writeback tool. Use when the user wants to improve UI maintainability, live-tune styles, or build a reusable UI debugging workflow without changing the product's visual intent."},"skills_sh_url":"https://skills.sh/voderment/AI-UIconfig-skill"},"updatedAt":"2026-05-18T19:14:28.478Z"}}