{"id":"0d4f94d8-0ce3-49ce-a0d5-3d9dee699b10","shortId":"QCqnWv","kind":"skill","title":"headless-interactive-reconcile-parity","tagline":"Keep interactive and headless extension installation flows behaviorally aligned by sharing reconciliation logic and adapting only the outer contract.","description":"# SKILL: Headless Interactive Reconcile Parity\n**Domain:** plugin-installation\n**Trigger:** Apply when the same extension installation lifecycle must work in both an interactive UI and a headless or automation mode.\n**Source Pattern:** Distilled from reviewed plugin, extension, and MCP synchronization implementations.\n\n## Core Method\nCentralize the real install/reconcile behavior in shared lower-level helpers, then wrap it with thin mode-specific adapters. The interactive wrapper projects pending and progress state into AppState and may trigger user-facing refresh cues; the headless wrapper returns a simple changed/not-changed signal plus metrics. This preserves one source of truth for installation semantics while letting each mode expose the minimal contract its caller needs.\n\n## Key Rules\n- Share the diff, reconcile, and cache-invalidation primitives between modes; only the presentation and return type should differ.\n- Let interactive mode add status mapping and manual-refresh prompts, but keep those concerns out of the headless path.\n- Let headless mode return a boolean or compact metric set so its caller can decide whether to refresh downstream registries.\n- Preserve environment-specific options, such as seed registration or zip-cache skips, as wrapper configuration instead of forking the core reconcile algorithm.\n- Whenever marketplaces change, both modes must invalidate the caches that downstream loaders depend on.\n\n## Example Application\nIf a coding agent can boot with a TUI or inside CI, route both startup paths through the same extension reconciler. The TUI path can paint per-source spinners, while the CI path just reports whether extensions changed and whether the caller should rebuild its command registry.\n\n## Anti-Patterns (What NOT to do)\n- Do not duplicate the install algorithm in two codepaths; they will drift on skip rules, cache behavior, and error handling.\n- Do not leak interactive AppState updates into headless mode or force headless callers to emulate UI state they do not have.\n- Do not let headless mode skip cache invalidation just because it lacks a visual progress surface.","tags":["headless","interactive","reconcile","parity","cskill","agents","ychampion","agent-skills","ai-agents","cli","coding-agents","context-engineering"],"capabilities":["skill","source-ychampion","skill-headless-interactive-reconcile-parity","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/headless-interactive-reconcile-parity","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,133 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-22T06:56:49.369Z","embedding":null,"createdAt":"2026-04-18T22:20:28.757Z","updatedAt":"2026-04-22T06:56:49.369Z","lastSeenAt":"2026-04-22T06:56:49.369Z","tsv":"'adapt':20,87 'add':160 'agent':240 'algorithm':220,297 'align':14 'anti':286 'anti-pattern':285 'appli':35 'applic':236 'appstat':97,316 'autom':53 'behavior':13,72,308 'boolean':182 'boot':242 'cach':144,209,229,307,339 'cache-invalid':143 'caller':134,189,279,324 'central':68 'chang':223,275 'changed/not-changed':112 'ci':248,269 'code':239 'codepath':300 'command':283 'compact':184 'concern':171 'configur':213 'contract':24,132 'core':66,218 'cue':105 'decid':191 'depend':233 'diff':140 'differ':156 'distil':57 'domain':30 'downstream':195,231 'drift':303 'duplic':294 'emul':326 'environ':199 'environment-specif':198 'error':310 'exampl':235 'expos':129 'extens':10,39,61,256,274 'face':103 'flow':12 'forc':322 'fork':216 'handl':311 'headless':2,9,26,51,107,175,178,319,323,336 'headless-interactive-reconcile-par':1 'helper':78 'implement':65 'insid':247 'instal':11,33,40,123,296 'install/reconcile':71 'instead':214 'interact':3,7,27,47,89,158,315 'invalid':145,227,340 'keep':6,169 'key':136 'lack':344 'leak':314 'let':126,157,177,335 'level':77 'lifecycl':41 'loader':232 'logic':18 'lower':76 'lower-level':75 'manual':165 'manual-refresh':164 'map':162 'marketplac':222 'may':99 'mcp':63 'method':67 'metric':115,185 'minim':131 'mode':54,85,128,148,159,179,225,320,337 'mode-specif':84 'must':42,226 'need':135 'one':118 'option':201 'outer':23 'paint':262 'pariti':5,29 'path':176,252,260,270 'pattern':56,287 'pend':92 'per':264 'per-sourc':263 'plugin':32,60 'plugin-instal':31 'plus':114 'present':151 'preserv':117,197 'primit':146 'progress':94,347 'project':91 'prompt':167 'real':70 'rebuild':281 'reconcil':4,28,141,219,257 'reconcili':17 'refresh':104,166,194 'registr':205 'registri':196,284 'report':272 'return':109,153,180 'review':59 'rout':249 'rule':137,306 'seed':204 'semant':124 'set':186 'share':16,74,138 'signal':113 'simpl':111 'skill':25 'skill-headless-interactive-reconcile-parity' 'skip':210,305,338 'sourc':55,119,265 'source-ychampion' 'specif':86,200 'spinner':266 'startup':251 'state':95,328 'status':161 'surfac':348 'synchron':64 'thin':83 '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' 'trigger':34,100 'truth':121 'tui':245,259 'two':299 'type':154 'ui':48,327 'updat':317 'user':102 'user-fac':101 'visual':346 'whenev':221 'whether':192,273,277 'work':43 'wrap':80 'wrapper':90,108,212 'zip':208 'zip-cach':207","prices":[{"id":"d155e690-84b6-4ae5-a7fd-a6e6e90d29bb","listingId":"0d4f94d8-0ce3-49ce-a0d5-3d9dee699b10","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:20:28.757Z"}],"sources":[{"listingId":"0d4f94d8-0ce3-49ce-a0d5-3d9dee699b10","source":"github","sourceId":"ychampion/cskill-agents/headless-interactive-reconcile-parity","sourceUrl":"https://github.com/ychampion/cskill-agents/tree/main/skills/headless-interactive-reconcile-parity","isPrimary":false,"firstSeenAt":"2026-04-18T22:20:28.757Z","lastSeenAt":"2026-04-22T06:56:49.369Z"}],"details":{"listingId":"0d4f94d8-0ce3-49ce-a0d5-3d9dee699b10","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"ychampion","slug":"headless-interactive-reconcile-parity","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":"c47002acab99589862fc9cfece75f4fbbdc5ed48","skill_md_path":"skills/headless-interactive-reconcile-parity/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/ychampion/cskill-agents/tree/main/skills/headless-interactive-reconcile-parity"},"layout":"multi","source":"github","category":"cskill-agents","frontmatter":{"name":"headless-interactive-reconcile-parity","description":"Keep interactive and headless extension installation flows behaviorally aligned by sharing reconciliation logic and adapting only the outer contract."},"skills_sh_url":"https://skills.sh/ychampion/cskill-agents/headless-interactive-reconcile-parity"},"updatedAt":"2026-04-22T06:56:49.369Z"}}