mcpField
C
CreateCLI

CreateCLI

github.com/danielmiessler开发19.8k144 次安装2 天前更新
代码仓库

关于 CreateCLI

CreateCLI 是面向开发者的技能,可生成具备类型安全和文档的 TypeScript 命令行工具。它会依据需求复杂度,在手动解析参数、Commander.js 等三个层级中选择方案。

主要功能

  1. 01三层命令行模板选择
  2. 02类型安全的 TypeScript 实现
  3. 03Bun 项目配置
  4. 04JSON 输出与退出码处理
  5. 05生成 README 和 QUICKSTART

适用场景

  1. 01为 API 或服务创建命令行工具
  2. 02用 TypeScript 替换复杂 Bash 脚本
  3. 03为现有命令行工具添加命令
  4. 04扩展命令行工具以支持子命令

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/danielmiessler/lifeos --skill createcli

安装后在 Claude Code 中输入/createcli确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

Patterns.md
FrameworkComparison.md
TypescriptPatterns.md
Workflows/
UpgradeTier.md
AddCommand.md
CreateCli.md

详细介绍

自定义

执行前,请检查用户自定义设置: ~/.claude/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/CreateCLI/

如果此目录存在,请加载并应用其中的任何 PREFERENCES.md、配置或资源。这些内容会覆盖默认行为。如果目录不存在,请使用技能默认设置。

🚨 强制要求:语音通知(执行任何操作前必须完成)

调用此技能时,必须先发送此通知,然后才能执行任何操作。

  1. 发送语音通知:

    curl -s -X POST http://localhost:31337/notify \
      -H "Content-Type: application/json" \
      -d '{"message": "Running the WORKFLOWNAME workflow in the CreateCLI skill to ACTION"}' \
      > /dev/null 2>&1 &
    
  2. 输出文本通知:

    Running the **WorkflowName** workflow in the **CreateCLI** skill to ACTION...
    

此步骤不可跳过。调用技能后,请立即执行此 curl 命令。

CreateCLI

功能

生成可用于生产环境的 TypeScript 命令行工具。每个命令行工具都包含完整实现、README 和 QUICKSTART、Bun package.json、严格的 tsconfig、JSON 输出以及正确的退出代码。三层模板系统会选择合适的复杂度:Tier 1 使用手动解析参数且零依赖(适用于大多数情况),Tier 2 使用 Commander.js 支持子命令,Tier 3 以 oclif 作为企业级规模的参考。

问题

人们一次又一次地从头构建相同的命令行工具。最初是一个 bash 脚本,后来需要错误处理、帮助文本和类型安全,最后又用 TypeScript 重写,并在末尾匆忙补上文档。每次都会重复相同的样板代码,也会犯相同的错误。此技能会一次性完成整个过程,按照实际需求的层级,生成整洁、类型安全且有文档的命令行工具。

工作原理

遵循 CLI 优先架构原则,生成包含文档、类型安全和错误处理的生产级 TypeScript 命令行工具。


工作流路由

根据请求转到相应的工作流。

执行工作流时,请直接输出此通知:

Running the **WorkflowName** workflow in the **CreateCLI** skill to ACTION...
工作流触发条件文件
CreateCli从头创建新的命令行工具Workflows/CreateCli.md
AddCommand为现有命令行工具添加新命令Workflows/AddCommand.md
UpgradeTier将命令行工具升级到更高层级Workflows/UpgradeTier.md

🚀 何时启用此技能

出现以下情况时启用:

直接请求
  • “为 [API/服务/工具] 创建命令行工具”
  • “为 X 构建命令行界面”
  • “制作一个能执行 Y 的命令行工具”
  • “生成 TypeScript 命令行工具”
  • “我需要一个用于 Z 的命令行工具”
上下文线索
  • 用户描述重复的 API 调用 → 建议使用命令行工具
  • 用户提到“我总是在输入这个命令” → 建议创建命令行封装工具
  • 用户的 bash 脚本执行复杂操作 → 建议用 TypeScript 命令行工具替代
  • 用户使用的 API 没有官方命令行工具 → 建议创建一个
示例
  • ✅ “为 GitHub API 创建命令行工具”
  • ✅ “构建一个用于处理 CSV 文件的命令行工具”
  • ✅ “为我的数据库迁移制作命令行工具”
  • ✅ “生成一个封装此 API 的命令行工具”
  • ✅ “我需要一个类似 llcli、但面向 Notion API 的工具”

💡 核心能力

三层模板系统

