SKILL.md
唯讀
名稱
cli-developer
描述
在建立 CLI 工具、實作引數解析或加入互動式提示時使用。用於解析旗標與子命令、顯示進度條與旋轉動畫、產生 bash/zsh/fish 自動補全腳本、CLI 設計、shell 補全,以及使用 commander、click、typer 或 cobra 開發跨平台終端應用程式。
CLI 開發者
核心工作流程
- 分析使用者體驗 — 識別使用者工作流程、命令階層、常見任務。在撰寫程式碼前,先列出所有命令及其預期的
--help輸出以進行驗證。 - 設計命令 — 規劃子命令、旗標、引數、設定。確認旗標命名一致且未破壞現有簽章。
- 實作 — 使用適合語言的 CLI 框架進行建置(請參閱下方參考指南)。在接好命令後,執行
<cli> --help確認說明文字正確顯示,並執行<cli> --version確認版本輸出。 - 打磨 — 加入自動補全、說明文字、錯誤訊息、進度指示器。驗證 TTY 偵測以決定是否使用彩色輸出,並優雅處理 SIGINT。
- 測試 — 執行跨平台冒煙測試;基準化啟動時間(目標:<50ms)。
參考指南
根據情境載入詳細指引:
| 主題 | 參考文件 | 載入時機 |
|---|---|---|
| 設計模式 | references/design-patterns.md |
子命令、旗標、設定、架構 |
| Node.js CLI | references/node-cli.md |
commander, yargs, inquirer, chalk |
| Python CLI | references/python-cli.md |
click, typer, argparse, rich |
| Go CLI | references/go-cli.md |
cobra, viper, bubbletea |
| 使用者體驗模式 | references/ux-patterns.md |
進度條、顏色、說明文字 |
快速入門範例
Node.js (commander)
#!/usr/bin/env node
// npm install commander
const { program } = require('commander');
program
.name('mytool')
.description('Example CLI')
.version('1.0.0');
program
.command('greet <name>')
.description('Greet a user')
.option('-l, --loud', 'uppercase the greeting')
.action((name, opts) => {
const msg = `Hello, ${name}!`;
console.log(opts.loud ? msg.toUpperCase() : msg);
});
program.parse();
Python (click/typer) 和 Go (cobra) 的快速入門範例請參閱 references/python-cli.md 和 references/go-cli.md。
限制
必須做到
- 啟動時間保持在 50ms 以下
- 提供清晰、可操作的錯誤訊息
- 支援
--help和--version旗標 - 使用一致的旗標命名慣例
- 優雅處理 SIGINT (Ctrl+C)
- 及早驗證使用者輸入
- 同時支援互動與非互動模式
- 在 Windows、macOS 和 Linux 上測試
絕對不能做
- 不必要地阻塞同步 I/O — 改用非同步讀取或串流處理。
- 在輸出被 pipe 時印到 stdout — 將日誌/診斷資訊寫到 stderr。
- 在輸出不是 TTY 時使用顏色 — 在套用顏色前先偵測:
// Node.js const useColor = process.stdout.isTTY;# Python import sys use_color = sys.stdout.isatty()// Go import "golang.org/x/term" useColor := term.IsTerminal(int(os.Stdout.Fd())) - 破壞現有命令簽章 — 將旗標/子命令重新命名視為破壞性變更。
- 在 CI/CD 環境中要求互動式輸入 — 一律透過旗標或環境變數提供非互動式替代方案。
- 硬編碼路徑或平台特定邏輯 — 改用
os.homedir()/os.UserHomeDir()/Path.home()。 - 未附 shell 自動補全就發布 — 上述三個框架都內建自動補全產生功能。
輸出模板
在實作 CLI 功能時,請提供:
- 命令結構(主要進入點、子命令)
- 設定處理(檔案、環境變數、旗標)
- 包含錯誤處理的核心實作
- 適用的 shell 自動補全腳本
- 使用者體驗決策的簡要說明
知識參考
CLI 框架(commander, yargs, oclif, click, typer, argparse, cobra, viper)、終端 UI(chalk, inquirer, rich, bubbletea)、測試(快照測試、E2E)、發布(npm, pip, homebrew, releases)、效能最佳化




