[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DQJHH13MENXF3FK3P6PFX2":3,"skill-same:01M6DQJHH13MENXF3FK3P6PFX2":120},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":56,"commitSha":57,"skillDirectory":58,"forksCount":59,"repositoryHtmlUrl":60,"repositoryHomepageUrl":6,"ownerHtmlUrl":61,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":62,"install":63,"resources":76},"01M6DQJHH13MENXF3FK3P6PFX2","cli-developer",null,"Use when building CLI tools, implementing argument parsing, or adding interactive prompts. Invoke for parsing flags and subcommands, displaying progress bars and spinners, generating bash\u002Fzsh\u002Ffish completion scripts, CLI design, shell completions, and cross-platform terminal applications using commander, click, typer, or cobra.","AntifragileTech\u002Fantifragile-claude-code","AntifragileTech","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F174357194?v=4","01M6DQCYMK4CDSQQAN0ZC72NTV","01M6DQCYS9YPW1WKMQ5TJMPQ43",9,"MIT","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fcli-developer\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"cli","developer","cli developer","progress","design","click","app","platform","engineer","use","interactive","command","prompt","Bash","fish","zsh","parsing","applications","code","github","2026-11-10 10:12:30",false,"---\nname: cli-developer\ndescription: Use when building CLI tools, implementing argument parsing, or adding interactive prompts. Invoke for parsing flags and subcommands, displaying progress bars and spinners, generating bash\u002Fzsh\u002Ffish completion scripts, CLI design, shell completions, and cross-platform terminal applications using commander, click, typer, or cobra.\nlicense: MIT\nmetadata:\n  author: https:\u002F\u002Fgithub.com\u002FJeffallan\n  version: \"1.1.0\"\n  domain: devops\n  triggers: CLI, command-line, terminal app, argument parsing, shell completion, interactive prompt, progress bar, commander, click, typer, cobra\n  role: specialist\n  scope: implementation\n  output-format: code\n  related-skills: devops-engineer\n---\n\n# CLI Developer\n\n## Core Workflow\n\n1. **Analyze UX** — Identify user workflows, command hierarchy, common tasks. Validate by listing all commands and their expected `--help` output before writing code.\n2. **Design commands** — Plan subcommands, flags, arguments, configuration. Confirm flag naming is consistent and no existing signatures are broken.\n3. **Implement** — Build with the appropriate CLI framework for the language (see Reference Guide below). After wiring up commands, run `\u003Ccli> --help` to verify help text renders correctly and `\u003Ccli> --version` to confirm version output.\n4. **Polish** — Add completions, help text, error messages, progress indicators. Verify TTY detection for color output and graceful SIGINT handling.\n5. **Test** — Run cross-platform smoke tests; benchmark startup time (target: \u003C50ms).\n\n## Reference Guide\n\nLoad detailed guidance based on context:\n\n| Topic | Reference | Load When |\n|-------|-----------|-----------|\n| Design Patterns | `references\u002Fdesign-patterns.md` | Subcommands, flags, config, architecture |\n| Node.js CLIs | `references\u002Fnode-cli.md` | commander, yargs, inquirer, chalk |\n| Python CLIs | `references\u002Fpython-cli.md` | click, typer, argparse, rich |\n| Go CLIs | `references\u002Fgo-cli.md` | cobra, viper, bubbletea |\n| UX Patterns | `references\u002Fux-patterns.md` | Progress bars, colors, help text |\n\n## Quick-Start Example\n\n### Node.js (commander)\n\n```js\n#!\u002Fusr\u002Fbin\u002Fenv node\n\u002F\u002F npm install commander\nconst { program } = require('commander');\n\nprogram\n  .name('mytool')\n  .description('Example CLI')\n  .version('1.0.0');\n\nprogram\n  .command('greet \u003Cname>')\n  .description('Greet a user')\n  .option('-l, --loud', 'uppercase the greeting')\n  .action((name, opts) => {\n    const msg = `Hello, ${name}!`;\n    console.log(opts.loud ? msg.toUpperCase() : msg);\n  });\n\nprogram.parse();\n```\n\nFor Python (click\u002Ftyper) and Go (cobra) quick-start examples, see `references\u002Fpython-cli.md` and `references\u002Fgo-cli.md`.\n\n## Constraints\n\n### MUST DO\n- Keep startup time under 50ms\n- Provide clear, actionable error messages\n- Support `--help` and `--version` flags\n- Use consistent flag naming conventions\n- Handle SIGINT (Ctrl+C) gracefully\n- Validate user input early\n- Support both interactive and non-interactive modes\n- Test on Windows, macOS, and Linux\n\n### MUST NOT DO\n\n- **Block on synchronous I\u002FO unnecessarily** — use async reads or stream processing instead.\n- **Print to stdout when output will be piped** — write logs\u002Fdiagnostics to stderr.\n- **Use colors when output is not a TTY** — detect before applying color:\n  ```js\n  \u002F\u002F Node.js\n  const useColor = process.stdout.isTTY;\n  ```\n  ```python\n  # Python\n  import sys\n  use_color = sys.stdout.isatty()\n  ```\n  ```go\n  \u002F\u002F Go\n  import \"golang.org\u002Fx\u002Fterm\"\n  useColor := term.IsTerminal(int(os.Stdout.Fd()))\n  ```\n- **Break existing command signatures** — treat flag\u002Fsubcommand renames as breaking changes.\n- **Require interactive input in CI\u002FCD environments** — always provide non-interactive fallbacks via flags or env vars.\n- **Hardcode paths or platform-specific logic** — use `os.homedir()` \u002F `os.UserHomeDir()` \u002F `Path.home()` instead.\n- **Ship without shell completions** — all three frameworks above have built-in completion generation.\n\n## Output Templates\n\nWhen implementing CLI features, provide:\n1. Command structure (main entry point, subcommands)\n2. Configuration handling (files, env vars, flags)\n3. Core implementation with error handling\n4. Shell completion scripts if applicable\n5. Brief explanation of UX decisions\n\n## Knowledge Reference\n\nCLI frameworks (commander, yargs, oclif, click, typer, argparse, cobra, viper), terminal UI (chalk, inquirer, rich, bubbletea), testing (snapshot testing, E2E), distribution (npm, pip, homebrew, releases), performance optimization\n","# CLI Developer\n\n## Core Workflow\n\n1. **Analyze UX** — Identify user workflows, command hierarchy, common tasks. Validate by listing all commands and their expected `--help` output before writing code.\n2. **Design commands** — Plan subcommands, flags, arguments, configuration. Confirm flag naming is consistent and no existing signatures are broken.\n3. **Implement** — Build with the appropriate CLI framework for the language (see Reference Guide below). After wiring up commands, run `\u003Ccli> --help` to verify help text renders correctly and `\u003Ccli> --version` to confirm version output.\n4. **Polish** — Add completions, help text, error messages, progress indicators. Verify TTY detection for color output and graceful SIGINT handling.\n5. **Test** — Run cross-platform smoke tests; benchmark startup time (target: \u003C50ms).\n\n## Reference Guide\n\nLoad detailed guidance based on context:\n\n| Topic | Reference | Load When |\n|-------|-----------|-----------|\n| Design Patterns | `references\u002Fdesign-patterns.md` | Subcommands, flags, config, architecture |\n| Node.js CLIs | `references\u002Fnode-cli.md` | commander, yargs, inquirer, chalk |\n| Python CLIs | `references\u002Fpython-cli.md` | click, typer, argparse, rich |\n| Go CLIs | `references\u002Fgo-cli.md` | cobra, viper, bubbletea |\n| UX Patterns | `references\u002Fux-patterns.md` | Progress bars, colors, help text |\n\n## Quick-Start Example\n\n### Node.js (commander)\n\n```js\n#!\u002Fusr\u002Fbin\u002Fenv node\n\u002F\u002F npm install commander\nconst { program } = require('commander');\n\nprogram\n  .name('mytool')\n  .description('Example CLI')\n  .version('1.0.0');\n\nprogram\n  .command('greet \u003Cname>')\n  .description('Greet a user')\n  .option('-l, --loud', 'uppercase the greeting')\n  .action((name, opts) => {\n    const msg = `Hello, ${name}!`;\n    console.log(opts.loud ? msg.toUpperCase() : msg);\n  });\n\nprogram.parse();\n```\n\nFor Python (click\u002Ftyper) and Go (cobra) quick-start examples, see `references\u002Fpython-cli.md` and `references\u002Fgo-cli.md`.\n\n## Constraints\n\n### MUST DO\n- Keep startup time under 50ms\n- Provide clear, actionable error messages\n- Support `--help` and `--version` flags\n- Use consistent flag naming conventions\n- Handle SIGINT (Ctrl+C) gracefully\n- Validate user input early\n- Support both interactive and non-interactive modes\n- Test on Windows, macOS, and Linux\n\n### MUST NOT DO\n\n- **Block on synchronous I\u002FO unnecessarily** — use async reads or stream processing instead.\n- **Print to stdout when output will be piped** — write logs\u002Fdiagnostics to stderr.\n- **Use colors when output is not a TTY** — detect before applying color:\n  ```js\n  \u002F\u002F Node.js\n  const useColor = process.stdout.isTTY;\n  ```\n  ```python\n  # Python\n  import sys\n  use_color = sys.stdout.isatty()\n  ```\n  ```go\n  \u002F\u002F Go\n  import \"golang.org\u002Fx\u002Fterm\"\n  useColor := term.IsTerminal(int(os.Stdout.Fd()))\n  ```\n- **Break existing command signatures** — treat flag\u002Fsubcommand renames as breaking changes.\n- **Require interactive input in CI\u002FCD environments** — always provide non-interactive fallbacks via flags or env vars.\n- **Hardcode paths or platform-specific logic** — use `os.homedir()` \u002F `os.UserHomeDir()` \u002F `Path.home()` instead.\n- **Ship without shell completions** — all three frameworks above have built-in completion generation.\n\n## Output Templates\n\nWhen implementing CLI features, provide:\n1. Command structure (main entry point, subcommands)\n2. Configuration handling (files, env vars, flags)\n3. Core implementation with error handling\n4. Shell completion scripts if applicable\n5. Brief explanation of UX decisions\n\n## Knowledge Reference\n\nCLI frameworks (commander, yargs, oclif, click, typer, argparse, cobra, viper), terminal UI (chalk, inquirer, rich, bubbletea), testing (snapshot testing, E2E), distribution (npm, pip, homebrew, releases), performance optimization\n",{"name":5,"license":14,"metadata":48,"description":7},{"role":49,"scope":50,"author":51,"domain":52,"version":53,"triggers":54,"output-format":41,"related-skills":55},"specialist","implementation","https:\u002F\u002Fgithub.com\u002FJeffallan","devops","1.1.0","CLI, command-line, terminal app, argument parsing, shell completion, interactive prompt, progress bar, commander, click, typer, cobra","devops-engineer","master","c73386b305dec167db7654e0e6feacb462d4f9dc","assets\u002Fskills\u002Fdev\u002Fcli-developer",1,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code","https:\u002F\u002Fgithub.com\u002FAntifragileTech","2026-10-02 14:22:14",{"source":8,"skillName":5,"commands":64,"prompt":74,"zipAvailable":75},[65,68,71],{"tool":66,"command":67},"npx","npx skills add AntifragileTech\u002Fantifragile-claude-code --skill cli-developer",{"tool":69,"command":70},"bunx","bunx skills add AntifragileTech\u002Fantifragile-claude-code --skill cli-developer",{"tool":72,"command":73},"pnpm","pnpm dlx skills add AntifragileTech\u002Fantifragile-claude-code --skill cli-developer","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fcli-developer\u002FSKILL.md",true,[77,83,87,91,95,99,103,107,111,117],{"path":78,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":81,"sourceHtmlUrl":82},"index.json","REFERENCE","参考文档",1334,"https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Findustrial\u002Fics\u002Fnetwork\u002Ffirewall\u002Fdeploy\u002Findex.json",{"path":84,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":85,"sourceHtmlUrl":86},"references\u002Fapi-reference.md",1565,"https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Findustrial\u002Fics\u002Fnetwork\u002Ffirewall\u002Fdeploy\u002Freferences\u002Fapi-reference.md",{"path":88,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":89,"sourceHtmlUrl":90},"references\u002Fdesign-patterns.md",5249,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fcli-developer\u002Freferences\u002Fdesign-patterns.md",{"path":92,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":93,"sourceHtmlUrl":94},"references\u002Fgo-cli.md",10971,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fcli-developer\u002Freferences\u002Fgo-cli.md",{"path":96,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":97,"sourceHtmlUrl":98},"references\u002Findex.json",84,"https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Findustrial\u002Fics\u002Fnetwork\u002Ffirewall\u002Fdeploy\u002Freferences\u002Findex.json",{"path":100,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":101,"sourceHtmlUrl":102},"references\u002Fnode-cli.md",8443,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fcli-developer\u002Freferences\u002Fnode-cli.md",{"path":104,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":105,"sourceHtmlUrl":106},"references\u002Fpython-cli.md",10437,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fcli-developer\u002Freferences\u002Fpython-cli.md",{"path":108,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":109,"sourceHtmlUrl":110},"references\u002Fux-patterns.md",10115,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fcli-developer\u002Freferences\u002Fux-patterns.md",{"path":112,"resourceType":113,"resourceTypeDesc":114,"sizeBytes":115,"sourceHtmlUrl":116},"scripts\u002Fagent.py","SCRIPT","脚本",8152,"https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Findustrial\u002Fics\u002Fnetwork\u002Ffirewall\u002Fdeploy\u002Fscripts\u002Fagent.py",{"path":118,"resourceType":113,"resourceTypeDesc":114,"sizeBytes":97,"sourceHtmlUrl":119},"scripts\u002Findex.json","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Findustrial\u002Fics\u002Fnetwork\u002Ffirewall\u002Fdeploy\u002Fscripts\u002Findex.json",[121,144,158,173,186,199],{"skillNo":122,"name":123,"nameZh":6,"description":124,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":138,"publishedAt":43},"01M6DT9Q6VYA615SCXR757TZZ7","writing-skills","Use when creating new skills, editing existing skills, or verifying skills work before deployment","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fwriting-skills\u002FSKILL.md",[127,132,135],{"categoryNo":128,"categoryName":129,"taxonomyType":130,"taxonomyTypeDesc":131},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":133,"categoryName":134,"taxonomyType":130,"taxonomyTypeDesc":131},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":136,"categoryName":137,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000036","内容创作者",[139,140,32,141,142,143],"writing skills","writing","editing","work","deployment",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":152,"publishedAt":43},"01M6DT9GFHDNY90P41WGAE1TV0","writing-plans","Use when you have a spec or requirements for a multi-step task, before touching code","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fwriting-plans\u002FSKILL.md",[150,151],{"categoryNo":133,"categoryName":134,"taxonomyType":130,"taxonomyTypeDesc":131},{"categoryNo":136,"categoryName":137,"taxonomyType":20,"taxonomyTypeDesc":21},[153,154,140,155,156,32,41,157],"plans","writing plans","requirements","task","spec",{"skillNo":159,"name":160,"nameZh":6,"description":161,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":166,"publishedAt":43},"01M6DT9C6PFGD86WS3HY7YE3XG","docs:write-concisely","Apply writing rules to any documentation that humans will read. Makes your writing clearer, stronger, and more professional.","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fwrite-concisely\u002FSKILL.md",[164,165],{"categoryNo":133,"categoryName":134,"taxonomyType":130,"taxonomyTypeDesc":131},{"categoryNo":136,"categoryName":137,"taxonomyType":20,"taxonomyTypeDesc":21},[167,168,169,170,171,172,140],"docs:write concisely","write","docs","read","Rules","documentation",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":179,"publishedAt":43},"01M6DT98AWQ27P0N1CG97WAG66","kaizen:why","Iterative Five Whys root cause analysis drilling from symptoms to fundamentals","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fwhy\u002FSKILL.md",[],[175,180,181,182,183,184,185],"why","kaizen","issue","five whys","analysis","root cause analysis",{"skillNo":187,"name":188,"nameZh":6,"description":189,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":190,"categories":191,"keywords":192,"publishedAt":43},"01M6DT93EH25NAX19R3WGE1P53","verification-loop","A comprehensive verification system for Claude Code sessions.","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fverification-loop\u002FSKILL.md",[],[193,194,195,196,41,197,198],"verification loop","verification","loop","sessions","claude code sessions","system",{"skillNo":200,"name":201,"nameZh":6,"description":202,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":203,"categories":204,"keywords":205,"publishedAt":43},"01M6DT90GW7Z7VCN98P9DVYSNC","verification-before-completion","Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fverification-before-completion\u002FSKILL.md",[],[206,194,207,142,32,208,209,210],"verification before completion","commands","evidence","claim","complete"]