[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-google-cloud-ingress2gateway":3,"mdc-5dpy3d-key":38,"related-org-google-cloud-ingress2gateway":940,"related-repo-google-cloud-ingress2gateway":1129},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":27,"repoUrl":28,"updatedAt":29,"license":30,"forks":31,"topics":32,"repo":33,"sourceUrl":36,"mdContent":37},"ingress2gateway","migrate GKE Ingress to Gateway API","Automates migrating legacy GKE Ingress resources to the modern Gateway API. Use when migrating legacy GKE or NGINX Ingress resources to GKE Gateway API specifications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"google-cloud","Google Cloud","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fgoogle-cloud.png","GoogleCloudPlatform",[13,17,20,23,26],{"name":14,"slug":15,"type":16},"Migration","migration","tag",{"name":18,"slug":19,"type":16},"Deployment","deployment",{"name":21,"slug":22,"type":16},"Kubernetes","kubernetes",{"name":24,"slug":25,"type":16},"Infrastructure","infrastructure",{"name":9,"slug":8,"type":16},123,"https:\u002F\u002Fgithub.com\u002FGoogleCloudPlatform\u002Fcloud-solutions","2026-07-31T06:23:38.312476",null,41,[],{"repoUrl":28,"stars":27,"forks":31,"topics":34,"description":35},[],"Mono repo for open-sourcing Cloud Solutions Architects projects","https:\u002F\u002Fgithub.com\u002FGoogleCloudPlatform\u002Fcloud-solutions\u002Ftree\u002FHEAD\u002Fprojects\u002Fgke-migration-agent\u002Fingress2gateway","---\nname: ingress2gateway\ndescription: >-\n  Automates migrating legacy GKE Ingress resources to the modern Gateway API.\n  Use when migrating legacy GKE or NGINX Ingress resources to GKE Gateway API\n  specifications.\n---\n\n# Skill name: ingress2gateway\n\n## Intent and objective\n\nAutomate the discovery, analysis, risk-profiling, and translation of legacy GKE\nand NGINX Ingress resources into native GKE Gateway API specifications using the\n`ingress2gateway` tool.\n\n### Activation criteria\n\n- **Use when:** Migrating legacy GKE or NGINX Ingress manifests to native GKE\n  Gateway API specifications (Gateway, HTTPRoute)\n\n## Prerequisites and sandbox configuration\n\n### 1. Environment sandbox specification\n\nThis skill runs in a local sandbox environment with the following\nspecifications:\n\n- **Type:** `local-sandbox`\n- **Python Version:** `>=3.10`\n- **Virtual Environment Path:** `.agent\u002Fskills\u002Fingress2gateway\u002Fscripts\u002F.venv`\n- **Requirements Lockfile:**\n  `.agent\u002Fskills\u002Fingress2gateway\u002Fscripts\u002Frequirements.txt`\n\n### 2. Host binary constraints (prerequisites validation)\n\nBefore execution, verify the following host binary constraints:\n\n- **python3:** Must be version `>=3.10` (check using `python3 --version`).\n- **gcloud:** Required to handle identity challenges, project queries, and GKE\n  cluster authentication (check using `gcloud --version`).\n- **kubectl:** Must be version `>=1.30` (check using\n  `kubectl version --client -o json`). Required to interact with GKE 1.30+\n  compatible APIs.\n\n### 3. Secure outbound network allowlists (egress guardrails)\n\nThe sandbox requires outbound HTTPS access to the following domains:\n\n- `github.com`: To verify network download access to the `ingress2gateway`\n  repository releases without downloading assets.\n- `*.googleapis.com`: To authenticate Google Cloud identities and communicate\n  with GKE Control Planes.\n- `dl.google.com`: To download Google Cloud SDK framework assets and `kubectl`\n  components if missing.\n- `bootstrap.pypa.io`: As a secure fallback to fetch `get-pip.py` if the host\n  environment lacks pip and ensurepip completely.\n\n## Interactive JSON exchange protocol (crucial)\n\nThis skill utilizes a strict JSON payload protocol on `stdout` (delimited by\n`__AGENT_UI_DATA_START__` and `__AGENT_UI_DATA_END__`) and expects a JSON\nresponse on `stdin` for every user input step.\n\nThe executing agent must:\n\n1.  **Never truncate or summarize any JSON payloads** emitted between\n    `__AGENT_UI_DATA_START__` and `__AGENT_UI_DATA_END__`. Display them in full\n    to the user.\n1.  **Never make assumptions or skip user input.** Prompt the user for input at\n    every single stage the script pauses and waits for `stdin`.\n1.  **Format user choices as the required JSON structure and append a**\n    **newline (`\\n`)** before writing to the script's `stdin`.\n1.  **Render Risk Profiles Visually:** When presenting the risk profile at Phase\n    4, the agent must render a clear Markdown table of the compatible (Green\n    Lane) and incompatible (Red Lane) resources, detailing the risks\u002Fblockers,\n    so the operator can make an informed decision.\n\n## Strict execution lifecycle and master report pipeline\n\n### Master report markdown template (to be updated incrementally)\n\nThe structural markdown template for the migration analysis report is maintained\nin `assets\u002Freport_template.md`.\n\nWhen initialized or updated across the pipeline phases, the runtime engine\nautomatically copies this template to output\n`GKE_Ingress_to_Gateway_API_Migration_Analysis_Report.md` and incrementally\npopulates its section placeholders.\n\n## Structured macro-pipeline execution phases\n\nYou will advance strictly through these 6 consecutive operational phases.\n\n- **Phase 1:** Environment Sandbox Pre-flight Validation.\n- **Phase 2:** Identity & Context Resolution\n- **Phase 3:** Resource Discovery & Target Inventory.\n- **Phase 4:** Ingress scanning & Risk Profiling.\n- **Phase 5:** Translation & Dry Run validation.\n- **Phase 6:** Approval and execution\n\n### Phase 1: Environment sandbox pre-flight validation\n\nBefore executing any Python scripts or processing cluster manifests, you\n**must** verify and initialize the local environment by reading and following\nthe pre-flight validation instructions in `references\u002Fpreflight_validation.md`.\n\n### Phase 2: Identity and context resolution\n\n1.  **Invoke the Core Python Script:** Instantly upon entering Phase 2, run the\n    python orchestrator script:\n\n    ```bash\n    python3 .agent\u002Fskills\u002Fingress2gateway\u002Fscripts\u002Fmain.py\n    ```\n\n1.  **Cluster Discovery UI Payload:** The script discovers GKE clusters and\n    emits a JSON payload (`select_cluster`). Intercept this payload, present\n    options to the operator, and write the choice to the script's `stdin`.\n1.  **Kubeconfig Sandboxing:** Once selected, the script configures local\n    sandboxed credentials for the chosen GKE cluster.\n\n### Phase 3: Resource discovery and target inventory\n\n1.  **Orchestrated Scanning:** The active script scans the target GKE cluster\n    context to discover Ingress manifests.\n1.  **Incremental Report Generation:** The script copies the report template to\n    `GKE_Ingress_to_Gateway_API_Migration_Analysis_Report.md` and updates the\n    `[Populated in Phase 3]` placeholder with the target inventory.\n1.  **Intermediate UI Exchange:** The script does not pause at this stage, but\n    advances to Phase 4.\n\n### Phase 4: Ingress scanning and risk profiling\n\n1.  **Automated Risk Triage:** The scanner.py sub-component will\n    programmatically evaluate metadata arrays for custom or native rewrite\n    snippets.\n\n1.  **Incremental Document Update:** The script replaces the [Populated in Phase\n    4] placeholder with a breakdown of Critical Blockers and Translation\n    Warnings discovered during verification.\n\n1.  **Interactive JSON Handoff Gate:** The agent must capture the script's\n    emitted stdout payload between **AGENT_UI_DATA_START** and\n    **AGENT_UI_DATA_END**. Display the comprehensive risk inventory full-string\n    array to the operator, pause processing execution, and wait for a structured\n    JSON map selection on stdin identifying approved migration asset targets.\n\n### Phase 5: Translation and dry run validation\n\n1.  **Translation Execution:** The engine passes approved target JSON structures\n    to translator.py, which pulls down and runs the pre-compiled ingress2gateway\n    compiler to generate native Gateway API resource maps.\n\n1.  **Validation & Safety Check:** The script executes the dry-run\n    `kubectl apply --dry-run=server -f {GATEWAY_API_MANIFEST_YAML}` command\n    against the target cluster context. It analyzes the resulting stdout\u002Fstderr\n    for validation errors and captures the server response using Kubernetes API.\n\n1.  **Incremental Document Update:** The script replaces the [Populated in Phase\n    5 & 6] placeholder with the consolidated raw Gateway, HttpRoute and URLMap\n    API manifest, the detected server-side validation results, and a detailed\n    explanation of any translation or deployment anomalies.\n\n1.  **Interactive Deployment Signature:** The script prints out the compilation\n    details using the approve_deployment UI protocol template. The agent must\n    display this text entirely and halt, blocking the runtime sequence until the\n    user submits a signed APPROVE or CANCEL string map to stdin.\n\n1.  **Conditional Execution Gate:**\n\n    - If the validation response indicates zero deploy-time errors, the agent\n      immediately proceeds to Phase 6 (Execution).\n    - If validation errors are returned, the agent **must halt**, append a\n      comprehensive error report to the bottom of the Markdown document, display\n      the final document, and explicitly **ask the user for permission to\n      proceed with manual correction or bypass strict validation rules.**\n\n### Phase 6: Approval and execution\n\n1.  **Live Data Plane Injection:** If the interaction response on stdin reads\n    APPROVE, the script applies the manifests to the cluster using kubectl apply\n    -f -. It then overwrites the final placeholders with a complete transaction\n    receipt string block.\n\n1.  **Conditional Execution Gate:** If the response reads CANCEL, the script\n    intercepts the rejection, dumps the fully compiled Gateway configurations\n    locally into a migration-fallback.yaml asset backup, and posts a Deployment\n    Paused status block to the analysis file.\n\n1.  **Mandatory Hold & Exit:** Once the underlying script lifecycle gracefully\n    exits, the agent must present a final execution summary to the workspace\n    terminal and wait for further user interaction commands.\n",{"data":39,"body":40},{"name":4,"description":6},{"type":41,"children":42},"root",[43,52,59,73,80,96,102,108,113,176,182,187,257,263,268,338,344,381,386,469,475,481,493,506,512,517,580,586,605,611,687,693,741,747,801,807,896,902,934],{"type":44,"tag":45,"props":46,"children":48},"element","h1",{"id":47},"skill-name-ingress2gateway",[49],{"type":50,"value":51},"text","Skill name: ingress2gateway",{"type":44,"tag":53,"props":54,"children":56},"h2",{"id":55},"intent-and-objective",[57],{"type":50,"value":58},"Intent and objective",{"type":44,"tag":60,"props":61,"children":62},"p",{},[63,65,71],{"type":50,"value":64},"Automate the discovery, analysis, risk-profiling, and translation of legacy GKE\nand NGINX Ingress resources into native GKE Gateway API specifications using the\n",{"type":44,"tag":66,"props":67,"children":69},"code",{"className":68},[],[70],{"type":50,"value":4},{"type":50,"value":72}," tool.",{"type":44,"tag":74,"props":75,"children":77},"h3",{"id":76},"activation-criteria",[78],{"type":50,"value":79},"Activation criteria",{"type":44,"tag":81,"props":82,"children":83},"ul",{},[84],{"type":44,"tag":85,"props":86,"children":87},"li",{},[88,94],{"type":44,"tag":89,"props":90,"children":91},"strong",{},[92],{"type":50,"value":93},"Use when:",{"type":50,"value":95}," Migrating legacy GKE or NGINX Ingress manifests to native GKE\nGateway API specifications (Gateway, HTTPRoute)",{"type":44,"tag":53,"props":97,"children":99},{"id":98},"prerequisites-and-sandbox-configuration",[100],{"type":50,"value":101},"Prerequisites and sandbox configuration",{"type":44,"tag":74,"props":103,"children":105},{"id":104},"_1-environment-sandbox-specification",[106],{"type":50,"value":107},"1. Environment sandbox specification",{"type":44,"tag":60,"props":109,"children":110},{},[111],{"type":50,"value":112},"This skill runs in a local sandbox environment with the following\nspecifications:",{"type":44,"tag":81,"props":114,"children":115},{},[116,132,147,162],{"type":44,"tag":85,"props":117,"children":118},{},[119,124,126],{"type":44,"tag":89,"props":120,"children":121},{},[122],{"type":50,"value":123},"Type:",{"type":50,"value":125}," ",{"type":44,"tag":66,"props":127,"children":129},{"className":128},[],[130],{"type":50,"value":131},"local-sandbox",{"type":44,"tag":85,"props":133,"children":134},{},[135,140,141],{"type":44,"tag":89,"props":136,"children":137},{},[138],{"type":50,"value":139},"Python Version:",{"type":50,"value":125},{"type":44,"tag":66,"props":142,"children":144},{"className":143},[],[145],{"type":50,"value":146},">=3.10",{"type":44,"tag":85,"props":148,"children":149},{},[150,155,156],{"type":44,"tag":89,"props":151,"children":152},{},[153],{"type":50,"value":154},"Virtual Environment Path:",{"type":50,"value":125},{"type":44,"tag":66,"props":157,"children":159},{"className":158},[],[160],{"type":50,"value":161},".agent\u002Fskills\u002Fingress2gateway\u002Fscripts\u002F.venv",{"type":44,"tag":85,"props":163,"children":164},{},[165,170],{"type":44,"tag":89,"props":166,"children":167},{},[168],{"type":50,"value":169},"Requirements Lockfile:",{"type":44,"tag":66,"props":171,"children":173},{"className":172},[],[174],{"type":50,"value":175},".agent\u002Fskills\u002Fingress2gateway\u002Fscripts\u002Frequirements.txt",{"type":44,"tag":74,"props":177,"children":179},{"id":178},"_2-host-binary-constraints-prerequisites-validation",[180],{"type":50,"value":181},"2. Host binary constraints (prerequisites validation)",{"type":44,"tag":60,"props":183,"children":184},{},[185],{"type":50,"value":186},"Before execution, verify the following host binary constraints:",{"type":44,"tag":81,"props":188,"children":189},{},[190,215,232],{"type":44,"tag":85,"props":191,"children":192},{},[193,198,200,205,207,213],{"type":44,"tag":89,"props":194,"children":195},{},[196],{"type":50,"value":197},"python3:",{"type":50,"value":199}," Must be version ",{"type":44,"tag":66,"props":201,"children":203},{"className":202},[],[204],{"type":50,"value":146},{"type":50,"value":206}," (check using ",{"type":44,"tag":66,"props":208,"children":210},{"className":209},[],[211],{"type":50,"value":212},"python3 --version",{"type":50,"value":214},").",{"type":44,"tag":85,"props":216,"children":217},{},[218,223,225,231],{"type":44,"tag":89,"props":219,"children":220},{},[221],{"type":50,"value":222},"gcloud:",{"type":50,"value":224}," Required to handle identity challenges, project queries, and GKE\ncluster authentication (check using ",{"type":44,"tag":66,"props":226,"children":228},{"className":227},[],[229],{"type":50,"value":230},"gcloud --version",{"type":50,"value":214},{"type":44,"tag":85,"props":233,"children":234},{},[235,240,241,247,249,255],{"type":44,"tag":89,"props":236,"children":237},{},[238],{"type":50,"value":239},"kubectl:",{"type":50,"value":199},{"type":44,"tag":66,"props":242,"children":244},{"className":243},[],[245],{"type":50,"value":246},">=1.30",{"type":50,"value":248}," (check using\n",{"type":44,"tag":66,"props":250,"children":252},{"className":251},[],[253],{"type":50,"value":254},"kubectl version --client -o json",{"type":50,"value":256},"). Required to interact with GKE 1.30+\ncompatible APIs.",{"type":44,"tag":74,"props":258,"children":260},{"id":259},"_3-secure-outbound-network-allowlists-egress-guardrails",[261],{"type":50,"value":262},"3. Secure outbound network allowlists (egress guardrails)",{"type":44,"tag":60,"props":264,"children":265},{},[266],{"type":50,"value":267},"The sandbox requires outbound HTTPS access to the following domains:",{"type":44,"tag":81,"props":269,"children":270},{},[271,289,300,319],{"type":44,"tag":85,"props":272,"children":273},{},[274,280,282,287],{"type":44,"tag":66,"props":275,"children":277},{"className":276},[],[278],{"type":50,"value":279},"github.com",{"type":50,"value":281},": To verify network download access to the ",{"type":44,"tag":66,"props":283,"children":285},{"className":284},[],[286],{"type":50,"value":4},{"type":50,"value":288},"\nrepository releases without downloading assets.",{"type":44,"tag":85,"props":290,"children":291},{},[292,298],{"type":44,"tag":66,"props":293,"children":295},{"className":294},[],[296],{"type":50,"value":297},"*.googleapis.com",{"type":50,"value":299},": To authenticate Google Cloud identities and communicate\nwith GKE Control Planes.",{"type":44,"tag":85,"props":301,"children":302},{},[303,309,311,317],{"type":44,"tag":66,"props":304,"children":306},{"className":305},[],[307],{"type":50,"value":308},"dl.google.com",{"type":50,"value":310},": To download Google Cloud SDK framework assets and ",{"type":44,"tag":66,"props":312,"children":314},{"className":313},[],[315],{"type":50,"value":316},"kubectl",{"type":50,"value":318},"\ncomponents if missing.",{"type":44,"tag":85,"props":320,"children":321},{},[322,328,330,336],{"type":44,"tag":66,"props":323,"children":325},{"className":324},[],[326],{"type":50,"value":327},"bootstrap.pypa.io",{"type":50,"value":329},": As a secure fallback to fetch ",{"type":44,"tag":66,"props":331,"children":333},{"className":332},[],[334],{"type":50,"value":335},"get-pip.py",{"type":50,"value":337}," if the host\nenvironment lacks pip and ensurepip completely.",{"type":44,"tag":53,"props":339,"children":341},{"id":340},"interactive-json-exchange-protocol-crucial",[342],{"type":50,"value":343},"Interactive JSON exchange protocol (crucial)",{"type":44,"tag":60,"props":345,"children":346},{},[347,349,355,357,363,365,371,373,379],{"type":50,"value":348},"This skill utilizes a strict JSON payload protocol on ",{"type":44,"tag":66,"props":350,"children":352},{"className":351},[],[353],{"type":50,"value":354},"stdout",{"type":50,"value":356}," (delimited by\n",{"type":44,"tag":66,"props":358,"children":360},{"className":359},[],[361],{"type":50,"value":362},"__AGENT_UI_DATA_START__",{"type":50,"value":364}," and ",{"type":44,"tag":66,"props":366,"children":368},{"className":367},[],[369],{"type":50,"value":370},"__AGENT_UI_DATA_END__",{"type":50,"value":372},") and expects a JSON\nresponse on ",{"type":44,"tag":66,"props":374,"children":376},{"className":375},[],[377],{"type":50,"value":378},"stdin",{"type":50,"value":380}," for every user input step.",{"type":44,"tag":60,"props":382,"children":383},{},[384],{"type":50,"value":385},"The executing agent must:",{"type":44,"tag":387,"props":388,"children":389},"ol",{},[390,413,430,459],{"type":44,"tag":85,"props":391,"children":392},{},[393,398,400,405,406,411],{"type":44,"tag":89,"props":394,"children":395},{},[396],{"type":50,"value":397},"Never truncate or summarize any JSON payloads",{"type":50,"value":399}," emitted between\n",{"type":44,"tag":66,"props":401,"children":403},{"className":402},[],[404],{"type":50,"value":362},{"type":50,"value":364},{"type":44,"tag":66,"props":407,"children":409},{"className":408},[],[410],{"type":50,"value":370},{"type":50,"value":412},". Display them in full\nto the user.",{"type":44,"tag":85,"props":414,"children":415},{},[416,421,423,428],{"type":44,"tag":89,"props":417,"children":418},{},[419],{"type":50,"value":420},"Never make assumptions or skip user input.",{"type":50,"value":422}," Prompt the user for input at\nevery single stage the script pauses and waits for ",{"type":44,"tag":66,"props":424,"children":426},{"className":425},[],[427],{"type":50,"value":378},{"type":50,"value":429},".",{"type":44,"tag":85,"props":431,"children":432},{},[433,438,451,453,458],{"type":44,"tag":89,"props":434,"children":435},{},[436],{"type":50,"value":437},"Format user choices as the required JSON structure and append a",{"type":44,"tag":89,"props":439,"children":440},{},[441,443,449],{"type":50,"value":442},"newline (",{"type":44,"tag":66,"props":444,"children":446},{"className":445},[],[447],{"type":50,"value":448},"\\n",{"type":50,"value":450},")",{"type":50,"value":452}," before writing to the script's ",{"type":44,"tag":66,"props":454,"children":456},{"className":455},[],[457],{"type":50,"value":378},{"type":50,"value":429},{"type":44,"tag":85,"props":460,"children":461},{},[462,467],{"type":44,"tag":89,"props":463,"children":464},{},[465],{"type":50,"value":466},"Render Risk Profiles Visually:",{"type":50,"value":468}," When presenting the risk profile at Phase\n4, the agent must render a clear Markdown table of the compatible (Green\nLane) and incompatible (Red Lane) resources, detailing the risks\u002Fblockers,\nso the operator can make an informed decision.",{"type":44,"tag":53,"props":470,"children":472},{"id":471},"strict-execution-lifecycle-and-master-report-pipeline",[473],{"type":50,"value":474},"Strict execution lifecycle and master report pipeline",{"type":44,"tag":74,"props":476,"children":478},{"id":477},"master-report-markdown-template-to-be-updated-incrementally",[479],{"type":50,"value":480},"Master report markdown template (to be updated incrementally)",{"type":44,"tag":60,"props":482,"children":483},{},[484,486,492],{"type":50,"value":485},"The structural markdown template for the migration analysis report is maintained\nin ",{"type":44,"tag":66,"props":487,"children":489},{"className":488},[],[490],{"type":50,"value":491},"assets\u002Freport_template.md",{"type":50,"value":429},{"type":44,"tag":60,"props":494,"children":495},{},[496,498,504],{"type":50,"value":497},"When initialized or updated across the pipeline phases, the runtime engine\nautomatically copies this template to output\n",{"type":44,"tag":66,"props":499,"children":501},{"className":500},[],[502],{"type":50,"value":503},"GKE_Ingress_to_Gateway_API_Migration_Analysis_Report.md",{"type":50,"value":505}," and incrementally\npopulates its section placeholders.",{"type":44,"tag":53,"props":507,"children":509},{"id":508},"structured-macro-pipeline-execution-phases",[510],{"type":50,"value":511},"Structured macro-pipeline execution phases",{"type":44,"tag":60,"props":513,"children":514},{},[515],{"type":50,"value":516},"You will advance strictly through these 6 consecutive operational phases.",{"type":44,"tag":81,"props":518,"children":519},{},[520,530,540,550,560,570],{"type":44,"tag":85,"props":521,"children":522},{},[523,528],{"type":44,"tag":89,"props":524,"children":525},{},[526],{"type":50,"value":527},"Phase 1:",{"type":50,"value":529}," Environment Sandbox Pre-flight Validation.",{"type":44,"tag":85,"props":531,"children":532},{},[533,538],{"type":44,"tag":89,"props":534,"children":535},{},[536],{"type":50,"value":537},"Phase 2:",{"type":50,"value":539}," Identity & Context Resolution",{"type":44,"tag":85,"props":541,"children":542},{},[543,548],{"type":44,"tag":89,"props":544,"children":545},{},[546],{"type":50,"value":547},"Phase 3:",{"type":50,"value":549}," Resource Discovery & Target Inventory.",{"type":44,"tag":85,"props":551,"children":552},{},[553,558],{"type":44,"tag":89,"props":554,"children":555},{},[556],{"type":50,"value":557},"Phase 4:",{"type":50,"value":559}," Ingress scanning & Risk Profiling.",{"type":44,"tag":85,"props":561,"children":562},{},[563,568],{"type":44,"tag":89,"props":564,"children":565},{},[566],{"type":50,"value":567},"Phase 5:",{"type":50,"value":569}," Translation & Dry Run validation.",{"type":44,"tag":85,"props":571,"children":572},{},[573,578],{"type":44,"tag":89,"props":574,"children":575},{},[576],{"type":50,"value":577},"Phase 6:",{"type":50,"value":579}," Approval and execution",{"type":44,"tag":74,"props":581,"children":583},{"id":582},"phase-1-environment-sandbox-pre-flight-validation",[584],{"type":50,"value":585},"Phase 1: Environment sandbox pre-flight validation",{"type":44,"tag":60,"props":587,"children":588},{},[589,591,596,598,604],{"type":50,"value":590},"Before executing any Python scripts or processing cluster manifests, you\n",{"type":44,"tag":89,"props":592,"children":593},{},[594],{"type":50,"value":595},"must",{"type":50,"value":597}," verify and initialize the local environment by reading and following\nthe pre-flight validation instructions in ",{"type":44,"tag":66,"props":599,"children":601},{"className":600},[],[602],{"type":50,"value":603},"references\u002Fpreflight_validation.md",{"type":50,"value":429},{"type":44,"tag":74,"props":606,"children":608},{"id":607},"phase-2-identity-and-context-resolution",[609],{"type":50,"value":610},"Phase 2: Identity and context resolution",{"type":44,"tag":387,"props":612,"children":613},{},[614,653,677],{"type":44,"tag":85,"props":615,"children":616},{},[617,622,624],{"type":44,"tag":89,"props":618,"children":619},{},[620],{"type":50,"value":621},"Invoke the Core Python Script:",{"type":50,"value":623}," Instantly upon entering Phase 2, run the\npython orchestrator script:",{"type":44,"tag":625,"props":626,"children":631},"pre",{"className":627,"code":628,"language":629,"meta":630,"style":630},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","python3 .agent\u002Fskills\u002Fingress2gateway\u002Fscripts\u002Fmain.py\n","bash","",[632],{"type":44,"tag":66,"props":633,"children":634},{"__ignoreMap":630},[635],{"type":44,"tag":636,"props":637,"children":640},"span",{"class":638,"line":639},"line",1,[641,647],{"type":44,"tag":636,"props":642,"children":644},{"style":643},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[645],{"type":50,"value":646},"python3",{"type":44,"tag":636,"props":648,"children":650},{"style":649},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[651],{"type":50,"value":652}," .agent\u002Fskills\u002Fingress2gateway\u002Fscripts\u002Fmain.py\n",{"type":44,"tag":85,"props":654,"children":655},{},[656,661,663,669,671,676],{"type":44,"tag":89,"props":657,"children":658},{},[659],{"type":50,"value":660},"Cluster Discovery UI Payload:",{"type":50,"value":662}," The script discovers GKE clusters and\nemits a JSON payload (",{"type":44,"tag":66,"props":664,"children":666},{"className":665},[],[667],{"type":50,"value":668},"select_cluster",{"type":50,"value":670},"). Intercept this payload, present\noptions to the operator, and write the choice to the script's ",{"type":44,"tag":66,"props":672,"children":674},{"className":673},[],[675],{"type":50,"value":378},{"type":50,"value":429},{"type":44,"tag":85,"props":678,"children":679},{},[680,685],{"type":44,"tag":89,"props":681,"children":682},{},[683],{"type":50,"value":684},"Kubeconfig Sandboxing:",{"type":50,"value":686}," Once selected, the script configures local\nsandboxed credentials for the chosen GKE cluster.",{"type":44,"tag":74,"props":688,"children":690},{"id":689},"phase-3-resource-discovery-and-target-inventory",[691],{"type":50,"value":692},"Phase 3: Resource discovery and target inventory",{"type":44,"tag":387,"props":694,"children":695},{},[696,706,731],{"type":44,"tag":85,"props":697,"children":698},{},[699,704],{"type":44,"tag":89,"props":700,"children":701},{},[702],{"type":50,"value":703},"Orchestrated Scanning:",{"type":50,"value":705}," The active script scans the target GKE cluster\ncontext to discover Ingress manifests.",{"type":44,"tag":85,"props":707,"children":708},{},[709,714,716,721,723,729],{"type":44,"tag":89,"props":710,"children":711},{},[712],{"type":50,"value":713},"Incremental Report Generation:",{"type":50,"value":715}," The script copies the report template to\n",{"type":44,"tag":66,"props":717,"children":719},{"className":718},[],[720],{"type":50,"value":503},{"type":50,"value":722}," and updates the\n",{"type":44,"tag":66,"props":724,"children":726},{"className":725},[],[727],{"type":50,"value":728},"[Populated in Phase 3]",{"type":50,"value":730}," placeholder with the target inventory.",{"type":44,"tag":85,"props":732,"children":733},{},[734,739],{"type":44,"tag":89,"props":735,"children":736},{},[737],{"type":50,"value":738},"Intermediate UI Exchange:",{"type":50,"value":740}," The script does not pause at this stage, but\nadvances to Phase 4.",{"type":44,"tag":74,"props":742,"children":744},{"id":743},"phase-4-ingress-scanning-and-risk-profiling",[745],{"type":50,"value":746},"Phase 4: Ingress scanning and risk profiling",{"type":44,"tag":387,"props":748,"children":749},{},[750,760,777],{"type":44,"tag":85,"props":751,"children":752},{},[753,758],{"type":44,"tag":89,"props":754,"children":755},{},[756],{"type":50,"value":757},"Automated Risk Triage:",{"type":50,"value":759}," The scanner.py sub-component will\nprogrammatically evaluate metadata arrays for custom or native rewrite\nsnippets.",{"type":44,"tag":85,"props":761,"children":762},{},[763,768,770,775],{"type":44,"tag":89,"props":764,"children":765},{},[766],{"type":50,"value":767},"Incremental Document Update:",{"type":50,"value":769}," The script replaces the ",{"type":44,"tag":636,"props":771,"children":772},{},[773],{"type":50,"value":774},"Populated in Phase\n4",{"type":50,"value":776}," placeholder with a breakdown of Critical Blockers and Translation\nWarnings discovered during verification.",{"type":44,"tag":85,"props":778,"children":779},{},[780,785,787,792,794,799],{"type":44,"tag":89,"props":781,"children":782},{},[783],{"type":50,"value":784},"Interactive JSON Handoff Gate:",{"type":50,"value":786}," The agent must capture the script's\nemitted stdout payload between ",{"type":44,"tag":89,"props":788,"children":789},{},[790],{"type":50,"value":791},"AGENT_UI_DATA_START",{"type":50,"value":793}," and\n",{"type":44,"tag":89,"props":795,"children":796},{},[797],{"type":50,"value":798},"AGENT_UI_DATA_END",{"type":50,"value":800},". Display the comprehensive risk inventory full-string\narray to the operator, pause processing execution, and wait for a structured\nJSON map selection on stdin identifying approved migration asset targets.",{"type":44,"tag":74,"props":802,"children":804},{"id":803},"phase-5-translation-and-dry-run-validation",[805],{"type":50,"value":806},"Phase 5: Translation and dry run validation",{"type":44,"tag":387,"props":808,"children":809},{},[810,820,838,853,863],{"type":44,"tag":85,"props":811,"children":812},{},[813,818],{"type":44,"tag":89,"props":814,"children":815},{},[816],{"type":50,"value":817},"Translation Execution:",{"type":50,"value":819}," The engine passes approved target JSON structures\nto translator.py, which pulls down and runs the pre-compiled ingress2gateway\ncompiler to generate native Gateway API resource maps.",{"type":44,"tag":85,"props":821,"children":822},{},[823,828,830,836],{"type":44,"tag":89,"props":824,"children":825},{},[826],{"type":50,"value":827},"Validation & Safety Check:",{"type":50,"value":829}," The script executes the dry-run\n",{"type":44,"tag":66,"props":831,"children":833},{"className":832},[],[834],{"type":50,"value":835},"kubectl apply --dry-run=server -f {GATEWAY_API_MANIFEST_YAML}",{"type":50,"value":837}," command\nagainst the target cluster context. It analyzes the resulting stdout\u002Fstderr\nfor validation errors and captures the server response using Kubernetes API.",{"type":44,"tag":85,"props":839,"children":840},{},[841,845,846,851],{"type":44,"tag":89,"props":842,"children":843},{},[844],{"type":50,"value":767},{"type":50,"value":769},{"type":44,"tag":636,"props":847,"children":848},{},[849],{"type":50,"value":850},"Populated in Phase\n5 & 6",{"type":50,"value":852}," placeholder with the consolidated raw Gateway, HttpRoute and URLMap\nAPI manifest, the detected server-side validation results, and a detailed\nexplanation of any translation or deployment anomalies.",{"type":44,"tag":85,"props":854,"children":855},{},[856,861],{"type":44,"tag":89,"props":857,"children":858},{},[859],{"type":50,"value":860},"Interactive Deployment Signature:",{"type":50,"value":862}," The script prints out the compilation\ndetails using the approve_deployment UI protocol template. The agent must\ndisplay this text entirely and halt, blocking the runtime sequence until the\nuser submits a signed APPROVE or CANCEL string map to stdin.",{"type":44,"tag":85,"props":864,"children":865},{},[866,871],{"type":44,"tag":89,"props":867,"children":868},{},[869],{"type":50,"value":870},"Conditional Execution Gate:",{"type":44,"tag":81,"props":872,"children":873},{},[874,879],{"type":44,"tag":85,"props":875,"children":876},{},[877],{"type":50,"value":878},"If the validation response indicates zero deploy-time errors, the agent\nimmediately proceeds to Phase 6 (Execution).",{"type":44,"tag":85,"props":880,"children":881},{},[882,884,889,891],{"type":50,"value":883},"If validation errors are returned, the agent ",{"type":44,"tag":89,"props":885,"children":886},{},[887],{"type":50,"value":888},"must halt",{"type":50,"value":890},", append a\ncomprehensive error report to the bottom of the Markdown document, display\nthe final document, and explicitly ",{"type":44,"tag":89,"props":892,"children":893},{},[894],{"type":50,"value":895},"ask the user for permission to\nproceed with manual correction or bypass strict validation rules.",{"type":44,"tag":74,"props":897,"children":899},{"id":898},"phase-6-approval-and-execution",[900],{"type":50,"value":901},"Phase 6: Approval and execution",{"type":44,"tag":387,"props":903,"children":904},{},[905,915,924],{"type":44,"tag":85,"props":906,"children":907},{},[908,913],{"type":44,"tag":89,"props":909,"children":910},{},[911],{"type":50,"value":912},"Live Data Plane Injection:",{"type":50,"value":914}," If the interaction response on stdin reads\nAPPROVE, the script applies the manifests to the cluster using kubectl apply\n-f -. It then overwrites the final placeholders with a complete transaction\nreceipt string block.",{"type":44,"tag":85,"props":916,"children":917},{},[918,922],{"type":44,"tag":89,"props":919,"children":920},{},[921],{"type":50,"value":870},{"type":50,"value":923}," If the response reads CANCEL, the script\nintercepts the rejection, dumps the fully compiled Gateway configurations\nlocally into a migration-fallback.yaml asset backup, and posts a Deployment\nPaused status block to the analysis file.",{"type":44,"tag":85,"props":925,"children":926},{},[927,932],{"type":44,"tag":89,"props":928,"children":929},{},[930],{"type":50,"value":931},"Mandatory Hold & Exit:",{"type":50,"value":933}," Once the underlying script lifecycle gracefully\nexits, the agent must present a final execution summary to the workspace\nterminal and wait for further user interaction commands.",{"type":44,"tag":935,"props":936,"children":937},"style",{},[938],{"type":50,"value":939},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":941,"total":1128},[942,960,976,998,1012,1023,1037,1054,1071,1084,1100,1110],{"slug":943,"name":943,"fn":944,"description":945,"org":946,"tags":947,"stars":957,"repoUrl":958,"updatedAt":959},"kb-search","search and extract local knowledge base documents","Allows listing, searching and extracting information from local knowledge base documents for information about tables\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[948,951,954],{"name":949,"slug":950,"type":16},"Documentation","documentation",{"name":952,"slug":953,"type":16},"Knowledge Base","knowledge-base",{"name":955,"slug":956,"type":16},"Search","search",6749,"https:\u002F\u002Fgithub.com\u002FGoogleCloudPlatform\u002Fknowledge-catalog","2026-07-12T07:38:52.157375",{"slug":961,"name":962,"fn":963,"description":964,"org":965,"tags":966,"stars":957,"repoUrl":958,"updatedAt":975},"knowledgecatalogdiscoveryagent","knowledge_catalog_discovery_agent","search and rank Knowledge Catalog data entries","Analyzes user queries, extracts relevant predicates, and utilizes Knowledge Catalog Search to find and rank the most relevant data entries. Engages with the user throughout the process.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[967,970,971,974],{"name":968,"slug":969,"type":16},"Data Analysis","data-analysis",{"name":9,"slug":8,"type":16},{"name":972,"slug":973,"type":16},"Knowledge Management","knowledge-management",{"name":955,"slug":956,"type":16},"2026-07-12T07:38:22.196851",{"slug":977,"name":977,"fn":978,"description":979,"org":980,"tags":981,"stars":995,"repoUrl":996,"updatedAt":997},"contributing","contribute to Cloud Foundation Fabric","End-to-end workflow for contributing to Cloud Foundation Fabric: triaging GitHub issues, proactive feature development, validating with tests and Policy Troubleshooter, and submitting sanitized Pull Requests. Use when addressing a Fabric GitHub issue, developing a module or FAST stage change, or preparing a branch for a pull request.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[982,985,988,991,992],{"name":983,"slug":984,"type":16},"Automation","automation",{"name":986,"slug":987,"type":16},"Engineering","engineering",{"name":989,"slug":990,"type":16},"GitHub","github",{"name":9,"slug":8,"type":16},{"name":993,"slug":994,"type":16},"Pull Requests","pull-requests",2062,"https:\u002F\u002Fgithub.com\u002FGoogleCloudPlatform\u002Fcloud-foundation-fabric","2026-07-31T06:23:36.935005",{"slug":999,"name":999,"fn":1000,"description":1001,"org":1002,"tags":1003,"stars":995,"repoUrl":996,"updatedAt":1011},"fabric-builder","generate Terraform code for Google Cloud","Generates idiomatic Cloud Foundation Fabric (CFF) Terraform code using CFF modules. Use when users ask to create GCP resources, use Fabric modules, or generate Terraform code for Google Cloud.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1004,1005,1008],{"name":9,"slug":8,"type":16},{"name":1006,"slug":1007,"type":16},"Infrastructure as Code","infrastructure-as-code",{"name":1009,"slug":1010,"type":16},"Terraform","terraform","2026-07-12T07:38:23.514555",{"slug":1013,"name":1013,"fn":1014,"description":1015,"org":1016,"tags":1017,"stars":995,"repoUrl":996,"updatedAt":1022},"fast-0-org-setup-prereqs","prepare prerequisites for FAST 0-org-setup","Guides the user step-by-step through the prerequisites for the FAST 0-org-setup stage, supporting both Standard GCP and Google Cloud Dedicated (GCD) environments. Use when a user asks to prepare or run prerequisites for 0-org-setup or bootstrap the FAST landing zone.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1018,1019],{"name":9,"slug":8,"type":16},{"name":1020,"slug":1021,"type":16},"Operations","operations","2026-07-12T07:38:28.127148",{"slug":1024,"name":1024,"fn":1025,"description":1026,"org":1027,"tags":1028,"stars":1034,"repoUrl":1035,"updatedAt":1036},"agent-aware-cli","design agent-aware command-line interfaces","Guide for designing and implementing command-line interfaces (CLIs) that are equally usable by human developers and automated coding agents. Use when the user wants to build a CLI, apply CLI best practices, or use Go with Cobra and Viper.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1029,1032,1033],{"name":1030,"slug":1031,"type":16},"CLI","cli",{"name":986,"slug":987,"type":16},{"name":9,"slug":8,"type":16},1150,"https:\u002F\u002Fgithub.com\u002FGoogleCloudPlatform\u002Fvertex-ai-creative-studio","2026-07-12T07:39:08.41406",{"slug":1038,"name":1038,"fn":1039,"description":1040,"org":1041,"tags":1042,"stars":1034,"repoUrl":1035,"updatedAt":1053},"build-mcp-genmedia","build and configure GenAI MCP servers","Builds the mcp-genmedia Go MCP servers (nanobanana, veo, lyria, gemini-multimodal, chirp3-hd, avtool) from source and wires them into settings.json. Use this skill whenever the MCP tools are missing or broken — typically at the start of a new session, after a container restart, or when \u002Ftmp has been wiped. The prebuilt binaries in \u002Fworkspace\u002F.local\u002Fbin\u002F have no exec bit and live on a noexec mount; this skill compiles fresh executables into \u002Ftmp\u002Fbin\u002F where execution is allowed.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1043,1046,1047,1050],{"name":1044,"slug":1045,"type":16},"API Development","api-development",{"name":9,"slug":8,"type":16},{"name":1048,"slug":1049,"type":16},"LLM","llm",{"name":1051,"slug":1052,"type":16},"MCP","mcp","2026-07-12T07:39:10.911302",{"slug":1055,"name":1055,"fn":1056,"description":1057,"org":1058,"tags":1059,"stars":1034,"repoUrl":1035,"updatedAt":1070},"genmedia-audio-engineer","synthesize and mix audio content","Expert in audio synthesis, music generation, and mixing. Use when creating podcasts, background scores, or multi-track audio layering using mcp-chirp3-go, mcp-lyria-go, mcp-gemini-go, mcp-nanobanana-go, and mcp-avtool-go.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1060,1063,1066,1067],{"name":1061,"slug":1062,"type":16},"Audio","audio",{"name":1064,"slug":1065,"type":16},"Creative","creative",{"name":9,"slug":8,"type":16},{"name":1068,"slug":1069,"type":16},"Vertex AI","vertex-ai","2026-07-12T07:39:16.623879",{"slug":1072,"name":1072,"fn":1073,"description":1074,"org":1075,"tags":1076,"stars":1034,"repoUrl":1035,"updatedAt":1083},"genmedia-image-artist","generate and edit AI images","Expert in AI image generation and editing. Use when the user needs high-quality textures, character-consistent visuals, or image-to-image editing using mcp-nanobanana-go.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1077,1078,1079,1082],{"name":1064,"slug":1065,"type":16},{"name":9,"slug":8,"type":16},{"name":1080,"slug":1081,"type":16},"Image Generation","image-generation",{"name":1068,"slug":1069,"type":16},"2026-07-12T07:39:15.372822",{"slug":1085,"name":1085,"fn":1086,"description":1087,"org":1088,"tags":1089,"stars":1034,"repoUrl":1035,"updatedAt":1099},"genmedia-producer","produce multi-step media content","Expert media production assistant. Use when requested to help with storyboarding, podcast creation, audio assembly, or complex multi-step media workflows using the GenMedia MCP servers (Veo, Lyria, Gemini TTS, NanoBanana).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1090,1091,1092,1093,1096],{"name":1061,"slug":1062,"type":16},{"name":1064,"slug":1065,"type":16},{"name":9,"slug":8,"type":16},{"name":1094,"slug":1095,"type":16},"Media","media",{"name":1097,"slug":1098,"type":16},"Video","video","2026-07-12T07:39:09.672849",{"slug":1101,"name":1101,"fn":1102,"description":1103,"org":1104,"tags":1105,"stars":1034,"repoUrl":1035,"updatedAt":1109},"genmedia-video-editor","edit and compose video content","Expert in video composition, editing, and format conversion. Use when the user wants to generate high-quality video, overlay images on video, concatenate clips, create GIFs, or sync audio to video using mcp-avtool-go and mcp-veo-go.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1106,1107,1108],{"name":1064,"slug":1065,"type":16},{"name":9,"slug":8,"type":16},{"name":1097,"slug":1098,"type":16},"2026-07-12T07:39:13.749081",{"slug":1111,"name":1111,"fn":1112,"description":1113,"org":1114,"tags":1115,"stars":1034,"repoUrl":1035,"updatedAt":1127},"genmedia-voice-director","generate expressive text-to-speech with Gemini","Expert in casting, directing, and generating expressive text-to-speech using Gemini TTS. Use this when the user needs virtual voice actor personas, expressive speech generation, or multiple variations of a voiceover (like \"take 3 on the bounce\").",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1116,1117,1118,1121,1124],{"name":1061,"slug":1062,"type":16},{"name":1064,"slug":1065,"type":16},{"name":1119,"slug":1120,"type":16},"Gemini","gemini",{"name":1122,"slug":1123,"type":16},"Speech","speech",{"name":1125,"slug":1126,"type":16},"Text-to-Speech","text-to-speech","2026-07-12T07:39:17.86673",80,{"items":1130,"total":1234},[1131,1150,1167,1175,1192,1207,1221],{"slug":1132,"name":1132,"fn":1133,"description":1134,"org":1135,"tags":1136,"stars":27,"repoUrl":28,"updatedAt":1149},"ad-copywriting","generate Google Ads copy","Google Ads copywriting expertise. Covers Responsive Search Ad (RSA) best practices, headline formulas, description frameworks, and character limits. Load this skill when generating text ads, headlines, or ad copy.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1137,1140,1143,1146],{"name":1138,"slug":1139,"type":16},"Content Creation","content-creation",{"name":1141,"slug":1142,"type":16},"Marketing","marketing",{"name":1144,"slug":1145,"type":16},"SEO","seo",{"name":1147,"slug":1148,"type":16},"Writing","writing","2026-07-28T06:06:03.874595",{"slug":1151,"name":1151,"fn":1152,"description":1153,"org":1154,"tags":1155,"stars":27,"repoUrl":28,"updatedAt":1166},"brand-strategy","develop brand strategy and campaign positioning","Brand strategy and campaign positioning expertise. Covers audience segmentation, competitive differentiation, value proposition frameworks, and campaign brief creation. Load this skill when setting up campaigns, selecting audience segments, or defining creative direction.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1156,1159,1162,1163],{"name":1157,"slug":1158,"type":16},"Branding","branding",{"name":1160,"slug":1161,"type":16},"Campaign Planning","campaign-planning",{"name":1141,"slug":1142,"type":16},{"name":1164,"slug":1165,"type":16},"Strategy","strategy","2026-07-28T06:06:04.216544",{"slug":4,"name":4,"fn":5,"description":6,"org":1168,"tags":1169,"stars":27,"repoUrl":28,"updatedAt":29},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1170,1171,1172,1173,1174],{"name":18,"slug":19,"type":16},{"name":9,"slug":8,"type":16},{"name":24,"slug":25,"type":16},{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"slug":1176,"name":1176,"fn":1177,"description":1178,"org":1179,"tags":1180,"stars":27,"repoUrl":28,"updatedAt":1191},"platform-specs","apply ad platform specifications and best practices","Ad platform specifications and best practices. Covers Google Ads, YouTube, Instagram, TikTok, and Meta ad formats, dimensions, character limits, and optimization tips. Load this skill when creating platform-specific content or recommending campaign settings.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1181,1184,1187,1188],{"name":1182,"slug":1183,"type":16},"Advertising","advertising",{"name":1185,"slug":1186,"type":16},"Best Practices","best-practices",{"name":1141,"slug":1142,"type":16},{"name":1189,"slug":1190,"type":16},"Reporting","reporting","2026-07-28T06:06:03.176981",{"slug":1193,"name":1193,"fn":1194,"description":1195,"org":1196,"tags":1197,"stars":27,"repoUrl":28,"updatedAt":1206},"trend-analysis","analyze market trends and product mapping","Market trend analysis and product-trend mapping expertise. Covers how to interpret trend data, align products to cultural moments, and create trend-informed campaign angles. Load this skill during the Creative Research Phase when running trend_spotter and product_trend_mapper.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1198,1201,1204,1205],{"name":1199,"slug":1200,"type":16},"Analysis","analysis",{"name":1202,"slug":1203,"type":16},"Competitive Intelligence","competitive-intelligence",{"name":1141,"slug":1142,"type":16},{"name":1164,"slug":1165,"type":16},"2026-07-28T06:06:00.715449",{"slug":1208,"name":1208,"fn":1209,"description":1210,"org":1211,"tags":1212,"stars":27,"repoUrl":28,"updatedAt":1220},"video-storytelling","generate cinematic video ad narratives","Cinematic video ad storytelling expertise. Covers 3-act narrative structure, emotional arcs, camera motion, scene transitions, and voiceover pacing for 10-second commercial video ads using Gemini Omni. Load this skill when generating video ads or storylines.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1213,1214,1215,1216,1219],{"name":1064,"slug":1065,"type":16},{"name":1119,"slug":1120,"type":16},{"name":1141,"slug":1142,"type":16},{"name":1217,"slug":1218,"type":16},"Multimodal","multimodal",{"name":1097,"slug":1098,"type":16},"2026-07-28T06:06:00.367869",{"slug":1222,"name":1222,"fn":1223,"description":1224,"org":1225,"tags":1226,"stars":27,"repoUrl":28,"updatedAt":1233},"visual-direction","provide visual art direction for marketing","Visual art direction expertise for marketing imagery. Covers photography styles, composition rules, color theory, lighting techniques, and product staging. Load this skill when generating image ads, asset sheets, moodboards, or keyframe images.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1227,1228,1229,1230],{"name":1064,"slug":1065,"type":16},{"name":1080,"slug":1081,"type":16},{"name":1141,"slug":1142,"type":16},{"name":1231,"slug":1232,"type":16},"Visual Design","visual-design","2026-07-28T06:06:04.563623",7]