背景:为什么要封装 eet 工具?
easy-encryption-tool (eet) 是我开发的一个密码学 CLI 工具,支持:
- 对称加密: AES (CBC/GCM), SM4 (CBC/GCM), ZUC
- 非对称加密: RSA, SM2, ECC (签名/验签/加密)
- 哈希与 MAC: SM3, SHA256/384/512, HMAC
- 其他功能: 证书解析、格式转换、随机数生成、时间戳转换
问题:虽然 eet 功能强大,但每次都要查文档、记参数,用户体验不够好。
目标:让 OpenClaw Agent 智能地使用 eet 工具,自动:
- 识别用户需求(加密/解密/签名/哈希)
- 推荐使用 eet 并告知用户执行什么命令
- 等待用户确认后执行
- 解析结果并提供友好反馈
第一步:需求理解与确认
1.1 核心需求
用户提出明确要求:
- 名称: 使用
eet - 位置: 本地私有,使用 OpenClaw 默认位置
- 功能范围: 覆盖 eet 所有本地计算功能(排除需要云 API 的 KMS 信封加密)
- 触发方式: 自动推荐使用,但需要用户确认,并明确告知执行什么命令
- 辅助脚本: 需要批量处理脚本(eet 本身不支持批量)
- 文档记录: 记录到博客的 AI&Agent 分类下
1.2 功能清单梳理
✅ 覆盖的功能:
- 对称加密 (AES/SM4/ZUC)
- 非对称加密 (RSA/SM2/ECC)
- 哈希与 HMAC
- 证书解析
- 格式转换
- 随机数生成
- 时间戳转换
❌ 不覆盖的功能 (需要云 API):
- KMS 信封加密 (envelope encryption with cloud KMS)
- KMS 结构化文件加密 (structured file encryption with cloud KMS)
第二步:方案设计
2.1 SKILL 结构设计
| |
2.2 渐进式加载策略
| 层级 | 内容 | 加载时机 | 大小 |
|---|---|---|---|
| 1️⃣ 元数据 | frontmatter description | 始终在上下文 | ~200 词 |
| 2️⃣ SKILL.md | 核心指令、快速参考、常见模式 | Skill 触发时 | ~12KB |
| 3️⃣ references | 算法详情、场景示例、故障排查 | 按需加载 | ~30KB |
| 4️⃣ scripts | 批量处理脚本 | 执行时调用 | ~30KB |
关键设计决策:
- ✅ frontmatter 包含完整的触发场景(8 种场景)
- ✅ SKILL.md 包含快速参考和核心工作流
- ✅ 30+ 个真实场景放到
usage-patterns.md - ✅ 算法详细参数放到
algorithms.md - ✅ 完整故障排查放到
troubleshooting.md
2.3 用户体验设计
推荐话术模板:
| |
三步确认流程:
- 识别需求 → 2. 推荐工具并告知细节 → 3. 等待确认 → 4. 执行并解析
第三步:执行过程详解
3.1 初始化 SKILL 结构
| |
3.2 编写 SKILL.md
Frontmatter 设计(触发机制)
| |
关键点:
- ✅ 详细列出所有功能模块
- ✅ 明确 8 种触发场景
- ✅ 说明不支持的功能(避免误触发)
Body 结构设计
| |
大小控制:最终 SKILL.md 约 12KB(符合 <5k 词建议)
3.3 编写 references 文件
algorithms.md (4.4KB)
内容结构:
| |
usage-patterns.md (7.7KB)
30+ 个真实场景:
- Pattern 1-4: 对称加密场景(配置信息、文件、解密、国密)
- Pattern 5-11: 非对称加密场景(密钥生成、加密、解密、签名、验签、SM2、ECC)
- Pattern 12-15: 哈希与 HMAC(文件、文本、消息认证、国密)
- Pattern 16-19: 证书与格式转换
- Pattern 20-21: 随机数生成
- Pattern 22-24: 批量处理
- Pattern 25-27: 特殊场景(信封加密、时间戳、整数转换)
- Pattern 28-30: 故障排查
每个 Pattern 包含:
- 场景描述
- 用户请求示例
- Codex 推荐话术(完整模板)
- 执行命令
- 预期输出
- 注意事项
troubleshooting.md (9.3KB)
7 大类问题:
- 环境问题(command not found、Python 环境、权限)
- 命令执行错误(参数缺失、冲突、文件不存在)
- 加密/解密问题(密钥长度、IV 错误、解密失败、GCM padding)
- 密钥管理问题(私钥密码、文件损坏、格式不匹配)
- 格式与编码问题(Base64、Hex、UTF-8)
- 性能问题(大文件、批量处理内存)
- 批量处理问题(脚本找不到 eet、中断、密钥管理)
每个问题包含:
- 错误信息
- 可能原因
- 诊断步骤
- 解决方案(多种可选)
3.4 开发批量处理脚本
batch_encrypt.py (5.8KB)
核心功能:
| |
使用示例:
| |
batch_decrypt.py (5.3KB)
核心功能:
- 读取
keys.json(由 batch_encrypt.py 生成) - 批量解密文件
- 支持跳过已存在文件(
--skip-existing)
batch_hash.py (8.0KB)
核心功能:
- 批量计算文件哈希
- 支持递归处理(
-r) - 支持验证完整性(
verify子命令)
使用示例:
| |
batch_sign.py (11.4KB)
核心功能:
- 批量签名/验签
- 支持 RSA/SM2/ECC 三种算法
- 保存签名信息到
signatures.json
3.5 测试与验证
验证 SKILL 结构
| |
测试基本功能
| |
第四步:Git 提交与发布
4.1 文件清单
新增文件 (6 个):
| |
总大小: ~74KB
4.2 Git 提交
| |
第五步:效果验证
5.1 功能测试清单
- AES 加密/解密正常
- 哈希计算正常
- eet 命令可执行
- SKILL 结构验证通过
- 批量脚本可运行
5.2 用户体验测试
场景 1: 用户说 “加密这段文字”
预期 Agent 行为:
- 识别为加密需求 → 触发 eet SKILL
- 读取 SKILL.md 的 Quick Start 和 Pattern 1
- 推荐使用 AES-GCM(最常用)
- 明确告知执行命令和输出格式
- 等待确认后执行
场景 2: 用户说 “批量加密这些文件”
预期 Agent 行为:
- 识别为批量操作
- 读取 SKILL.md 的 Batch Processing 部分
- 推荐使用 batch_encrypt.py
- 告知脚本将执行的操作
- 确认后执行并保存密钥到 keys.json
关键设计决策总结
1. 触发机制设计
为什么在 frontmatter 列出 8 种触发场景?
- frontmatter 始终在上下文中
- Agent 根据这些场景判断是否使用 eet
- 避免误触发(如"计算"可能是数学计算而非密码学计算)
2. 渐进式内容组织
为什么 SKILL.md 只放核心内容?
- SKILL.md 在 Skill 触发时加载,占用上下文
- 保持在 12KB(符合 <5k 词建议)
- 详细内容放到 references,按需加载
为什么 30+ 个场景放到单独文件?
- usage-patterns.md 有 7.7KB
- 如果放到 SKILL.md,会占用大量上下文
- Agent 只在需要具体示例时才加载
3. 批量处理脚本设计
为什么需要 4 个脚本?
- eet 本身不支持批量操作
- 脚本提供统一接口(
keys.json、signatures.json) - 支持加密、解密、哈希、签名四种常见批量需求
脚本设计原则:
- 使用完整路径(避免 PATH 问题)
- 详细的错误处理和提示
- 保存密钥/签名信息到 JSON 文件
- 提供使用示例和帮助文档
4. 用户确认机制
为什么要用户确认?
- 密码学操作涉及敏感数据
- 用户需要知道具体执行什么命令
- 密钥管理需要用户明确知情
推荐话术模板:
| |
最佳实践总结
✅ DO
frontmatter 详细描述触发场景
- 列出所有可能的使用场景
- 说明不支持的功能(避免误触发)
SKILL.md 保持精简
- 包含快速参考和核心工作流
- 详细内容放到 references
- 控制在 <5k 词(~12KB)
提供真实场景示例
- 每个场景包含完整流程
- 提供推荐话术模板
- 展示预期输出
开发辅助脚本
- 解决工具本身的限制(如批量处理)
- 提供友好的错误提示
- 保存关键信息到文件(密钥、签名)
遵循渐进式加载
- 元数据 → SKILL.md → references → scripts
- 按需加载详细内容
- 节省上下文空间
❌ DON’T
不要把所有内容塞进 SKILL.md
- 会导致上下文爆炸
- Agent 加载变慢
不要省略触发场景描述
- 会导致 Agent 不知道何时使用
- 可能误触发或漏触发
不要省略用户确认
- 密码学操作敏感
- 用户必须知道执行什么命令
不要忽略错误处理
- 脚本必须有详细错误提示
- 故障排查文档必不可少
后续优化方向
性能优化
- 批量脚本支持并发(
--max-workers) - 大文件分块处理
- 批量脚本支持并发(
功能扩展
- 支持更多算法(如 SHA3、BLAKE2)
- 支持密钥轮换
- 支持证书链验证
用户体验
- 提供更友好的交互式命令
- 支持密钥管理最佳实践提示
- 提供安全性评估
文档完善
- 添加更多真实场景示例
- 提供视频教程
- 提供常见错误诊断流程图
结语
这个案例展示了如何将一个现有的 CLI 工具封装为 OpenClaw Skill:
- 理解需求 - 明确功能范围和用户体验要求
- 设计方案 - 渐进式加载、用户确认、批量处理
- 编写文档 - frontmatter 触发机制、SKILL.md 核心内容、references 详细参考
- 开发脚本 - 解决工具限制,提供批量处理能力
- 测试验证 - 确保功能正常、用户体验流畅
- Git 发布 - 完整的提交记录和变更说明
核心原则:
- 🎯 精准触发 - frontmatter 详细描述场景
- 📚 渐进加载 - SKILL.md 精简,references 详细
- 🔐 用户确认 - 密码学操作必须透明
- 🛠️ 脚本辅助 - 解决工具限制,提供批量处理
希望这个案例能帮助你更好地理解如何设计和开发 OpenClaw Skills!
相关资源
- eet 工具: https://cipherhub.cloud
- OpenClaw 文档: https://docs.openclaw.ai
- OpenClaw GitHub: https://github.com/openclaw/openclaw
- ClawHub Skills 市场: https://clawhub.com
创建时间: 2026-03-07
作者: Yang X. CHEN + OpenClaw 梵高
版本: eet 2.5.0 | OpenClaw 2026.3.2