[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-google-cloud-agent-aware-cli":3,"mdc-ksk4fu-key":40,"related-org-google-cloud-agent-aware-cli":1183,"related-repo-google-cloud-agent-aware-cli":1360},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":21,"repoUrl":22,"updatedAt":23,"license":24,"forks":25,"topics":26,"repo":35,"sourceUrl":38,"mdContent":39},"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},"google-cloud","Google Cloud","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fgoogle-cloud.png","GoogleCloudPlatform",[13,17,20],{"name":14,"slug":15,"type":16},"CLI","cli","tag",{"name":18,"slug":19,"type":16},"Engineering","engineering",{"name":9,"slug":8,"type":16},1150,"https:\u002F\u002Fgithub.com\u002FGoogleCloudPlatform\u002Fvertex-ai-creative-studio","2026-07-12T07:39:08.41406",null,349,[27,28,29,8,30,31,32,33,34],"chirp","gemini","gemini-tts","imagen","lyria","nano-banana","veo","vertex-ai",{"repoUrl":22,"stars":21,"forks":25,"topics":36,"description":37},[27,28,29,8,30,31,32,33,34],"GenMedia Creative Studio is a generative media user experience highlighting the use of Gemini, Gemini Omni, Veo, Gemini Image 🍌, Gemini TTS, Chirp 3, Lyria and other generative media APIs on Google Cloud.","https:\u002F\u002Fgithub.com\u002FGoogleCloudPlatform\u002Fvertex-ai-creative-studio\u002Ftree\u002FHEAD\u002Fexperiments\u002Fmcp-genmedia\u002Fskills\u002Fagent-aware-cli","---\nname: agent-aware-cli\ndescription: 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.\n---\n\n# Agent-Aware CLI Design Guidelines\n\nWhen tasked with building or improving a Command Line Interface (CLI), follow these architectural and design best practices to ensure it serves both human operators (with rich TUIs) and AI agents (with deterministic, machine-readable output).\n\n## Core Principles\n\n1. **The Dual-Experience Paradigm (DX & AX)**\n   This CLI must be designed as a \"Dual-Mode\" interface, treating both humans and AI agents as first-class users.\n   - **DX (Developer Experience)**: Ergonomics for human operators. Emphasizes discoverability, rich TUIs (e.g., Bubbletea, Lipgloss), semantic coloring, and intuitive aliases.\n   - **AX (Agent Experience)**: Ergonomics for autonomous AI agents. Emphasizes determinism, strict machine-readable output modes (e.g., `--json`), headless authentication, aggressive data scoping (limits\u002Ffiltering), and mutative safety (`--dry-run`).\n   - **Environment Overrides**: Respect `NO_COLOR` and `[APP]_NO_TUI` environment variables to automatically fall back to non-interactive, unstyled modes.\n\n2. **Headless-Friendly Authentication**\n   - Agents cannot complete interactive, browser-based OAuth flows. CLIs must either support headless auth methods (Service Accounts, API Keys via ENV vars, `--token` flags) OR immediately fail with a clear, machine-readable error instructing the human operator to authenticate manually first.\n\n3. **Sane Defaults & Aggressive Filtering**\n   - Never dump unpaginated or unfiltered lists to `stdout`. Default to sensible limits (e.g., top 10 items). Provide rich filtering flags (e.g., `--status`, `--mine`, `--limit`) so agents can surgically query exactly what they need without blowing out their token context.\n\n4. **Mutative Safety (`--dry-run`)**\n   - For commands that create, update, or delete external state, implement a `--dry-run` flag. This allows an autonomous agent to test its parameter mapping and validate the resulting payload locally before executing the destructive action.\n\n5. **Context Window Protection**\n   - Agents have limited context windows. Actively truncate massive text blobs, sort critical action items to the top, and mask raw credentials by default to prevent credential leakage.\n   - Provide opt-in verbosity (e.g., `--full` or `--verbose`) for agents or humans who explicitly request unfiltered data.\n\n6. **Executable Proactive Error Hints**\n   - Don't just report failures; provide the exact steps to fix them.\n   - Inject copy-pasteable terminal commands into `stderr` (e.g., `Hint: run 'app init' to create a database`). This enables autonomous agents to parse the error and self-correct seamlessly.\n\n7. **Delegated State Management**\n   - Avoid maintaining long-running state loops within the CLI if orchestrating complex workflows.\n   - Use a stateless task identifier pattern (`--task \u003CID>`, `--ref \u003CID>`). Pass the ID back to the backend service, which maintains the token context window and conversation history.\n\n8. **Externalized Agent Instructions**\n   - Add an `AGENTS.md` or `GEMINI.md` file at the repository root explaining the tool's usage, workflows, and standards for AI developers.\n   - Provide an `agentskills.io` compliant `skills\u002F` directory with `SKILL.md` files for complex subcommands.\n\n9. **API Discovery & Progressive Convenience**\n   - When building a CLI against a large Google\u002FREST API, analyze its **Discovery Document** (e.g. `https:\u002F\u002Fyoutube.googleapis.com\u002F$discovery\u002Frest?version=v3`) to understand the exact, strict mappings of resources, methods, query parameters, and required OAuth scopes.\n   - Consider auto-generating the base commands directly from the Discovery Document to guarantee 100% API coverage. \n   - **However, raw REST mappings are often un-ergonomic for humans**. You must layer \"Convenience Wrappers\" or \"Hints\" on top of the raw generated commands. For example, if a user asks to \"list videos for a user\", the CLI should intelligently abstract away the fact that it takes two API calls (one to resolve the handle to a Channel ID, and another to fetch the playlist) under a single `channel videos @user` command.\n\n## Implementation with Go (Cobra & Viper)\n\nWhen implementing a CLI in Go, use **Cobra** for command routing and **Viper** for configuration management.\n\n### Cobra Practices\n- **Structured Discoverability**: Prevent a \"wall of text\" in the root help output by using Cobra's `GroupID` to categorize commands (e.g., `Task Management`, `Information`).\n- **The Three Pillars of Documentation**: Populate these fields for *every* command:\n  - `Short`: A 5-10 word summary starting with an action verb for quick scanning.\n  - `Long`: Detailed explanation of *what* it does, *why*, and its differentiation.\n  - `Example`: 3-5 concrete, copy-pasteable examples showing common flag combinations.\n- **Fail Fast Hooks**: Validate configuration and connectivity in `PersistentPreRun` hooks before executing heavy logic.\n\n### Viper & Configuration Practices\n- **XDG Compliance**: Follow the XDG Base Directory Specification for configuration files (e.g., `~\u002F.config\u002Fapp\u002Fconfig.yaml`).\n- **Smart Fallbacks Priority**: Use Viper to ensure values resolve in this consistent order:\n  `Command Line Flag > Environment Variable > Config File > Default Value`\n- **Secrets Management**: Never allow API keys to leak into shell history. Prefer environment variables over CLI flags for secrets.\n\n## Visual Information Design (Human Mode)\n\nWhen optimizing the CLI for human readability, draw on Tufte-inspired principles to minimize cognitive load:\n- **Maximize Data-Ink Ratio**: Minimize non-essential \"ink\" like decorative borders. Use whitespace and positioning as the primary tools for conveying hierarchy.\n- **Resilient UI Formatting**: Always apply padding and width enforcement to raw strings *before* applying terminal styling (e.g., with `lipgloss`). Invisible ANSI escape codes can otherwise corrupt `fmt.Printf` table alignments.\n- **The ANSI Alignment Gotcha**: When building TUI tables in Go, native tools like `text\u002Ftabwriter` or `fmt.Printf` will break alignment if you pass strings containing invisible ANSI color codes. You MUST pad strings to their fixed widths *before* applying color wrappers, or use a robust layout engine like `lipgloss.Table`.\n- **Semantic Color Tokens**: Use specific functional colors rather than aesthetic ones:\n  - `Accent` (Blue): Navigation landmarks, headers, group titles.\n  - `Command` (Grey\u002FLight Grey): Scan targets like command names and flags.\n  - `Pass` (Green): Success states and completed tasks.\n  - `Warn` (Orange\u002FYellow): Transient or pending states, warnings.\n  - `Fail` (Red): Errors and rejected states.\n  - `Muted` (Dark Grey): De-emphasis for metadata, types, or defaults.\n  - `ID` (Teal\u002FMint): Unique identifiers.\n- **Color Degradation**: Ensure colors degrade gracefully when piped to a file, when `--json` is invoked, or when `NO_COLOR` is present.\n\n## Mandatory Implementation Checklist for Agents\n\nWhen generating or updating a CLI command, you MUST ensure all of the following are implemented on your **first pass**. Do not treat UI\u002FUX as an afterthought:\n\n- [ ] **Dual-Experience (DX\u002FAX)**: Does the command support a `--json` flag or respect `NO_COLOR`\u002F`[APP]_NO_TUI`?\n- [ ] **Headless Auth**: Can an agent run this command autonomously without hanging on a browser-based OAuth prompt?\n- [ ] **Data Scoping**: If returning a list, are there sane default limits and filtering flags (e.g., `--limit`, `--status`)?\n- [ ] **Mutative Safety**: If the command mutates state, does it include a `--dry-run` flag for agent safety?\n- [ ] **Error Hints**: Do errors print actionable, copy-pasteable terminal commands to `stderr`?\n- [ ] **XDG Compliance**: Is configuration handled via the XDG Base Directory specification (e.g. `~\u002F.config\u002Fapp\u002Fconfig.yaml`) instead of local `.env` files?\n- [ ] **The Three Pillars**: Are `Short`, `Long`, and `Example` fields fully populated in the Cobra command definition?\n- [ ] **Discoverability**: Is the command assigned to a logical `GroupID`?\n- [ ] **Semantic Colors**: Is the human-readable output formatted using the semantic color tokens (e.g., Lipgloss)?\n- [ ] **Alignment Safety**: If using raw ANSI colors in tables, is string padding applied *before* the color codes to prevent alignment breaking?\n- [ ] **Help Formatting**: Have you overridden Cobra's default `SetUsageTemplate` to apply semantic colors to the help output itself (e.g., coloring headers blue)?\n",{"data":41,"body":42},{"name":4,"description":6},{"type":43,"children":44},"root",[45,54,60,67,475,481,500,507,628,634,680,686,691,889,895,907],{"type":46,"tag":47,"props":48,"children":50},"element","h1",{"id":49},"agent-aware-cli-design-guidelines",[51],{"type":52,"value":53},"text","Agent-Aware CLI Design Guidelines",{"type":46,"tag":55,"props":56,"children":57},"p",{},[58],{"type":52,"value":59},"When tasked with building or improving a Command Line Interface (CLI), follow these architectural and design best practices to ensure it serves both human operators (with rich TUIs) and AI agents (with deterministic, machine-readable output).",{"type":46,"tag":61,"props":62,"children":64},"h2",{"id":63},"core-principles",[65],{"type":52,"value":66},"Core Principles",{"type":46,"tag":68,"props":69,"children":70},"ol",{},[71,150,174,221,251,288,325,361,421],{"type":46,"tag":72,"props":73,"children":74},"li",{},[75,81,83],{"type":46,"tag":76,"props":77,"children":78},"strong",{},[79],{"type":52,"value":80},"The Dual-Experience Paradigm (DX & AX)",{"type":52,"value":82},"\nThis CLI must be designed as a \"Dual-Mode\" interface, treating both humans and AI agents as first-class users.",{"type":46,"tag":84,"props":85,"children":86},"ul",{},[87,97,124],{"type":46,"tag":72,"props":88,"children":89},{},[90,95],{"type":46,"tag":76,"props":91,"children":92},{},[93],{"type":52,"value":94},"DX (Developer Experience)",{"type":52,"value":96},": Ergonomics for human operators. Emphasizes discoverability, rich TUIs (e.g., Bubbletea, Lipgloss), semantic coloring, and intuitive aliases.",{"type":46,"tag":72,"props":98,"children":99},{},[100,105,107,114,116,122],{"type":46,"tag":76,"props":101,"children":102},{},[103],{"type":52,"value":104},"AX (Agent Experience)",{"type":52,"value":106},": Ergonomics for autonomous AI agents. Emphasizes determinism, strict machine-readable output modes (e.g., ",{"type":46,"tag":108,"props":109,"children":111},"code",{"className":110},[],[112],{"type":52,"value":113},"--json",{"type":52,"value":115},"), headless authentication, aggressive data scoping (limits\u002Ffiltering), and mutative safety (",{"type":46,"tag":108,"props":117,"children":119},{"className":118},[],[120],{"type":52,"value":121},"--dry-run",{"type":52,"value":123},").",{"type":46,"tag":72,"props":125,"children":126},{},[127,132,134,140,142,148],{"type":46,"tag":76,"props":128,"children":129},{},[130],{"type":52,"value":131},"Environment Overrides",{"type":52,"value":133},": Respect ",{"type":46,"tag":108,"props":135,"children":137},{"className":136},[],[138],{"type":52,"value":139},"NO_COLOR",{"type":52,"value":141}," and ",{"type":46,"tag":108,"props":143,"children":145},{"className":144},[],[146],{"type":52,"value":147},"[APP]_NO_TUI",{"type":52,"value":149}," environment variables to automatically fall back to non-interactive, unstyled modes.",{"type":46,"tag":72,"props":151,"children":152},{},[153,158],{"type":46,"tag":76,"props":154,"children":155},{},[156],{"type":52,"value":157},"Headless-Friendly Authentication",{"type":46,"tag":84,"props":159,"children":160},{},[161],{"type":46,"tag":72,"props":162,"children":163},{},[164,166,172],{"type":52,"value":165},"Agents cannot complete interactive, browser-based OAuth flows. CLIs must either support headless auth methods (Service Accounts, API Keys via ENV vars, ",{"type":46,"tag":108,"props":167,"children":169},{"className":168},[],[170],{"type":52,"value":171},"--token",{"type":52,"value":173}," flags) OR immediately fail with a clear, machine-readable error instructing the human operator to authenticate manually first.",{"type":46,"tag":72,"props":175,"children":176},{},[177,182],{"type":46,"tag":76,"props":178,"children":179},{},[180],{"type":52,"value":181},"Sane Defaults & Aggressive Filtering",{"type":46,"tag":84,"props":183,"children":184},{},[185],{"type":46,"tag":72,"props":186,"children":187},{},[188,190,196,198,204,206,212,213,219],{"type":52,"value":189},"Never dump unpaginated or unfiltered lists to ",{"type":46,"tag":108,"props":191,"children":193},{"className":192},[],[194],{"type":52,"value":195},"stdout",{"type":52,"value":197},". Default to sensible limits (e.g., top 10 items). Provide rich filtering flags (e.g., ",{"type":46,"tag":108,"props":199,"children":201},{"className":200},[],[202],{"type":52,"value":203},"--status",{"type":52,"value":205},", ",{"type":46,"tag":108,"props":207,"children":209},{"className":208},[],[210],{"type":52,"value":211},"--mine",{"type":52,"value":205},{"type":46,"tag":108,"props":214,"children":216},{"className":215},[],[217],{"type":52,"value":218},"--limit",{"type":52,"value":220},") so agents can surgically query exactly what they need without blowing out their token context.",{"type":46,"tag":72,"props":222,"children":223},{},[224,236],{"type":46,"tag":76,"props":225,"children":226},{},[227,229,234],{"type":52,"value":228},"Mutative Safety (",{"type":46,"tag":108,"props":230,"children":232},{"className":231},[],[233],{"type":52,"value":121},{"type":52,"value":235},")",{"type":46,"tag":84,"props":237,"children":238},{},[239],{"type":46,"tag":72,"props":240,"children":241},{},[242,244,249],{"type":52,"value":243},"For commands that create, update, or delete external state, implement a ",{"type":46,"tag":108,"props":245,"children":247},{"className":246},[],[248],{"type":52,"value":121},{"type":52,"value":250}," flag. This allows an autonomous agent to test its parameter mapping and validate the resulting payload locally before executing the destructive action.",{"type":46,"tag":72,"props":252,"children":253},{},[254,259],{"type":46,"tag":76,"props":255,"children":256},{},[257],{"type":52,"value":258},"Context Window Protection",{"type":46,"tag":84,"props":260,"children":261},{},[262,267],{"type":46,"tag":72,"props":263,"children":264},{},[265],{"type":52,"value":266},"Agents have limited context windows. Actively truncate massive text blobs, sort critical action items to the top, and mask raw credentials by default to prevent credential leakage.",{"type":46,"tag":72,"props":268,"children":269},{},[270,272,278,280,286],{"type":52,"value":271},"Provide opt-in verbosity (e.g., ",{"type":46,"tag":108,"props":273,"children":275},{"className":274},[],[276],{"type":52,"value":277},"--full",{"type":52,"value":279}," or ",{"type":46,"tag":108,"props":281,"children":283},{"className":282},[],[284],{"type":52,"value":285},"--verbose",{"type":52,"value":287},") for agents or humans who explicitly request unfiltered data.",{"type":46,"tag":72,"props":289,"children":290},{},[291,296],{"type":46,"tag":76,"props":292,"children":293},{},[294],{"type":52,"value":295},"Executable Proactive Error Hints",{"type":46,"tag":84,"props":297,"children":298},{},[299,304],{"type":46,"tag":72,"props":300,"children":301},{},[302],{"type":52,"value":303},"Don't just report failures; provide the exact steps to fix them.",{"type":46,"tag":72,"props":305,"children":306},{},[307,309,315,317,323],{"type":52,"value":308},"Inject copy-pasteable terminal commands into ",{"type":46,"tag":108,"props":310,"children":312},{"className":311},[],[313],{"type":52,"value":314},"stderr",{"type":52,"value":316}," (e.g., ",{"type":46,"tag":108,"props":318,"children":320},{"className":319},[],[321],{"type":52,"value":322},"Hint: run 'app init' to create a database",{"type":52,"value":324},"). This enables autonomous agents to parse the error and self-correct seamlessly.",{"type":46,"tag":72,"props":326,"children":327},{},[328,333],{"type":46,"tag":76,"props":329,"children":330},{},[331],{"type":52,"value":332},"Delegated State Management",{"type":46,"tag":84,"props":334,"children":335},{},[336,341],{"type":46,"tag":72,"props":337,"children":338},{},[339],{"type":52,"value":340},"Avoid maintaining long-running state loops within the CLI if orchestrating complex workflows.",{"type":46,"tag":72,"props":342,"children":343},{},[344,346,352,353,359],{"type":52,"value":345},"Use a stateless task identifier pattern (",{"type":46,"tag":108,"props":347,"children":349},{"className":348},[],[350],{"type":52,"value":351},"--task \u003CID>",{"type":52,"value":205},{"type":46,"tag":108,"props":354,"children":356},{"className":355},[],[357],{"type":52,"value":358},"--ref \u003CID>",{"type":52,"value":360},"). Pass the ID back to the backend service, which maintains the token context window and conversation history.",{"type":46,"tag":72,"props":362,"children":363},{},[364,369],{"type":46,"tag":76,"props":365,"children":366},{},[367],{"type":52,"value":368},"Externalized Agent Instructions",{"type":46,"tag":84,"props":370,"children":371},{},[372,392],{"type":46,"tag":72,"props":373,"children":374},{},[375,377,383,384,390],{"type":52,"value":376},"Add an ",{"type":46,"tag":108,"props":378,"children":380},{"className":379},[],[381],{"type":52,"value":382},"AGENTS.md",{"type":52,"value":279},{"type":46,"tag":108,"props":385,"children":387},{"className":386},[],[388],{"type":52,"value":389},"GEMINI.md",{"type":52,"value":391}," file at the repository root explaining the tool's usage, workflows, and standards for AI developers.",{"type":46,"tag":72,"props":393,"children":394},{},[395,397,403,405,411,413,419],{"type":52,"value":396},"Provide an ",{"type":46,"tag":108,"props":398,"children":400},{"className":399},[],[401],{"type":52,"value":402},"agentskills.io",{"type":52,"value":404}," compliant ",{"type":46,"tag":108,"props":406,"children":408},{"className":407},[],[409],{"type":52,"value":410},"skills\u002F",{"type":52,"value":412}," directory with ",{"type":46,"tag":108,"props":414,"children":416},{"className":415},[],[417],{"type":52,"value":418},"SKILL.md",{"type":52,"value":420}," files for complex subcommands.",{"type":46,"tag":72,"props":422,"children":423},{},[424,429],{"type":46,"tag":76,"props":425,"children":426},{},[427],{"type":52,"value":428},"API Discovery & Progressive Convenience",{"type":46,"tag":84,"props":430,"children":431},{},[432,452,457],{"type":46,"tag":72,"props":433,"children":434},{},[435,437,442,444,450],{"type":52,"value":436},"When building a CLI against a large Google\u002FREST API, analyze its ",{"type":46,"tag":76,"props":438,"children":439},{},[440],{"type":52,"value":441},"Discovery Document",{"type":52,"value":443}," (e.g. ",{"type":46,"tag":108,"props":445,"children":447},{"className":446},[],[448],{"type":52,"value":449},"https:\u002F\u002Fyoutube.googleapis.com\u002F$discovery\u002Frest?version=v3",{"type":52,"value":451},") to understand the exact, strict mappings of resources, methods, query parameters, and required OAuth scopes.",{"type":46,"tag":72,"props":453,"children":454},{},[455],{"type":52,"value":456},"Consider auto-generating the base commands directly from the Discovery Document to guarantee 100% API coverage.",{"type":46,"tag":72,"props":458,"children":459},{},[460,465,467,473],{"type":46,"tag":76,"props":461,"children":462},{},[463],{"type":52,"value":464},"However, raw REST mappings are often un-ergonomic for humans",{"type":52,"value":466},". You must layer \"Convenience Wrappers\" or \"Hints\" on top of the raw generated commands. For example, if a user asks to \"list videos for a user\", the CLI should intelligently abstract away the fact that it takes two API calls (one to resolve the handle to a Channel ID, and another to fetch the playlist) under a single ",{"type":46,"tag":108,"props":468,"children":470},{"className":469},[],[471],{"type":52,"value":472},"channel videos @user",{"type":52,"value":474}," command.",{"type":46,"tag":61,"props":476,"children":478},{"id":477},"implementation-with-go-cobra-viper",[479],{"type":52,"value":480},"Implementation with Go (Cobra & Viper)",{"type":46,"tag":55,"props":482,"children":483},{},[484,486,491,493,498],{"type":52,"value":485},"When implementing a CLI in Go, use ",{"type":46,"tag":76,"props":487,"children":488},{},[489],{"type":52,"value":490},"Cobra",{"type":52,"value":492}," for command routing and ",{"type":46,"tag":76,"props":494,"children":495},{},[496],{"type":52,"value":497},"Viper",{"type":52,"value":499}," for configuration management.",{"type":46,"tag":501,"props":502,"children":504},"h3",{"id":503},"cobra-practices",[505],{"type":52,"value":506},"Cobra Practices",{"type":46,"tag":84,"props":508,"children":509},{},[510,542,610],{"type":46,"tag":72,"props":511,"children":512},{},[513,518,520,526,528,534,535,541],{"type":46,"tag":76,"props":514,"children":515},{},[516],{"type":52,"value":517},"Structured Discoverability",{"type":52,"value":519},": Prevent a \"wall of text\" in the root help output by using Cobra's ",{"type":46,"tag":108,"props":521,"children":523},{"className":522},[],[524],{"type":52,"value":525},"GroupID",{"type":52,"value":527}," to categorize commands (e.g., ",{"type":46,"tag":108,"props":529,"children":531},{"className":530},[],[532],{"type":52,"value":533},"Task Management",{"type":52,"value":205},{"type":46,"tag":108,"props":536,"children":538},{"className":537},[],[539],{"type":52,"value":540},"Information",{"type":52,"value":123},{"type":46,"tag":72,"props":543,"children":544},{},[545,550,552,558,560],{"type":46,"tag":76,"props":546,"children":547},{},[548],{"type":52,"value":549},"The Three Pillars of Documentation",{"type":52,"value":551},": Populate these fields for ",{"type":46,"tag":553,"props":554,"children":555},"em",{},[556],{"type":52,"value":557},"every",{"type":52,"value":559}," command:\n",{"type":46,"tag":84,"props":561,"children":562},{},[563,574,599],{"type":46,"tag":72,"props":564,"children":565},{},[566,572],{"type":46,"tag":108,"props":567,"children":569},{"className":568},[],[570],{"type":52,"value":571},"Short",{"type":52,"value":573},": A 5-10 word summary starting with an action verb for quick scanning.",{"type":46,"tag":72,"props":575,"children":576},{},[577,583,585,590,592,597],{"type":46,"tag":108,"props":578,"children":580},{"className":579},[],[581],{"type":52,"value":582},"Long",{"type":52,"value":584},": Detailed explanation of ",{"type":46,"tag":553,"props":586,"children":587},{},[588],{"type":52,"value":589},"what",{"type":52,"value":591}," it does, ",{"type":46,"tag":553,"props":593,"children":594},{},[595],{"type":52,"value":596},"why",{"type":52,"value":598},", and its differentiation.",{"type":46,"tag":72,"props":600,"children":601},{},[602,608],{"type":46,"tag":108,"props":603,"children":605},{"className":604},[],[606],{"type":52,"value":607},"Example",{"type":52,"value":609},": 3-5 concrete, copy-pasteable examples showing common flag combinations.",{"type":46,"tag":72,"props":611,"children":612},{},[613,618,620,626],{"type":46,"tag":76,"props":614,"children":615},{},[616],{"type":52,"value":617},"Fail Fast Hooks",{"type":52,"value":619},": Validate configuration and connectivity in ",{"type":46,"tag":108,"props":621,"children":623},{"className":622},[],[624],{"type":52,"value":625},"PersistentPreRun",{"type":52,"value":627}," hooks before executing heavy logic.",{"type":46,"tag":501,"props":629,"children":631},{"id":630},"viper-configuration-practices",[632],{"type":52,"value":633},"Viper & Configuration Practices",{"type":46,"tag":84,"props":635,"children":636},{},[637,654,670],{"type":46,"tag":72,"props":638,"children":639},{},[640,645,647,653],{"type":46,"tag":76,"props":641,"children":642},{},[643],{"type":52,"value":644},"XDG Compliance",{"type":52,"value":646},": Follow the XDG Base Directory Specification for configuration files (e.g., ",{"type":46,"tag":108,"props":648,"children":650},{"className":649},[],[651],{"type":52,"value":652},"~\u002F.config\u002Fapp\u002Fconfig.yaml",{"type":52,"value":123},{"type":46,"tag":72,"props":655,"children":656},{},[657,662,664],{"type":46,"tag":76,"props":658,"children":659},{},[660],{"type":52,"value":661},"Smart Fallbacks Priority",{"type":52,"value":663},": Use Viper to ensure values resolve in this consistent order:\n",{"type":46,"tag":108,"props":665,"children":667},{"className":666},[],[668],{"type":52,"value":669},"Command Line Flag > Environment Variable > Config File > Default Value",{"type":46,"tag":72,"props":671,"children":672},{},[673,678],{"type":46,"tag":76,"props":674,"children":675},{},[676],{"type":52,"value":677},"Secrets Management",{"type":52,"value":679},": Never allow API keys to leak into shell history. Prefer environment variables over CLI flags for secrets.",{"type":46,"tag":61,"props":681,"children":683},{"id":682},"visual-information-design-human-mode",[684],{"type":52,"value":685},"Visual Information Design (Human Mode)",{"type":46,"tag":55,"props":687,"children":688},{},[689],{"type":52,"value":690},"When optimizing the CLI for human readability, draw on Tufte-inspired principles to minimize cognitive load:",{"type":46,"tag":84,"props":692,"children":693},{},[694,704,737,775,865],{"type":46,"tag":72,"props":695,"children":696},{},[697,702],{"type":46,"tag":76,"props":698,"children":699},{},[700],{"type":52,"value":701},"Maximize Data-Ink Ratio",{"type":52,"value":703},": Minimize non-essential \"ink\" like decorative borders. Use whitespace and positioning as the primary tools for conveying hierarchy.",{"type":46,"tag":72,"props":705,"children":706},{},[707,712,714,719,721,727,729,735],{"type":46,"tag":76,"props":708,"children":709},{},[710],{"type":52,"value":711},"Resilient UI Formatting",{"type":52,"value":713},": Always apply padding and width enforcement to raw strings ",{"type":46,"tag":553,"props":715,"children":716},{},[717],{"type":52,"value":718},"before",{"type":52,"value":720}," applying terminal styling (e.g., with ",{"type":46,"tag":108,"props":722,"children":724},{"className":723},[],[725],{"type":52,"value":726},"lipgloss",{"type":52,"value":728},"). Invisible ANSI escape codes can otherwise corrupt ",{"type":46,"tag":108,"props":730,"children":732},{"className":731},[],[733],{"type":52,"value":734},"fmt.Printf",{"type":52,"value":736}," table alignments.",{"type":46,"tag":72,"props":738,"children":739},{},[740,745,747,753,754,759,761,765,767,773],{"type":46,"tag":76,"props":741,"children":742},{},[743],{"type":52,"value":744},"The ANSI Alignment Gotcha",{"type":52,"value":746},": When building TUI tables in Go, native tools like ",{"type":46,"tag":108,"props":748,"children":750},{"className":749},[],[751],{"type":52,"value":752},"text\u002Ftabwriter",{"type":52,"value":279},{"type":46,"tag":108,"props":755,"children":757},{"className":756},[],[758],{"type":52,"value":734},{"type":52,"value":760}," will break alignment if you pass strings containing invisible ANSI color codes. You MUST pad strings to their fixed widths ",{"type":46,"tag":553,"props":762,"children":763},{},[764],{"type":52,"value":718},{"type":52,"value":766}," applying color wrappers, or use a robust layout engine like ",{"type":46,"tag":108,"props":768,"children":770},{"className":769},[],[771],{"type":52,"value":772},"lipgloss.Table",{"type":52,"value":774},".",{"type":46,"tag":72,"props":776,"children":777},{},[778,783,785],{"type":46,"tag":76,"props":779,"children":780},{},[781],{"type":52,"value":782},"Semantic Color Tokens",{"type":52,"value":784},": Use specific functional colors rather than aesthetic ones:\n",{"type":46,"tag":84,"props":786,"children":787},{},[788,799,810,821,832,843,854],{"type":46,"tag":72,"props":789,"children":790},{},[791,797],{"type":46,"tag":108,"props":792,"children":794},{"className":793},[],[795],{"type":52,"value":796},"Accent",{"type":52,"value":798}," (Blue): Navigation landmarks, headers, group titles.",{"type":46,"tag":72,"props":800,"children":801},{},[802,808],{"type":46,"tag":108,"props":803,"children":805},{"className":804},[],[806],{"type":52,"value":807},"Command",{"type":52,"value":809}," (Grey\u002FLight Grey): Scan targets like command names and flags.",{"type":46,"tag":72,"props":811,"children":812},{},[813,819],{"type":46,"tag":108,"props":814,"children":816},{"className":815},[],[817],{"type":52,"value":818},"Pass",{"type":52,"value":820}," (Green): Success states and completed tasks.",{"type":46,"tag":72,"props":822,"children":823},{},[824,830],{"type":46,"tag":108,"props":825,"children":827},{"className":826},[],[828],{"type":52,"value":829},"Warn",{"type":52,"value":831}," (Orange\u002FYellow): Transient or pending states, warnings.",{"type":46,"tag":72,"props":833,"children":834},{},[835,841],{"type":46,"tag":108,"props":836,"children":838},{"className":837},[],[839],{"type":52,"value":840},"Fail",{"type":52,"value":842}," (Red): Errors and rejected states.",{"type":46,"tag":72,"props":844,"children":845},{},[846,852],{"type":46,"tag":108,"props":847,"children":849},{"className":848},[],[850],{"type":52,"value":851},"Muted",{"type":52,"value":853}," (Dark Grey): De-emphasis for metadata, types, or defaults.",{"type":46,"tag":72,"props":855,"children":856},{},[857,863],{"type":46,"tag":108,"props":858,"children":860},{"className":859},[],[861],{"type":52,"value":862},"ID",{"type":52,"value":864}," (Teal\u002FMint): Unique identifiers.",{"type":46,"tag":72,"props":866,"children":867},{},[868,873,875,880,882,887],{"type":46,"tag":76,"props":869,"children":870},{},[871],{"type":52,"value":872},"Color Degradation",{"type":52,"value":874},": Ensure colors degrade gracefully when piped to a file, when ",{"type":46,"tag":108,"props":876,"children":878},{"className":877},[],[879],{"type":52,"value":113},{"type":52,"value":881}," is invoked, or when ",{"type":46,"tag":108,"props":883,"children":885},{"className":884},[],[886],{"type":52,"value":139},{"type":52,"value":888}," is present.",{"type":46,"tag":61,"props":890,"children":892},{"id":891},"mandatory-implementation-checklist-for-agents",[893],{"type":52,"value":894},"Mandatory Implementation Checklist for Agents",{"type":46,"tag":55,"props":896,"children":897},{},[898,900,905],{"type":52,"value":899},"When generating or updating a CLI command, you MUST ensure all of the following are implemented on your ",{"type":46,"tag":76,"props":901,"children":902},{},[903],{"type":52,"value":904},"first pass",{"type":52,"value":906},". Do not treat UI\u002FUX as an afterthought:",{"type":46,"tag":84,"props":908,"children":911},{"className":909},[910],"contains-task-list",[912,953,968,996,1018,1039,1068,1103,1124,1139,1160],{"type":46,"tag":72,"props":913,"children":916},{"className":914},[915],"task-list-item",[917,923,925,930,932,937,939,944,946,951],{"type":46,"tag":918,"props":919,"children":922},"input",{"disabled":920,"type":921},true,"checkbox",[],{"type":52,"value":924}," ",{"type":46,"tag":76,"props":926,"children":927},{},[928],{"type":52,"value":929},"Dual-Experience (DX\u002FAX)",{"type":52,"value":931},": Does the command support a ",{"type":46,"tag":108,"props":933,"children":935},{"className":934},[],[936],{"type":52,"value":113},{"type":52,"value":938}," flag or respect ",{"type":46,"tag":108,"props":940,"children":942},{"className":941},[],[943],{"type":52,"value":139},{"type":52,"value":945},"\u002F",{"type":46,"tag":108,"props":947,"children":949},{"className":948},[],[950],{"type":52,"value":147},{"type":52,"value":952},"?",{"type":46,"tag":72,"props":954,"children":956},{"className":955},[915],[957,960,961,966],{"type":46,"tag":918,"props":958,"children":959},{"disabled":920,"type":921},[],{"type":52,"value":924},{"type":46,"tag":76,"props":962,"children":963},{},[964],{"type":52,"value":965},"Headless Auth",{"type":52,"value":967},": Can an agent run this command autonomously without hanging on a browser-based OAuth prompt?",{"type":46,"tag":72,"props":969,"children":971},{"className":970},[915],[972,975,976,981,983,988,989,994],{"type":46,"tag":918,"props":973,"children":974},{"disabled":920,"type":921},[],{"type":52,"value":924},{"type":46,"tag":76,"props":977,"children":978},{},[979],{"type":52,"value":980},"Data Scoping",{"type":52,"value":982},": If returning a list, are there sane default limits and filtering flags (e.g., ",{"type":46,"tag":108,"props":984,"children":986},{"className":985},[],[987],{"type":52,"value":218},{"type":52,"value":205},{"type":46,"tag":108,"props":990,"children":992},{"className":991},[],[993],{"type":52,"value":203},{"type":52,"value":995},")?",{"type":46,"tag":72,"props":997,"children":999},{"className":998},[915],[1000,1003,1004,1009,1011,1016],{"type":46,"tag":918,"props":1001,"children":1002},{"disabled":920,"type":921},[],{"type":52,"value":924},{"type":46,"tag":76,"props":1005,"children":1006},{},[1007],{"type":52,"value":1008},"Mutative Safety",{"type":52,"value":1010},": If the command mutates state, does it include a ",{"type":46,"tag":108,"props":1012,"children":1014},{"className":1013},[],[1015],{"type":52,"value":121},{"type":52,"value":1017}," flag for agent safety?",{"type":46,"tag":72,"props":1019,"children":1021},{"className":1020},[915],[1022,1025,1026,1031,1033,1038],{"type":46,"tag":918,"props":1023,"children":1024},{"disabled":920,"type":921},[],{"type":52,"value":924},{"type":46,"tag":76,"props":1027,"children":1028},{},[1029],{"type":52,"value":1030},"Error Hints",{"type":52,"value":1032},": Do errors print actionable, copy-pasteable terminal commands to ",{"type":46,"tag":108,"props":1034,"children":1036},{"className":1035},[],[1037],{"type":52,"value":314},{"type":52,"value":952},{"type":46,"tag":72,"props":1040,"children":1042},{"className":1041},[915],[1043,1046,1047,1051,1053,1058,1060,1066],{"type":46,"tag":918,"props":1044,"children":1045},{"disabled":920,"type":921},[],{"type":52,"value":924},{"type":46,"tag":76,"props":1048,"children":1049},{},[1050],{"type":52,"value":644},{"type":52,"value":1052},": Is configuration handled via the XDG Base Directory specification (e.g. ",{"type":46,"tag":108,"props":1054,"children":1056},{"className":1055},[],[1057],{"type":52,"value":652},{"type":52,"value":1059},") instead of local ",{"type":46,"tag":108,"props":1061,"children":1063},{"className":1062},[],[1064],{"type":52,"value":1065},".env",{"type":52,"value":1067}," files?",{"type":46,"tag":72,"props":1069,"children":1071},{"className":1070},[915],[1072,1075,1076,1081,1083,1088,1089,1094,1096,1101],{"type":46,"tag":918,"props":1073,"children":1074},{"disabled":920,"type":921},[],{"type":52,"value":924},{"type":46,"tag":76,"props":1077,"children":1078},{},[1079],{"type":52,"value":1080},"The Three Pillars",{"type":52,"value":1082},": Are ",{"type":46,"tag":108,"props":1084,"children":1086},{"className":1085},[],[1087],{"type":52,"value":571},{"type":52,"value":205},{"type":46,"tag":108,"props":1090,"children":1092},{"className":1091},[],[1093],{"type":52,"value":582},{"type":52,"value":1095},", and ",{"type":46,"tag":108,"props":1097,"children":1099},{"className":1098},[],[1100],{"type":52,"value":607},{"type":52,"value":1102}," fields fully populated in the Cobra command definition?",{"type":46,"tag":72,"props":1104,"children":1106},{"className":1105},[915],[1107,1110,1111,1116,1118,1123],{"type":46,"tag":918,"props":1108,"children":1109},{"disabled":920,"type":921},[],{"type":52,"value":924},{"type":46,"tag":76,"props":1112,"children":1113},{},[1114],{"type":52,"value":1115},"Discoverability",{"type":52,"value":1117},": Is the command assigned to a logical ",{"type":46,"tag":108,"props":1119,"children":1121},{"className":1120},[],[1122],{"type":52,"value":525},{"type":52,"value":952},{"type":46,"tag":72,"props":1125,"children":1127},{"className":1126},[915],[1128,1131,1132,1137],{"type":46,"tag":918,"props":1129,"children":1130},{"disabled":920,"type":921},[],{"type":52,"value":924},{"type":46,"tag":76,"props":1133,"children":1134},{},[1135],{"type":52,"value":1136},"Semantic Colors",{"type":52,"value":1138},": Is the human-readable output formatted using the semantic color tokens (e.g., Lipgloss)?",{"type":46,"tag":72,"props":1140,"children":1142},{"className":1141},[915],[1143,1146,1147,1152,1154,1158],{"type":46,"tag":918,"props":1144,"children":1145},{"disabled":920,"type":921},[],{"type":52,"value":924},{"type":46,"tag":76,"props":1148,"children":1149},{},[1150],{"type":52,"value":1151},"Alignment Safety",{"type":52,"value":1153},": If using raw ANSI colors in tables, is string padding applied ",{"type":46,"tag":553,"props":1155,"children":1156},{},[1157],{"type":52,"value":718},{"type":52,"value":1159}," the color codes to prevent alignment breaking?",{"type":46,"tag":72,"props":1161,"children":1163},{"className":1162},[915],[1164,1167,1168,1173,1175,1181],{"type":46,"tag":918,"props":1165,"children":1166},{"disabled":920,"type":921},[],{"type":52,"value":924},{"type":46,"tag":76,"props":1169,"children":1170},{},[1171],{"type":52,"value":1172},"Help Formatting",{"type":52,"value":1174},": Have you overridden Cobra's default ",{"type":46,"tag":108,"props":1176,"children":1178},{"className":1177},[],[1179],{"type":52,"value":1180},"SetUsageTemplate",{"type":52,"value":1182}," to apply semantic colors to the help output itself (e.g., coloring headers blue)?",{"items":1184,"total":1359},[1185,1203,1219,1239,1253,1264,1270,1287,1303,1316,1332,1342],{"slug":1186,"name":1186,"fn":1187,"description":1188,"org":1189,"tags":1190,"stars":1200,"repoUrl":1201,"updatedAt":1202},"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},[1191,1194,1197],{"name":1192,"slug":1193,"type":16},"Documentation","documentation",{"name":1195,"slug":1196,"type":16},"Knowledge Base","knowledge-base",{"name":1198,"slug":1199,"type":16},"Search","search",6749,"https:\u002F\u002Fgithub.com\u002FGoogleCloudPlatform\u002Fknowledge-catalog","2026-07-12T07:38:52.157375",{"slug":1204,"name":1205,"fn":1206,"description":1207,"org":1208,"tags":1209,"stars":1200,"repoUrl":1201,"updatedAt":1218},"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},[1210,1213,1214,1217],{"name":1211,"slug":1212,"type":16},"Data Analysis","data-analysis",{"name":9,"slug":8,"type":16},{"name":1215,"slug":1216,"type":16},"Knowledge Management","knowledge-management",{"name":1198,"slug":1199,"type":16},"2026-07-12T07:38:22.196851",{"slug":1220,"name":1220,"fn":1221,"description":1222,"org":1223,"tags":1224,"stars":1236,"repoUrl":1237,"updatedAt":1238},"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},[1225,1228,1229,1232,1233],{"name":1226,"slug":1227,"type":16},"Automation","automation",{"name":18,"slug":19,"type":16},{"name":1230,"slug":1231,"type":16},"GitHub","github",{"name":9,"slug":8,"type":16},{"name":1234,"slug":1235,"type":16},"Pull Requests","pull-requests",2062,"https:\u002F\u002Fgithub.com\u002FGoogleCloudPlatform\u002Fcloud-foundation-fabric","2026-07-31T06:23:36.935005",{"slug":1240,"name":1240,"fn":1241,"description":1242,"org":1243,"tags":1244,"stars":1236,"repoUrl":1237,"updatedAt":1252},"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},[1245,1246,1249],{"name":9,"slug":8,"type":16},{"name":1247,"slug":1248,"type":16},"Infrastructure as Code","infrastructure-as-code",{"name":1250,"slug":1251,"type":16},"Terraform","terraform","2026-07-12T07:38:23.514555",{"slug":1254,"name":1254,"fn":1255,"description":1256,"org":1257,"tags":1258,"stars":1236,"repoUrl":1237,"updatedAt":1263},"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},[1259,1260],{"name":9,"slug":8,"type":16},{"name":1261,"slug":1262,"type":16},"Operations","operations","2026-07-12T07:38:28.127148",{"slug":4,"name":4,"fn":5,"description":6,"org":1265,"tags":1266,"stars":21,"repoUrl":22,"updatedAt":23},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1267,1268,1269],{"name":14,"slug":15,"type":16},{"name":18,"slug":19,"type":16},{"name":9,"slug":8,"type":16},{"slug":1271,"name":1271,"fn":1272,"description":1273,"org":1274,"tags":1275,"stars":21,"repoUrl":22,"updatedAt":1286},"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},[1276,1279,1280,1283],{"name":1277,"slug":1278,"type":16},"API Development","api-development",{"name":9,"slug":8,"type":16},{"name":1281,"slug":1282,"type":16},"LLM","llm",{"name":1284,"slug":1285,"type":16},"MCP","mcp","2026-07-12T07:39:10.911302",{"slug":1288,"name":1288,"fn":1289,"description":1290,"org":1291,"tags":1292,"stars":21,"repoUrl":22,"updatedAt":1302},"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},[1293,1296,1299,1300],{"name":1294,"slug":1295,"type":16},"Audio","audio",{"name":1297,"slug":1298,"type":16},"Creative","creative",{"name":9,"slug":8,"type":16},{"name":1301,"slug":34,"type":16},"Vertex AI","2026-07-12T07:39:16.623879",{"slug":1304,"name":1304,"fn":1305,"description":1306,"org":1307,"tags":1308,"stars":21,"repoUrl":22,"updatedAt":1315},"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},[1309,1310,1311,1314],{"name":1297,"slug":1298,"type":16},{"name":9,"slug":8,"type":16},{"name":1312,"slug":1313,"type":16},"Image Generation","image-generation",{"name":1301,"slug":34,"type":16},"2026-07-12T07:39:15.372822",{"slug":1317,"name":1317,"fn":1318,"description":1319,"org":1320,"tags":1321,"stars":21,"repoUrl":22,"updatedAt":1331},"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},[1322,1323,1324,1325,1328],{"name":1294,"slug":1295,"type":16},{"name":1297,"slug":1298,"type":16},{"name":9,"slug":8,"type":16},{"name":1326,"slug":1327,"type":16},"Media","media",{"name":1329,"slug":1330,"type":16},"Video","video","2026-07-12T07:39:09.672849",{"slug":1333,"name":1333,"fn":1334,"description":1335,"org":1336,"tags":1337,"stars":21,"repoUrl":22,"updatedAt":1341},"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},[1338,1339,1340],{"name":1297,"slug":1298,"type":16},{"name":9,"slug":8,"type":16},{"name":1329,"slug":1330,"type":16},"2026-07-12T07:39:13.749081",{"slug":1343,"name":1343,"fn":1344,"description":1345,"org":1346,"tags":1347,"stars":21,"repoUrl":22,"updatedAt":1358},"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},[1348,1349,1350,1352,1355],{"name":1294,"slug":1295,"type":16},{"name":1297,"slug":1298,"type":16},{"name":1351,"slug":28,"type":16},"Gemini",{"name":1353,"slug":1354,"type":16},"Speech","speech",{"name":1356,"slug":1357,"type":16},"Text-to-Speech","text-to-speech","2026-07-12T07:39:17.86673",80,{"items":1361,"total":1411},[1362,1368,1375,1382,1389,1397,1403],{"slug":4,"name":4,"fn":5,"description":6,"org":1363,"tags":1364,"stars":21,"repoUrl":22,"updatedAt":23},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1365,1366,1367],{"name":14,"slug":15,"type":16},{"name":18,"slug":19,"type":16},{"name":9,"slug":8,"type":16},{"slug":1271,"name":1271,"fn":1272,"description":1273,"org":1369,"tags":1370,"stars":21,"repoUrl":22,"updatedAt":1286},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1371,1372,1373,1374],{"name":1277,"slug":1278,"type":16},{"name":9,"slug":8,"type":16},{"name":1281,"slug":1282,"type":16},{"name":1284,"slug":1285,"type":16},{"slug":1288,"name":1288,"fn":1289,"description":1290,"org":1376,"tags":1377,"stars":21,"repoUrl":22,"updatedAt":1302},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1378,1379,1380,1381],{"name":1294,"slug":1295,"type":16},{"name":1297,"slug":1298,"type":16},{"name":9,"slug":8,"type":16},{"name":1301,"slug":34,"type":16},{"slug":1304,"name":1304,"fn":1305,"description":1306,"org":1383,"tags":1384,"stars":21,"repoUrl":22,"updatedAt":1315},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1385,1386,1387,1388],{"name":1297,"slug":1298,"type":16},{"name":9,"slug":8,"type":16},{"name":1312,"slug":1313,"type":16},{"name":1301,"slug":34,"type":16},{"slug":1317,"name":1317,"fn":1318,"description":1319,"org":1390,"tags":1391,"stars":21,"repoUrl":22,"updatedAt":1331},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1392,1393,1394,1395,1396],{"name":1294,"slug":1295,"type":16},{"name":1297,"slug":1298,"type":16},{"name":9,"slug":8,"type":16},{"name":1326,"slug":1327,"type":16},{"name":1329,"slug":1330,"type":16},{"slug":1333,"name":1333,"fn":1334,"description":1335,"org":1398,"tags":1399,"stars":21,"repoUrl":22,"updatedAt":1341},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1400,1401,1402],{"name":1297,"slug":1298,"type":16},{"name":9,"slug":8,"type":16},{"name":1329,"slug":1330,"type":16},{"slug":1343,"name":1343,"fn":1344,"description":1345,"org":1404,"tags":1405,"stars":21,"repoUrl":22,"updatedAt":1358},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1406,1407,1408,1409,1410],{"name":1294,"slug":1295,"type":16},{"name":1297,"slug":1298,"type":16},{"name":1351,"slug":28,"type":16},{"name":1353,"slug":1354,"type":16},{"name":1356,"slug":1357,"type":16},9]