Your OpenClaw agent reads your messages, remembers your conversations, holds your keys, and acts on your behalf. That power is exactly what attackers want to borrow: one poisoned message or one malicious skill can quietly turn your agent against you.

ClawSecCheck is a security check-up for your agent. It examines your setup, grades it A–F, and explains β€” in plain language, right in your chat β€” what is risky and why. It reports, it doesn't remediate: it never touches your OpenClaw config, needs no API key, and the scanner itself makes no network calls β€” no telemetry, no uploads, ever. (One narrow, opt-in exception: --apply-ignore-proposals can append entries to its own suppression file β€” see Safe to run below.)

πŸš€ Start in one minute β€” no terminal needed

1. Tell your agent:

Install the clawseccheck skill from ClawHub.

…or with a command: openclaw skills install @gl0di/clawseccheck Β· skill page on ClawHub

2. Then ask:

Audit my OpenClaw setup with clawseccheck.

3. Your grade and the most urgent problems appear right in the chat. Done.

What you'll see β€” a real report against a deliberately vulnerable test setup:

πŸ’¬ You talk β€” it audits

No flags, no commands. Everything works as a conversation:

You say You get
"Audit my OpenClaw setup" A chat-sized card β€” your A–F grade, an inventory by subject, and the urgent problems most dangerous first β€” with a PDF companion carrying the rest: every installed skill/plugin/MCP server vetted, the riskiest capability chains, a behavioral replay, and a second opinion on any borderline call
"Is this skill safe to install?" A pre-install risk verdict with the reasons β€” flags suspicious and dangerous skills before you enable them
"Am I vulnerable to prompt injection?" An optional canary self-test you run against your own agent, alongside the static audit
"Watch my setup for changes" Alerts when something changes β€” a new skill, config drift, a dropped score
"What's the most important thing to look at?" A prioritised next-steps list based on your findings
"Share my grade" A badge with the grade only β€” your findings stay private
"I think I've been hacked" An evidence-preservation bundle for investigation

πŸ” What it checks

Area The question it answers
🌐 Exposure & network Can strangers reach your agent β€” open gateway, open DMs, missing TLS?
⚑ Privilege & execution Could one injected message run commands or write files on your machine?
🧩 Installed skills & plugins Is anything you installed malicious β€” hidden payloads, credential theft, supply-chain traps?
πŸ’‰ Prompt-injection surface Can untrusted text steer your agent through chat context or bootstrap files?
πŸ” Secrets & data at rest Are your tokens, keys, and conversations lying around readable?
πŸ“‘ Monitoring & readiness Would you even notice a compromise β€” and could you investigate it?

On top of the 184 individual checks, a risk engine hunts for deadly combinations β€” chains like "untrusted input β†’ reachable secrets β†’ outbound tool" that make an attack trivial. Full list: check catalog.

πŸ† Why ClawSecCheck

  • Private by architecture. Unlike scanners that upload your configuration for analysis, ClawSecCheck's engine runs entirely on your machine. No account, no API key β€” and the scanner contains no telemetry client and makes no network requests.
  • Sees what the built-in audit misses. OpenClaw's own audit doesn't inspect your bootstrap files (SOUL.md, AGENTS.md, …) β€” the ones injected straight into the model as trusted context. ClawSecCheck checks them for injection. It also runs the native audit for you and folds the results into one report.
  • Protects you before it's too late. After the ClawHavoc wave of credential-stealing skills, "check before install" matters: ask it to vet any skill, plugin, or MCP server before you enable it.
  • Honest by design. What it can't determine is reported as UNKNOWN β€” never quietly counted as safe. An open CRITICAL finding hard-caps your score: you can never get a pretty "A" with a real hole in it.
  • Not a rebadged lookup. No network calls means no verdict borrowed from someone else's reputation database and presented as ours. Every finding traces to a real check with its own fixture and test, an AST layer that reasons about code structure, and a combinational risk engine for the attacks that only show up as a combination of individually-ordinary capabilities β€” plus a documented zero-false-positive-FAIL release discipline: an alarm reaching you is a specific, reproducible, test-pinned condition in your own config, not a keyword match dressed up as a scan.
  • Built like it matters. 14,100 automated tests run on every change, a false alarm is treated as a release-blocking bug, and every release is cryptographically signed.
  • Free and readable. MIT-licensed, pure Python standard library, zero dependencies β€” the entire engine is source you can read.

πŸ”’ Safe to run

