mcpField
S
soul-guardian

soul-guardian

github.com/prompt-securityセキュリティ1.1k255 回インストール今日更新
リポジトリ

soul-guardian について

soul-guardianは、承認済みベースラインと照合してエージェントの中核ファイルを監視し、差分を通知して、対象ファイルを自動復元できます。OpenClawのワークスペース設定やプロンプトを保護したいユーザー向けです。

主な機能

  1. 01SHA-256ベースラインとのファイル差分検出
  2. 02対象ファイルの復元または通知のみ
  3. 03確認用の統合差分生成
  4. 04ハッシュチェーンによる改ざん検知監査ログ
  5. 05継続監視とハートビートチェック

活用シーン

  1. 01SOUL.mdとAGENTS.mdへの不正変更の監視
  2. 02HEARTBEAT.mdなどの変更確認
  3. 03差分を確認したうえで意図した編集を承認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/prompt-security/clawsec --skill soul-guardian

インストール後、Claude Code で/soul-guardianを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

.clawhubignore
CHANGELOG.md
README.md
skill.json
scripts/
install_launchd_plist.py
onboard_state_dir.py
soul_guardian.py
test_install_launchd_plist.py
test_soul_guardian.py

詳細

soul-guardian 👻

自動検出、復元、ユーザーへの警告により、エージェントのコアファイル(SOUL.md、AGENTS.md など)を不正な変更から保護します。

Vercel Skills のインストール

このハーネスには、Vercel Skills CLI を使ってインストールします。

npx skills add prompt-security/clawsec --skill soul-guardian -a openclaw -y

運用上の注意事項

  • 必須ランタイム:python3
  • オプションのランタイム:cron 統合用の openclaw、macOS のスケジュール設定用の launchctl、デモヘルパー用の bash
  • 副作用:保護対象ファイルを承認済みのベースラインに自動復元し、監査/隔離の状態をローカルに書き込む場合があります
  • ネットワーク動作:デフォルトではありません
  • 信頼モデル:スケジュール設定はすべてオプトインですが、復元モードでは意図的にベースラインから逸脱したファイルを上書きします

リリースアーティファクトの検証

単体でインストールする場合は、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."

この検証に成功してから、アーカイブをインストールまたは展開してください。

クイックスタート(3 ステップ)

ステップ 1:ベースラインを初期化する
cd ~/.openclaw/workspace
python3 skills/soul-guardian/scripts/soul_guardian.py init --actor setup --note "initial baseline"
ステップ 2:監視を有効にする
python3 skills/soul-guardian/scripts/soul_guardian.py enable-monitoring

これにより、ワークフローに監視を追加する方法を確認できます。

ステップ 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.mdrestore自動復元+警告
AGENTS.mdrestore自動復元+警告
USER.mdalert警告のみ
TOOLS.mdalert警告のみ
IDENTITY.mdalert警告のみ
HEARTBEAT.mdalert警告のみ
MEMORY.mdalert警告のみ
memory/*.mdignore無視

コマンド

差分を確認する(警告を出力)
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

次の処理が実行されます。

  1. クリーンな状態を確認します(何も出力しないチェック)
  2. SOUL.md に悪意のあるコンテンツを挿入します
  3. ハートビートチェックを実行します(警告を出力)
  4. SOUL.md が復元されたことを確認します

トラブルシューティング

「Not initialized」エラーが表示される: まず init を実行して、ベースラインを設定してください。

差分が繰り返し発生する: ファイルを変更しているものを確認してください。監査ログとパッチを確認します。

変更を承認したい場合: 変更を確認した後、approve --file <path> を実行してください。

コメント