{"id":"69f4e21c-4417-4813-86c6-19fb45cbefab","shortId":"k3yWCq","kind":"skill","title":"three-layer-extension-sync","tagline":"Model extension lifecycle as intent, materialization, and active runtime layers, then sync each layer with dedicated transitions.","description":"# SKILL: Three-Layer Extension Sync\n**Domain:** plugin-installation\n**Trigger:** Apply when extensions exist simultaneously as declared settings, on-disk installs, and live runtime components, and those layers must stay coherent.\n**Source Pattern:** Distilled from reviewed plugin, extension, and MCP synchronization implementations.\n\n## Core Method\nSplit extension management into three layers: intent in configuration, materialization on disk, and active runtime state. Use the diff/reconcile phase to move layer 1 toward layer 2 without touching UI state, then use a separate refresh phase to rebuild layer 3 from the materialized result. This keeps each transition explicit, makes fallback rules clear, and prevents partial reload logic from smearing together configuration, installation, and activation responsibilities.\n\n## Key Rules\n- Give each layer a single owner: configuration declares desired state, reconciliation mutates on-disk artifacts, and runtime refresh repopulates active commands, agents, hooks, and servers.\n- Compare intent to materialization before doing work so you know whether to install, update, skip, or defer.\n- Treat reconciliation as additive and side-effect-bounded; it should not directly mutate live AppState beyond progress or recovery flags.\n- Refresh the active layer from cleared caches after materialization changes so runtime loaders rebuild from the new disk state instead of patching stale objects in place.\n- Make escalation explicit: urgent changes can auto-refresh, while less urgent ones can stop at a needs refresh contract.\n\n## Example Application\nIn a desktop agent with third-party extensions, treat settings as the declared catalog, a local extensions directory as the materialized layer, and the in-memory command registry as the active layer. Reconcile settings to disk first, then run a distinct reload step that repopulates the active registry from the updated install set.\n\n## Anti-Patterns (What NOT to do)\n- Do not let a single function both clone marketplaces and directly mutate live component registries; that blurs error handling and recovery.\n- Do not compare runtime state back to settings as a proxy for disk state; materialization needs its own truth source.\n- Do not patch active components incrementally against stale caches when the on-disk layer changed underneath them.","tags":["three","layer","extension","sync","cskill","agents","ychampion","agent-skills","ai-agents","cli","coding-agents","context-engineering"],"capabilities":["skill","source-ychampion","skill-three-layer-extension-sync","topic-agent-skills","topic-ai-agents","topic-cli","topic-coding-agents","topic-context-engineering","topic-developer-tools","topic-mcp","topic-multi-agent","topic-terminal-ui"],"categories":["cskill-agents"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/ychampion/cskill-agents/three-layer-extension-sync","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add ychampion/cskill-agents","source_repo":"https://github.com/ychampion/cskill-agents","install_from":"skills.sh"}},"qualityScore":"0.467","qualityRationale":"deterministic score 0.47 from registry signals: · indexed on github topic:agent-skills · 34 github stars · SKILL.md body (2,342 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-04-22T00:56:57.536Z","embedding":null,"createdAt":"2026-04-18T22:21:28.489Z","updatedAt":"2026-04-22T00:56:57.536Z","lastSeenAt":"2026-04-22T00:56:57.536Z","tsv":"'1':92 '2':95 '3':109 'activ':13,82,134,158,204,282,298,356 'addit':184 'agent':160,253 'anti':306 'anti-pattern':305 'appli':34 'applic':249 'appstat':196 'artifact':153 'auto':235 'auto-refresh':234 'back':338 'beyond':197 'blur':328 'bound':189 'cach':208,361 'catalog':264 'chang':211,232,368 'clear':122,207 'clone':319 'coher':55 'command':159,278 'compar':164,335 'compon':49,325,357 'configur':77,131,144 'contract':247 'core':67 'declar':40,145,263 'dedic':21 'defer':180 'desir':146 'desktop':252 'diff/reconcile':87 'direct':193,322 'directori':268 'disk':44,80,152,219,287,345,366 'distil':58 'distinct':292 'domain':29 'effect':188 'error':329 'escal':229 'exampl':248 'exist':37 'explicit':118,230 'extens':4,7,27,36,62,70,258,267 'fallback':120 'first':288 'flag':201 'function':317 'give':138 'handl':330 'hook':161 'implement':66 'in-memori':275 'increment':358 'instal':32,45,132,176,303 'instead':221 'intent':10,75,165 'keep':115 'key':136 'know':173 'layer':3,15,19,26,52,74,91,94,108,140,205,272,283,367 'less':238 'let':314 'lifecycl':8 'live':47,195,324 'loader':214 'local':266 'logic':127 'make':119,228 'manag':71 'marketplac':320 'materi':11,78,112,167,210,271,347 'mcp':64 'memori':277 'method':68 'model':6 'move':90 'must':53 'mutat':149,194,323 'need':245,348 'new':218 'object':225 'on-disk':42,150,364 'one':240 'owner':143 'parti':257 'partial':125 'patch':223,355 'pattern':57,307 'phase':88,105 'place':227 'plugin':31,61 'plugin-instal':30 'prevent':124 'progress':198 'proxi':343 'rebuild':107,215 'reconcil':284 'reconcili':148,182 'recoveri':200,332 'refresh':104,156,202,236,246 'registri':279,299,326 'reload':126,293 'repopul':157,296 'respons':135 'result':113 'review':60 'rule':121,137 'run':290 'runtim':14,48,83,155,213,336 'separ':103 'server':163 'set':41,260,285,304,340 'side':187 'side-effect-bound':186 'simultan':38 'singl':142,316 'skill':23 'skill-three-layer-extension-sync' 'skip':178 'smear':129 'sourc':56,352 'source-ychampion' 'split':69 'stale':224,360 'state':84,99,147,220,337,346 'stay':54 'step':294 'stop':242 'sync':5,17,28 'synchron':65 'third':256 'third-parti':255 'three':2,25,73 'three-lay':24 'three-layer-extension-sync':1 'togeth':130 'topic-agent-skills' 'topic-ai-agents' 'topic-cli' 'topic-coding-agents' 'topic-context-engineering' 'topic-developer-tools' 'topic-mcp' 'topic-multi-agent' 'topic-terminal-ui' 'touch':97 'toward':93 'transit':22,117 'treat':181,259 'trigger':33 'truth':351 'ui':98 'underneath':369 'updat':177,302 'urgent':231,239 'use':85,101 'whether':174 'without':96 'work':170","prices":[{"id":"9fe36ccb-30bb-4ec3-85da-5576b7ac917c","listingId":"69f4e21c-4417-4813-86c6-19fb45cbefab","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"ychampion","category":"cskill-agents","install_from":"skills.sh"},"createdAt":"2026-04-18T22:21:28.489Z"}],"sources":[{"listingId":"69f4e21c-4417-4813-86c6-19fb45cbefab","source":"github","sourceId":"ychampion/cskill-agents/three-layer-extension-sync","sourceUrl":"https://github.com/ychampion/cskill-agents/tree/main/skills/three-layer-extension-sync","isPrimary":false,"firstSeenAt":"2026-04-18T22:21:28.489Z","lastSeenAt":"2026-04-22T00:56:57.536Z"}],"details":{"listingId":"69f4e21c-4417-4813-86c6-19fb45cbefab","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"ychampion","slug":"three-layer-extension-sync","github":{"repo":"ychampion/cskill-agents","stars":34,"topics":["agent-skills","ai-agents","cli","coding-agents","context-engineering","developer-tools","mcp","multi-agent","terminal-ui"],"license":"mit","html_url":"https://github.com/ychampion/cskill-agents","pushed_at":"2026-04-04T14:13:23Z","description":"Agent skills for coding CLIs, multi-agent runtimes, context engines, MCP extensions, and terminal tooling. Instead of using claude code's source code, give your agent skills to create your own!","skill_md_sha":"c7ea59b9bd195647923e3ea99083d78209157995","skill_md_path":"skills/three-layer-extension-sync/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/ychampion/cskill-agents/tree/main/skills/three-layer-extension-sync"},"layout":"multi","source":"github","category":"cskill-agents","frontmatter":{"name":"three-layer-extension-sync","description":"Model extension lifecycle as intent, materialization, and active runtime layers, then sync each layer with dedicated transitions."},"skills_sh_url":"https://skills.sh/ychampion/cskill-agents/three-layer-extension-sync"},"updatedAt":"2026-04-22T00:56:57.536Z"}}