The tool that audits your agent survives an audit itself: it is read-only with respect to your OpenClaw setup, its engine is offline by design, and by default it writes only its own local history under ~/.clawseccheck/ β€” removable any time by asking your agent to "purge the clawseccheck data". A few flags write local files only when you explicitly ask for them (--save, --badge, --html, --sarif, --pdf, --monitor, --log) β€” see the User guide for the full list. The one exception that touches the audited home itself is also opt-in and confirmation-gated: --apply-ignore-proposals can append entries β€” never invent them β€” to its own .clawseccheckignore suppression file there.

The widest read that reaches outside your OpenClaw home is on by default: to catch a dependency that would run code the moment it is installed, the tool locates your installed OpenClaw package through your PATH (no subprocess), then walks that package's node_modules to read each dependency's manifest, its build config, and the in-package files those name as install-time targets. Bounded to 2,000 packages, symlinks are never followed, and nothing is ever executed β€” --no-deptree skips the walk. (The host-posture scan and the listening-socket scan also read outside the home; --no-host and --no-sockets skip those.) See the security model for the complete, itemized capability surface.

One honest nuance: when you use it through OpenClaw chat, the report text becomes part of your conversation and is handled by whatever model provider your agent already uses β€” the scanner itself adds no channel of its own. Details: security model Β· FAQ.

The bundled known-bad IOC catalog is the same story: a small, dated, provenance-tagged dataset that ships in-repo with each release and is never fetched β€” no feed, no update endpoint, not even opt-in. See Bundled IOC dataset for the provenance policy and how staleness is surfaced.

Every release ships a SHA256SUMS.txt signed with keyless cosign; clawseccheck --verify-self prints your copy's digest to compare.

# Get the release assets (adjust the version):
curl -LO https://github.com/gl0di/clawseccheck/releases/download/vX.Y.Z/SHA256SUMS.txt
curl -LO https://github.com/gl0di/clawseccheck/releases/download/vX.Y.Z/SHA256SUMS.txt.bundle

cosign verify-blob \
  --bundle SHA256SUMS.txt.bundle \
  --certificate-identity-regexp "^https://github.com/gl0di/clawseccheck/" \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  SHA256SUMS.txt

A passing verification proves the reference digest was produced by this repo's release workflow and hasn't been altered since.

ClawSecCheck is also a full standalone CLI (zero dependencies, Python 3.9+):

pipx install "git+https://github.com/gl0di/[email protected]"   # pin a release tag (recommended)
pipx install git+https://github.com/gl0di/clawseccheck             # or track the latest source
clawseccheck                         # audits ~/.openclaw by default
clawseccheck --json                  # machine-readable result
clawseccheck --sarif results.sarif   # SARIF 2.1.0 for GitHub Code Scanning
clawseccheck --html report.html      # standalone HTML report (private)
clawseccheck --pdf report.pdf        # complete audit as a paginated PDF (attach into chat)
clawseccheck --exhaustive            # raise the scan caps: slower, maximum coverage
clawseccheck --fail-under 70         # CI gate: exit 1 if score < 70

The User guide covers the modes and recipes β€” vetting engines, drift monitoring, attestation, red-team self-tests. clawseccheck --help is the complete flag list.

[!IMPORTANT] An honest limit: a clean report means "no known attack pattern matched" β€” not "provably safe." Most checks are static: they bound what your agent can do, not how it behaves under a live attack. The optional self-tests exercise selected live paths but are graded by your own agent, so they can't prove safety against arbitrary attacks either. UNKNOWN is always shown as UNKNOWN, never hidden. The full, unvarnished list of limitations is in the User guide.

πŸ“š Documentation

Document What it covers
User guide Recipes, monitoring modes, and trust details
Check catalog All 184 checks: what they verify and how to remediate
Threat coverage OWASP LLM Top 10 / Agentic threat mapping
Bundled IOC dataset Provenance policy, refresh cadence, and freshness discipline for the known-bad catalog
Output schema The frozen --json / SARIF contract
FAQ Common questions, incl. the compromised-host protocol
Troubleshooting ClawSecCheck itself won't run, crashes, or OpenClaw doesn't see it
Security model ClawSecCheck's own capability surface and self-defense
Contributing Dev setup, tests, how to author a new check
Support Where a report goes β€” issue, discussion, or private advisory

πŸ™Œ Feedback, security, license

  • Something looks wrong? Open an issue β€” false alarms are treated as bugs. If the tool itself won't run or crashes, try Troubleshooting first.
  • Questions, false positives, or an attack class we don't cover yet? Start a discussion β€” see SUPPORT.md for where each kind of report goes.
  • Found a vulnerability? Report privately via SECURITY.md.
  • License: MIT for the code. The ClawSecCheck name and logo are not covered by it β€” see TRADEMARK.md. Contributors sign a short CLA. Maintained by gl0di.