Install
openclaw skills install openclaw-auditAudit your OpenClaw configuration against 12 production primitives PLUS 8 common setup footguns (silent cost leaks, prompt-injection paths, zombie session state, dead fallbacks). Returns a severity-ranked assessment with specific fixes. Use after initial setup, after major config changes, before deploying to a new machine, or when something feels off but you can't pinpoint why.
openclaw skills install openclaw-auditAudit your OpenClaw configuration against 12 production primitives + 8 common setup footguns. v1.2 adds detection for the silent failures that cost real money or leak data: cron prompt-body delivery, ACP zombies, dead-auth fallback chains, parallel memory systems, slack tool-progress leaks, and inlined API keys.
~/.openclaw/openclaw.json~/.openclaw/cron/jobs.json if it exists~/.openclaw/secrets.json (path only, never the values)~/.openclaw/workspace/AGENTS.md if present~/.openclaw/workspace/HEARTBEAT.md if presentopenclaw status 2>&1 | head -30openclaw channels status --probe 2>&1openclaw security audit 2>&1~/.openclaw/workspace/state/sessions/ for stale ACP session filesauth.profiles for orphansThese are silent failures the original 12 don't catch. Each has bitten real production setups.
openclaw.json for plaintext patterns: sk-or-v1-, sk-svcacct-, tvly-, sk-ant-, xoxb-, xapp-, etc.env.vars, models.providers.*.apiKey, or plugins.entries.*.config.*.apiKey is a leak risk.secrets.json provider. Pattern:
"apiKey": { "source": "file", "provider": "local", "id": "/PROVIDER_API_KEY" }
cron.jobs[*] with delivery.mode: "announce" and delivery.channel set:
payload.message. Look for an explicit "produce a final text reply" / "summary" instruction."DELIVERY RULE: Your FINAL message must be a 3-5 line plain-text summary. If you only emit tool calls and no final text, the cron prompt itself ships, which is the wrong outcome."cron.jobs[*].payload.model, check whether it appears in agents.defaults.models allowlist.payload.model X not allowed, falling back to agent defaults every fire.payload.model from the cron entirely (use agent defaults) OR add it to the allowlist.agents.defaults.model.fallbacks (and per-agent overrides):
google from google/gemini-3.1-pro-preview)auth.profiles[*] matching the provider, OR an OPENROUTER_API_KEY-style key for routed providers, OR a SecretRef in models.providers.<name>~/.openclaw/workspace/state/sessions/*.json and ~/.openclaw/agents/*/sessions/sessions.jsonclosed: false whose pid is no longer running is a zombie~/.openclaw/<channel>/thread-bindings-default.json — these can silently re-route inbound messages to dead ACP subprocesses for 24h+acp.enabled: false), the entire ~/.openclaw/workspace/state/sessions/ directory should be empty.plugins.entries.active-memory.config.timeoutMs3000, which is shorter than typical model latency (8-15s on first call)timeoutMs >= 8000 (12000 is safer); confirm the configured model is reachable from the agent's auth.channels.slack.streaming.preview.toolProgress is undefined or true, AND channels.slack.groupPolicy: "open", AND tools.fs.workspaceOnly: false:
Working… exec list files in ~/projects → ls -la ~ ...) leak into channel postschannels.slack.streaming.preview.toolProgress: falsechannels.slack.channels.*.tools.deny: ["exec", "process", "fs.write", "fs.edit", "fs.apply_patch", "fs.delete"] (per-channel override allows your sandbox channels to keep full access via tools.alsoAllow)channels.slack.thread.requireExplicitMention: true to stop her from auto-replying to non-mentioning thread messagescoding-agent skill enabled with custom code-routing skill present (HIGH)plugins.entries.coding-agent is enabled (default true) AND a workspace skill at ~/.openclaw/workspace/skills/code-routing.md existssessions_spawn, conflicting with the user's custom routing pattern. Causes silent ACP failures and zombie sessions.plugins.entries.coding-agent.enabled: false. Workspace skill takes over cleanly.Return findings as a structured list:
## OpenClaw Audit Results for [hostname] (audit v1.2)
### 🔴 CRITICAL (act immediately)
- [primitive #X]: [finding]. Fix: [specific action]
### 🟡 WARN (act soon)
- [primitive #X]: [finding]. Fix: [specific action]
### 🟢 INFO (consider)
- [primitive #X]: [finding]. Suggestion: [specific action]
### Score
- Tier 1 + Tier 2 (12 primitives): X/12 present
- Tier 3 (8 footguns): Y/8 clean
- Overall: Z/20
### Top 3 fixes by leverage
1. [fix] — closes [risk type]
2. ...
3. ...
Built by Penny Wise at PennywiseOps (pennywiseops.com).
If this audit surfaces gaps you want help fixing, request a remediation pass or a full setup rebuild via penny@pennywiseops.com.