Back to plugin
Pluginv0.1.1

ClawScan security

Watcher Channel · ClawHub's context-aware review of the artifact, metadata, and declared behavior.

Scanner verdict

BenignApr 24, 2026, 2:45 AM
Verdict
benign
Confidence
medium
Model
gpt-5-mini
Summary
This plugin's code, instructions, and declared configuration are consistent with a relay-backed messaging channel: it connects to a user-provided Watcher relay URL (via WebSocket/REST), authenticates with a pairing code or token, and forwards/receives messages — nothing in the bundle appears to perform unrelated or hidden actions, but you must trust the relay server you configure.
Guidance
This plugin appears to do what it says: connect your OpenClaw instance to a Watcher relay using a server URL and either a pairing code or a channel token. Before installing: (1) verify and trust the relay server URL you will configure — the plugin will open a persistent WebSocket and accept inbound messages from that server; (2) keep channel tokens and pairing codes secret and store them only in the channel config or environment variables; (3) note the registry summary omitted env vars but the plugin supports OPENCLAW_WATCHER_SERVER_URL, OPENCLAW_WATCHER_CHANNEL_TOKEN, and OPENCLAW_WATCHER_PAIRING_CODE; (4) consider whether you want remote messages to be able to trigger agent activity — if not, do not enable this channel or set dmPolicy to restrict incoming messages. If you want extra assurance, review the remaining functions in src/client.ts (persistPairingResult, consumePairingCode, inbound message processing) to confirm how pairing results are stored and how inbound messages are handled.

Review Dimensions

Purpose & Capability
noteThe plugin's name/description match its behavior: it implements a 'watcher' channel that connects to a relay server over WebSocket/HTTP, consumes pairing codes or channel tokens, and sends/receives messages. One minor inconsistency: the registry metadata reported "Required env vars: none," but the package and code explicitly surface channel environment variables (OPENCLAW_WATCHER_SERVER_URL, OPENCLAW_WATCHER_CHANNEL_TOKEN, OPENCLAW_WATCHER_PAIRING_CODE) in openclaw.plugin.json and read them in src/config.ts. Functionally this is reasonable (the plugin supports env-based config), but the registry summary should list those env vars.
Instruction Scope
okSKILL.md simply instructs how to install/enable the plugin and configure the channel and correctly notes that a server URL and either pairing code or channel token are required. The runtime code does not attempt to read unrelated files or credentials; it uses the declared channel config/env vars and communicates only with the configured relay server. Note: as a messaging channel it will accept inbound messages from the relay and route them into OpenClaw — that is expected for this kind of plugin but is a behavioral point the user should understand.
Install Mechanism
okThere is no custom install spec (the package is provided as source in the bundle). Dependencies are reasonable (ws and zod). No remote download/execute steps or unusual installers are present in the repository.
Credentials
noteThe plugin legitimately needs a server URL and either a pairing code or a channel token to perform its function; these are declared in openclaw.plugin.json and read from process.env in src/config.ts. However the registry summary omitted required env var information, which is an inconsistency the user should be aware of. No unrelated credentials or broad secrets are requested.
Persistence & Privilege
okThe plugin does not set always: true and doesn't request system-wide configuration beyond its own channel config. It registers a runtime service and opens outbound network connections to the configured relay, which is normal for a channel plugin. Keep in mind that allowing the plugin to run lets the remote relay deliver messages into your OpenClaw instance (expected for a messaging channel) — a malicious or compromised relay could deliver adversarial messages.