Install
openclaw skills install clawtributorCommunity incident reporting for AI agents. Contribute to collective security by reporting threats.
openclaw skills install clawtributorCommunity incident reporting for AI agents. Contribute to collective security by reporting threats, vulnerabilities, and attack patterns.
npx clawhub@latest install clawtributor)~/.openclaw/An open source project by Prompt Security
Install from the registry:
npx clawhub@latest install clawtributor
After install, tell the user:
Clawtributor is installed.
I can help prepare incident reports for your approval.
I will keep reports local unless you explicitly approve submission.
For standalone installs, verify the signed release manifest before trusting SKILL.md, skill.json, or the archive. The skill.json file is the package metadata/SBOM source, and the release pipeline signs checksums.json with the ClawSec release key.
set -euo pipefail
SKILL_NAME="clawtributor"
VERSION="0.0.6"
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."
Only install or extract the archive after this verification succeeds.
Clawtributor enables agents to contribute to collective security:
All reporting is approval-gated.
┌─────────────────────────────────────────────────────────────┐
│ │
│ Agent observes ──► Drafts report ──► User approves │
│ suspicious │ │
│ activity ▼ │
│ Manual submission │
│ (browser form) │
│ │ │
│ Maintainer review │
│ │ │
│ "advisory-approved"? │
│ │ │ │
│ YES NO │
│ │ │ │
│ ▼ ▼ │
│ Advisory Feed ◄── Auto-published Feedback provided │
│ (CLAW-YYYY-NNNN) ↓ │
│ All agents notified via clawsec-feed │
│ │
└─────────────────────────────────────────────────────────────┘
Prompts that attempted to:
Example indicators:
Skills that exhibit:
Any attempt to:
See reporting.md for the full report format and submission guide.
{
"report_type": "malicious_prompt | vulnerable_skill | tampering_attempt",
"severity": "critical | high | medium | low",
"title": "Brief descriptive title",
"description": "Detailed description of what was observed",
"evidence": {
"observed_at": "2026-02-02T15:30:00Z",
"context": "What was happening when this occurred",
"payload": "The observed prompt/code/behavior (sanitized)",
"indicators": ["list", "of", "specific", "indicators"]
},
"affected": {
"skill_name": "name-of-skill (if applicable)",
"skill_version": "1.0.0 (if known)"
},
"recommended_action": "What users should do"
}
~/.openclaw/clawtributor-reports/chmod 600)Use this confirmation prompt style:
🤝 Clawtributor: Ready to submit security report
Report Type: vulnerable_skill
Severity: high
Title: Data exfiltration in skill 'helper-plus'
Summary: The helper-plus skill sends conversation data to an external server.
This report will be submitted via the Security Incident Report form.
Do you approve submitting this report? (yes/no)
After explicit approval, open:
Paste the prepared report into the form and submit.
When reporting:
DO include:
DO NOT include:
Track submitted reports in ~/.openclaw/clawtributor-state.json.
Example:
{
"schema_version": "1.0",
"reports_submitted": [
{
"id": "2026-02-02-helper-plus",
"issue_number": 42,
"advisory_id": "CLAW-2026-0042",
"status": "pending",
"submitted_at": "2026-02-02T15:30:00Z"
}
],
"incidents_logged": 5
}
GNU AGPL v3.0 or later - See repository for details.