[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C5BQTN21VA5MTSQ8CE8066":3,"skill-same:01M6C5BQTN21VA5MTSQ8CE8066":110},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":14,"repositoryHtmlUrl":54,"repositoryHomepageUrl":6,"ownerHtmlUrl":55,"ownerBlogUrl":56,"ownerDescription":6,"updatedAt":57,"install":58,"resources":71},"01M6C5BQTN21VA5MTSQ8CE8066","soul-guardian",null,"Drift detection + baseline integrity guard for agent workspace files with automatic alerting support","CoralShades\u002Facm-ai","CoralShades","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F220297585?v=4","01M6C5211QSJHZ8HXSDDWCR507","Coral Shades AI Agency","01M6C52161FNQDRQ0FRR8DAA9D",0,"MIT","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsoul-guardian\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37],"guardian","soul guardian","security","support","https","alerting","detection","integrity","baseline","guard","python3","workspace","agent workspace","prompt","2026-11-10 10:12:30",false,"---\nname: soul-guardian\nversion: 0.0.2\ndescription: Drift detection + baseline integrity guard for agent workspace files with automatic alerting support\nhomepage: https:\u002F\u002Fclawsec.prompt.security\nmetadata: {\"openclaw\":{\"emoji\":\"?\",\"category\":\"security\"}}\nclawdis:\n  emoji: \"?\"\n  requires:\n    bins: [python3]\n---\n\n# soul-guardian ?\n\nProtects your agent's core files (SOUL.md, AGENTS.md, etc.) from unauthorized changes with automatic detection, restoration, and **user alerting**.\n\n## Quick Start (3 Steps)\n\n### Step 1: Initialize baselines\n```bash\ncd ~\u002F.openclaw\u002Fworkspace\npython3 skills\u002Fsoul-guardian\u002Fscripts\u002Fsoul_guardian.py init --actor setup --note \"initial baseline\"\n```\n\n### Step 2: Enable monitoring\n```bash\npython3 skills\u002Fsoul-guardian\u002Fscripts\u002Fsoul_guardian.py enable-monitoring\n```\nThis shows you how to add monitoring to your workflow.\n\n### Step 3: Add to HEARTBEAT.md (Recommended)\n\nAdd this to your HEARTBEAT.md for automatic monitoring:\n\n```markdown\n## Soul Guardian Check\n- Run `python3 skills\u002Fsoul-guardian\u002Fscripts\u002Fsoul_guardian.py check --actor heartbeat --output-format alert`\n- If any output is produced, relay it to the user immediately as a security alert\n```\n\nThat's it! Soul Guardian will now:\n- ✅ Detect unauthorized changes to protected files\n- ✅ Auto-restore SOUL.md and AGENTS.md to approved baseline\n- ✅ Alert you when drift is detected and handled\n\n---\n\n## What it protects (default policy)\n\n| File | Mode | Action on drift |\n|------|------|-----------------|\n| SOUL.md | restore | Auto-restore + alert |\n| AGENTS.md | restore | Auto-restore + alert |\n| USER.md | alert | Alert only |\n| TOOLS.md | alert | Alert only |\n| IDENTITY.md | alert | Alert only |\n| HEARTBEAT.md | alert | Alert only |\n| MEMORY.md | alert | Alert only |\n| memory\u002F*.md | ignore | Ignored |\n\n## Commands\n\n### Check for drift (with alert output)\n```bash\npython3 skills\u002Fsoul-guardian\u002Fscripts\u002Fsoul_guardian.py check --output-format alert\n```\n- Silent if no drift\n- Outputs human-readable alert if drift detected\n- Perfect for heartbeat integration\n\n### Watch mode (continuous monitoring)\n```bash\npython3 skills\u002Fsoul-guardian\u002Fscripts\u002Fsoul_guardian.py watch --interval 30\n```\nRuns continuously, checking every 30 seconds.\n\n### Approve intentional changes\n```bash\npython3 skills\u002Fsoul-guardian\u002Fscripts\u002Fsoul_guardian.py approve --file SOUL.md --actor user --note \"intentional update\"\n```\n\n### View status\n```bash\npython3 skills\u002Fsoul-guardian\u002Fscripts\u002Fsoul_guardian.py status\n```\n\n### Verify audit log integrity\n```bash\npython3 skills\u002Fsoul-guardian\u002Fscripts\u002Fsoul_guardian.py verify-audit\n```\n\n---\n\n## Alert Format\n\nWhen drift is detected, the `--output-format alert` produces output like:\n\n```\n==================================================\n? SOUL GUARDIAN SECURITY ALERT\n==================================================\n\n? FILE: SOUL.md\n   Mode: restore\n   Status: ✅ RESTORED to approved baseline\n   Expected hash: abc123def456...\n   Found hash:    789xyz000111...\n   Diff saved: \u002Fpath\u002Fto\u002Fpatches\u002Fdrift.patch\n\n==================================================\nReview changes and investigate the source of drift.\nIf intentional, run: soul_guardian.py approve --file \u003Cpath>\n==================================================\n```\n\nThis output is designed to be relayed directly to the user in TUI\u002Fchat.\n\n---\n\n## Security Model\n\n**What it does:**\n- Detects filesystem drift vs approved baseline (sha256)\n- Produces unified diffs for review\n- Maintains tamper-evident audit log with hash chaining\n- Refuses to operate on symlinks\n- Uses atomic writes for restores\n\n**What it doesn't do:**\n- Cannot prove WHO made a change (actor is best-effort metadata)\n- Cannot protect if attacker controls both workspace AND state directory\n- Is not a substitute for backups\n\n**Recommendation:** Store state directory outside workspace for better resilience.\n\n---\n\n## Demo\n\nRun the full demo flow to see soul-guardian in action:\n\n```bash\nbash skills\u002Fsoul-guardian\u002Fscripts\u002Fdemo.sh\n```\n\nThis will:\n1. Verify clean state (silent check)\n2. Inject malicious content into SOUL.md\n3. Run heartbeat check (produces alert)\n4. Show SOUL.md was restored\n\n---\n\n## Troubleshooting\n\n**\"Not initialized\" error:**\nRun `init` first to set up baselines.\n\n**Drift keeps happening:**\nCheck what's modifying your files. Review the audit log and patches.\n\n**Want to approve a change:**\nRun `approve --file \u003Cpath>` after reviewing the change.\n","# soul-guardian ?\n\nProtects your agent's core files (SOUL.md, AGENTS.md, etc.) from unauthorized changes with automatic detection, restoration, and **user alerting**.\n\n## Quick Start (3 Steps)\n\n### Step 1: Initialize baselines\n```bash\ncd ~\u002F.openclaw\u002Fworkspace\npython3 skills\u002Fsoul-guardian\u002Fscripts\u002Fsoul_guardian.py init --actor setup --note \"initial baseline\"\n```\n\n### Step 2: Enable monitoring\n```bash\npython3 skills\u002Fsoul-guardian\u002Fscripts\u002Fsoul_guardian.py enable-monitoring\n```\nThis shows you how to add monitoring to your workflow.\n\n### Step 3: Add to HEARTBEAT.md (Recommended)\n\nAdd this to your HEARTBEAT.md for automatic monitoring:\n\n```markdown\n## Soul Guardian Check\n- Run `python3 skills\u002Fsoul-guardian\u002Fscripts\u002Fsoul_guardian.py check --actor heartbeat --output-format alert`\n- If any output is produced, relay it to the user immediately as a security alert\n```\n\nThat's it! Soul Guardian will now:\n- ✅ Detect unauthorized changes to protected files\n- ✅ Auto-restore SOUL.md and AGENTS.md to approved baseline\n- ✅ Alert you when drift is detected and handled\n\n---\n\n## What it protects (default policy)\n\n| File | Mode | Action on drift |\n|------|------|-----------------|\n| SOUL.md | restore | Auto-restore + alert |\n| AGENTS.md | restore | Auto-restore + alert |\n| USER.md | alert | Alert only |\n| TOOLS.md | alert | Alert only |\n| IDENTITY.md | alert | Alert only |\n| HEARTBEAT.md | alert | Alert only |\n| MEMORY.md | alert | Alert only |\n| memory\u002F*.md | ignore | Ignored |\n\n## Commands\n\n### Check for drift (with alert output)\n```bash\npython3 skills\u002Fsoul-guardian\u002Fscripts\u002Fsoul_guardian.py check --output-format alert\n```\n- Silent if no drift\n- Outputs human-readable alert if drift detected\n- Perfect for heartbeat integration\n\n### Watch mode (continuous monitoring)\n```bash\npython3 skills\u002Fsoul-guardian\u002Fscripts\u002Fsoul_guardian.py watch --interval 30\n```\nRuns continuously, checking every 30 seconds.\n\n### Approve intentional changes\n```bash\npython3 skills\u002Fsoul-guardian\u002Fscripts\u002Fsoul_guardian.py approve --file SOUL.md --actor user --note \"intentional update\"\n```\n\n### View status\n```bash\npython3 skills\u002Fsoul-guardian\u002Fscripts\u002Fsoul_guardian.py status\n```\n\n### Verify audit log integrity\n```bash\npython3 skills\u002Fsoul-guardian\u002Fscripts\u002Fsoul_guardian.py verify-audit\n```\n\n---\n\n## Alert Format\n\nWhen drift is detected, the `--output-format alert` produces output like:\n\n```\n==================================================\n? SOUL GUARDIAN SECURITY ALERT\n==================================================\n\n? FILE: SOUL.md\n   Mode: restore\n   Status: ✅ RESTORED to approved baseline\n   Expected hash: abc123def456...\n   Found hash:    789xyz000111...\n   Diff saved: \u002Fpath\u002Fto\u002Fpatches\u002Fdrift.patch\n\n==================================================\nReview changes and investigate the source of drift.\nIf intentional, run: soul_guardian.py approve --file \u003Cpath>\n==================================================\n```\n\nThis output is designed to be relayed directly to the user in TUI\u002Fchat.\n\n---\n\n## Security Model\n\n**What it does:**\n- Detects filesystem drift vs approved baseline (sha256)\n- Produces unified diffs for review\n- Maintains tamper-evident audit log with hash chaining\n- Refuses to operate on symlinks\n- Uses atomic writes for restores\n\n**What it doesn't do:**\n- Cannot prove WHO made a change (actor is best-effort metadata)\n- Cannot protect if attacker controls both workspace AND state directory\n- Is not a substitute for backups\n\n**Recommendation:** Store state directory outside workspace for better resilience.\n\n---\n\n## Demo\n\nRun the full demo flow to see soul-guardian in action:\n\n```bash\nbash skills\u002Fsoul-guardian\u002Fscripts\u002Fdemo.sh\n```\n\nThis will:\n1. Verify clean state (silent check)\n2. Inject malicious content into SOUL.md\n3. Run heartbeat check (produces alert)\n4. Show SOUL.md was restored\n\n---\n\n## Troubleshooting\n\n**\"Not initialized\" error:**\nRun `init` first to set up baselines.\n\n**Drift keeps happening:**\nCheck what's modifying your files. Review the audit log and patches.\n\n**Want to approve a change:**\nRun `approve --file \u003Cpath>` after reviewing the change.\n",{"name":5,"clawdis":43,"version":47,"homepage":48,"metadata":49,"description":7},{"emoji":44,"requires":45},"?",{"bins":46},[34],"0.0.2","https:\u002F\u002Fclawsec.prompt.security",{"openclaw":50},{"emoji":44,"category":26},"main","1ca81b0a7de199942400f965edd4d7544077ac5d",".agents\u002Fskills\u002Fsoul-guardian","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai","https:\u002F\u002Fgithub.com\u002FCoralShades","coralshades.com.au","2026-04-18 00:45:07",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add CoralShades\u002Facm-ai --skill soul-guardian",{"tool":64,"command":65},"bunx","bunx skills add CoralShades\u002Facm-ai --skill soul-guardian",{"tool":67,"command":68},"pnpm","pnpm dlx skills add CoralShades\u002Facm-ai --skill soul-guardian","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsoul-guardian\u002FSKILL.md",true,[72,78,84,88,94,98,102,106],{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},".clawhubignore","OTHER","其他",147,"https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsoul-guardian\u002F.clawhubignore",{"path":79,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":82,"sourceHtmlUrl":83},"README.md","REFERENCE","参考文档",8133,"https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsoul-guardian\u002FREADME.md",{"path":85,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":86,"sourceHtmlUrl":87},"references\u002Fdetailed-guide.md",8409,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-segment-cdp\u002Freferences\u002Fdetailed-guide.md",{"path":89,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":92,"sourceHtmlUrl":93},"scripts\u002Finstall_launchd_plist.py","SCRIPT","脚本",6114,"https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsoul-guardian\u002Fscripts\u002Finstall_launchd_plist.py",{"path":95,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":96,"sourceHtmlUrl":97},"scripts\u002Fonboard_state_dir.py",5520,"https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsoul-guardian\u002Fscripts\u002Fonboard_state_dir.py",{"path":99,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":100,"sourceHtmlUrl":101},"scripts\u002Fsoul_guardian.py",35205,"https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsoul-guardian\u002Fscripts\u002Fsoul_guardian.py",{"path":103,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":104,"sourceHtmlUrl":105},"scripts\u002Ftest_soul_guardian.py",4030,"https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsoul-guardian\u002Fscripts\u002Ftest_soul_guardian.py",{"path":107,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":108,"sourceHtmlUrl":109},"skill.json",1436,"https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsoul-guardian\u002Fskill.json",[111,133,146,162,184,194],{"skillNo":112,"name":113,"nameZh":6,"description":114,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":120,"publishedAt":38},"01M6C63HKXA890HHV47WBAX0TB","uncodixfy","Prevents generic AI\u002FCodex UI patterns when generating frontend code. Use this skill whenever generating HTML, CSS, React, Vue, Svelte, or any frontend UI code to enforce clean, human-designed aesthetics inspired by Linear, Raycast, Stripe, and GitHub instead of typical AI-generated UI.","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Funcodixfy\u002FSKILL.md",[117],{"categoryNo":118,"categoryName":119,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[113,121,122,123,124,125,126,127,128,129,130,131,132],"github","frontend","css","codex","react","code","linear","ui","vue","generated","use","html",{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":137,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":140,"publishedAt":38},"01M6C63FJ2GEBBGZ5XSMV40KXB","runpodctl","Runpod CLI to manage your GPU workloads.","Apache-2.0","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Frunpodctl\u002FSKILL.md",[],[135,141,142,143,144,145],"macos","cli","linux","gpu","Bash",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":38},"01M6C63DPAV46TFVQ01SFYPJ7X","langgraph-persistence","INVOKE THIS SKILL when your LangGraph needs to persist state, remember conversations, travel through history, or configure subgraph checkpointer scoping. Covers checkpointers, thread_id, time travel, Store, and subgraph persistence modes.","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Flanggraph-persistence\u002FSKILL.md",[],[153,154,155,156,157,158,159,160,161],"langgraph persistence","langgraph","persistence","travel","history","scoping","remember","state","configure",{"skillNo":163,"name":164,"nameZh":6,"description":165,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":166,"categories":167,"keywords":173,"publishedAt":38},"01M6C63BNS9CQEBTB8RNSSBFPA","langgraph-human-in-the-loop","INVOKE THIS SKILL when implementing human-in-the-loop patterns, pausing for approval, or handling errors in LangGraph. Covers interrupt(), Command(resume=...), approval\u002Fvalidation workflows, and the 4-tier error handling strategy.","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Flanggraph-human-in-the-loop\u002FSKILL.md",[168],{"categoryNo":169,"categoryName":170,"taxonomyType":171,"taxonomyTypeDesc":172},"01JBSEEDCAT000000000000038","人力资源","PROFESSION","适用职业",[174,175,154,176,177,178,179,180,181,182,183],"langgraph human in the loop","loop","workflows","error handling","validation","human-in-the-loop","command","strategy","approval","resume",{"skillNo":185,"name":186,"nameZh":6,"description":187,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":188,"categories":189,"keywords":190,"publishedAt":38},"01M6C639GVYZFX3NFPV5FBDR4F","langgraph-fundamentals","INVOKE THIS SKILL when writing ANY LangGraph code. Covers StateGraph, state schemas, nodes, edges, Command, Send, invoke, streaming, and error handling.","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Flanggraph-fundamentals\u002FSKILL.md",[],[191,154,177,160,192,193,180,126],"langgraph fundamentals","streaming","writing",{"skillNo":195,"name":196,"nameZh":6,"description":197,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":198,"categories":199,"keywords":200,"publishedAt":38},"01M6C6375N34YX2GZ3SD3R7XR2","langchain-rag","INVOKE THIS SKILL when building ANY retrieval-augmented generation (RAG) system. Covers document loaders, RecursiveCharacterTextSplitter, embeddings (OpenAI), and vector stores (Chroma, FAISS, Pinecone).","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Flangchain-rag\u002FSKILL.md",[],[201,202,203,204,205,206,207,208,209,210],"rag","langchain rag","langchain","embeddings","vector","openai","chroma","faiss","vector stores","system"]