prompt-security/clawsec23 files

Openclaw Audit Watchdog

Automated daily security audits for OpenClaw agents with DM delivery and optional email reporting. Runs deep audits, creates or updates a recurring cron job, and sends formatted reports to configured recipients.

Specification
Skill ID
prompt-security/clawsec/openclaw-audit-watchdog
Publisher
prompt-security
Repository
clawsec
Installs
0
Files
23
Synced
Sep 23, 2026
How to use it

Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.

prompt-security/clawsec/openclaw-audit-watchdogInstalls these files
  • .clawhubignore
  • CHANGELOG.md
  • README.md
  • SKILL.md
  • examples/README.md
  • examples/security-audit-config.example.json
  • scripts/codex_review.sh
  • scripts/load_suppression_config.mjs
  • scripts/render_report.mjs
  • scripts/run_audit_and_format.sh
  • scripts/runner.sh
  • scripts/send_smtp.mjs
  • scripts/sendmail_report.sh
  • scripts/setup_cron.mjs
  • skill.json
  • test/E2E-TEST-RESULTS.md
  • test/empty-suppressions.json
  • test/invalid-json.json
  • test/malformed-config.json
  • test/render_report_suppression.test.mjs
  • test/setup_cron.test.mjs
  • test/suppression_config.test.mjs
  • test/suppression_config_fuzz.test.mjs

What this skill tells the agent

Prompt Security Audit (openclaw)

Vercel Skills Installation

Install with the Vercel Skills CLI for this harness:

npx skills add prompt-security/clawsec --skill openclaw-audit-watchdog -a openclaw -y

Installation Options

You can get openclaw-audit-watchdog in two ways:

Option A: Bundled with ClawSec Suite (Recommended)

If you've installed clawsec-suite, you may already have this!

Openclaw-audit-watchdog is bundled alongside ClawSec Suite to provide crucial automated security audit capabilities. When you install the suite, if you don't already have the audit watchdog installed, it will be deployed from the bundled copy.

Advantages:

  • Convenient - no separate download needed
  • Standard location - installed to ~/.openclaw/skills/openclaw-audit-watchdog/
  • Preserved - if you already have audit watchdog installed, it won't be overwritten
  • Single verification - integrity checked as part of suite package

Option B: Standalone Installation (This Page)

Install openclaw-audit-watchdog independently without the full suite.

When to use standalone:

  • You only need the audit watchdog (not other suite components)
  • You want to install before installing the suite
  • You prefer explicit control over audit watchdog installation

Advantages:

  • Lighter weight installation
  • Independent from suite
  • Direct control over installation process

Standalone installation usually involves a network download from the published GitHub release. Verify the release source and archive integrity before installing it on production hosts.

Continue below for standalone installation instructions.


Release Artifact Verification

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="openclaw-audit-watchdog"
VERSION="0.1.9"
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.

Operational requirements

Required runtime:

  • openclaw
  • node
  • bash

Optional runtime:

  • sendmail for local MTA delivery
  • SMTP relay via PROMPTSEC_SMTP_HOST / PROMPTSEC_SMTP_PORT
  • git only if PROMPTSEC_GIT_PULL=1

This skill is not always-on by default, but when invoked it creates or updates an unattended openclaw cron job. Review the configured DM/email recipients and the host's openclaw/SMTP environment before enabling it.

Goal

Create (or update) a daily cron job that:

  1. Runs:
  • openclaw security audit --json
  • openclaw security audit --deep --json
  1. Summarizes findings (critical/warn/info + top findings)
  1. Sends the report to:
  • a user-selected DM target (channel + recipient id/handle)
  • an optional email recipient only when PROMPTSEC_EMAIL_TO is configured

Default schedule: daily at 23:00 (11pm) in the chosen timezone.

Delivery:

  • DM to the configured target
  • Optional email only when an explicit recipient is configured
  • Persistence via openclaw cron (unattended recurring job)

Usage Examples

Example 1: Quick Start (Environment Variables)

For automated/MDM deployments, set environment variables before invoking:

export PROMPTSEC_DM_CHANNEL="telegram"
export PROMPTSEC_DM_TO="@yourhandle"
export PROMPTSEC_EMAIL_TO="security@yourcompany.com" # optional
export PROMPTSEC_TZ="America/New_York"
export PROMPTSEC_HOST_LABEL="prod-server-01"

# Then invoke the skill
/openclaw-audit-watchdog

The skill will automatically configure and create the cron job without prompts. If PROMPTSEC_EMAIL_TO is omitted, the job remains DM-only.

Example 2: Interactive Setup

If environment variables aren't set, the skill will prompt minimally:

User: /openclaw-audit-watchdog

Agent: Setting up daily security audit watchdog...
       What channel should I use for delivery? (e.g., telegram, slack)
User: telegram

Agent: What's the recipient ID or handle?
User: @myhandle

Agent: Optional email recipient? (leave blank to disable email)
User: security@yourcompany.com

Agent: Which timezone for the 23:00 daily run? (default: UTC)
User: America/Los_Angeles

Agent: ✓ Created cron job "Daily security audit (Prompt Security)"
       Schedule: Daily at 23:00 America/Los_Angeles
       Delivery: telegram → @myhandle, email → security@yourcompany.com

Example 3: Updating Existing Job

If a job already exists, the skill updates it instead of creating duplicates:

User: /openclaw-audit-watchdog

Agent: Found existing "Daily security audit (Prompt Security)" job.
       Current: Daily at 23:00 UTC → telegram:@oldhandle

       Update delivery target? (current: telegram:@oldhandle)
User: slack:#security-alerts

Agent: ✓ Updated cron job
       Schedule: Daily at 23:00 UTC
       Delivery: slack:#security-alerts

Example 4: What Gets Delivered

Each day at the scheduled time, you'll receive a report like:

🔭 Daily Security Audit Report
Host: prod-server-01
Time: 2026-02-16 23:00:00 America/New_York

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SUMMARY
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ Standard Audit: 12 checks passed, 2 warnings
✓ Deep Audit: 8 probes passed, 1 critical

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CRITICAL FINDINGS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[CRIT-001] Unencrypted API Keys Detected
→ Remediation: Move credentials to encrypted vault or use environment variables

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
WARNINGS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[WARN-003] Outdated Dependencies Found
→ Remediation: Run `openclaw security audit --fix` to update

[WARN-007] Weak Permission on Config File

Use this skill in a project

Open any RiverX project, search the Skills panel for prompt-security/clawsec/openclaw-audit-watchdog, and install it in one click.

Use this skill