背景:为什么要封装 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 工具,自动:

  1. 识别用户需求(加密/解密/签名/哈希)
  2. 推荐使用 eet 并告知用户执行什么命令
  3. 等待用户确认后执行
  4. 解析结果并提供友好反馈

第一步:需求理解与确认

1.1 核心需求

用户提出明确要求:

  1. 名称: 使用 eet
  2. 位置: 本地私有,使用 OpenClaw 默认位置
  3. 功能范围: 覆盖 eet 所有本地计算功能(排除需要云 API 的 KMS 信封加密)
  4. 触发方式: 自动推荐使用,但需要用户确认,并明确告知执行什么命令
  5. 辅助脚本: 需要批量处理脚本(eet 本身不支持批量)
  6. 文档记录: 记录到博客的 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 结构设计

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
eet/
├── SKILL.md (核心文档)
│   ├── frontmatter (触发机制)
│   └── body (使用指南)
└── references/ (详细参考)
    ├── algorithms.md (算法参数)
    ├── usage-patterns.md (30个场景示例)
    └── troubleshooting.md (故障排查)
└── scripts/ (批量处理)
    ├── batch_encrypt.py
    ├── batch_decrypt.py
    ├── batch_hash.py
    └── batch_sign.py

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 用户体验设计

推荐话术模板:

1
2
3
4
5
6
7
我将使用 eet 工具的 AES-256-GCM 算法加密你的数据:
- 算法: AES-GCM-256(认证加密)
- 密钥/Nonce: 自动生成随机值
- 输出: JSON 格式,包含 key_b64、nonce_b64、ciphertext_b64
- 注意: 必须保存密钥和 nonce 才能解密

是否继续?

三步确认流程:

  1. 识别需求 → 2. 推荐工具并告知细节 → 3. 等待确认 → 4. 执行并解析

第三步:执行过程详解

3.1 初始化 SKILL 结构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 使用 OpenClaw 提供的初始化脚本
python3 ~/.npm-global/lib/node_modules/openclaw/skills/skill-creator/scripts/init_skill.py \
  eet \
  --path ~/.npm-global/lib/node_modules/openclaw/skills \
  --resources scripts,references

# 输出:
# [OK] Created skill directory: /home/ubuntu/.npm-global/lib/node_modules/openclaw/skills/eet
# [OK] Created SKILL.md
# [OK] Created scripts/
# [OK] Created references/

3.2 编写 SKILL.md

Frontmatter 设计(触发机制)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
---
name: eet
description: |
  CipherHUB easy-encryption-tool (eet) 密码学工具集。支持所有本地计算功能(无需云 API 请求):
  
  对称加密:
  - AES (CBC/GCM 模式)
  - SM4 (CBC/GCM 模式) 
  - ZUC 流密码
  
  非对称加密:
  - RSA (加密/解密/签名/验签)
  - SM2 (加密/解密/签名/验签)
  - ECC (签名/验签/密钥交换)
  
  哈希与 MAC:
  - SM3, SHA256, SHA384, SHA512
  - HMAC (支持上述所有哈希算法)
  
  其他功能:
  - 证书解析 (PEM/DER, 支持国密 SM2)
  - 格式转换 (UTF-8, Base64, Hex)
  - 随机数生成 (字节流/字符串)
  - 时间戳转换
  
  触发场景:
  1. 用户要求加密/解密数据(任何形式)
  2. 用户要求签名/验签
  3. 用户要求生成密钥对
  4. 用户要求计算哈希值或 HMAC
  5. 用户要求格式转换(Base64, Hex)
  6. 用户要求生成随机数
  7. 用户提到密码学术语且需要实际操作
  8. 用户要求批量处理密码学操作
  
  不支持的功能(需要云 API):
  - KMS 信封加密
  - KMS 结构化文件加密
---

关键点

  • ✅ 详细列出所有功能模块
  • ✅ 明确 8 种触发场景
  • ✅ 说明不支持的功能(避免误触发)

Body 结构设计

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Eet - CipherHUB 密码学工具

## Overview
(1-2 句话说明工具是什么)

## Quick Start
(常用命令速查)

## Core Tasks
### 1. 对称加密 (AES/SM4/ZUC)
### 2. 非对称加密 (RSA/SM2/ECC)
### 3. 哈希与 HMAC
### 4. 其他工具

## Batch Processing
(批量脚本使用说明)

## Common Patterns
(4 个典型场景的工作流)

## Algorithm Selection Guide
(算法选择决策表)

## Troubleshooting
(常见问题快速诊断)

## Resources
(scripts 和 references 链接)

大小控制:最终 SKILL.md 约 12KB(符合 <5k 词建议)

3.3 编写 references 文件

algorithms.md (4.4KB)

内容结构:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# Algorithm Reference

## 对称加密算法
### AES (国际标准)
- AES-CBC-256 vs AES-GCM-256 对比
- 参数要求(IV/Nonce 长度)
- 安全性建议

### SM4 (国密标准)
- 与 AES 的对比
- 国密合规场景

