cli-tool-creatorlisted
Install: claude install-skill afine907/skills
# CLI Tool Creator — CLI 工具开发技能
设计和开发专业的命令行工具,提供良好的用户体验。
## Goal
设计和开发命令行工具,包含参数解析、子命令、交互式提示、输出格式化、自动补全
## Trigger
- 用户要求"开发CLI工具"、"命令行工具"
- 需要将脚本封装为可分发的 CLI
- 需要添加交互式命令行界面
## 技术选型
| 语言 | 框架 | 特点 |
|------|------|------|
| Python | Typer | 类型提示、自动生成帮助 |
| Python | Click | 功能丰富、灵活 |
| Node.js | Commander | 流行、轻量 |
| Node.js | Ink | React 风格的终端 UI |
| Go | Cobra | 功能强大、kubectl 使用 |
## Python + Typer 实现
### 项目结构
```
my-cli/
├── src/
│ └── my_cli/
│ ├── __init__.py
│ ├── main.py # 入口
│ ├── commands/ # 子命令
│ │ ├── __init__.py
│ │ ├── init.py
│ │ ├── build.py
│ │ └── deploy.py
│ ├── utils/ # 工具函数
│ │ ├── config.py
│ │ └── output.py
│ └── types.py # 类型定义
├── tests/
├── pyproject.toml
└── README.md
```
### 主入口
```python
# src/my_cli/main.py
import typer
from typing import Optional
from enum import Enum
app = typer.Typer(
name="my-cli",
help="一个示例 CLI 工具",
no_args_is_help=True,
)
class LogLevel(str, Enum):
debug = "debug"
info = "info"
warning = "warning"
error = "error"
@app.command()
def init(
name: str = typer.Argument(..., help="项目名称"),
template: str = typer.Option("default", "-t", "--template", help="项目模板"),
force: bool = typer.Option(False, "-f", "--force", help="强制覆盖已存在的目录"),
):
"""初始化新项目"""
typer.echo(f"正在创建项目: {name}")