Tier 1:llcli 风格(默认,适用于 80% 的用例)

  • 手动解析参数(process.argv)
  • 零框架依赖
  • Bun + TypeScript
  • 类型安全的接口
  • 总计约 300–400 行
  • 适用于: API 客户端、数据转换器、简单自动化

使用 Tier 1 的情况:

  • ✅ 2–10 个命令
  • ✅ 简单参数(标志、值)
  • ✅ JSON 输出
  • ✅ 无子命令
  • ✅ 快速开发

Tier 2:Commander.js(升级方案,适用于 15% 的用例)

  • 基于框架的参数解析
  • 子命令 + 嵌套选项
  • 自动生成帮助信息
  • 支持插件
  • 适用于: 复杂的多命令工具

使用 Tier 2 的情况:

  • ❌ 需要分组的 10 个以上命令
  • ❌ 复杂的嵌套选项
  • ❌ 插件架构
  • ❌ 多种输出格式

Tier 3:oclif(仅供参考,适用于 5% 的用例)

  • 仅提供文档(无模板)
  • 企业级插件系统
  • 适用于: Heroku CLI、Salesforce CLI 级别的规模(少见)
每个生成的 CLI 都包含什么

1. 完整实现

  • 具备完整类型安全性的 TypeScript 源代码
  • 所有命令均可正常运行并经过测试
  • 包含适当退出码的错误处理
  • 配置管理

2. 完备的文档

  • README.md,包含设计理念、用法和示例
  • QUICKSTART.md,介绍常见模式
  • 内联帮助文本(--help)
  • API 响应文档

3. 开发环境设置

  • package.json(Bun 配置)
  • tsconfig.json(严格模式)
  • .env.example(配置模板)
  • 已配置文件权限

4. 质量标准

  • 全程类型安全
  • 输出确定性(JSON)
  • 可组合(可通过管道传给 jq、grep)
  • 错误消息包含上下文
  • 符合退出码规范

🏗️ 与 LifeOS 集成

技术栈一致性

生成的 CLI 遵循 LifeOS 标准:

  • ✅ 运行时: Bun(不是 Node.js)
  • ✅ 语言: TypeScript(不是 JavaScript 或 Python)
  • ✅ 包管理器: Bun(不是 npm/yarn/pnpm)
  • ✅ 测试: Vitest(添加测试时)
  • ✅ 输出: 确定性 JSON(可组合)
  • ✅ 文档: README + QUICKSTART(llcli 模式)
仓库位置

生成的 CLI 放置在:

  • ~/.claude/LIFEOS/TOOLS/[cli-name]/ - 个人 CLI(如 llcli)
  • ~/Projects/[project-name]/ - 项目专用 CLI
  • ${PROJECTS_DIR}/LIFEOS/Examples/clis/ - 示例 CLI(公开仓库)

安全提示: 执行 git 操作前,务必确认仓库位置

CLI 优先架构原则

每个生成的 CLI 都遵循以下原则:

  1. 确定性 - 相同输入 → 相同输出
  2. 简洁 - 单一职责
  3. 可组合 - JSON 输出可通过管道传给其他工具
  4. 有文档 - 提供完备的帮助信息和示例
  5. 可测试 - 行为可预测

📚 扩展资料

如需详细信息,请阅读以下文件:

工作流文档
  • Workflows/CreateCli.md - CLI 生成的主要工作流(决策树、10 步流程)
  • Workflows/AddCommand.md - 向现有 CLI 添加命令
  • Workflows/UpgradeTier.md - 从简单版本迁移到复杂版本
参考文档
  • FrameworkComparison.md - 手动实现与 Commander、oclif 的比较(含调研)
  • Patterns.md - 常见 CLI 模式(基于 llcli 分析)
  • TypescriptPatterns.md - 类型安全模式(基于对 tsx、vite、bun 的调研)

📖 示例

示例 1:API 客户端 CLI(Tier 1)

用户请求: “创建一个用于 GitHub API 的 CLI,可以列出仓库、创建 issue 并搜索代码”

生成的结构:

~/.claude/LIFEOS/TOOLS/ghcli/
├── ghcli.ts              # 350 lines, complete implementation
├── package.json          # Bun + TypeScript
├── tsconfig.json         # Strict mode
├── .env.example          # GITHUB_TOKEN=your_token
├── README.md             # Full documentation
└── QUICKSTART.md         # Common use cases

用法:

ghcli repos --user exampleuser
ghcli issues create --repo myrepo --title "Bug fix"
ghcli search "typescript CLI"
ghcli --help