### ZUC (流密码)
- 适用场景
- 参数要求

## 非对称加密算法
### RSA
- 密钥长度选择(2048/3072/4096)
- 加密长度限制
- 签名 vs 加密

### SM2 (国密)
- 等效安全性
- 国密合规必需

### ECC
- 曲线选择(secp256r1/384r1/521r1)

## 哈希算法
- SHA-2 系列(256/384/512)
- SM3(国密)

## 算法选择决策树
(3 个决策流程图)

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 大类问题:

  1. 环境问题(command not found、Python 环境、权限)
  2. 命令执行错误(参数缺失、冲突、文件不存在)
  3. 加密/解密问题(密钥长度、IV 错误、解密失败、GCM padding)
  4. 密钥管理问题(私钥密码、文件损坏、格式不匹配)
  5. 格式与编码问题(Base64、Hex、UTF-8)
  6. 性能问题(大文件、批量处理内存)
  7. 批量处理问题(脚本找不到 eet、中断、密钥管理)

每个问题包含:

  • 错误信息
  • 可能原因
  • 诊断步骤
  • 解决方案(多种可选)

3.4 开发批量处理脚本

batch_encrypt.py (5.8KB)

核心功能:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
def batch_encrypt(
    algorithm: str,        # aes, sm4, zuc
    directory: str,        # 目标目录
    pattern: str = "*",    # 文件匹配模式
    mode: str = "gcm",     # cbc 或 gcm
    output_dir: str = None,
) -> Dict[str, Dict]:
    """
    批量加密文件
    返回: 文件路径 -> 密钥信息映射
    """
    # 1. 查找匹配文件
    # 2. 逐个调用 eet 加密
    # 3. 保存密钥信息到 keys.json
    # 4. 返回结果统计

使用示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 批量加密当前目录所有 txt 文件
python scripts/batch_encrypt.py aes -d . -p "*.txt"

# 输出:
# Found 10 files to encrypt
# [1/10] Processing: file1.txt
#   ✓ Encrypted: file1.txt.enc
# ...
# ✓ Batch encryption completed!
#   Files processed: 10
#   Keys saved to: keys.json
# ⚠ WARNING: Keep keys.json secure!

batch_decrypt.py (5.3KB)

