关于 soul-guardian
soul-guardian 使用批准基线监控 Agent 的核心文件,在检测到偏差时生成警报,并可自动恢复指定文件。它适合需要保护 OpenClaw 工作区配置与提示文件的用户。
主要功能
- 01按 SHA-256 基线检测文件偏差
- 02为指定文件自动恢复或仅发出警报
- 03生成统一差异供审查
- 04维护哈希链防篡改审计日志
- 05支持持续监控和心跳检查
适用场景
- 01监控 SOUL.md 和 AGENTS.md 的未授权修改
- 02检查 HEARTBEAT.md 等文件的变化
- 03审查差异后批准有意修改
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ prompt-security/ clawsec --skill soul-guardian安装后在 Claude Code 中输入/soul-guardian确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.clawhubignoreCHANGELOG.mdREADME.mdskill.jsonscripts/install_launchd_plist.pyonboard_state_dir.pysoul_guardian.pytest_install_launchd_plist.pytest_soul_guardian.py详细介绍
soul-guardian 👻
通过自动检测、恢复和用户提醒,保护 Agent 的核心文件(SOUL.md、AGENTS.md 等)免遭未经授权的更改。
Vercel Skills Installation
使用 Vercel Skills CLI 为此运行环境安装:
npx skills add prompt-security/clawsec --skill soul-guardian -a openclaw -y
Operational Notes
- 必需的运行时:
python3 - 可选运行时:用于 cron 集成的
openclaw、用于 macOS 调度的launchctl、用于演示辅助工具的bash - 副作用:可将受保护文件自动恢复到已批准的基线,并在本地写入审计和隔离状态
- 网络行为:默认不联网
- 信任模型:所有调度均为可选,但恢复模式会有意覆盖偏离基线的文件
Release Artifact Verification
对于独立安装,请先验证已签名的发布清单,再信任 SKILL.md、skill.json 或归档文件。skill.json 文件是软件包元数据/SBOM 来源,发布流水线会使用 ClawSec 发布密钥对 checksums.json 进行签名。
set -euo pipefail
SKILL_NAME="soul-guardian"
VERSION="0.0.9"
REPO="prompt-security/clawsec"
TAG="${SKILL_NAME}-v${VERSION}"
BASE="https://github.com/${REPO}/releases/download/${TAG}"
ZIP_NAME="${SKILL_NAME}-v${VERSION}.zip"
TMP_DIR="$(mktemp -d)"
trap 'rm -rf "$TMP_DIR"' EXIT
RELEASE_PUBKEY_SHA256="711424e4535f84093fefb024cd1ca4ec87439e53907b305b79a631d5befba9c8"
curl -fsSL "$BASE/checksums.json" -o "$TMP_DIR/checksums.json"
curl -fsSL "$BASE/checksums.sig" -o "$TMP_DIR/checksums.sig"
curl -fsSL "$BASE/signing-public.pem" -o "$TMP_DIR/signing-public.pem"
curl -fsSL "$BASE/$ZIP_NAME" -o "$TMP_DIR/$ZIP_NAME"
curl -fsSL "$BASE/SKILL.md" -o "$TMP_DIR/SKILL.md"
curl -fsSL "$BASE/skill.json" -o "$TMP_DIR/skill.json"
ACTUAL_PUBKEY_SHA256="$(openssl pkey -pubin -in "$TMP_DIR/signing-public.pem" -outform DER | shasum -a 256 | awk '{print $1}')"
if [ "$ACTUAL_PUBKEY_SHA256" != "$RELEASE_PUBKEY_SHA256" ]; then
echo "ERROR: signing-public.pem fingerprint mismatch" >&2
exit 1
fi
openssl base64 -d -A -in "$TMP_DIR/checksums.sig" -out "$TMP_DIR/checksums.sig.bin"
openssl pkeyutl -verify -rawin -pubin \
-inkey "$TMP_DIR/signing-public.pem" \
-sigfile "$TMP_DIR/checksums.sig.bin" \
-in "$TMP_DIR/checksums.json" >/dev/null
hash_file() {
if command -v shasum >/dev/null 2>&1; then
shasum -a 256 "$1" | awk '{print $1}'
else
sha256sum "$1" | awk '{print $1}'
fi
}
verify_manifest_file() {
asset="$1"
path="$2"
expected="$(jq -r --arg asset "$asset" '.files[$asset].sha256 // empty' "$TMP_DIR/checksums.json")"
if [ -z "$expected" ]; then
echo "ERROR: checksums.json missing $asset" >&2
exit 1
fi
actual="$(hash_file "$path")"
if [ "$actual" != "$expected" ]; then
echo "ERROR: checksum mismatch for $asset" >&2
exit 1
fi
}
expected_archive="$(jq -r '.archive.sha256 // empty' "$TMP_DIR/checksums.json")"
if [ -z "$expected_archive" ]; then
echo "ERROR: checksums.json missing archive.sha256" >&2
exit 1
fi
actual_archive="$(hash_file "$TMP_DIR/$ZIP_NAME")"
if [ "$actual_archive" != "$expected_archive" ]; then
echo "ERROR: archive checksum mismatch" >&2
exit 1
fi
verify_manifest_file "SKILL.md" "$TMP_DIR/SKILL.md"
verify_manifest_file "skill.json" "$TMP_DIR/skill.json"
echo "Signed release manifest, archive, SKILL.md, and skill.json verified."
只有在验证成功后,才可安装或解压归档文件。
Quick Start (3 Steps)
Step 1: 初始化基线
cd ~/.openclaw/workspace
python3 skills/soul-guardian/scripts/soul_guardian.py init --actor setup --note "initial baseline"
Step 2: 启用监控
python3 skills/soul-guardian/scripts/soul_guardian.py enable-monitoring
此操作将演示如何将监控添加到工作流中。
Step 3: 添加到 HEARTBEAT.md(推荐)
将以下内容添加到 HEARTBEAT.md,以启用自动监控:
## Soul Guardian Check
- Run `python3 skills/soul-guardian/scripts/soul_guardian.py check --actor heartbeat --output-format alert`
- If any output is produced, relay it to the user immediately as a security alert
就是这样!Soul Guardian 现在将:
- ✅ 检测受保护文件是否遭到未经授权的更改
- ✅ 将 SOUL.md 和 AGENTS.md 自动恢复到已批准的基线
- ✅ 在检测并处理偏离基线的情况时提醒你
保护范围(默认策略)
| 文件 | 模式 | 偏离基线时的操作 |
|---|---|---|
| SOUL.md | restore | 自动恢复并提醒 |
| AGENTS.md | restore | 自动恢复并提醒 |
| USER.md | alert | 仅提醒 |
| TOOLS.md | alert | 仅提醒 |
| IDENTITY.md | alert | 仅提醒 |
| HEARTBEAT.md | alert | 仅提醒 |
| MEMORY.md | alert | 仅提醒 |
| memory/*.md | ignore | 忽略 |
Commands
检查是否偏离基线(输出提醒)
python3 skills/soul-guardian/scripts/soul_guardian.py check --output-format alert
- 未发现偏离时不输出内容
- 检测到偏离时,输出易于理解的提醒
- 非常适合与心跳集成
监视模式(持续监控)
python3 skills/soul-guardian/scripts/soul_guardian.py watch --interval 30
程序将持续运行,每 30 秒检查一次。
批准有意进行的更改
python3 skills/soul-guardian/scripts/soul_guardian.py approve --file SOUL.md --actor user --note "intentional update"
查看状态
python3 skills/soul-guardian/scripts/soul_guardian.py status
验证审计日志完整性
python3 skills/soul-guardian/scripts/soul_guardian.py verify-audit
提醒格式
检测到偏离基线时,--output-format alert 会生成类似以下内容的输出:
==================================================
🚨 SOUL GUARDIAN SECURITY ALERT
==================================================
📄 FILE: SOUL.md
Mode: restore
Status: ✅ RESTORED to approved baseline
Expected hash: abc123def456...
Found hash: 789xyz000111...
Diff saved: /path/to/patches/drift.patch
==================================================
Review changes and investigate the source of drift.
If intentional, run: soul_guardian.py approve --file <path>
==================================================
此输出旨在直接转发给 TUI/聊天中的用户。
安全模型
它能做什么:
- 检测文件系统与已批准基线之间的偏差(sha256)
- 生成统一差异,以供审查
- 通过哈希链维护防篡改审计日志
- 拒绝对符号链接执行操作
- 使用原子写入来恢复文件
它不能做什么:
- 无法证明是谁进行了更改(操作者信息仅为尽力收集的元数据)
- 如果攻击者同时控制工作区和状态目录,则无法提供保护
- 不能替代备份
**建议:**将状态目录存放在工作区之外,以提高韧性。
演示
运行完整演示流程,查看 soul-guardian 的实际效果:
bash skills/soul-guardian/scripts/demo.sh
此操作将:
- 验证状态干净(静默检查)
- 向 SOUL.md 注入恶意内容
- 运行心跳检查(生成提醒)
- 显示 SOUL.md 已恢复
故障排除
“未初始化”错误:
先运行 init 来设置基线。
偏离基线的情况持续发生: 检查是什么在修改你的文件。查看审计日志和补丁。
想要批准某项更改:
审查更改后,运行 approve --file <path>。
评论
支持 Markdown