Install
openclaw skills install @zuoyunlai/lz-skill-vetter-20260819OpenClaw 技能自动化审计器 Pro(安全/性能/质量三维度 38 条规则)。基于 spclaudehome v1.0.0 fork 深度升级,新增 JSON 报告、CI 退出码、豁免机制、severity-cap 引擎适配。安装第三方技能前必跑。触发词:vet skill, audit skill, 安全审计, 扫描 skill, skill 检查.
openclaw skills install @zuoyunlai/lz-skill-vetter-20260819基于 skill-vetter(spclaudehome v1.0.0)的深度升级版。
原作者授权协议下 fork,38 条自动化规则 + 3 层豁免 + CI 集成 + 引擎类技能适配。
自动化 + 人工审计并行的 OpenClaw 技能安全审计器。
# 1. 文本报告(人类可读)
python3 scripts/audit.py /path/to/skill
# 2. JSON 报告(机器可消费 + CI)
python3 scripts/audit.py /path/to/skill --format json
# 3. 仅看严重问题
python3 scripts/audit.py /path/to/skill --severity high
# 4. CI 退出码模式
python3 scripts/audit.py /path/to/skill --exit-code
# 退出码:0=pass, 1=warning, 2=fail
| 维度 | v1.0.0 | v2.0.0 | v2.0.1 | v2.1.x |
|---|---|---|---|---|
| 安全扫描 | 人工 4 步协议 | ✅ 自动化 24 条 | ✅ +3 误判豁免 | ✅ + safe-pattern 双层校验 |
| 性能审计 | ❌ | ✅ 5 条 | ✅ | ✅ |
| 质量审计 | ❌ | ✅ 9 条 | ✅ | ✅ |
| JSON 报告 | ❌ | ✅ | ✅ | ✅ |
| CI 集成 | ❌ | ✅ --exit-code | ✅ + batch_audit.sh | ✅ |
| 豁免机制 | ❌ | ✅ # safe-pattern: 注释 | ✅ + markdown 表格/标题智能豁免 | ✅ reason 白名单 + 文件级 manifest(v2.1.2) |
| 模式库 | 内置硬编码 | ✅ YAML 可扩展 | ✅ + 3 个误判修复 | ✅ + 1 修复(dot-key 词边界) |
| 人工审计 | ✅ 4 步协议 | ✅ 保留在 references/audit_protocol.md | ✅ | ✅ |
合计 38 条 自动审计规则。
| 问题 | v2.0.0 | v2.0.1 |
|---|---|---|
1password op:// 引用误判 | critical | ✅ exception_pattern 豁免 |
| Chrome/123.0.0.0 版本号误判为 IP | high | ** 正则加 (?<![\w./])...(?!\w.) 边界 |
| 工具类 updater 用 curl/wget | high | ✅ severity 降为 medium |
完整协议见 references/audit_protocol.md。
| 命中 | verdict |
|---|---|
| ≥1 critical | ⛔ ❌ DO NOT INSTALL |
| ≥1 high | 🔴 ⚠️ INSTALL WITH CAUTION |
| ≥1 medium | 🟡 ⚠️ REVIEW MEDIUM ISSUES |
| ≥1 low/info | 🟢 ✅ SAFE TO INSTALL (minor notes) |
| 无任何命中 | 🟢 ✅ SAFE TO INSTALL |
scripts/scan.sh /path/to/skill
# 自动调 audit.py;若无 PyYAML 则用 grep fallback
# safe-pattern: 注释(双层校验 · v2.1.2)任意一行带 # safe-pattern: <reason>(Python/Shell)或 <!-- safe-pattern: <reason> -->(Markdown)即意图豁免。v2.1.2 起双层校验:
documentation / rule-description / version-history / doc-example / test-fixture 之一。无 reason 或 reason 未知 → 不豁免。.safe-pattern-manifest.json 的 exemptions 数组且 reason 匹配 → 才豁免。未提供 manifest 的技能 = 任何 safe-pattern 都不豁免(默认严格,防御「按内容豁免」攻击面)。# 这是文档示例,展示 setuid 用法(实际未启用) # safe-pattern: doc-example
os.setuid(0)
exception_pattern(模式定义层)模式库的 exception_pattern 字段提供正则豁免,例:
- id: SEC-CRED-001
regex: '(?i)(api_key|token)\s*[:=]\s*["\'][^"\']{16,}["\']'
exception_pattern: '\$\{?[A-Z_]+\}?' # 跳过环境变量引用
audit.py 自动跳过:
scripts/patterns/(模式定义自身)scripts/audit.py(审计器自身)references/_*.md(下划线前缀的内部文档,包含 scanner 自身的规则说明——防御「规则描述误报」).safe-pattern-manifest.json(v2.1.2 新增 · 推荐)需主动豁免的技能应在根目录创建此清单:
{
"version": 1,
"exemptions": [
{
"file": "scripts/run.py",
"reason": "rule-description",
"lines": "10-20",
"note": "scanner 自身的规则定义"
}
]
}
Scanner 仅在 manifest 列出的文件中识别 safe-pattern 注释。未创建 manifest = 默认严格(不豁免任何 safe-pattern)。这是 v2.1.2 防御「safe-pattern 按内容豁免」攻击面的核心。
# .github/workflows/skill-audit.yml
name: Skill Audit
on: [push, pull_request]
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with: {python-version: '3.12'}
- run: pip install pyyaml
- name: Audit
run: python3 lz-skill-vetter-plus/scripts/audit.py . --exit-code
references/audit_protocol.md — 4 步人工审计协议references/patterns.md — 38 条模式库索引references/output_format.md — JSON Schema + CI 集成MIT License — Copyright (c) 2026 左运来
severity-cap: low → 原 verdict = SAFE → 现 verdict = ❌ DO NOT INSTALL + 警告横幅显示 capped/uncapped 双值references/_rules_documentation.md 从扫描范围排除(路径 references/_*.md 默认跳过)safe-pattern 必须 reason 字段,reason 必须在白名单(5 类).safe-pattern-manifest.json 机制,未提供 = 默认严格(不豁免任何 safe-pattern),攻击面消除op:// vault:// secret:// keychain://(?<![\w./])...(?!\w.),豁免 Chrome/版本号Paranoia is a feature. 🔒🦀