核心功能:

  • 读取 keys.json(由 batch_encrypt.py 生成)
  • 批量解密文件
  • 支持跳过已存在文件(--skip-existing

batch_hash.py (8.0KB)

核心功能:

  • 批量计算文件哈希
  • 支持递归处理(-r
  • 支持验证完整性(verify 子命令)

使用示例:

1
2
3
4
5
# 计算所有文件的 SHA256
python scripts/batch_hash.py hash sha256 -d ./files

# 验证文件完整性
python scripts/batch_hash.py verify -f hashes.json

batch_sign.py (11.4KB)

核心功能:

  • 批量签名/验签
  • 支持 RSA/SM2/ECC 三种算法
  • 保存签名信息到 signatures.json

3.5 测试与验证

验证 SKILL 结构

1
2
3
4
python3 ~/.npm-global/lib/node_modules/openclaw/skills/skill-creator/scripts/quick_validate.py \
  ~/.npm-global/lib/node_modules/openclaw/skills/eet/

# 输出: Skill is valid!

测试基本功能

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 测试 AES 加密
eet aes -i "test message from openclaw" -r --json

# 输出:
{
  "metadata": {
    "operation": "encrypt",
    "algorithm": "aes-cbc-256"
  },
  "result": {
    "cipher": "+K+RkFko9fxxYWAIApIh5g==",
    "key": "rV0+lwQ1/bXyG9W18nZZx9JzY30AlM0VVunTnQUOKXI=",
    "iv": "UONPd4sbgWj2MnlkfflH9w=="
  }
}

# 测试哈希
eet hash -a sha256 -i "hello world" --json

# 输出:
{
  "result": {
    "digest": "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"
  }
}

第四步:Git 提交与发布

4.1 文件清单

新增文件 (6 个):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
~/.npm-global/lib/node_modules/openclaw/skills/eet/
├── SKILL.md (12KB)
├── references/
│   ├── algorithms.md (4.4KB)
│   ├── usage-patterns.md (7.7KB)
│   └── troubleshooting.md (9.3KB)
└── scripts/
    ├── batch_encrypt.py (5.8KB)
    ├── batch_decrypt.py (5.3KB)
    ├── batch_hash.py (8.0KB)
    └── batch_sign.py (11.4KB)

总大小: ~74KB

4.2 Git 提交

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
cd ~/.npm-global/lib/node_modules/openclaw/skills/

# 添加新 Skill
git add eet/

# 提交
git commit -m "openclaw 梵高

Added:
- skills/eet/ (新建 SKILL)
  - SKILL.md (核心文档)
  - references/algorithms.md (算法参考)
  - references/usage-patterns.md (30+ 场景示例)
  - references/troubleshooting.md (故障排查)
  - scripts/batch_encrypt.py (批量加密)
  - scripts/batch_decrypt.py (批量解密)
  - scripts/batch_hash.py (批量哈希)
  - scripts/batch_sign.py (批量签名)

Summary:
- 封装 eet 密码学工具为 OpenClaw Skill
- 覆盖所有本地计算功能(AES/SM4/ZUC/RSA/SM2/ECC/Hash/HMAC)
- 提供完整触发机制(8 种场景)
- 包含 30+ 个真实使用场景示例
- 开发 4 个批量处理脚本
- 遵循渐进式加载原则(frontmatter → SKILL.md → references → scripts)
"

# 推送到远程(如需要)
# git push origin main

第五步:效果验证

5.1 功能测试清单

  • AES 加密/解密正常
  • 哈希计算正常
  • eet 命令可执行
  • SKILL 结构验证通过
  • 批量脚本可运行

5.2 用户体验测试

场景 1: 用户说 “加密这段文字”

预期 Agent 行为:

  1. 识别为加密需求 → 触发 eet SKILL
  2. 读取 SKILL.md 的 Quick Start 和 Pattern 1
  3. 推荐使用 AES-GCM(最常用)
  4. 明确告知执行命令和输出格式
  5. 等待确认后执行

场景 2: 用户说 “批量加密这些文件”

预期 Agent 行为:

  1. 识别为批量操作
  2. 读取 SKILL.md 的 Batch Processing 部分
  3. 推荐使用 batch_encrypt.py
  4. 告知脚本将执行的操作
  5. 确认后执行并保存密钥到 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.jsonsignatures.json
  • 支持加密、解密、哈希、签名四种常见批量需求

脚本设计原则:

  • 使用完整路径(避免 PATH 问题)
  • 详细的错误处理和提示
  • 保存密钥/签名信息到 JSON 文件
  • 提供使用示例和帮助文档

4. 用户确认机制

为什么要用户确认?

  • 密码学操作涉及敏感数据
  • 用户需要知道具体执行什么命令
  • 密钥管理需要用户明确知情

推荐话术模板:

1
2
3
4
5
6
7
我将使用 eet 工具的 [算法] 算法:
- 算法: [具体算法]
- [其他参数]
- 输出: [输出格式]
- 注意: [重要提示]

是否继续?

最佳实践总结

✅ DO

  1. frontmatter 详细描述触发场景

    • 列出所有可能的使用场景
    • 说明不支持的功能(避免误触发)
  2. SKILL.md 保持精简

    • 包含快速参考和核心工作流
    • 详细内容放到 references
    • 控制在 <5k 词(~12KB)
  3. 提供真实场景示例

    • 每个场景包含完整流程
    • 提供推荐话术模板
    • 展示预期输出
  4. 开发辅助脚本

    • 解决工具本身的限制(如批量处理)
    • 提供友好的错误提示
    • 保存关键信息到文件(密钥、签名)
  5. 遵循渐进式加载

    • 元数据 → SKILL.md → references → scripts
    • 按需加载详细内容
    • 节省上下文空间

❌ DON’T

  1. 不要把所有内容塞进 SKILL.md

    • 会导致上下文爆炸
    • Agent 加载变慢
  2. 不要省略触发场景描述

    • 会导致 Agent 不知道何时使用
    • 可能误触发或漏触发
  3. 不要省略用户确认

    • 密码学操作敏感
    • 用户必须知道执行什么命令
  4. 不要忽略错误处理

    • 脚本必须有详细错误提示
    • 故障排查文档必不可少

后续优化方向

  1. 性能优化

    • 批量脚本支持并发(--max-workers
    • 大文件分块处理
  2. 功能扩展

    • 支持更多算法(如 SHA3、BLAKE2)
    • 支持密钥轮换
    • 支持证书链验证
  3. 用户体验

    • 提供更友好的交互式命令
    • 支持密钥管理最佳实践提示
    • 提供安全性评估
  4. 文档完善

    • 添加更多真实场景示例
    • 提供视频教程
    • 提供常见错误诊断流程图

结语

这个案例展示了如何将一个现有的 CLI 工具封装为 OpenClaw Skill:

  1. 理解需求 - 明确功能范围和用户体验要求
  2. 设计方案 - 渐进式加载、用户确认、批量处理
  3. 编写文档 - frontmatter 触发机制、SKILL.md 核心内容、references 详细参考
  4. 开发脚本 - 解决工具限制,提供批量处理能力
  5. 测试验证 - 确保功能正常、用户体验流畅
  6. Git 发布 - 完整的提交记录和变更说明

核心原则

  • 🎯 精准触发 - frontmatter 详细描述场景
  • 📚 渐进加载 - SKILL.md 精简,references 详细
  • 🔐 用户确认 - 密码学操作必须透明
  • 🛠️ 脚本辅助 - 解决工具限制,提供批量处理

希望这个案例能帮助你更好地理解如何设计和开发 OpenClaw Skills!


相关资源


创建时间: 2026-03-07
作者: Yang X. CHEN + OpenClaw 梵高
版本: eet 2.5.0 | OpenClaw 2026.3.2