OpenClaw Agent Mesh

WarnAudited by ClawScan on May 18, 2026.

Overview

The skill’s peer-messaging purpose is coherent, but its HTTP receive code can write files using peer-controlled IDs and appears to miss some promised message-safety checks.

Review this skill before installing or running the server. If you use it, bind the server only to a trusted interface, avoid exposing it to untrusted networks, and wait for fixes that sanitize peer-controlled filenames and fully enforce the documented verification rules.

Findings (4)

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

If the HTTP server is running, a peer could choose IDs containing path separators or absolute paths to create or overwrite JSON files outside the intended request/message folders, potentially corrupting mesh state or other user-writable JSON files.

Why it was flagged

Received peer-controlled request_id and message_id values are concatenated into filesystem paths without validation, sanitization, or a check that the resolved path remains inside the intended state directories.

Skill content
path = REQ_IN_DIR / f"{payload['request_id']}.json"
save_json(path, payload)
...
path = MSG_IN_DIR / f"{payload['message_id']}.json"
save_json(path, payload)
Recommendation

Use locally generated safe filenames or strictly validate IDs with an allowlist; reject absolute paths, '..', and path separators; resolve the final path and verify it stays under the intended state directory before writing.

What this means

A trusted peer, or a replayed signed payload from that peer, could cause stale or incorrectly addressed messages to be persisted and acknowledged, weakening the trust boundary the skill advertises.

Why it was flagged

The visible receive-message logic accepts and acknowledges a message after signature verification, but does not show checks for message type, intended recipient, stale timestamp, duplicate/replayed message ID, or malformed envelope fields.

Skill content
ok = verify_signature(unsigned, payload.get("signature", ""), peer["public_key"])
result = {"verified": ok, "message_id": payload.get("message_id")}
if ok:
    path = MSG_IN_DIR / f"{payload['message_id']}.json"
    save_json(path, payload)
    result["ack"] = {"type": "ack", "message_id": payload["message_id"], "status": "received", "timestamp": now_iso()}
Recommendation

Enforce the documented verification rules in code: validate required fields and type, check the recipient, reject stale timestamps, track message IDs to prevent replay, and fail closed on malformed envelopes.

What this means

Running the server makes the mesh node reachable on the configured interface and port until the process is stopped.

Why it was flagged

The skill includes a long-running HTTP server that defaults to all network interfaces. This is disclosed and aligned with discovery/messaging, but users should deliberately choose when and where to run it.

Skill content
ap.add_argument('--host', default='0.0.0.0')
ap.add_argument('--port', type=int, default=8787)
...
httpd.serve_forever()
Recommendation

Bind to 127.0.0.1 or a trusted interface unless LAN exposure is intended, use firewall rules where appropriate, and stop the server when not needed.

What this means

The skill may fail or behave differently depending on the user’s local openssl installation.

Why it was flagged

The script depends on the local openssl binary, while the provided registry requirements list no required binaries. This is an under-declared dependency rather than evidence of malicious behavior.

Skill content
run(["openssl", "genpkey", "-algorithm", "Ed25519", "-out", str(priv)])
run(["openssl", "pkeyutl", "-sign", "-rawin", "-inkey", str(PRIVATE_KEY_PATH), "-in", str(in_file), "-out", str(sig_file)])
Recommendation

Declare openssl as a required binary and document supported versions; users should verify the installed openssl binary before using identity or signing features.