CLI-First Skill Design
Lucas Carlson· emerging
问题
在构建Agent技能(可复用能力)时,存在以下两难抉择:
- API优先设计:将技能设计为函数/类——适配程序化调用,但手动调试与测试难度较高
- GUI优先设计:将技能设计为可视化工具——便于人类操作,但无法被Agent调用
团队最终要么开发两套接口,要么只能优先满足其中一类用户的需求。
方案
所有技能首先设计为CLI工具。设计良好的CLI天然具备双重用途:人类可以从终端调用它,Agent则可以通过Shell命令调用。
graph LR
A[技能逻辑] --> B[CLI接口]
B --> C[人类:终端]
B --> D[Agent:Bash工具]
B --> E[脚本:自动化]
B --> F[Cron:定时任务]
核心原则:
- 单脚本对应单技能:每个能力对应一个独立可执行文件
- 用子命令实现操作:例如
skill.sh list、skill.sh get <id>、skill.sh create - 结构化输出:供程序调用时输出JSON格式,针对终端(TTY)环境输出人类可读内容
- 退出码规范:0表示执行成功,非零值表示执行错误(支持
&&链式调用) - 环境变量配置:凭证通过环境变量(env vars)传递,禁止硬编码
# 示例:将Trello功能实现为CLI工具
trello.sh boards # 列出所有看板
trello.sh cards <BOARD_ID> # 列出指定看板上的卡片
trello.sh create <LIST_ID> "Title" # 创建卡片
trello.sh move <CARD_ID> <LIST_ID> # 移动卡片
# 人类使用示例
$ trello.sh boards
{"id": "abc123", "name": "Personal", "url": "..."}
{"id": "def456", "name": "Work", "url": "..."}
# Agent使用示例(通过Bash工具)
Bash: trello.sh cards abc123 | jq '.[0].name'
如何使用
技能结构:
~/.claude/skills/
├── trello/
│ └── scripts/
│ └── trello.sh # 主CLI入口
├── asana/
│ └── scripts/
│ └── asana.sh
├── honeybadger/
│ └── scripts/
│ └── honeybadger.sh
└── priority-report/
└── scripts/
└── priority-report.sh # 组合其他技能
CLI设计检查清单:
- [ ] 带有shebang(
#!/bin/bash)的独立可执行文件 - [ ] 支持通过
--help或无参数方式查看帮助文本 - [ ] 提供用于CRUD操作的子命令
- [ ] 输出格式为JSON(可通过管道传递给
jq工具格式化) - [ ] 从
~/.envrc文件或环境变量读取凭证信息 - [ ] 返回有意义的退出码
- [ ] 错误信息输出至stderr,业务数据输出至stdout
组合示例:
# priority-report.sh 组合多个技能CLI
#!/bin/bash
echo "## GitHub"
gh pr list --search "review-requested:@me"
echo "## Trello"
~/.claude/skills/trello/scripts/trello.sh cards abc123
echo "## Asana"
~/.claude/skills/asana/scripts/asana.sh tasks personal
权衡
优势:
- 默认支持双重用途:为人类和Agent提供统一操作接口
- 可调试:可手动运行以测试、检查输出结果
- 可组合:可与Unix工具实现管道传输、链式调用及组合使用
- 可移植:可在任意Shell环境中运行,无运行时依赖
- 透明化:Agent的工具调用以可见的Shell命令形式呈现
- 可测试:易于编写集成测试
劣势:
- Shell局限性:复杂数据结构在Bash中处理较为不便
- 错误处理能力不足:结构化程度远不如异常机制
- 性能短板:与函数调用相比,存在进程启动开销
- 状态管理缺失:多次调用之间无持久化状态
- Windows兼容性受限:需要依赖WSL或Git Bash才能使用
何时选用其他方案:
- 高频率调用场景(>100次/秒):使用进程内函数
- 处理复杂对象图:使用结构化API
- 实时流处理场景:使用WebSocket/SSE
参考文献
关键词:
:涵盖Unix哲学核心准则、双用途工具设计模式、Claude Code技能目录结构以及12要素应用程序的环境配置原则四项技术要点。
直译:
:
- Unix哲学:“编写仅完成单一任务且出色完成该任务的程序”
- 双用途工具设计模式
- Claude Code技能目录结构
- 12要素应用程序:通过环境配置
来源摘要
正在获取来源并生成中文摘要…