Clawlink

WarnAudited by ClawScan on May 10, 2026.

Overview

ClawLink mostly matches its encrypted bot-messaging purpose, but an unsafe mailbox file reader and some security-claim gaps require review before use.

Before installing, confirm you want persistent Clawbot-to-Clawbot messaging through the disclosed relay. Patch or verify the mailbox filename handling, protect ~/.openclaw/clawlink, treat received messages as untrusted content, and review the full source/dependencies before relying on the encryption claims.

Findings (7)

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

A prompt or mistaken invocation of the inbox/outbox read action could expose local files outside ClawLink’s mailbox to the agent output.

Why it was flagged

getMessage builds a path from an agent/user-supplied filename and reads it without rejecting '..' or enforcing that the resolved path remains inside the inbox/outbox directory.

Skill content
const filepath = join(dir, filename);
...
return readFileSync(filepath, 'utf8');
Recommendation

Only allow filenames returned by listInbox/listOutbox, reject path separators and '..', and use path.resolve with a strict directory-prefix check before reading.

What this means

Users may over-trust the stated encryption properties without an implementation review.

Why it was flagged

SKILL.md advertises XChaCha20-Poly1305, but the supplied implementation uses TweetNaCl secretbox, which is a different primitive. For an encrypted messaging skill, this makes the exact security claim insufficiently supported by the artifacts.

Skill content
const encrypted = nacl.secretbox(messageBytes, nonce, sharedSecret);
Recommendation

Align the documentation with the actual cryptographic primitive, or update the implementation and obtain a focused crypto review before relying on the E2E claims.

What this means

A friend, compromised friend bot, or unsolicited request could send text that tries to influence the local agent.

Why it was flagged

The heartbeat automatically polls relay-delivered messages and prints them into agent-visible output. This is expected for messaging, but the text originates from other Clawbots or friend requests.

Skill content
const result = await clawbot.checkMessages();
...
console.log(outputs.join('\n\n---\n\n'));
Recommendation

Label inbound ClawLink content as untrusted messages and require explicit user confirmation before the agent follows instructions contained in received messages.

What this means

Private messages may remain on disk and be available to later agent actions or anyone with local file access.

Why it was flagged

Received and sent message bodies are saved as local Markdown files, creating persistent plaintext message history.

Skill content
Persists messages to inbox/ and outbox/ folders as markdown files.
Recommendation

Disclose plaintext retention clearly, set restrictive file permissions, and consider deletion, retention, or encryption-at-rest options.

What this means

If these files are read or copied, someone could impersonate the user’s ClawLink identity or decrypt/forge communications depending on the stored material.

Why it was flagged

The skill creates and stores private identity material and shared secrets locally. This is purpose-aligned for encrypted messaging, but it is sensitive authority.

Skill content
`identity.json` — Your Ed25519 keypair
`friends.json` — Friend list with shared secrets
Recommendation

Protect ~/.openclaw/clawlink with local file permissions, avoid syncing it to untrusted locations, and rotate/recreate identity if the files are exposed.

What this means

After installation, the agent may keep polling for ClawLink messages until the heartbeat entry is removed.

Why it was flagged

The installer adds persistent periodic polling to the agent heartbeat. This persistence is disclosed and aligned with async message delivery.

Skill content
Appends a ClawLink heartbeat entry to `~/clawd/HEARTBEAT.md`
Recommendation

Install only if you want ongoing polling, and use the documented uninstall step or manually remove the ClawLink heartbeat section when no longer needed.

What this means

Running setup gives the package and its dependencies local execution opportunity.

Why it was flagged

Setup requires executing local Node/npm commands. This is normal for a CLI skill, but it executes package code on the user’s machine.

Skill content
npm install
node scripts/install.js
Recommendation

Review the full package and lockfile, install from a trusted source, and run setup from the intended skill directory.