示例 2:文件处理器(Tier 1)

用户请求: “构建一个 CLI,将 Markdown 文件转换为 HTML,并提取 frontmatter”

生成的结构:

~/.claude/LIFEOS/TOOLS/md2html/
├── md2html.ts
├── package.json
├── README.md
└── QUICKSTART.md

用法:

md2html convert input.md output.html
md2html batch *.md output/
md2html extract-frontmatter post.md

示例 3:数据管道(Tier 2)

用户请求: “创建一个用于数据转换的 CLI,支持多种格式、验证和分析命令”

生成的结构:

~/.claude/LIFEOS/TOOLS/data-cli/
├── data-cli.ts           # Commander.js with subcommands
├── package.json
├── README.md
└── QUICKSTART.md

用法:

data-cli convert json csv input.json
data-cli validate schema data.json
data-cli analyze stats data.csv
data-cli transform filter --column=status --value=active

✅ 质量标准

每个生成的 CLI 都必须通过以下检查:

1. 编译
  • ✅ TypeScript 编译无错误
  • ✅ 已启用严格模式
  • ✅ 除有合理说明的情况外,不使用 any 类型
2. 功能
  • ✅ 所有命令均按规范正常运行
  • ✅ 错误处理完备
  • ✅ 退出码正确(成功为 0,错误为 1)
3. 文档
  • ✅ README 说明设计理念和用法
  • ✅ QUICKSTART 包含常见示例
  • ✅ --help 文本完备
  • ✅ 记录所有标志和选项
4. 代码质量
  • ✅ 全程类型安全
  • ✅ 函数职责划分清晰
  • ✅ 错误消息具有可操作性
  • ✅ 配置外置
5. 集成
  • ✅ 遵循 LifeOS 技术栈(Bun、TypeScript)
  • ✅ 遵循 CLI 优先架构原则
  • ✅ 输出具有确定性(JSON)
  • ✅ 可与其他工具组合使用

🎯 设计理念

此技能存在的原因

开发者会反复为 API 和工具创建 CLI。每次都要:

  1. 从 bash 脚本开始
  2. 意识到需要错误处理
  3. 意识到需要帮助文本
  4. 意识到需要类型安全
  5. 用 TypeScript 重写
  6. 添加文档
  7. 最终得到可用于生产环境的 CLI

此技能可自动完成第 1 至 7 步。

llcli 模式

llcli CLI(Limitless.ai API;后端迁移到 Bee 后于 2026-07-15 停用——它验证的模式将在这里延续)证明了此模式行之有效:

  • 327 行 TypeScript
  • 零依赖(无框架)
  • 完整的错误处理
  • 全面的文档
  • 可立即用于生产环境

此技能复现了这一成功。

设计原则
  1. 从简单开始 - 默认采用第 1 层(llcli 风格)
  2. 按需升级 - 只有在有充分理由时才采用第 2 层
  3. 完整,而非脚手架 - 每个 CLI 都可用于生产环境
  4. 文档优先 - README 解释“为什么”,而不只是“怎么做”
  5. 类型安全 - 始终启用 TypeScript 严格模式

🔗 相关技能

  • development - 用于复杂功能开发(不专门针对 CLI)
  • mcp - 用于网页抓取 CLI(Bright Data、Apify 封装工具)
  • a lifelog skill - 基于官方供应商 CLI(bee)构建的技能示例

此技能可在几分钟内将“我需要一个用于 X 的 CLI”变成可用于生产环境的工具,遵循 llcli 和 CLI-First Architecture 中经验证的模式。

注意事项

  • 始终使用 bun,绝不使用 npm/npx。 根据系统提示,例外情况为零。
  • 仅使用 TypeScript。 除非用户明确批准,否则绝不生成 Python CLI。
  • 三级系统: 从适用的最简单级别开始。第 1 层足够时,不要过度设计第 3 层 CLI。

执行日志

完成任何工作流后,追加一条 JSONL 记录:

echo '{"ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","skill":"CreateCLI","workflow":"WORKFLOW_USED","input":"8_WORD_SUMMARY","status":"ok|error","duration_s":SECONDS}' >> ~/.claude/LIFEOS/MEMORY/SKILLS/execution.jsonl

将 WORKFLOW_USED 替换为已执行的工作流,将 8_WORD_SUMMARY 替换为简短的输入描述,并将 SECONDS 替换为大致的实际耗时。如果工作流失败,则记录 status: "error"。

评论

支持 Markdown