ClawShield
ClawShield detects high-risk misconfigurations in OpenClaw agents before they become exposed attack surfaces.
It is the first release under the PolicyGate umbrella — a runtime policy enforcement framework for AI agents.
Why This Exists
AI agents are often deployed:
- Publicly bound to
0.0.0.0 - With authentication disabled
- Inside privileged or root containers
- With API keys sitting in
.envfiles - Without file permission hardening
These are not theoretical risks — they are common misconfigurations.
ClawShield surfaces them deterministically and exits non-zero in CI when thresholds are exceeded.
What ClawShield Checks
Network Exposure
- Public bind address (
0.0.0.0,::) - Authentication disabled while publicly exposed
Container Posture
- Containers running as root
- Containers running in privileged mode
Secrets Handling
- API keys present in
.envfiles - API key references inside config files
File Permissions
- World-writable config files
- World-readable or world-writable
.envfiles
What ClawShield Does NOT Check
- Runtime exploitability
- Kernel vulnerabilities
- Docker daemon hardening
- Firewall configuration
- Intrusion detection
- Secrets entropy analysis
- Cloud IAM posture
ClawShield is a static audit tool, not a runtime protection system.
Quick Start (Users)
pip install clawshield
Run audit:
clawshield path/to/openclaw.yaml
JSON mode:
clawshield --json path/to/openclaw.yaml
Fail CI on severity threshold:
clawshield --fail-on high path/to/openclaw.yaml
Severity ranking:
low < medium < high < critical
Exit Codes
| Code | Meaning |
|---|---|
| 0 | No findings at or above threshold |
| 1 | Findings at or above threshold |
Example JSON Output
{
"meta": {
"schema_version": "0.1",
"tool_version": "0.3.0",
"policy_path": "clawshield/policies/vps_public.yaml"
},
"facts": [
{
"key": "network.bind_address",
"value": "0.0.0.0",
"source": "openclaw_config:openclaw.yaml"
},
{
"key": "runtime.auth_enabled",
"value": false,
"source": "openclaw_config:openclaw.yaml"
}
],
"findings": [
{
"rule_id": "NET-001",
"title": "Public bind address with authentication disabled",
"severity": "critical",
"confidence": "high",
"evidence": [],
"recommended_actions": ["ACT-ENABLE-AUTH"],
"autofix_available": true
}
]
}
JSON output is deterministic and schema-versioned. Golden tests lock the schema to prevent drift.
Architecture
ClawShield consists of:
- Scanners — Collect facts from runtime and configuration
- Policy Engine — Evaluates YAML rules against collected facts
- Structured Output — Designed for automation and CI pipelines
Scanners are modular and isolated from the engine core.
Roadmap
- Continuous monitoring mode
- Additional runtime adapters
- Expanded Docker hardening checks
- Policy bundles
- Advanced secrets detection
- Signed policy packs
Status
Early release. Actively evolving.
Feedback and contributions welcome.
License
Apache 2.0
Security Disclaimer
ClawShield surfaces rule-based misconfigurations according to the active policy set. It does not guarantee system security.
Metadata
Release files for clawshield 0.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| clawshield-0.4.1.tar.gz | 28.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| clawshield-0.4.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 50.7 kB
Release files / clawshield-0.4.1.tar.gz
| Download URL | clawshield-0.4.1.tar.gz |
|---|---|
| Size | 28.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
baccfb73f2c7165828ea749ae49e7f5101902faf2ba8c06d7147be1b0ec10823
|
|
BLAKE2b-256 checksum How to use checksums |
54702b5e31acc74efbba82198d8cf6e2d56e34ac8ca8d4c72b244724af95c693
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Release files / clawshield-0.4.1-py3-none-any.whl
| Download URL | clawshield-0.4.1-py3-none-any.whl |
|---|---|
| Size | 22.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a743d747c2deed62517bfbdfa64ce79343dc4926c836eb8994415114fcd0c89f
|
|
BLAKE2b-256 checksum How to use checksums |
87f37aeb010aedd37d4f50d0d4a6214bdb6162b135dfdc5ff80fb37fd230e60b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|