{"id":"7cf63a34-94ec-4e23-92db-c5785e43d149","shortId":"FN243x","kind":"skill","title":"type-tiered-bridge-command-gating","tagline":"Gate bridge-executed slash commands by command type first: block local-jsx UI commands, allow prompt commands by construction, and require an explicit allowlist for plain local commands.","description":"# SKILL: Type Tiered Bridge Command Gating\n**Domain:** command-architecture\n**Trigger:** Use when a remote or bridged client can invoke slash commands and you need a simple safety rule that separates text-expanding commands from local UI commands and plain local actions.\n**Source Pattern:** Distilled from reviewed remote-control, bridge transport, and capability-advertising implementations.\n\n## Core Method\nClassify bridge safety by command type before inspecting individual command names. Treat `local-jsx` commands as unsafe by construction because they render local UI, treat `prompt` commands as safe by construction because they only expand into model text, and apply a narrow explicit allowlist only to plain `local` commands. This creates a three-tier gate where only one class needs per-command review, so remote/mobile surfaces stay predictable and new command types inherit the right default behavior.\n\n## Key Rules\n- Put the type check first so the bridge gate does not need ad hoc per-command exceptions for UI-rendering commands.\n- Block every `local-jsx` command by default; if a command depends on local Ink or terminal state, it should fail the bridge gate without consulting any allowlist.\n- Allow `prompt` commands by type, since their output is text passed back into the model flow rather than a local side effect.\n- Require explicit allowlist membership for plain `local` commands, making denial the default for any local command that has not been reviewed for remote execution.\n- Keep the allowlist static and easy to audit so adding a new remotely safe local command is an intentional registry change, not an incidental side effect of command loading.\n\n## Example Application\nWhen a mobile client submits summary, model, and research, run the bridge gate on the resolved command objects. model is rejected immediately because it is `local-jsx`, research is admitted because it is `prompt`, and summary only passes if it appears in the reviewed `local` allowlist.\n\n## Anti-Patterns (What NOT to do)\n- Do not maintain one flat allowlist for every command type; that obscures why prompt commands are safe and makes UI commands easier to admit accidentally.\n- Do not treat plain `local` commands as safe by default just because they stream text; bridge safety requires explicit review.\n- Do not special-case individual `local-jsx` commands after the fact; the value of the pattern is that the type already encodes the unsafe class.","tags":["type","tiered","bridge","command","gating","cskill","agents","ychampion","agent-skills","ai-agents","cli","coding-agents"],"capabilities":["skill","source-ychampion","skill-type-tiered-bridge-command-gating","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/type-tiered-bridge-command-gating","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,452 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:58.358Z","embedding":null,"createdAt":"2026-04-18T22:21:36.179Z","updatedAt":"2026-04-22T00:56:58.358Z","lastSeenAt":"2026-04-22T00:56:58.358Z","tsv":"'accident':385 'action':79 'ad':191,285 'admit':337,384 'advertis':93 'allow':23,230 'allowlist':32,141,229,254,278,353,366 'alreadi':428 'anti':355 'anti-pattern':354 'appear':348 'appli':137 'applic':306 'architectur':46 'audit':283 'back':241 'behavior':176 'block':17,202 'bridg':4,9,40,53,88,98,186,224,318,401 'bridge-execut':8 'capability-advertis':91 'capabl':92 'case':410 'chang':296 'check':182 'class':157,432 'classifi':97 'client':54,310 'command':5,12,14,22,25,36,41,45,58,71,75,101,106,112,124,146,161,170,195,201,207,212,232,259,267,291,303,323,369,375,381,391,415 'command-architectur':44 'construct':27,116,128 'consult':227 'control':87 'core':95 'creat':148 'default':175,209,263,395 'denial':261 'depend':213 'distil':82 'domain':43 'easi':281 'easier':382 'effect':251,301 'encod':429 'everi':203,368 'exampl':305 'except':196 'execut':10,275 'expand':70,132 'explicit':31,140,253,404 'fact':418 'fail':222 'first':16,183 'flat':365 'flow':245 'gate':6,7,42,153,187,225,319 'hoc':192 'immedi':328 'implement':94 'incident':299 'individu':105,411 'inherit':172 'ink':216 'inspect':104 'intent':294 'invok':56 'jsx':20,111,206,334,414 'keep':276 'key':177 'load':304 'local':19,35,73,78,110,120,145,205,215,249,258,266,290,333,352,390,413 'local-jsx':18,109,204,332,412 'maintain':363 'make':260,379 'membership':255 'method':96 'mobil':309 'model':134,244,313,325 'name':107 'narrow':139 'need':61,158,190 'new':169,287 'object':324 'obscur':372 'one':156,364 'output':237 'pass':240,345 'pattern':81,356,423 'per':160,194 'per-command':159,193 'plain':34,77,144,257,389 'predict':167 'prompt':24,123,231,341,374 'put':179 'rather':246 'registri':295 'reject':327 'remot':51,86,274,288 'remote-control':85 'remote/mobile':164 'render':119,200 'requir':29,252,403 'research':315,335 'resolv':322 'review':84,162,272,351,405 'right':174 'rule':65,178 'run':316 'safe':126,289,377,393 'safeti':64,99,402 'separ':67 'side':250,300 'simpl':63 'sinc':235 'skill':37 'skill-type-tiered-bridge-command-gating' 'slash':11,57 'sourc':80 'source-ychampion' 'special':409 'special-cas':408 'state':219 'static':279 'stay':166 'stream':399 'submit':311 'summari':312,343 'surfac':165 'termin':218 'text':69,135,239,400 'text-expand':68 'three':151 'three-tier':150 'tier':3,39,152 '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' 'transport':89 'treat':108,122,388 'trigger':47 'type':2,15,38,102,171,181,234,370,427 'type-tiered-bridge-command-g':1 'ui':21,74,121,199,380 'ui-rend':198 'unsaf':114,431 'use':48 'valu':420 'without':226","prices":[{"id":"87febf68-226b-4aa7-ac8a-114e99b13b65","listingId":"7cf63a34-94ec-4e23-92db-c5785e43d149","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:36.179Z"}],"sources":[{"listingId":"7cf63a34-94ec-4e23-92db-c5785e43d149","source":"github","sourceId":"ychampion/cskill-agents/type-tiered-bridge-command-gating","sourceUrl":"https://github.com/ychampion/cskill-agents/tree/main/skills/type-tiered-bridge-command-gating","isPrimary":false,"firstSeenAt":"2026-04-18T22:21:36.179Z","lastSeenAt":"2026-04-22T00:56:58.358Z"}],"details":{"listingId":"7cf63a34-94ec-4e23-92db-c5785e43d149","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"ychampion","slug":"type-tiered-bridge-command-gating","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":"1c4f49bab0ecee4b951f1b7403056f798dcba088","skill_md_path":"skills/type-tiered-bridge-command-gating/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/ychampion/cskill-agents/tree/main/skills/type-tiered-bridge-command-gating"},"layout":"multi","source":"github","category":"cskill-agents","frontmatter":{"name":"type-tiered-bridge-command-gating","description":"Gate bridge-executed slash commands by command type first: block local-jsx UI commands, allow prompt commands by construction, and require an explicit allowlist for plain local commands."},"skills_sh_url":"https://skills.sh/ychampion/cskill-agents/type-tiered-bridge-command-gating"},"updatedAt":"2026-04-22T00:56:58.358Z"}}