clawsec-suite
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseClawSec Suite
ClawSec套件
This means can:
clawsec-suite- monitor the ClawSec advisory feed,
- track which advisories are new since last check,
- cross-reference advisories against locally installed skills,
- recommend removal for malicious-skill advisories and require explicit user approval first,
- and still act as the setup/management entrypoint for other ClawSec protections.
这意味着具备以下功能:
clawsec-suite- 监控ClawSec咨询源,
- 追踪自上次检查以来新增的咨询,
- 将咨询与本地已安装的Skill进行交叉比对,
- 针对恶意Skill的咨询建议移除操作,并需要用户明确批准后执行,
- 同时仍可作为其他ClawSec防护功能的设置/管理入口。
Included vs Optional Protections
内置防护与可选防护
Built into clawsec-suite
clawsec-suite内置功能
- Embedded feed seed file:
advisories/feed.json - Portable heartbeat workflow in
HEARTBEAT.md - Advisory polling + state tracking + affected-skill checks
- OpenClaw advisory guardian hook package:
hooks/clawsec-advisory-guardian/ - Setup scripts for hook and optional cron scheduling:
scripts/ - Guarded installer:
scripts/guarded_skill_install.mjs - Dynamic catalog discovery for installable skills:
scripts/discover_skill_catalog.mjs
- 内置源种子文件:
advisories/feed.json - 中的可移植心跳工作流
HEARTBEAT.md - 咨询轮询 + 状态追踪 + 受影响Skill检查
- OpenClaw咨询守护钩子包:
hooks/clawsec-advisory-guardian/ - 钩子和可选定时任务调度的设置脚本:
scripts/ - 受保护的安装程序:
scripts/guarded_skill_install.mjs - 可安装Skill的动态目录发现:
scripts/discover_skill_catalog.mjs
Installed separately (dynamic catalog)
需单独安装(动态目录)
clawsec-suiteDiscover the current catalog from the authoritative index () at runtime:
https://clawsec.prompt.security/skills/index.jsonbash
SUITE_DIR="${INSTALL_ROOT:-$HOME/.openclaw/skills}/clawsec-suite"
node "$SUITE_DIR/scripts/discover_skill_catalog.mjs"Fallback behavior:
- If the remote catalog index is reachable and valid, the suite uses it.
- If the remote index is unavailable or malformed, the script falls back to suite-local catalog metadata in .
skill.json
clawsec-suite在运行时从权威索引()发现当前目录:
https://clawsec.prompt.security/skills/index.jsonbash
SUITE_DIR="${INSTALL_ROOT:-$HOME/.openclaw/skills}/clawsec-suite"
node "$SUITE_DIR/scripts/discover_skill_catalog.mjs"回退机制:
- 如果远程目录索引可访问且有效,套件将使用该索引。
- 如果远程索引不可用或格式错误,脚本将回退到套件本地的目录元数据。
skill.json
Installation
安装方法
Option A: Via clawhub (recommended)
选项A:通过clawhub安装(推荐)
bash
npx clawhub@latest install clawsec-suitebash
npx clawhub@latest install clawsec-suiteOption B: Manual download with signature + checksum verification
选项B:手动下载并验证签名与校验和
bash
set -euo pipefail
VERSION="${SKILL_VERSION:?Set SKILL_VERSION (e.g. 0.0.8)}"
INSTALL_ROOT="${INSTALL_ROOT:-$HOME/.openclaw/skills}"
DEST="$INSTALL_ROOT/clawsec-suite"
BASE="https://github.com/prompt-security/clawsec/releases/download/clawsec-suite-v${VERSION}"
TEMP_DIR="$(mktemp -d)"
trap 'rm -rf "$TEMP_DIR"' EXITbash
set -euo pipefail
VERSION="${SKILL_VERSION:?Set SKILL_VERSION (e.g. 0.0.8)}"
INSTALL_ROOT="${INSTALL_ROOT:-$HOME/.openclaw/skills}"
DEST="$INSTALL_ROOT/clawsec-suite"
BASE="https://github.com/prompt-security/clawsec/releases/download/clawsec-suite-v${VERSION}"
TEMP_DIR="$(mktemp -d)"
trap 'rm -rf "$TEMP_DIR"' EXITPinned release-signing public key (verify fingerprint out-of-band on first use)
Pinned release-signing public key (verify fingerprint out-of-band on first use)
Fingerprint (SHA-256 of SPKI DER): 711424e4535f84093fefb024cd1ca4ec87439e53907b305b79a631d5befba9c8
Fingerprint (SHA-256 of SPKI DER): 711424e4535f84093fefb024cd1ca4ec87439e53907b305b79a631d5befba9c8
RELEASE_PUBKEY_SHA256="711424e4535f84093fefb024cd1ca4ec87439e53907b305b79a631d5befba9c8"
cat > "$TEMP_DIR/release-signing-public.pem" <<'PEM'
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAS7nijfMcUoOBCj4yOXJX+GYGv2pFl2Yaha1P4v5Cm6A=
-----END PUBLIC KEY-----
PEM
ACTUAL_KEY_SHA256="$(openssl pkey -pubin -in "$TEMP_DIR/release-signing-public.pem" -outform DER | shasum -a 256 | awk '{print $1}')"
if [ "$ACTUAL_KEY_SHA256" != "$RELEASE_PUBKEY_SHA256" ]; then
echo "ERROR: Release public key fingerprint mismatch" >&2
exit 1
fi
ZIP_NAME="clawsec-suite-v${VERSION}.zip"
RELEASE_PUBKEY_SHA256="711424e4535f84093fefb024cd1ca4ec87439e53907b305b79a631d5befba9c8"
cat > "$TEMP_DIR/release-signing-public.pem" <<'PEM'
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAS7nijfMcUoOBCj4yOXJX+GYGv2pFl2Yaha1P4v5Cm6A=
-----END PUBLIC KEY-----
PEM
ACTUAL_KEY_SHA256="$(openssl pkey -pubin -in "$TEMP_DIR/release-signing-public.pem" -outform DER | shasum -a 256 | awk '{print $1}')"
if [ "$ACTUAL_KEY_SHA256" != "$RELEASE_PUBKEY_SHA256" ]; then
echo "ERROR: Release public key fingerprint mismatch" >&2
exit 1
fi
ZIP_NAME="clawsec-suite-v${VERSION}.zip"
1) Download release archive + signed checksums manifest + signing public key
1) Download release archive + signed checksums manifest + signing public key
curl -fsSL "$BASE/$ZIP_NAME" -o "$TEMP_DIR/$ZIP_NAME"
curl -fsSL "$BASE/checksums.json" -o "$TEMP_DIR/checksums.json"
curl -fsSL "$BASE/checksums.sig" -o "$TEMP_DIR/checksums.sig"
curl -fsSL "$BASE/$ZIP_NAME" -o "$TEMP_DIR/$ZIP_NAME"
curl -fsSL "$BASE/checksums.json" -o "$TEMP_DIR/checksums.json"
curl -fsSL "$BASE/checksums.sig" -o "$TEMP_DIR/checksums.sig"
2) Verify checksums manifest signature before trusting any hashes
2) Verify checksums manifest signature before trusting any hashes
openssl base64 -d -A -in "$TEMP_DIR/checksums.sig" -out "$TEMP_DIR/checksums.sig.bin"
if ! openssl pkeyutl -verify
-pubin
-inkey "$TEMP_DIR/release-signing-public.pem"
-sigfile "$TEMP_DIR/checksums.sig.bin"
-rawin
-in "$TEMP_DIR/checksums.json" >/dev/null 2>&1; then echo "ERROR: checksums.json signature verification failed" >&2 exit 1 fi
-pubin
-inkey "$TEMP_DIR/release-signing-public.pem"
-sigfile "$TEMP_DIR/checksums.sig.bin"
-rawin
-in "$TEMP_DIR/checksums.json" >/dev/null 2>&1; then echo "ERROR: checksums.json signature verification failed" >&2 exit 1 fi
EXPECTED_ZIP_SHA="$(jq -r '.archive.sha256 // empty' "$TEMP_DIR/checksums.json")"
if [ -z "$EXPECTED_ZIP_SHA" ]; then
echo "ERROR: checksums.json missing archive.sha256" >&2
exit 1
fi
if command -v shasum >/dev/null 2>&1; then
ACTUAL_ZIP_SHA="$(shasum -a 256 "$TEMP_DIR/$ZIP_NAME" | awk '{print $1}')"
else
ACTUAL_ZIP_SHA="$(sha256sum "$TEMP_DIR/$ZIP_NAME" | awk '{print $1}')"
fi
if [ "$EXPECTED_ZIP_SHA" != "$ACTUAL_ZIP_SHA" ]; then
echo "ERROR: Archive checksum mismatch for $ZIP_NAME" >&2
exit 1
fi
echo "Checksums manifest signature and archive hash verified."
openssl base64 -d -A -in "$TEMP_DIR/checksums.sig" -out "$TEMP_DIR/checksums.sig.bin"
if ! openssl pkeyutl -verify
-pubin
-inkey "$TEMP_DIR/release-signing-public.pem"
-sigfile "$TEMP_DIR/checksums.sig.bin"
-rawin
-in "$TEMP_DIR/checksums.json" >/dev/null 2>&1; then echo "ERROR: checksums.json signature verification failed" >&2 exit 1 fi
-pubin
-inkey "$TEMP_DIR/release-signing-public.pem"
-sigfile "$TEMP_DIR/checksums.sig.bin"
-rawin
-in "$TEMP_DIR/checksums.json" >/dev/null 2>&1; then echo "ERROR: checksums.json signature verification failed" >&2 exit 1 fi
EXPECTED_ZIP_SHA="$(jq -r '.archive.sha256 // empty' "$TEMP_DIR/checksums.json")"
if [ -z "$EXPECTED_ZIP_SHA" ]; then
echo "ERROR: checksums.json missing archive.sha256" >&2
exit 1
fi
if command -v shasum >/dev/null 2>&1; then
ACTUAL_ZIP_SHA="$(shasum -a 256 "$TEMP_DIR/$ZIP_NAME" | awk '{print $1}')"
else
ACTUAL_ZIP_SHA="$(sha256sum "$TEMP_DIR/$ZIP_NAME" | awk '{print $1}')"
fi
if [ "$EXPECTED_ZIP_SHA" != "$ACTUAL_ZIP_SHA" ]; then
echo "ERROR: Archive checksum mismatch for $ZIP_NAME" >&2
exit 1
fi
echo "Checksums manifest signature and archive hash verified."
3) Install verified archive
3) Install verified archive
mkdir -p "$INSTALL_ROOT"
rm -rf "$DEST"
unzip -q "$TEMP_DIR/$ZIP_NAME" -d "$INSTALL_ROOT"
chmod 600 "$DEST/skill.json"
find "$DEST" -type f ! -name "skill.json" -exec chmod 644 {} ;
echo "Installed clawsec-suite v${VERSION} to: $DEST"
echo "Next step (OpenClaw): node "$DEST/scripts/setup_advisory_hook.mjs""
undefinedmkdir -p "$INSTALL_ROOT"
rm -rf "$DEST"
unzip -q "$TEMP_DIR/$ZIP_NAME" -d "$INSTALL_ROOT"
chmod 600 "$DEST/skill.json"
find "$DEST" -type f ! -name "skill.json" -exec chmod 644 {} ;
echo "Installed clawsec-suite v${VERSION} to: $DEST"
echo "Next step (OpenClaw): node "$DEST/scripts/setup_advisory_hook.mjs""
undefinedOpenClaw Automation (Hook + Optional Cron)
OpenClaw自动化(钩子 + 可选定时任务)
After installing the suite, enable the advisory guardian hook:
bash
SUITE_DIR="${INSTALL_ROOT:-$HOME/.openclaw/skills}/clawsec-suite"
node "$SUITE_DIR/scripts/setup_advisory_hook.mjs"Optional: create/update a periodic cron nudge (default every ) that triggers a main-session advisory scan:
6hbash
SUITE_DIR="${INSTALL_ROOT:-$HOME/.openclaw/skills}/clawsec-suite"
node "$SUITE_DIR/scripts/setup_advisory_cron.mjs"What this adds:
- scan on and
agent:bootstrap(/new),command:new - compare advisory entries against installed skills,
affected - notify when new matches appear,
- and ask for explicit user approval before any removal flow.
Restart the OpenClaw gateway after enabling the hook. Then run once to force an immediate scan in the next session context.
/new安装套件后,启用咨询守护钩子:
bash
SUITE_DIR="${INSTALL_ROOT:-$HOME/.openclaw/skills}/clawsec-suite"
node "$SUITE_DIR/scripts/setup_advisory_hook.mjs"可选操作:创建/更新定期定时任务(默认每6小时一次),触发主会话的咨询扫描:
bash
SUITE_DIR="${INSTALL_ROOT:-$HOME/.openclaw/skills}/clawsec-suite"
node "$SUITE_DIR/scripts/setup_advisory_cron.mjs"此操作将添加以下功能:
- 在和
agent:bootstrap(/new)时执行扫描,command:new - 将咨询的条目与已安装的Skill进行比对,
affected - 发现新匹配项时发出通知,
- 在执行任何移除流程前请求用户明确批准。
启用钩子后重启OpenClaw网关。然后运行一次,在下次会话中强制立即执行扫描。
/newGuarded Skill Install Flow (Double Confirmation)
受保护的Skill安装流程(双重确认)
When the user asks to install a skill, treat that as the first request and run a guarded install check:
bash
SUITE_DIR="${INSTALL_ROOT:-$HOME/.openclaw/skills}/clawsec-suite"
node "$SUITE_DIR/scripts/guarded_skill_install.mjs" --skill helper-plus --version 1.0.1Behavior:
- If no advisory match is found, install proceeds.
- If is omitted, matching is conservative: any advisory that references the skill name is treated as a match.
--version - If advisory match is found, the script prints advisory context and exits with code .
42 - Then require an explicit second confirmation from the user and rerun with :
--confirm-advisory
bash
node "$SUITE_DIR/scripts/guarded_skill_install.mjs" --skill helper-plus --version 1.0.1 --confirm-advisoryThis enforces:
- First confirmation: user asked to install.
- Second confirmation: user explicitly approves install after seeing advisory details.
当用户请求安装某个Skill时,将其视为首次请求并执行受保护的安装检查:
bash
SUITE_DIR="${INSTALL_ROOT:-$HOME/.openclaw/skills}/clawsec-suite"
node "$SUITE_DIR/scripts/guarded_skill_install.mjs" --skill helper-plus --version 1.0.1行为逻辑:
- 如果未找到匹配的咨询,安装将继续执行。
- 如果省略参数,匹配规则将更为严格:任何提及该Skill名称的咨询都将被视为匹配项。
--version - 如果找到匹配的咨询,脚本将打印咨询内容并以代码退出。
42 - 此时需要用户明确二次确认,并添加参数重新运行:
--confirm-advisory
bash
node "$SUITE_DIR/scripts/guarded_skill_install.mjs" --skill helper-plus --version 1.0.1 --confirm-advisory这将强制执行:
- 首次确认:用户发起安装请求。
- 二次确认:用户查看咨询详情后明确批准安装。
Embedded Advisory Feed Behavior
内置咨询源机制
The embedded feed logic uses these defaults:
- Remote feed URL:
https://clawsec.prompt.security/advisories/feed.json - Remote feed signature URL: (override with
${CLAWSEC_FEED_URL}.sig)CLAWSEC_FEED_SIG_URL - Remote checksums manifest URL: sibling (override with
checksums.json)CLAWSEC_FEED_CHECKSUMS_URL - Local seed fallback:
~/.openclaw/skills/clawsec-suite/advisories/feed.json - Local feed signature: (override with
${CLAWSEC_LOCAL_FEED}.sig)CLAWSEC_LOCAL_FEED_SIG - Local checksums manifest:
~/.openclaw/skills/clawsec-suite/advisories/checksums.json - Pinned feed signing key: (override with
~/.openclaw/skills/clawsec-suite/advisories/feed-signing-public.pem)CLAWSEC_FEED_PUBLIC_KEY - State file:
~/.openclaw/clawsec-suite-feed-state.json - Hook rate-limit env (OpenClaw hook): (default
CLAWSEC_HOOK_INTERVAL_SECONDS)300
Fail-closed verification: Feed signatures are required by default. Checksum manifests are verified when companion checksum artifacts are available. Set only as a temporary migration bypass when adopting this version before signed feed artifacts are available upstream.
CLAWSEC_ALLOW_UNSIGNED_FEED=1内置源逻辑使用以下默认配置:
- 远程源URL:
https://clawsec.prompt.security/advisories/feed.json - 远程源签名URL:(可通过
${CLAWSEC_FEED_URL}.sig覆盖)CLAWSEC_FEED_SIG_URL - 远程校验和清单URL:同级目录下的(可通过
checksums.json覆盖)CLAWSEC_FEED_CHECKSUMS_URL - 本地种子回退:
~/.openclaw/skills/clawsec-suite/advisories/feed.json - 本地源签名:(可通过
${CLAWSEC_LOCAL_FEED}.sig覆盖)CLAWSEC_LOCAL_FEED_SIG - 本地校验和清单:
~/.openclaw/skills/clawsec-suite/advisories/checksums.json - 固定的源签名密钥:(可通过
~/.openclaw/skills/clawsec-suite/advisories/feed-signing-public.pem覆盖)CLAWSEC_FEED_PUBLIC_KEY - 状态文件:
~/.openclaw/clawsec-suite-feed-state.json - 钩子频率限制环境变量(OpenClaw钩子):(默认值
CLAWSEC_HOOK_INTERVAL_SECONDS)300
关闭式验证失败处理: 默认情况下源签名是必需的。当存在配套的校验和制品时,将验证校验和清单。仅当在采用此版本时上游尚未提供签名源制品的临时迁移阶段,才可设置作为临时绕过方案。
CLAWSEC_ALLOW_UNSIGNED_FEED=1Quick feed check
快速源检查
bash
FEED_URL="${CLAWSEC_FEED_URL:-https://clawsec.prompt.security/advisories/feed.json}"
STATE_FILE="${CLAWSEC_SUITE_STATE_FILE:-$HOME/.openclaw/clawsec-suite-feed-state.json}"
TMP="$(mktemp -d)"
trap 'rm -rf "$TMP"' EXIT
if ! curl -fsSLo "$TMP/feed.json" "$FEED_URL"; then
echo "ERROR: Failed to fetch advisory feed"
exit 1
fi
if ! jq -e '.version and (.advisories | type == "array")' "$TMP/feed.json" >/dev/null; then
echo "ERROR: Invalid advisory feed format"
exit 1
fi
mkdir -p "$(dirname "$STATE_FILE")"
if [ ! -f "$STATE_FILE" ]; then
echo '{"schema_version":"1.0","known_advisories":[],"last_feed_check":null,"last_feed_updated":null}' > "$STATE_FILE"
chmod 600 "$STATE_FILE"
fi
NEW_IDS_FILE="$TMP/new_ids.txt"
jq -r --argfile state "$STATE_FILE" '($state.known_advisories // []) as $known | [.advisories[]?.id | select(. != null and ($known | index(.) | not))] | .[]?' "$TMP/feed.json" > "$NEW_IDS_FILE"
if [ -s "$NEW_IDS_FILE" ]; then
echo "New advisories detected:"
while IFS= read -r id; do
[ -z "$id" ] && continue
jq -r --arg id "$id" '.advisories[] | select(.id == $id) | "- [\(.severity | ascii_upcase)] \(.id): \(.title)"' "$TMP/feed.json"
done < "$NEW_IDS_FILE"
else
echo "FEED_OK - no new advisories"
fibash
FEED_URL="${CLAWSEC_FEED_URL:-https://clawsec.prompt.security/advisories/feed.json}"
STATE_FILE="${CLAWSEC_SUITE_STATE_FILE:-$HOME/.openclaw/clawsec-suite-feed-state.json}"
TMP="$(mktemp -d)"
trap 'rm -rf "$TMP"' EXIT
if ! curl -fsSLo "$TMP/feed.json" "$FEED_URL"; then
echo "ERROR: Failed to fetch advisory feed"
exit 1
fi
if ! jq -e '.version and (.advisories | type == "array")' "$TMP/feed.json" >/dev/null; then
echo "ERROR: Invalid advisory feed format"
exit 1
fi
mkdir -p "$(dirname "$STATE_FILE")"
if [ ! -f "$STATE_FILE" ]; then
echo '{"schema_version":"1.0","known_advisories":[],"last_feed_check":null,"last_feed_updated":null}' > "$STATE_FILE"
chmod 600 "$STATE_FILE"
fi
NEW_IDS_FILE="$TMP/new_ids.txt"
jq -r --argfile state "$STATE_FILE" '($state.known_advisories // []) as $known | [.advisories[]?.id | select(. != null and ($known | index(.) | not))] | .[]?' "$TMP/feed.json" > "$NEW_IDS_FILE"
if [ -s "$NEW_IDS_FILE" ]; then
echo "New advisories detected:"
while IFS= read -r id; do
[ -z "$id" ] && continue
jq -r --arg id "$id" '.advisories[] | select(.id == $id) | "- [\(.severity | ascii_upcase)] \(.id): \(.title)"' "$TMP/feed.json"
done < "$NEW_IDS_FILE"
else
echo "FEED_OK - no new advisories"
fiHeartbeat Integration
心跳集成
Use the suite heartbeat script as the single periodic security check entrypoint:
skills/clawsec-suite/HEARTBEAT.md
It handles:
- suite update checks,
- feed polling,
- new-advisory detection,
- affected-skill cross-referencing,
- approval-gated response guidance for malicious/removal advisories,
- and persistent state updates.
将套件的心跳脚本作为定期安全检查的统一入口:
skills/clawsec-suite/HEARTBEAT.md
它负责处理:
- 套件更新检查,
- 源轮询,
- 新增咨询检测,
- 受影响Skill的交叉比对,
- 针对恶意/需移除咨询的需审批响应指导,
- 以及持久化状态更新。
Approval-Gated Response Contract
需审批的响应规则
If an advisory indicates a malicious or removal-recommended skill and that skill is installed:
- Notify the user immediately with advisory details and severity.
- Recommend removing or disabling the affected skill.
- Treat the original install request as first intent only.
- Ask for explicit second confirmation before deletion/disable action (or before proceeding with risky install).
- Only proceed after that second confirmation.
The suite hook and heartbeat guidance are intentionally non-destructive by default.
如果某条咨询指出某个Skill为恶意或建议移除,且该Skill已安装:
- 立即向用户发送包含咨询详情和严重等级的通知。
- 建议移除或禁用受影响的Skill。
- 将原始安装请求仅视为首次意图。
- 在执行删除/禁用操作(或继续进行高风险安装)前,请求用户明确二次确认。
- 仅在获得二次确认后才执行操作。
套件钩子和心跳指导默认是非破坏性的。
Advisory Suppression / Allowlist
咨询抑制/白名单
The advisory guardian pipeline supports opt-in suppression for advisories that have been reviewed and accepted by your security team. This is useful for first-party tooling or advisories that do not apply to your deployment.
咨询守护管道支持选择性抑制已被安全团队审核并接受的咨询。这对于内部工具或不适用于当前部署的咨询非常有用。
Activation
激活方式
Advisory suppression requires a single gate: the configuration file must contain with in the array. No CLI flag is needed -- the sentinel in the config file IS the opt-in gate.
"enabledFor""advisory"If the array is missing, empty, or does not include , all advisories are reported normally.
enabledFor"advisory"咨询抑制需要一个前提条件:配置文件中必须包含数组,且其中包含。无需CLI标志——配置文件中的标记即为启用开关。
"enabledFor""advisory"如果数组缺失、为空或不包含,所有咨询将正常上报。
enabledFor"advisory"Config File Resolution (4-tier)
配置文件解析优先级(4级)
The advisory guardian resolves the suppression config using the same priority order as the audit pipeline:
- Explicit argument
--config <path> - environment variable
OPENCLAW_AUDIT_CONFIG ~/.openclaw/security-audit.json.clawsec/allowlist.json
咨询守护工具将按照以下优先级解析抑制配置,与审计管道的优先级一致:
- 显式的参数
--config <path> - 环境变量
OPENCLAW_AUDIT_CONFIG ~/.openclaw/security-audit.json.clawsec/allowlist.json
Config Format
配置格式
json
{
"enabledFor": ["advisory"],
"suppressions": [
{
"checkId": "CVE-2026-25593",
"skill": "clawsec-suite",
"reason": "First-party security tooling — reviewed by security team",
"suppressedAt": "2026-02-15"
},
{
"checkId": "CLAW-2026-0001",
"skill": "example-skill",
"reason": "Advisory does not apply to our deployment configuration",
"suppressedAt": "2026-02-16"
}
]
}json
{
"enabledFor": ["advisory"],
"suppressions": [
{
"checkId": "CVE-2026-25593",
"skill": "clawsec-suite",
"reason": "内部安全工具 — 已通过安全团队审核",
"suppressedAt": "2026-02-15"
},
{
"checkId": "CLAW-2026-0001",
"skill": "example-skill",
"reason": "该咨询不适用于我们的部署配置",
"suppressedAt": "2026-02-16"
}
]
}Sentinel Semantics
标记语义
- -- only advisory suppression active
"enabledFor": ["advisory"] - -- only audit suppression active (no effect on advisory pipeline)
"enabledFor": ["audit"] - -- both pipelines honor suppressions
"enabledFor": ["audit", "advisory"] - Missing or empty -- no suppression active (safe default)
enabledFor
- — 仅激活咨询抑制
"enabledFor": ["advisory"] - — 仅激活审计抑制(对咨询管道无影响)
"enabledFor": ["audit"] - — 两个管道均遵循抑制规则
"enabledFor": ["audit", "advisory"] - 缺失或空的— 不激活任何抑制(安全默认值)
enabledFor
Matching Rules
匹配规则
- checkId: exact match against the advisory ID (e.g., or
CVE-2026-25593)CLAW-2026-0001 - skill: case-insensitive match against the affected skill name from the advisory
- Both fields must match for an advisory to be suppressed
- checkId: 与咨询ID完全匹配(例如或
CVE-2026-25593)CLAW-2026-0001 - skill: 与咨询中受影响的Skill名称不区分大小写匹配
- 两个字段均匹配时,咨询才会被抑制
Required Fields per Suppression Entry
每个抑制条目所需的字段
| Field | Description | Example |
|---|---|---|
| Advisory ID to suppress | |
| Affected skill name | |
| Justification for audit trail (required) | |
| ISO 8601 date (YYYY-MM-DD) | |
| 字段 | 描述 | 示例 |
|---|---|---|
| 需抑制的咨询ID | |
| 受影响的Skill名称 | |
| 审计跟踪所需的理由(必填) | |
| ISO 8601格式日期(YYYY-MM-DD) | |
Shared Config with Audit Pipeline
与审计管道共享配置
The advisory and audit pipelines share the same config file. Use the array to control which pipelines honor the suppression list:
enabledForjson
{
"enabledFor": ["audit", "advisory"],
"suppressions": [
{
"checkId": "skills.code_safety",
"skill": "clawsec-suite",
"reason": "First-party tooling — audit finding accepted",
"suppressedAt": "2026-02-15"
},
{
"checkId": "CVE-2026-25593",
"skill": "clawsec-suite",
"reason": "First-party tooling — advisory reviewed",
"suppressedAt": "2026-02-15"
}
]
}Audit entries (with check identifiers like ) are only matched by the audit pipeline. Advisory entries (with advisory IDs like or ) are only matched by the advisory pipeline. Each pipeline filters for its own relevant entries.
skills.code_safetyCVE-2026-25593CLAW-2026-0001咨询和审计管道共享同一配置文件。使用数组控制哪些管道遵循抑制列表:
enabledForjson
{
"enabledFor": ["audit", "advisory"],
"suppressions": [
{
"checkId": "skills.code_safety",
"skill": "clawsec-suite",
"reason": "内部工具 — 接受审计发现",
"suppressedAt": "2026-02-15"
},
{
"checkId": "CVE-2026-25593",
"skill": "clawsec-suite",
"reason": "内部工具 — 已审核咨询",
"suppressedAt": "2026-02-15"
}
]
}审计条目(带有等检查标识符)仅会被审计管道匹配。咨询条目(带有或等咨询ID)仅会被咨询管道匹配。每个管道会过滤出与自身相关的条目。
skills.code_safetyCVE-2026-25593CLAW-2026-0001Optional Skill Installation
可选Skill安装
Discover currently available installable skills dynamically, then install the ones you want:
bash
SUITE_DIR="${INSTALL_ROOT:-$HOME/.openclaw/skills}/clawsec-suite"
node "$SUITE_DIR/scripts/discover_skill_catalog.mjs"动态发现当前可用的可安装Skill,然后安装所需的Skill:
bash
SUITE_DIR="${INSTALL_ROOT:-$HOME/.openclaw/skills}/clawsec-suite"
node "$SUITE_DIR/scripts/discover_skill_catalog.mjs"then install any discovered skill by name
然后安装任意已发现的Skill
npx clawhub@latest install <skill-name>
Machine-readable output is also available for automation:
```bash
node "$SUITE_DIR/scripts/discover_skill_catalog.mjs" --jsonnpx clawhub@latest install <skill-name>
也支持机器可读格式的输出,用于自动化流程:
```bash
node "$SUITE_DIR/scripts/discover_skill_catalog.mjs" --jsonSecurity Notes
安全注意事项
- Always verify signature before trusting its file URLs/hashes, then verify each file checksum.
checksums.json - Verify advisory feed detached signatures; do not enable outside temporary migration windows.
CLAWSEC_ALLOW_UNSIGNED_FEED - Keep advisory polling rate-limited (at least 5 minutes between checks).
- Treat and
criticaladvisories affecting installed skills as immediate action items.high - If you migrate off standalone , keep one canonical state file to avoid duplicate notifications.
clawsec-feed - Pin and verify public key fingerprints out-of-band before first use.
- 在信任校验和清单的文件URL/哈希值之前,务必先验证的签名,然后再验证每个文件的校验和。
checksums.json - 验证咨询源的分离式签名;除临时迁移窗口外,请勿启用。
CLAWSEC_ALLOW_UNSIGNED_FEED - 限制咨询轮询频率(两次检查之间至少间隔5分钟)。
- 将影响已安装Skill的和
critical等级咨询视为立即处理事项。high - 如果从独立的迁移,请保留一个标准状态文件以避免重复通知。
clawsec-feed - 在首次使用前,通过离线方式固定并验证公钥指纹。