ClawSend

AdvisoryAudited by Static analysis on Apr 30, 2026.

Overview

No suspicious patterns detected.

Findings (0)

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

What this means

Someone who knows or guesses an agent vault ID may be able to access queued messages or conversation metadata/logs, depending on the relay implementation and whether messages are encrypted.

Why it was flagged

The relay design documents message retrieval and log endpoints as requiring no authentication, which weakens recipient identity and data boundaries for agent-to-agent messaging.

Skill content
| `/receive/{vault_id}` | GET | No | Receive unread messages | ... | `/messages/{conv_id}/log` | GET | No | Get conversation log | ... | `/logs/{vault_id}` | GET | No | Get agent's conversations |
Recommendation

Use this only for low-sensitivity messages unless the relay enforces authenticated retrieval and end-to-end encryption by default; avoid sending secrets or private context through the public relay.

What this means

The client-side protocol does not prove the requester owns the recipient identity when fetching messages, which can expose message contents or metadata if the relay relies on this endpoint behavior.

Why it was flagged

The provided client retrieves messages with an unsigned GET request, corroborating the documented unauthenticated receive endpoint.

Skill content
async receive(limit = 50) {
    return this.get(`/receive/${this.vault.vaultId}?limit=${limit}`);
  }
Recommendation

Require signed receive requests or another authentication mechanism tied to the vault private key before using the relay for sensitive communication.

What this means

Anyone with access to the vault files could impersonate the agent or decrypt messages intended for it.

Why it was flagged

The skill creates and uses persistent local signing and encryption private keys as the agent's messaging identity.

Skill content
export const DEFAULT_VAULT_DIR = join(homedir(), '.openclaw', 'vault'); ... const SIGNING_KEY_FILE = 'signing_key.bin'; ... const ENCRYPTION_KEY_FILE = 'encryption_key.bin';
Recommendation

Protect the ~/.openclaw/vault directory, do not share it, and back it up or delete it intentionally when rotating identities.

What this means

Remote agent messages can remain on disk and may later be read back into context or logs, so untrusted content could persist beyond the current task.

Why it was flagged

Received messages, including messages from unknown senders, are persisted in local history or quarantine.

Skill content
const HISTORY_DIR = 'history';
const QUARANTINE_DIR = 'quarantine'; ... saveMessage(message, 'received'); ... saveToQuarantine(message, 'unknown_sender')
Recommendation

Treat received message content as untrusted, periodically review/delete history and quarantine files, and avoid automatically feeding them into later tasks without validation.

NoteHigh Confidence
ASI10: Rogue Agents
What this means

If enabled, the skill can keep checking for messages and trigger local handling outside the immediate chat flow.

Why it was flagged

The skill documents an optional long-running polling mode and callback on message arrival.

Skill content
Option 2: Continuous Polling ... Run a background polling process with callback: ... python python/scripts/receive.py --poll --interval 10 --on-message "python handler.py"
Recommendation

Use the recommended heartbeat/manual receive flow unless you explicitly need continuous polling; ensure any callback handler is reviewed and does not blindly trust remote messages.

What this means

Installing the skill may execute dependency installation steps that are not represented in the registry install specification.

Why it was flagged

Although registry data says there is no install spec, the skill includes a shell installer that installs Python or Node dependencies.

Skill content
pip install -r requirements.txt ... npm install
Recommendation

Review the installer and dependency files before running ./install.sh, and install in an isolated environment if possible.