Security hardening
WednesdayAI uses a personal assistant security model: one trusted operator boundary per gateway, potentially many agents. It is not a hostile multi-tenant boundary where adversarial users share a single agent or gateway.The trust model
A few consequences follow from the personal-assistant model. Internalise these before exposing anything:- The host and config boundary are trusted. Anyone who can modify
~/.openclaw(includingopenclaw.json) is effectively a trusted operator. - Authenticated gateway access is a control-plane role, not a per-user tenant role. Operators can inspect session metadata and history by design.
sessionKeyis a routing selector, not an authorisation token — do not treatsessions.list,sessions.preview, orchat.historyas per-user isolated. - Allowed senders share the agent’s delegated tool authority. If several people can message one tool-enabled agent, each of them can steer that agent’s full permission set.
Shared inbox: the real risk
If “everyone in Slack can message the bot,” the danger is delegated tool authority: any allowed sender can induce tool calls (exec, browser, network, file) within the agent’s policy, and prompt injection from one sender can drive actions affecting shared state or exfiltrate data the agent can reach. Use separate, minimally-scoped agents for team workflows and keep personal-data agents private.
When more than one person can DM a bot:
- Set
session.dmScope: "per-channel-peer"(or"per-account-channel-peer"for multi-account channels) to isolate DM sessions. - Keep
dmPolicy: "pairing"or strict allowlists. - Never combine shared DMs with broad tool access.
Security audit
Run this before and after any configuration change, and after exposing a network surface:Hardened baseline
Start restrictive and widen selectively. This baseline keeps the gateway local-only, isolates DMs, and disables control-plane and runtime tools:Gateway exposure
The gateway binds to loopback (127.0.0.1) by default. Keep it there unless you have a specific reason to expose it.
Non-loopback binds are rejected at startup without auth. Prefer Tailscale Serve over a non-loopback bind — it keeps the gateway on loopback while Tailscale handles routing and TLS.
DM and group policies
The DM policy enum ispairing | allowlist | open | disabled, set per channel under channels.<channel>.dmPolicy (not under channels.defaults):
Group access is controlled separately by
groupPolicy (allowlist | open | disabled) plus per-group requireMention. Any allowed sender can trigger tool calls within the agent’s permission set — keep allowlists tight.
Tools: principle of least privilege
Enable only the tools an agent needs. Tool policy is the hard stop:deny always wins, and if allow is non-empty everything else is blocked.
exec, browser, nodes, cron, gateway) grant significant system access. The nodes tool reaches paired devices and is operator-level remote execution — treat it as host-level authority. Enable these only for agents you control completely.
For the full reference — allow vs alsoAllow constraints, per-agent overrides, exec security modes, the exec approvals file, skill allowlisting, and config hierarchy implications — see Tool policy.
Sandboxing
For an extra layer, run tools inside Docker containers so the model cannot touch the host directly even when a tool misbehaves:Prompt injection
Treat any content the model reads — messages, web pages, files, tool output — as potentially adversarial instructions. WednesdayAI’s controls reduce the impact:- Keep tool authority minimal (above) so an injected instruction has little to act with.
- Use sandboxing and
fs.workspaceOnlyto limit what file tools can reach. - Keep
exec.security: "deny"(orask: "always") so shell actions require approval. - Add explicit security rules to the agent’s system prompt as defence in depth (not a substitute for policy):
Credential storage
Keep them readable only by your user:
openclaw doctor warns when these are too open. To keep secrets out of plaintext config entirely, use SecretRefs.
Incident response
1
Contain
2
Rotate credentials
- Rotate
gateway.auth.token/OPENCLAW_GATEWAY_TOKEN. - Rotate channel tokens (WhatsApp, Slack, Telegram, Discord).
- Rotate AI provider keys in
~/.openclaw/.env. - Restart the gateway after rotating.
3
Audit
Reporting vulnerabilities
- GitHub Security Advisories: github.com/ExpansionX/WednesdayAI-core/security/advisories
- Email: security@expansionx.com.au