关于 CreateCLI
CreateCLI 是面向开发者的技能,可生成具备类型安全和文档的 TypeScript 命令行工具。它会依据需求复杂度,在手动解析参数、Commander.js 等三个层级中选择方案。
主要功能
- 01三层命令行模板选择
- 02类型安全的 TypeScript 实现
- 03Bun 项目配置
- 04JSON 输出与退出码处理
- 05生成 README 和 QUICKSTART
适用场景
- 01为 API 或服务创建命令行工具
- 02用 TypeScript 替换复杂 Bash 脚本
- 03为现有命令行工具添加命令
- 04扩展命令行工具以支持子命令
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ danielmiessler/ lifeos --skill createcli安装后在 Claude Code 中输入/createcli确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
Patterns.mdFrameworkComparison.mdTypescriptPatterns.mdWorkflows/UpgradeTier.mdAddCommand.mdCreateCli.md详细介绍
自定义
执行前,请检查用户自定义设置:
~/.claude/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/CreateCLI/
如果此目录存在,请加载并应用其中的任何 PREFERENCES.md、配置或资源。这些内容会覆盖默认行为。如果目录不存在,请使用技能默认设置。
🚨 强制要求:语音通知(执行任何操作前必须完成)
调用此技能时,必须先发送此通知,然后才能执行任何操作。
-
发送语音通知:
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 & -
输出文本通知:
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 都遵循以下原则:
- 确定性 - 相同输入 → 相同输出
- 简洁 - 单一职责
- 可组合 - JSON 输出可通过管道传给其他工具
- 有文档 - 提供完备的帮助信息和示例
- 可测试 - 行为可预测
📚 扩展资料
如需详细信息,请阅读以下文件:
工作流文档
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。每次都要:
- 从 bash 脚本开始
- 意识到需要错误处理
- 意识到需要帮助文本
- 意识到需要类型安全
- 用 TypeScript 重写
- 添加文档
- 最终得到可用于生产环境的 CLI
此技能可自动完成第 1 至 7 步。
llcli 模式
llcli CLI(Limitless.ai API;后端迁移到 Bee 后于 2026-07-15 停用——它验证的模式将在这里延续)证明了此模式行之有效:
- 327 行 TypeScript
- 零依赖(无框架)
- 完整的错误处理
- 全面的文档
- 可立即用于生产环境
此技能复现了这一成功。
设计原则
- 从简单开始 - 默认采用第 1 层(llcli 风格)
- 按需升级 - 只有在有充分理由时才采用第 2 层
- 完整,而非脚手架 - 每个 CLI 都可用于生产环境
- 文档优先 - README 解释“为什么”,而不只是“怎么做”
- 类型安全 - 始终启用 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"。