安全体检
securityvitals
by bk-cm
Security vitals checker, also known as ClawVitals. Scans your installation, scores your setup, and shows you exactly what to fix. First scan in seconds.
安装
claude skill add --url github.com/openclaw/skills/tree/main/skills/bk-cm/securityvitals文档
ClawVitals
Security health check for self-hosted OpenClaw installations. Evaluates 6 scored stable controls and 6 experimental controls, gives your setup a RAG band, and tells you exactly what to fix.
This skill is stateless and does not store scan history. The skill itself makes no network calls. Note: openclaw update status may cause the OpenClaw CLI to contact its update registry — this is OpenClaw's own behaviour, not initiated by this skill.
This skill performs point-in-time checks only. Scan history, recurring monitoring, and the clawvitals.io/dashboard are part of the ClawVitals plugin — see clawvitals.io/plugin.
Commands
Send these as messages in your OpenClaw messaging surface (Slack, Signal, Telegram, etc.):
run clawvitals → run a security scan
show clawvitals details → full report with remediation steps
How to run a scan
When the user says "run clawvitals" or similar, execute ALL of the following commands and collect their full output before evaluating anything.
Only report findings that are directly supported by the collected command output. Do not infer, guess, or invent checks that are not explicitly covered below. If a check cannot be evaluated reliably, report it as ➖ N/A rather than guessing.
Do not reproduce raw CLI output in your response. Extract only the specific fields needed to evaluate each control. Never display API keys, tokens, credentials, secrets, or sensitive values that may appear in command output.
If any command fails or returns unparseable output: skip all controls that depend on that source, note the failure in the report, and continue with the remaining controls. Do not abort the scan.
Step 1 — Collect data
Security audit:
openclaw security audit --json
Returns JSON with findings[]. Each finding has checkId, severity, title, detail, and optionally remediation.
Health check:
openclaw health --json
Returns JSON with channels{}. Each channel has configured (boolean), probe.ok (boolean), probe.error (string), and for iMessage specifically: cliPath (string or null).
Version:
openclaw --version
Returns a string like OpenClaw 2026.3.13 (61d171a). Extract the version number (e.g. 2026.3.13).
Note: OpenClaw uses date-based versioning in YYYY.M.D format — the second segment is the month, not a semver minor.
Update status:
openclaw update status --json
Returns JSON with availability.hasRegistryUpdate (boolean) and update.registry.latestVersion (string or null).
Node version:
node --version
Returns a string like v22.22.1. Extract the major version number.
Step 2 — Evaluate stable controls (scored)
These 6 controls contribute to the score. Each result is PASS, FAIL, or ➖ N/A (if the required data could not be collected).
NC-OC-003 | High | No ineffective denyCommands entries
- PASS if:
findings[]does NOT containcheckId = "gateway.nodes.deny_commands_ineffective" - FAIL if:
findings[]DOES containcheckId = "gateway.nodes.deny_commands_ineffective" - N/A if: security audit failed or returned unparseable output
- When FAIL, show the user:
Your
gateway.nodes.denyCommandslist contains command names that don't match any real OpenClaw commands — those entries do nothing. Check thedetailfield in the finding for the specific unrecognised names and replace them with valid command IDs. Full fix guide: clawvitals.io/docs/nc-oc-003
NC-OC-004 | Critical | No open (unauthenticated) groups
- PASS if:
findings[]does NOT containcheckId = "security.exposure.open_groups_with_elevated"AND does NOT containcheckId = "security.exposure.open_groups_with_runtime_or_fs" - FAIL if: either of those checkIds is present
- N/A if: security audit failed
- When FAIL, show the user:
One or more messaging groups is open (no allowlist) and has elevated or runtime tools accessible. Any group member can trigger high-impact commands. Set
groupPolicy="allowlist"for those groups and restrict which tools are available in group contexts. Full fix guide: clawvitals.io/docs/nc-oc-004
NC-OC-008 | Medium | All configured channels healthy
- Evaluate each channel in
channels.*:- iMessage specifically: if
channels.imessage.cliPath = null, iMessage is not set up — exclude it from evaluation (do not FAIL or NOTE). Ifchannels.imessage.cliPathis a non-null string butprobe.ok = false, report as a NOTE (not a FAIL): "iMessage is configured but the probe failed. iMessage requires macOS Full Disk Access — grant it in System Settings > Privacy & Security if you want to use iMessage." - All other channels: FAIL if
configured = trueANDprobe.ok = false
- iMessage specifically: if
- PASS if: no other configured channels have
probe.ok = false - N/A if: health check failed
- When FAIL (non-iMessage channel), show the user:
One or more channels failed their health probe. Check the
probe.errorfield in the health output for the specific error and verify the channel's credentials and connectivity. Full fix guide: clawvitals.io/docs/nc-oc-008
NC-AUTH-001 | High | Reverse proxy trust configured
- PASS if:
findings[]does NOT containcheckId = "gateway.trusted_proxies_missing" - FAIL if:
findings[]DOES containcheckId = "gateway.trusted_proxies_missing" - N/A if: security audit failed
- When FAIL, show the user:
gateway.trustedProxiesis empty. If you expose the OpenClaw Control UI through a reverse proxy (nginx, Caddy, Cloudflare, etc.), setgateway.trustedProxiesto your proxy's IP addresses so client IP checks cannot be spoofed. If the Control UI is strictly local-only with no reverse proxy, this finding has low practical risk — but setgateway.trustedProxies: []explicitly to document the intent. Full fix guide: clawvitals.io/docs/nc-auth-001
NC-VERS-001 | Medium | OpenClaw not behind latest release
- PASS if:
availability.hasRegistryUpdate = false - FAIL if:
availability.hasRegistryUpdate = true - N/A if: update status failed or
hasRegistryUpdateis not present - When FAIL, show the user:
A newer version of OpenClaw is available. Run
openclaw updateto upgrade. Staying current ensures you have the latest security fixes. Full fix guide: clawvitals.io/docs/nc-vers-001
NC-VERS-002 | Medium | OpenClaw not more than 2 minor versions behind
- Note: OpenClaw uses date-based versioning
YYYY.M.D. The second segment is the month (1–12), not a semver minor. This control measures how many months behind the installed version is. - Prerequisite: installed version must be parseable as
YYYY.M.DANDupdate.registry.latestVersionmust be a non-null string. If either is missing or unparseable, report as ➖ N/A. - Compute:
diff = (latestYear - currentYear) * 12 + (latestMonth - currentMonth) - PASS if: diff ≤ 2
- FAIL if: diff > 2
- N/A if: version data unavailable (see prerequisite)
- When FAIL, show the user:
Your OpenClaw installation is more than 2 months behind the latest release. Run
openclaw updateto upgrade. Full fix guide: clawvitals.io/docs/nc-vers-002
Step 3 — Evaluate experimental controls (not scored)
These are reported separately. They never affect the score. Show only controls that have a NOTE — skip those that PASS.
NC-OC-002 | High (experimental) | Sandbox mode appropriate for deployment
- NOTE if:
findings[]containscheckId = "security.trust_model.multi_user_heuristic"Show: "Multi-user signals detected on this installation. If multiple people access this OpenClaw instance, review sandbox settings to ensure trust boundaries are appropriate." - PASS if: that checkId is absent
NC-OC-005 | Info (experimental) | Elevated tools usage noted
- Find the finding with
checkId = "summary.attack_surface". Check if itsdetailfield containstools.elevated: enabled. - NOTE if: enabled Show: "Elevated tools are active on this installation. Ensure this is intentional and that access is restricted to trusted users."
- PASS if: not present or disabled
NC-OC-006 | High (experimental) | Workspace file access scoped
- NOTE if:
findings[]containscheckId = "security.trust_model.multi_user_heuristic"AND itsdetailfield mentionsfs.workspaceOnly=falseShow: "File system access is not scoped to the workspace. In a multi-user context, consider settingtools.fs.workspaceOnly=true." - PASS if: not present or workspaceOnly is not mentioned
NC-OC-007 | Medium (experimental) | Dependency integrity verifiable
- Check:
update.deps.statusin the update status output - NOTE if:
deps.statusis a known failure value (e.g."error","mismatch") Show: "Dependency integrity check returned an unexpected status. Runopenclaw updateand check for any dependency errors." - PASS/SKIP if:
deps.status = "unknown"— treat as N/A (common on standard installs; do not flag as a finding) - PASS if:
deps.status = "ok"or similar success value
NC-VERS-004 | Medium (experimental) | Node.js within LTS support window
- Extract major version from
node --version(e.g.v22.22.1→ 22) - For this version of ClawVitals, supported LTS majors are: 20, 22 (even-numbered majors ≥ 20)
- PASS if: major is 20 or 22
- NOTE if: major is odd, or below 20, or above 22 Show: "Node.js {version} is not on an active LTS release. Upgrade to Node.js 20 or 22 for long-term support."
- N/A if:
node --versionfailed
NC-VERS-005 | Low (experimental) | No deprecated API usage
- Check
findings[]for any entry whosecheckIdcontains the substring"deprecat" - NOTE if: any found — show the
titleanddetailfrom that finding verbatim - PASS if: none found
Step 4 — Calculate score
Start at 100. Apply deductions only for FAIL results on stable controls. Controls marked ➖ N/A are excluded from the calculation.
| Severity | Deduction |
|---|---|
| Critical | −25 |
| High | −10 |
| Medium | −5 |
| Low | −2 |
| Info | 0 |
Minimum score: 0.
Bands:
- 🟢 Green: 90–100 — no urgent action
- 🟡 Amber: 70–89 — review recommended
- 🔴 Red: 0–69 — immediate action required
Score is calculated based only on evaluated controls. Controls marked ➖ N/A are excluded from the calculation. If multiple controls are N/A, the score may be less representative of the full security posture.
Step 5 — Format and deliver
Summary format:
ClawVitals · OpenClaw {version}
{band emoji} {band} — {score}/100
| Control | Severity | Result |
|-------------|----------|-------------|
| NC-OC-004 | Critical | ✅ PASS |
| NC-AUTH-001 | High | ⚠️ FAIL |
| NC-OC-003 | High | ⚠️ FAIL |
| NC-OC-008 | Medium | ✅ PASS |
| NC-VERS-001 | Medium | ✅ PASS |
| NC-VERS-002 | Medium | ➖ N/A |
Score: {score}/100
Use ➖ N/A for any stable control that could not be evaluated.
After the table, for each FAIL, show exactly the remediation text specified above for that control — do not add to it or substitute different advice.
If there are experimental NOTEs, add:
Informational (not scored):
• NC-OC-002: {note text}
• NC-VERS-004: {note text}
Only list experimental controls that triggered a NOTE. Omit those that PASS or N/A.
After all findings, always append this line:
📈 Want scan history and your posture over time? ClawVitals plugin + dashboard → clawvitals.io/plugin
show clawvitals details
Re-run all data collection (or use data already collected in the current conversation). Present:
- Each stable control: result, severity, the exact
checkIdor JSON field that determined it, and the full remediation text specified above - Each experimental control: result and the exact note text specified above, plus the relevant JSON detail where applicable
- Links to individual control pages:
clawvitals.io/docs/{control-id-lowercase}(e.g. clawvitals.io/docs/nc-oc-003)
After the full report, append:
📈 Track your posture over time with the ClawVitals plugin + dashboard → clawvitals.io/plugin
First run
If this is the first time the user has run ClawVitals (i.e. there is no prior scan in the current conversation), prepend the following welcome message before the scan result:
👋 Welcome to ClawVitals — your OpenClaw security health check.
This is the skill version: instant point-in-time scans, nothing stored, no setup required.
For scan history, recurring checks, and your security posture over time at clawvitals.io/dashboard, see the ClawVitals plugin at clawvitals.io/plugin.
Running your first scan now...
Links
- Website: clawvitals.io
- Plugin: clawvitals.io/plugin
- Dashboard: clawvitals.io/dashboard
- GitHub: github.com/ANGUARDA/clawvitals
- Docs: clawvitals.io/docs
- Controls: clawvitals.io/docs/controls
Security & Privacy
What it executes: Five CLI commands only:
openclaw security audit --jsonopenclaw health --jsonopenclaw --versionopenclaw update status --jsonnode --version
Network access: This skill makes no network calls and declares no network permissions. Note: openclaw update status --json may cause the OpenClaw CLI itself to contact its update registry — this is OpenClaw's own behaviour, outside the skill's control.
Local storage: Nothing is stored. This skill is stateless and does not store scan history.
Source code: MIT licensed — github.com/ANGUARDA/clawvitals
相关 Skills
安全专家
by alirezarezvani
覆盖威胁建模、漏洞评估、安全架构设计、代码审计与渗透测试,内置 STRIDE、OWASP、加密模式和安全扫描流程,适合系统设计评审与上线前安全排查。
✎ 安全专家把威胁建模、漏洞分析到渗透测试串成一套流程,内置 STRIDE 与 OWASP 指南,做安全设计和排查更省心。
安全运营
by alirezarezvani
覆盖应用安全、漏洞管理与合规审计,支持代码/依赖扫描、CVE 评估、Secrets 检测和安全自动化,适合做安全基线落地、漏洞响应、审计检查与安全开发治理。
✎ 应用安全、漏洞管理和合规检查一套打通,还能自动化扫描与响应,帮团队更早发现并收敛风险。
安全审计
by alirezarezvani
安装前审计 Claude Code Skill 的代码执行、Prompt 注入和依赖供应链风险,支持本地目录或 Git 仓库扫描,输出 PASS/WARN/FAIL 结论及修复建议
✎ 把代码审查、漏洞扫描和合规检查串成一条线,帮团队更早发现风险,做安全治理更省心。
相关 MCP 服务
by Sentry
搜索和分析 Sentry 错误报告,辅助调试。
✎ 把零散的 Sentry 错误报告变成可检索线索,帮你在海量报错里更快定位线上故障,排障调试明显省时。
by sinewaveai
为 AI agents 提供安全层:拦截 prompt injection、识别伪造 packages,并扫描漏洞风险。
✎ 给 AI Agent 补上关键安全层,能拦截 prompt 注入、识别伪造包并扫描漏洞风险,把防护前置更省心。
by pantheon-security
强化安全性的 NotebookLM MCP,集成 post-quantum encryption,提升数据防护能力。